Keerlussen met Arduino voor DCC
Geplaatst: 17 nov 2019 19:41
Een heel goedkope en eenvoudige manier om keerlussen voor een DCC aangestuurde baan te maken met een Arduino, er kunnen zelfs 4 keerlussen tegelijk door 1 Arduino aangestuurd worden! Ook al zal ik vast de enige niet zijn die zoiets gedaan heeft, ik heb het toch maar gepost op verzoek van een geinteresseerde, wellicht hebben dan nog meer mensen er iets aan, al was het maar om te zien hoe ontzettend weinig en simpele code er eigenlijk nodig is om een en ander met een Arduino te regelen.
De Arduino sketch (voor 1 keerlus)
Aansluitdetails
Voorbeeld proces/toelichting
Video in werking
Alternatief via trein controller software
Voor de uiteindelijke baan ga ik het denk ik anders doen, maar dat kost nog een experiment: aansturing via de controller software. Ik gebruik JMRI, en daar zou dat gezien alle scripting en trigger mogelijkheden heel goed mee moeten kunnen. Dat integreert dan mooi met het gebruik van stroomdetectie secties, waarbij dan via de controller software een output aangestuurd wordt die het relais omschakelt. Dan ben ik van de magneten af, maar de beschreven methode werkt op zich prima en is beslist goedkoper dan 4 of 5 extra stroomdetectiesecties per keer lus, terwijl je hier met 1 Arduino 4 keerlussen maakt...
- Detectie op basis van pulse (voor de detectie heb ik in dit experiment klassieke reed relais gebruikt, maar het kan natuurlijk ook met andere middelen, zoals optisch).
- De Arduino hoeft niet aan de computer gekoppeld te zijn, functioneert geheel stand-alone.
- Het detectie- en aansturingscircuit is volledig gescheiden van de baanaansturing.
- De startpositie van de trein bij aanzetten van het systeem is niet zo kritisch. De trein mag gerust geheel in de keerlus staan, en dan kan je een willekeurige kant op wegrijden. Mits er een magneetje onder de voorste bak/loc zit, en je eerst over een reed relais rijdt voordat hij bij de rails onderbrekingen komt, maakt het allemaal niet uit. Het gaat alleen fout als je toevallig de Arduino inschakelt als de trein tussen de beide reed relais van afbuigend stilstaan (bekrachtigd relais nodig voor juiste polariteit), en dan gaat rijden. Voor de doorgaand positie (relais niet bekrachtigd) maakt het al helemaal niet uit.
De Arduino sketch (voor 1 keerlus)
Code: Selecteer alles
const int REED_1A = 2; // Pin verbonden aan reed switch doorgaand
const int REED_1B = 3; // afbuigend
const int RELAIS_1 = 4; // relais aansturing
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(REED_1A, INPUT_PULLUP); // uitlezen doorgaand: open/geen contact = hoog
pinMode(REED_1B, INPUT_PULLUP); // uitlezen afbuigend: open/geen contact = hoog
pinMode(RELAIS_1, OUTPUT); // output aansturing relais
}
void loop() {
// uitlezen detectie pinnen
int nearby1A = digitalRead(REED_1A);
int nearby1B = digitalRead(REED_1B);
// pin 2 laag: contact doorgaand
if (nearby1A == LOW) {
// afvallen relais
digitalWrite(RELAIS_1, LOW);
digitalWrite(LED_BUILTIN, LOW);
}
// pin 3 laag: contact afbuigend
if (nearby1B == LOW) {
// aantrekken relais -> ompolen keerlus
digitalWrite(RELAIS_1, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
}
}
Voorbeeld proces/toelichting
- trein komt aanrijden van links, buiten de keerlus, wissel op afbuigend
- RS.A1 sluit, Det afb wordt naar GND getrokken
- Arduino detecteert een LOW op pen 3 (P3) en bekrachtigd het relais
- keerlus correct gepoold om de lus in te rijden (dat hij vervolgens over RS.A2 rijdt geeft niet, die zal het relais bekrachtigen maar dat was al zo, dus de toestand verandert niet)
- trein komt bij RS.D2, sluit, P2 wordt naar massa getrokken
- Arduino detecteert een LOW op pen 2 (P2) en het relais valt af
- keerlus correct gepoold om de lus uit te rijden
Video in werking
Alternatief via trein controller software
Voor de uiteindelijke baan ga ik het denk ik anders doen, maar dat kost nog een experiment: aansturing via de controller software. Ik gebruik JMRI, en daar zou dat gezien alle scripting en trigger mogelijkheden heel goed mee moeten kunnen. Dat integreert dan mooi met het gebruik van stroomdetectie secties, waarbij dan via de controller software een output aangestuurd wordt die het relais omschakelt. Dan ben ik van de magneten af, maar de beschreven methode werkt op zich prima en is beslist goedkoper dan 4 of 5 extra stroomdetectiesecties per keer lus, terwijl je hier met 1 Arduino 4 keerlussen maakt...