Hoe maak je een computerprogramma, of een sketch voor een Arduino, wat locomotieven automatisch laat rijden.

Er zijn meerdere computerprogramma's die automatisch rijden van locomotieven mogelijk maakt. Nederlandse voorbeelden zijn:

Het gratis te downloaden programma "Koploper" van de ons helaas al ontvallen programmeur Paul Haagsma, die dit programma geheel kosteloos altijd aan alle spoor enthousiasten beschikbaar heeft gesteld. Dit programma kun je hier gratis downloaden.

Populair en nu nog steeds volop in ontwikkeling "Itrain" van Xander Berkhout. Niet gratis maar zeker een aanrader voor een ieder die een goed werkend programma zoekt, grafisch prima verzorgt en veel ondersteuning. Downloaden kun je dit hier. (niet gratis)

Bovengenoemde programma's hebben een computer nodig om op te draaien, en ze maken gebruik van commando centrale als ECOS, Central station of DR5000 van Digikeys.

PenDelDCC is anders, PenDelDCC vervangt de commando centrale en de computer, wat overblijft is alleen PenDelDCC die de DCC signalen opwekt waarmee de locomotieven en accessoire decoders worden aangestuurd. PenDelDCC geeft ook de rijspanning, het vermogen nodig om locomotieven te laten rijden tot een 30 Watt.

Een Pendel- of module spoorbaan aangestuurd met PenDelDCC bestaat dus uit:

PenDelDCC

1 of 2 locomotieven met een DCC compatibel decoder

Rails, 2-rail 3-rail maakt niet uit

Wissels en wissel decoder(s)

Seinen en seindecoder(s)

Voedingsspanning (meestal 1 of 2 adapters)

Het zal duidelijk zijn dat een pendel- of module baan aangestuurd door PenDelDCC veel goedkoper is te realiseren als de methode met computer-programma-centrale.

De Arduino geprogrammeerd en voorzien van de noodzakelijke opsteek-print kan voor € 25,- van mij worden overgenomen.

Alleen interessant voor Arduino programmeurs hoe PenDelDCC de DCC commando's maakt. Dit kun je bekijken aan de hand van het programma zelf, kun je downloaden van mijn github account. Voor eigen gebruik mag je er alle mee doen wat je wilt, voor commercieel gebruik zoek even contact voor een eerlijk voor ieder aanvaardbare oplossing.

Veel interessanter voor modelspoorders volgt hieronder een uitleg, beschrijving hoe het algoritme, de logistiek van PenDelDCC in elkaar steekt.

Locomotief staat in een station.

Wacht een automatisch willekeurig gekozen tijd.

Alle routes worden getest.

Staat loc rijrichting op bewegen van links naar rechts (met de klok mee). Dan wordt getest of in de te testen route, station links overeenkomt met het huidige station, waar de loc nu instaat.

Staat loc rijrichting op bewegen van rechts naar links.( tegen de klok in). Dan wordt getest of in de test route het station rechts overeenkomt komt met het huidige station van de loc.

Als er na het testen van alle routes, geen mogelijke route is gevonden, dan wordt de loc gekeerd. De loc staat dan zeker in een eind, kopstation.

Op dit punt van het proces is het zeker dat er 1 of meerdere routes zijn in de huidige richting van de loc.

Hier begint een cyclus om een vrije route te vinden. Deze cyclus wordt periodiek ongeveer 2x per seconde doorlopen.

    • Willekeurig wordt er een route gekozen.

    • Eerst wordt getest of deze route in deze rijrichting kan worden gereden. Als niet wordt de cyclus verlaten en opnieuw gestart.

    • Getest wordt of het eindstation van deze route vrij is, mag niet het huidig station of doelstation van de andere locomotief zijn. Als niet vrij dan wordt de cyclus opnieuw gestart.

    • Getest wordt of de in deze gekozen route wissels zijn opgenomen en of deze opgenomen wissels allemaal vrij zijn. Zo niet dan wordt cyclus opnieuw gestart.

    • Getest wordt of er blokkades in de gekozen route zijn opgenomen, en of deze vrij zijn. Als niet wordt de cyclus opnieuw gestart.

    • Getest wordt of er melders, stations in de route zijn opgenomen die worden gepasseerd. Een route kan een of meerdere station bevatten waar niet wordt gestopt, maar wel kan de andere loc op een van deze te passeren stations stil staan, als een opgenomen melder bezet is, wordt de cyclus opnieuw gestart.

Dit zoeken naar een route kan tot ongeveer 1 minuut duren. Als dan nog geen vrije route gevonden is, dan staan de locs in deadlock, ze blokkeren elkaars mogelijke routes. De loc wordt nu gekeerd en het proces begint weer helemaal van voren af aan. Met Locomotief staat in een station…...enz.

Is er een vrije route gevonden.

Deze route wordt gereserveerd.

    • Eind, doelstation wordt bezet gezet.

    • Opgenomen wissels worden bezet gezet.

    • Opgenomen blokkades worden bezet gezet.

    • Opgenomen te passeren stations worden bezet gezet.

In de route opgenomen seinen worden op groen gezet.

Om de beurt met telkens een korte pauze worden de in de route opgenomen wissels in de juiste stand gezet.

Pauze, om te zorgen dat de wissels tijd hebben om te positioneren.

Locomotief wordt in gang gezet op de Vmin, de ingestelde minimale snelheid.

Een waarde, laten we deze versnellen-vertragen noemen, wordt op versnellen gezet.

Nu begint de rijcyclus van de locomotief. Deze cyclus wordt periodiek ongeveer 2x per seconde doorlopen.

    1. Getest wordt of het doelstation van de loc bezet is. Als bezet dan is loc op bestemming aangekomen en gaat het verder bij punt 7.

    2. Loc is onderweg. Wanneer versnellen-vertragen op versnellen staat gaan we door met punt 3 anders gaan we door met punt 6.

    3. Snelheid wordt getest. We zijn hier aan het versnellen. Als kleiner dan Vmax, de ingestelde maximale snelheid, dan wordt de snelheid met 1 punt verhoogd. (Loc gaat dus versnellen).

    4. Verder wordt een waarde, laten we het routetijd noemen, met 1 verhoogd. Voor alle routes is per loc een route-lengte bepaald, dit proces gaat helemaal automatisch. Iedere keer dat de loc deze route rijd wordt deze, laten we het routelengte noemen, aangepast. Na verloop van tijd is van alle routes de lengte bekend. De eerste keer dat de route wordt gereden, de default waarde, is deze routelengte kort. De routetijd die we net hebben verhoogd wordt nu vergeleken met deze routelengte. Is de routetijd hoger, groter dan de routelengte dan moet de loc beginnen met afremmen. De waarde versnellen-vertragen wordt gezet naar vertragen.

    5. In iedere cyclus wordt de snelheid dus verhoogd, tot de maximale snelheid. Daar blijft de loc dan in rijden, tot de routetijd langer is dan de route lengte, dan gaat de loc vertragen. In korte routes zal de loc nooit de maximale snelheid halen omdat de routetijd al snel langer is dan de routelengte.

    6. We zijn aan het vertragen. De waarde routetijd wordt nu met 1 verlaagd. Is de routetijd nu groter dan Vmax, de ingestelde maximale snelheid, wordt de snelheid van de loc niet aangepast, loc rijd dus op maximale snelheid nog een cyclus door. Is de routetijd kleiner dan Vmax, dan wordt de snelheid van de loc met 1 verlaagd. Dit gaat door tot de loc op snelheid Vmin rijd. Of de loc moet eerder het doelstation bereiken.

    7. Loc heeft doelstation bereikt. Route is dus aan het einde gekomen. Het huidige station van de loc wordt nu vrijgegeven, en het doelstation wordt nu het huidige station. Deze wordt niet vrijgegeven. In de route opgenomen wissels en blokkades worden weer vrijgegeven. Seinen in de route opgenomen worden weer op rood gezet.

    8. De snelheid wordt nu bekeken. Rijdt de loc bij het bereiken van het doelstation in snelheid Vmin, de minimale snelheid, dan rijdt de loc nog een klein stukje door en stopt daarna. En wordt de routelengte met 1 verhoogd, deze waarde wordt nu ook in het geheugen gezet. Rijd de loc sneller dan Vmin, dan stopt de loc onmiddellijk, en wordt de waarde routelengte met 1 verminderd. Ook nu wordt deze veranderde waarde routelengte in het geheugen opgeslagen.

    9. De cyclus voor automatisch een route kiezen en rijden is nu geheel doorlopen, en begint weer van voor af aan. Locomotief staat in een station…..enz.