Pagina 1 van 3
Starten met EXRAIL (onderdeel van DCC-EX, Arduino DCC en DC centrale)
Geplaatst: 09 dec 2021 20:56
door Momfer
Naar aanleiding van vragen/verzoeken in mijn kerstbaandraadje, zal ik in dit draadje stap voor stap uitleg geven over de EXRAIL automatisering ervan.
Wat is EXRAIL
EX-RAIL staat voor “
EXtended Railroad Automation Instruction Language”, met andere woorden een scripttaal voor het automatiseren van een DCC++EX aangestuurde baan. Er is weinig tot geen kennis van programmeren voor nodig is, iedereen kan het (misschien met een beetje hulp) leren.
EXRAIL is onderdeel van de aankomende versie van DCC++EX en is momenteel (in BETA) beschikbaar vanaf
de laatste ontwikkelversie.
Wie vooraf meer wil weten over EXRAIL kan terecht op de
DCC++Ex website voor een (engelstalige) inleiding en de
referentie.
Wat laat ik zien van EXRAIL
Ik ga aan de hand van
mijn eenvoudige kerstbaantje, welke bestaat uit een kleine ovaal met een opstelmogelijkheid, stap voor stap beschrijven hoe ik deze heb geautomatiseerd.
De baan heeft een 6-tal sensoren (voor 3 blokken) en 2 wissels, bediend met standaard Fleischmann wisselmotoren (spoelen dus). In de tekening zijn de gebruikte Arduino MEGA pins weergegeven. De pins van de wissels in geel, van de sensoren in groen.
Dit is voor nu even de eerste informatie. Als
mijn kerstbaantje klaar is voor onder de kerstboom, zal ik hier de verdere stappen beschrijven en eventuele vragen proberen te beantwoorden.
Ik zou het leuk vinden als geïnteresseerden zich hieronder even willen melden op de een of andere manier
![Smile :)](./images/smilies/icon_e_smile.gif)
dan weet ik of er interesse voor deze "mini-workshop" is.
Re: Starten met DCC++Ex EXRAIL
Geplaatst: 09 dec 2021 21:06
door Hans
Hallo Rico,
Hoewel ik zelf (nog) geen Arduino heb, blijf ik dit wel volgen.
Ik ga alvast de door jou genoemde website bekijken. De Engelse taal is voor mij gelukkig geen probleem.
m.vr.gr.
Hans
Re: Starten met DCC++Ex EXRAIL
Geplaatst: 09 dec 2021 21:13
door jeemka
Arduino heeft sinds kort mijn interesse om er een spoorwegovergang mee te bedienen bedienen: beweging, licht en geluid. Daar heb ik nu al de info voor.
Maar graag volgende ik het Exrail gebeuren!
Re: Starten met DCC++Ex EXRAIL
Geplaatst: 09 dec 2021 21:32
door Momfer
Hardware benodigdheden:
- Arduino MEGA 2560 (Een Arduino UNO heeft te weinig geheugen)
- L298 Motorschild (bij voorkeur een
originele Arduino,
DEEK Robot L298 motorschild of
DIY MORE L298 Moterschild)
- Voeding, USB-kabel, dupont/breadboard kabeltjes/snoertjes.
Optioneel:
- Een Mega Sensorshield is aan te raden, maar is niet noodzakelijk. Het maakt het bedraden makkelijker,
Op de
site staan de aanbevolen onderdelen duidelijk vermeld. Als je daaruit je componenten kiest zit je altijd safe!
Software:
-
Arduino IDE (hoe te installeren valt buiten de scope van dit draadje)
-
DCC++EX (laatste ontwikkelversie)
Wat ikzelf gebruik
Ik gebruik een
DEEK Robot L298 motorschild.
Voor het sensorschild heb ik gekozen voor het
RobotDyn Sensorshield Omdat het van goede bouwkwaliteit is en de pinnen bruikbaar blijven als het motorschild erbovenop is gemonteerd.
Via de links kun je zien hoe de schilden eruit zien, ik heb naar de kostprijs gekeken. Een zoektocht levert wellicht goedkopere alternatieven op. Ook is het natuurlijk prima leverbaar in de EU, bv via conrad, opencircuit, kiwi of reichelt.
Samenstellen van de hardware
Voor het samenbouwen van de hardware verwijs ik naar de
duidelijke video van Albert. Albert laat ook het gebruik van de automatische installer zien, welke uitermate geschikt is om DCC++Ex voor de eerste keer te proberen.
In een andere
video van Albert kun je zien hoe het samenstel eruit ziet met het sensorschild. Deze video is ook geschikt om te kijken hoe je sensoren aansluit op de Arduino.
Tot zover. Volgende keer meer!
Re: Starten met EXRAIL (onderdeel van DCC++Ex)
Geplaatst: 10 dec 2021 12:32
door Hube
Hoi Rico,
Ik ben zeker geïnteresseerd.
Groetjes,
Gerard
Re: Starten met EXRAIL (onderdeel van DCC++Ex)
Geplaatst: 10 dec 2021 13:07
door Momfer
Top, Gerard. Bedankt voor je berichtje!
Re: Starten met EXRAIL (onderdeel van DCC++Ex)
Geplaatst: 10 dec 2021 16:03
door Onmogelijkhier
Hallo Rico,
Zoals bij het kerstbaantje en via PB al duidelijk gemaakt ben ik zeer geïnteresseerd.
Zal het dus gaan volgen.
Marcel
Re: Starten met EXRAIL (onderdeel van DCC++Ex)
Geplaatst: 10 dec 2021 16:15
door Hans
Hallo Rico,
Mooi uitgelegd.
De filmpjes van Albert zijn ook heel verhelderend. En nu weet ik ook hoe ik Arduino moet uitspreken
m.vr.gr.
Hans
Re: Starten met EXRAIL (onderdeel van DCC++Ex)
Geplaatst: 10 dec 2021 16:57
door Momfer
EXRAIL, myAutomation.h aanmaken en een eerste test
Geplaatst: 10 dec 2021 22:12
door Momfer
Hopelijk komt iedereen eruit en is DCC++EX geïnstalleerd en werkend.
Dan zijn we klaar om aan de slag te gaan met EXRAIL!
Om EXRAIL te gebruiken, moeten we in de map waar de software van DCC++EX staat een bestandje maken met de naam myAutomation.h De locatie van de DCC++EX Arduino sketch is meestal te vinden in de map "jouw gebruikersnaam"\documenten\Arduino\CommandStation-EX. In de map staat een voorbeeldbestand genaamd myAutomation.example.h met voorbeelden. Als er nog geen myAutomation.h bestand is, dan kun je die hier aanmaken, of het voorbeeldbestand hernoemen.
Als dat gedaan is, kun je klikken op "CommandStation-EX.ino", waarna de Arduino IDE opent.Op de hoogte van de tabs vind je aan de rechterkant een pijltje, waarmee je door alle geopende bestanden kunt scrollen. Daar zoek je "myAutomation.h" op.
Lukt deze manier niet goed, dan kun je ook met CTRL+TAB door de bestanden scrollen, totdat je linksbovenin myAutomation.h ziet, zoals hieronder te zien is.
Volgende keer gaan we verder met de eerste EXRAIL opdrachten
Re: Starten met EXRAIL (onderdeel van DCC++Ex)
Geplaatst: 11 dec 2021 21:21
door Momfer
De eerste stappen in EXRAIL's myAutomation.h.
Het EXRAIL script heeft een begin
tag en een eind
tag, zoals hieronder wordt aangegeven. Tussen de tags komen de verschillende scriptopdrachten te staan:
Je eerste trein laten rijden
Om een trein te laten rijden moet aan EXRAIL duidelijk worden gemaakt
welk ID (decoder adres) de trein heeft. Daarnaast moet de trein een bepaalde
snelheid (0..127) krijgen en natuurlijk een
richting (vooruit/achteruit). Daarvoor zijn er natuurlijk specifieke opdrachten:
Code: Selecteer alles
EXRAIL
SETLOCO(218) // selecteer loc met decoder adres 218
FWD(25) // ga vooruit, snelheid 25 (van 127)
DELAY(10000) // doe dit 10 seconden
SPEED(40) // pas snelheid aan naar 40
DELAY(15000) // doe dit 15 seconden
STOP // stop de trein
REV(30) // ga achteruit, snelheid 30
DELAYMINS(1) // doe dit 1 minuut
STOP // stop de trein
ENDEXRAIL
Heb je de code overgenomen (met aangepast decoderadres), dan kun je de sketch versturen naar je Arduino.
Dit is op zich natuurlijk niet zo'n bijster interessant script om uit te voeren. Het is een beetje alsof je voor het eerst aan de knop van de transformator van een analoge baan draait. Niettemin is het de eerste stap om te leren hoe de scripts kunnen worden opgebouwd.
De volgende keer gaan we verder met SEQUENCE, ROUTE en AUTOMATION. Daarmee groeperen we opdrachten, waarmee we interessante dingen kunnen doen.
Re: Starten met EXRAIL (onderdeel van DCC++Ex)
Geplaatst: 12 dec 2021 13:15
door Hans
Hallo Rico,
Zoals ik aangaf, heb ik (nog) geen Arduino, maar volg ik wel met belangstelling dit draadje.
Ik vind je uitleg heel duidelijk. Omdat ik het nog niet in het eggie kan uitproberen, stel ik misschien onnodige vragen. Ik hoop dat je dat niet erg vindt.
De vraag: je gaat in het voorbeeld uit van 128 snelheidsstappen. Werkt het ook als rij met 28 stappen? Kan ik dan bijvoorbeeld SPEED (27) aangeven als ik op volle snelheid wil rijden? Of moet er dan een ander commando aan voorafgaan?
m.vr.gr.
Hans
Re: Starten met EXRAIL (onderdeel van DCC++Ex)
Geplaatst: 12 dec 2021 14:02
door Momfer
Hoi Hans,
Dat is zeker niet erg. Ik weet overigens ook niet alles over EXRAIl. Zo kunnen we gezamenlijk toch verder komen?
Jouw vraag: daar heb ik (nog) geen antwoord op. DCC++EX is standaard 128 stappen. Ik weet dat 28 ook mogelijk is voor het aansturen, maar dat moet dan aangepast sowieso aangepast worden in het bestand config.h Ik ga even navragen hoe EXRAIL daar dan vervolgens mee omgaat.
Re: Starten met EXRAIL (onderdeel van DCC++Ex)
Geplaatst: 12 dec 2021 16:10
door Onmogelijkhier
Ik heb wel een Arduino maar geen mega en ook geen motorshield. Heb ook geen digitale loco maar volg het toch voor de toekomst.
Re: Starten met EXRAIL (onderdeel van DCC++Ex)
Geplaatst: 12 dec 2021 16:54
door Momfer
Hans schreef: ↑12 dec 2021 13:15
Ik vind je uitleg heel duidelijk.
Fijn om te horen!
De vraag: je gaat in het voorbeeld uit van 128 snelheidsstappen. Werkt het ook als rij met 28 stappen? Kan ik dan bijvoorbeeld SPEED (27) aangeven als ik op volle snelheid wil rijden? Of moet er dan een ander commando aan voorafgaan?
Het lijkt te werken gewoon te werken met de waarden 0-127. Als ik de centrale via de Seriële Monitor van de IDE in 28 stappen modus zet met <D SPEED 28> reageert mijn lokje net zoals in de 128 stappen modus. Ik heb jouw vraag uitstaan op Discord en mocht daar een antwoord komen, laat ik dat hier zeker weten!
EDIT: antwoord van de EXRAIL programmeur:
DCCEX supports 28 step speed mode by translating 127 steps down to 28. Thus throttles etc and exrail continue to think in 127 step mode and only the dcc signal is changed so that the speed is appropriate. (eg throttle/exrail sends say speed 63... DCC sends speed 14.
In andere woorden: JA het werkt. Intern worden de 0-127 waarden omgezet naar 0-27. (bijvoorbeeld EXRAIL verzendt snelheid 63... DCC verzendt snelheid 14)
Re: Starten met EXRAIL (onderdeel van DCC++Ex)
Geplaatst: 12 dec 2021 16:58
door Momfer
Onmogelijkhier schreef: ↑12 dec 2021 16:10
Ik heb wel een Arduino maar geen mega en ook geen motorshield. Heb ook geen digitale loco maar volg het toch voor de toekomst.
Fijn dat je volgt!
Helaas is de Arduino UNO niet geschikt voor EX-RAIL. Je kunt deze wel gewoon gebruiken als basis voor een DCC++EX centrale icm een motorschild. Zelfs zonder motorschild kun je alvast proberen hoe e.e.a. werkt, mits je de pennen A0 en A1 aan massa legt. UIteraard is dat zeer beperkt, maar wel leuk om te proberen, toch?
Re: Starten met EXRAIL (onderdeel van DCC++Ex)
Geplaatst: 12 dec 2021 17:37
door Onmogelijkhier
Ga zo wie zo een Mega bestellen en ook een motorshield.
Kan geen trein aansturen, want geen digitale loco, maar kan wel leren.
Re: Starten met EXRAIL (onderdeel van DCC++Ex)
Geplaatst: 12 dec 2021 19:23
door Momfer
Onmogelijkhier schreef: ↑12 dec 2021 17:37
Ga zo wie zo een Mega bestellen en ook een motorshield.
Kan geen trein aansturen, want geen digitale loco, maar kan wel leren.
Dat is een mooie insteek, Marcel!
EXRAIL:Sequence, Route en Automation
Geplaatst: 12 dec 2021 21:49
door Momfer
We gaan verder met SEQUENCE, ROUTE en AUTOMATION. Daarmee groeperen we opdrachten, waarmee we interessante dingen kunnen doen. Maar er zijn wat kleine verschillen tussen deze drie belangrijke opdrachten
SEQUENCE(ID)
Gewoon een lijst met opdrachten die in volgorde moeten worden gedaan. Deze dingen kunnen o.a. zijn:
- Trein(en) laten rondrijden
Wissel(s) omzetten
Verlichting van een bedieningspaneel bedienen
Animatie automatiseren
Sensoren uitlezen
Voorwaarden toekennen (bv wachttijden)
Een toepassings kan bijvoorbeeld zijn: een sensor die een trein detecteert, een knop die wordt ingedrukt of een periode die verstrijkt.
Code: Selecteer alles
SEQUENCE(1) // Lljst met opdrachten met ID=1
FWD(40) // vooruit met snelheid 40
DELAY(15000) // duur 15 seconden
STOP // stop de trein
DONE // einde van SEQUENCE(1)
ROUTE(ID,"Naam van de Route")
Een ROUTE is hetzelfde als een SEQUENCE, maar deze wordt zichtbaar gemaakt in JMRI en EngineDriver met een herkenbare naam. De gebruiker op een knop kan drukken om de reeks uit te voeren. Ook zonder JMRI en/of EngineDriver kan deze opdracht prima worden gebruikt. Het kan het script leesbaarder/herkenbaar maken. ROUTE kan het beste worden gebruikt om een reeks wissels en seinen in te stellen om een route door de baan te maken.
Code: Selecteer alles
ROUTE(2, "Van hoofdbaan naar Kolenbunker") // Lijst met opdrachten met ID=2 en herkenbare naam.
THROW(1) // zet wissel met ID=1 afbuigend
CLOSE(6) // zet wissel met ID=7 rechtuit
DONE // einde van ROUTE(2)
AUTOMATION is ook een SEQUENCE die zichtbaar wordt in JMRI en EngineDriver. Maar ook zonder JMRI en/of EngineDriver kan deze opdracht weer het script leesbaard/herkenbaar houden. De gebruiker kan hiermee vanuit EngineDriver/JMRI een lok toewijzen aan het stuk EX-RAIL script en deze laten wegrijden volgens de stappen in de AUTOMATION.
Code: Selecteer alles
AUTOMATION(3,"Rondjes rijden")
FWD(45) // vooruit met snelheid 45 (van 127)
AT(40) // als sensor(40) opkomt/activeert
STOP // stop de trein
DELAYRANDOM(1000,15000) // willekeuruge wachttijd tussen 1 en 15 seconden
FWD(30) // vooruit met snelheid 30
AFTER(40) // nadat sensor 40 afvalt/deactiveert
FOLLOW(3) // ga verder met SEQUENTIE/ROUTE/AUTOMATION 3
DONE // einde van de AUTOMATION
LET OP: AUTOMATION, SEQUENCE en ROUTE maken gebruik van dezelfde ID-ruimte. ROUTE(1) en AUTOMATION(1) in 1 script wal niet werken zoals je verwacht omdat het ID dan naar 2 verschillende routines verwijst.
Gebruik van de routines
Als je de bovenstaande voorbeelden opload naar de Arduino zal er weinig gebeuren. Er is geen lok toegewezen aan de routines.
ROUTE(1) kun je aanroepen in het script door in het script gebruik te maken van de opdracht SENDLOCO(locoID,routeID) of vanuit de SerialMonitor van de Arduino IDE met de opdracht </ START locoID route_id>. In de Serial Monitor kun je ook kijken welke routes er zijn door </ ROUTES> in te geven. Het resultaat ziet er wat cryptisch uit, maar geeft wel enig inzicht of het script gelukt is.
Tot zover. Volgende keer meer over wissel (Turnouts) en seinen (Signals).
Re: Starten met EXRAIL (onderdeel van DCC++Ex)
Geplaatst: 14 dec 2021 13:42
door Hans
Hallo Rico,
Het wordt al wat ingewikkelder, maar ik kan het nog steeds volgen.
SEQUENCE, ROUTE en AUTOMATION doen mij met een beetje weemoed denken aan REPEAT...UNTIL, WHILE...DO of zelfs FOR...NEXT uit de "oude" programmeertalen.
m.vr.gr.
Hans
Re: Starten met EXRAIL (onderdeel van DCC++Ex)
Geplaatst: 14 dec 2021 15:35
door Momfer
Hallo Hans,
Fijn dat je het nog kunt volgen. Het feit dat je met weemoed aan dat soort lussen en iteraties kunt terugdenken, geeft de indruk dat je in elk geval enige kennis van programmeren hebt (gehad). Dat zal zeker helpen met het begrijpen van de voorbeelden.
Geef je het ook aan als je het niet meer (helemaal) kunt volgen? Dan kan ik kijken of ik zaken kan verduidelijken of verder moet uitdiepen.
Re: Starten met EXRAIL (onderdeel van DCC++Ex)
Geplaatst: 14 dec 2021 15:42
door shoven
Dit is leuk om te volgen. Ik ben een aantal jaren programmeur geweest (Delphi/C/C++ en wat van hun voorlopers), dus leuk om dit soort dingen terug te zien.
Re: Starten met EXRAIL (onderdeel van DCC++Ex)
Geplaatst: 14 dec 2021 15:44
door Onmogelijkhier
Mijn Arduino Mega staat in bestelling maar kunnen deze kleine stukjes ook werken in een Arduino Uno?
Re: Starten met EXRAIL (onderdeel van DCC++Ex)
Geplaatst: 14 dec 2021 15:57
door Momfer
EXRAIL werkt NIET in een Arduino UNO, deze heeft te weinig geheugen.
Re: Starten met EXRAIL (onderdeel van DCC++Ex)
Geplaatst: 14 dec 2021 15:58
door Momfer
shoven schreef: ↑14 dec 2021 15:42
Dit is leuk om te volgen. Ik ben een aantal jaren programmeur geweest (Delphi/C/C++ en wat van hun voorlopers), dus leuk om dit soort dingen terug te zien.
Leuk dat je ook meeleest, Steven.