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.

Afbeelding

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 :) 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 :D

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.

Afbeelding

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.
Afbeelding

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 begintag en een eindtag, zoals hieronder wordt aangegeven. Tussen de tags komen de verschillende scriptopdrachten te staan:

Code: Selecteer alles

EXRAIL
  ... je opdrachten
ENDEXRAIL
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.