maandag 25 maart 2024

WisselAandrijving versie V4

 Het is nu een 8 jaar geleden dat ik als 'herintreder' weer aan modelspoor ben begonnen. Voor veel modelspoorders een herkenbaar verhaal. Doos met zwaar verroeste M- rails van zolder en weer begonnen. Baan een combi van K- rails in zicht en M- rails buiten beeld. Alles digitaal en rijden met koploper. Soms deden de M-wissels het, maar evenzovaak niet met gevolg dat de treinen alle kanten opgingen behalve de goede. 

Dat moet toch beter kunnen. Daaruit is het project WisselAandrijving voortgekomen. Een 'wisselmotor' op basis van een stappenmotor en arduino. Vanaf de allereerste prototypes was het resultaat verbluffend goed. Wissels werden door koploper gewoon altijd in de goede positie gezet. 

Zo enthousiast was ik over het resultaat dat ik het idee verder heb uitgewerkt tot een kant en klaar product die andere spoorders ook kunnen gebruiken, tafeltje gehuurd op de Houten beurs en daar ben ik nu altijd met mijn zelfbouw-electronica-stand  te vinden.

Ondertussen veel bijgeleerd en vond ik het tijd om project WisselAandrijving drastisch te upgraden. 

De nieuwe versie is natuurlijk compatibel met de aandrijvingen van de vorige. Maar met extra's.  Nu met 4 aandrijvingen voor 4 wissels of andere heen-en-weer bewegingen als deuren, ophaalbruggen enz. Ook een nieuwe 3D geprinte houder- aandrijving voor de stappenmotor. Kleiner en goedkoper. 

Beide standen van de aandrijving zijn nu in te stellen. Hierdoor is de beweging nog preciezer. Voor iedere aandrijving is er een drukknop en een multikleuren led. Juist ook voor analoge modelbanen. 

De module is voorzien van de nieuwste DCC NMRA decoder voor digitale aansturing. 

In basis, dus zonder dat je als gebruiker iets hoeft in te stellen, is de module klaar voor gebruik. Per aandrijving twee connectors en stroom 9V op de entree van de arduino en alles werkt. Met de 4 drukknoppen zet je de wissels om, stand is te zien aan de kleur van de led.

 Aansluiten met 2 draden op de digitale railspanning, alleen DCC. 

Het instellen op het gewenste DCCadres is supersimpel. Daarna is WisselAandrijving ook klaar voor digitale aansturing.

Maar er zijn meer extraas. Aansluitingen voor externe drukknoppen en leds. Deze kunnen op een bedienpaneel voor de analoge rijders. 4 extra aan/uit uitgangen. Standaard worden deze uitgangen aangestuurd door de decoder op hun eigen adres. Dus een bonus voor een extra 4 dcc kanalen waarmee leds of allerlei andere zaken aan en uit zijn te schakelen. 

Ook zijn de uitgangen te gebruiken als bezet melding. Is een aandrijving in beweging of gaat het bewegen dan is deze uitgang 'bezet'.  Voor een bezetmelding naar een treinenprogramma als koploper of Itrain te gebruiken.

Een eenvoudige automatisering van de bewegingen van de aandrijvingen. Periodiek wordt een aandrijving omgezet. Of de knop voor de aandrijving zet de aandrijving naar stand 2. Een ingestelde tijd zet daarna de aandrijving weer terug. Een actieve sensor, hall of ir, kan worden aangesloten op de connector voor de externe drukknoppen. Een aan de sensor voorbij rijdende trein zet dan de aandrijving om, en na een periode gaat de aandrijving weer terug. Denk hierbij aan overweg bomen of een waterkraan voor stoomlocs. 

Deze automatische bewegingen kunnen dan onafhankelijk of opeenvolgend.

Voor een aandrijving zijn de beide posities in te stellen. De snelheid waarmee de aandrijving beweegt is in te stellen. 

De stappenmotor voor WisselAandrijving is de goedkope en populair unipolaire 28byj48 op 5V. 

Er zijn meerdere versies van deze motoren te koop die niet altijd dezelfde draairichting hebben. Daarom is de draairichting per aandrijving in te stellen. 

Voor digitale of automatische rijders is het vaak een hele opgaaf om de op het scherm getoonde stand van de wissel overeen te laten komen met de werkelijke stand van de wissel. Per aandrijving kun je hiervoor het DCC command omwisselen tussen rechtdoor of afslaand en de getoonde kleur, rood of groen kun je omwisselen. 

Al met al weer een leuk project. Voor de beurs van 30 maart hoop ik een demo bij me te hebben, voor de verkoop wordt een beurs later.

Wordt vervolgd....



vrijdag 9 februari 2024

DeKoder (2)

Project  deKoder  verder uitgewerkt tot een complete module die ik komende beurs 24 februari meeneem. Ook een demo ervoor gemaakt. 

Voor de demo een deKoder ingesteld op een aantal verzonnen willekeurige acties. Dit om op de beursen te kunnen laten zien hoeveel verschillende zaken tegelijk of apart met deKoder kunnen worden gerealiseerd.

De demo deKoder zet achtereenvolgens 6 acties aan.

Eerst een klein project met een 9-tal leds, in serie aangesloten op een mini step-up module. Dit om te laten zien dat je een reeks van leds zoals een rij straatlantaarns zonder weerstanden en weinig draden, kan laten branden. Aangesloten op output 2 van deKoder. De output heeft een PWM  optie en kan in en uit faden. Ingesteld op een lange fade tijd, geeft een ruwe benadering hoe een dag en nacht schakeling gemaakt kan worden.  De 9 leds vragen meer energie dan dat de output van deKoder kan leveren. Dit eenvoudig opgelost met een npn transistor, collector op de plus van het led printje, basis aan de output van deKoder en de emmitter van de transistor naar de plus 5V. De transistor werkt hier als een super simpele versterker. 

Volgende actie is een grote servo. Deze zijn te gebruiken voor bewegingen die wat meer kracht nodig hebben. Ophaalbruggen, hijskranen of de wissels van grotere schalen. 8 willekeurige posities zijn ingesteld voor deze servo. DeKoder zet in iedere cyclus de servo een positie verder. De bezetmelding van de servo is ingesteld op timer 5. Deze timer maakt een knipperled op een preiserpoppetje met een lantaarn in de hand. Dus is de servo 1 in beweging, bezet, dan knippert de lantaarn. 

Dan volgt een actie met een klein gelijkstroom motor met vertragingskast aangesloten op output 1. Met de PWM regeling zo ingesteld dat  het motortje langzaam draait als  van een windmolen. 

Een beweging van de stappenmotor is de volgende actie. Ook hier 8 ingestelde posities als bij servo 1 maar nu wel gelijk verdeeld en oplopend, zoals bij een draaischijf of rolbrug. Het verschil tussen servo en stappenmotor wordt hier duidelijk. Een servo  leert van het signaal waar het naartoe moet draaien, de stappenmotor moet eerst bepalen waar hij is, door naar een referentie punt te draaien, en gaat daarna vanuit dit referentie punt draaien naar de gevraagde positie. Beide hebben hun voor en nadelen. De bezetmelding van de stappenmotor is ingesteld op output bezet. Hierop aangesloten een knipperautomaat die een andreaskruis laat knipperen. Is de stappenmotor bezet, dan knipperen de leds in het andreaskruis.

De volgende actie is servo 2. Ingesteld op twee posities. Gaat dus in de cyclus 'heen' en in de volgende cyclus 'weer'. Een looplicht module brandt tijdens het draaien. 

Laatste actie is een verstopte fotograaf die met flitslicht een foto maakt van een preisermevrouw gezeten op een van de printjes. Timer 4 is hier voor gebruikt, aan-tijd op 1 (10ms) uit-tijd op 4 (40ms) en het aantal cycli op 5. Fel witte led die dus 4 keer flitst.

Al met al was dit een leuk project om te maken. En naar mijn mening voor veel modelspoorders een optie om hun zelfbouw project aan te sturen.

Nu weer verder met mijn nieuwe baan, deKoder  gaat hier gebruikt worden voor een zelfbouw segment draaischijf. Geplaatst in een locomotief loods. Fotoos en filmpjes zullen vast volgen als alles werkt.

Wordt vervolgt......


 



zondag 21 januari 2024

deKoder, even een zijsprong..

Het programma  WMapp is nu zo ver dat alles wat ik tot nu toe op mijn baan heb gemaakt kan worden aangestuurd. Nog lang niet af natuurlijk, dat duurt nog wel even. Even wat anders doen, een stukje scenery. Ik heb bedacht een segment draaischijf, 2 standen. Geplaatst in een locloods met twee deuren. Loc gaat de ene deur in en komt de andere deur weer uit. Rest van het verhaal achter dit stukje scenery zal ik de lezer besparen. Het model voor de segment draaischijf getekend in onshape en in het verre China laten 3D printen. De schijf wordt aangedreven door een 28byj-48 stappenmotor. De deurtjes straks door twee servo's en dan zijn er vast ook nog wel knipperlichten en seinen te vinden in het project. Nodig zijn dan een stepperdriver, servo drivers en andere logische schakelingen. Ik kwam daardoor op het idee van een arduino-project welke een stepperdriver en servodrivers heeft, en outputs voor leds. En logica om alles met elkaar te laten samen werken. Maar zo een 'module' zou geschikt zijn voor nog veel meer andere zelfbouw modelspoor projecten, denk dan aan een spoorwegovergang, spoor draai- of hefbruggen, kranen en nog veel meer. En besloten om er een arduino project van te maken. Ik hoop komende Houten beurs ze bij me te hebben. Met zo een project ben ik meestal een 3 maanden bezig dus dat verklaart waarom er weinig posts de laatste tijd op dit blog kwamen. Blog daarom maar opgewaardeerd en zal ik ook  zijsprongen als deze beschrijven. In het blog kan ik veel meer uitweiden over de grote lijnen en het hoe en waarom, de handleiding, die voor dit project echt 'huge' wordt, volgt later. 

Project deKoder. 

Bestaat uit een standaard arduino uno met daarop gestoken een speciale deKoder shield die ik heb ontworpen  en ook weer bij mijn chineze vrienden heb laten maken.

Aansluitingen zijn er voor een DCC signaal, voeding, een 28byj-48 stappenmotor, 2 servo's, 2 sensoren, 4 drukknoppen en 6 aan/uit outputs.

Op de shield 4 drukknoppen en een reset toets. Een 4-digit 7segment display. Dit samen is dit de ui. (User interface)

In de sketch, het programma in de arduino, is opgenomen de aansturing van de stappenmotor en servo's. Deze hebben minimaal 2 en maximaal 8 instelbare standen. Ook in het project 8 timers. Iedere timer heeft een 'aan'tijd en een 'uit'tijd, deze worden afwisselend afgeteld. Na aflopen van een timertijd kunnen tot max. 6 verschillende of dezelfde  acties worden ingesteld. Deze worden na elkaar uitgevoerd. Wanneer de aantijd begint wordt de actie aangezet, na afloop van de aantijd wordt de actie uitgezet. Na afloop van de uittijd en weer het begin van de aantijd wordt de volgende actie aangezet en zo door totdat alle acties zijn gedaan. Dat is dan het einde van 1 cyclus. Het aantal cycli kan worden ingesteld of continue zodat dit gewoon door blijft gaan. 

Die acties kan zijn het omzetten van stappenmotor of servo, aanzetten van outputs. Maar het meest bijzondere is dat de timers kunnen worden genest, je kan met een timer een timer starten, die op zijn beurt weer een andere timer start die dan iets doet. Hiermee kunnen hele sequenties van gebeurtenissen worden gestart. 

Als voorbeeld mijn segmentdraaischijf. Over de DCC een commando sturen om de schijf naar stand 2 te zetten. De segment schijf is nu bezet. Daar is in voorzien met een functie die een instelbare actie aanzet. Output'bezet' is daar bv.voor te gebruiken. Deze 'bezet' output is dan optioneel weer te gebruiken voor een bezetmelding. De stappenmotor en de servo's  hebben een mogelijkheid om een timer te starten na het ontvangen van een draaicommando. De motor wacht met draaien totdat deze timer is afgelopen. Deze timer zet de beide servo's om, zodat de deuren opengaan. Ook start deze timer een andere timer welke is ingesteld op een wisselend knipperlicht op de outputs 1 en 2. Na aflopen van deze timer doet de stappenmotor de beweging. Daarna wordt de bezetmelding weer vrijgegeven en een timer gestart die de deuren weer sluit en de knipperlichten uitzet.

Wordt vervolgt...



zaterdag 18 november 2023

Automatische rijden, het algoritme

Het algoritme beschrijft hoe het automatische rijden in elkaar steekt. De versie V.20 die nu te downloaden is maakt onder veel meer het automatisch rijden mogelijk. Met deze versie kan ik nu weer verder met de baan en het baanontwerp. Vooral de juiste plaatsing van melders, waar ze komen, is erg bepalend voor het automatische rijden. Laat ik dit van af nu autorijden noemen. Wissels moeten op tijd worden omgelegd en locs moeten op tijd stoppen. Ik gebruik hier een loc die goed is afgesteld, gezien snelheden, optrek en afrem tijden en een loc die dramatisch slecht is afgesteld, rijd veel te langzaam en optrekken en vooral vertragen duurt veel te lang. Perfect dus om mee te testen of autorijden met alle typen locs is te doen. 

Onderstaand verhaal is heel erg globaal en ook voor mezelf bedoeld zodat ik later kan nalezen hoe het ook al weer ongeveer in elkaar steekt.

Het algoritme.
Iedere loc heeft een eigen rijvenster. Een knop wisselt tussen handmatig of autorijden. In autorijden mode is er een doorlopend continue proces. Een knop wisselt tussen rijden en wachten. 
In mode-rijden wordt een flag 'autostart' gezet. Een wacht-lus wordt gebruikt om op gewenste plaatsen pauzes in het proces te maken. In mode-wachten wordt deze wacht-lus oneindig gemaakt zodat het autorijden proces voor deze loc uiteindelijk niet verder gaat. Resultaat is een loc die nadat het op wachten is gezet doorrijdt naar het laatste station wat door deze loc is bezet en daar dan stopt en blijft staan omdat er door het stopzetten van het routezoeken proces geen routes meer zijn. 
Zet je de loc weer naar handmatig rijden, met de knop stop/auto. Dan wordt alles wat deze loc aan bezetmeldingen, routes gewist. 
De flag autostart is een onderbreking in het doorgaande proces van autorijden, wordt autostart 'waar' gezet met de knop 'rijden' dan wordt de onderbreking weggehaald, start het proces of het proces wordt hervat.

Auto is een rondgaand proces, het ' begin' is nu enkel voor het verhaal. 
In het loc-venster wordt een 'auto-clock' gestart. Om de 20ms worden achtereenvolgens twee processen aangeroepen. AutoDrive en AutoRoute. 
AutoDrive aangeroepen door de clock >
Getest wordt of de doelmelder in het huidige route bezet is. >
Als bezet, is doelstation bereikt. Loc gaat vertragen naar stop, wissels en melders worden weer vrijgegeven, route wordt uit de lijst met routes voor deze loc gehaald.
De volgende route in deze lijst wordt ingesteld als nieuwe route. Loc gaat versnellen. Nieuw doelstation.
Als doelmelder niet bezet, loc gaat versnellen, als er geen vervolgroute is, zoeken naar een vervolgroute.   

Als er geen vervolgroute is gevonden kan dit komen doordat alle routes bezet zijn, dan wordt wacht-lus  gestart, na aflopen van de wachttijd wordt opnieuw gezocht naar vrije route. Of er zijn geen routes meer in deze rijrichting dan wordt de rijrichting gekeerd een wacht-lus wordt gestart. Na aflopen wordt opnieuw gezocht naar routes nu in de omgekeerde richting. 

Rijd de loc niet een route maar zijn er wel routes voor deze loc bepaald, dan wordt de eerste route in de lijst ingesteld. 

Zijn er geen nieuwe routes gaat de loc door met vertragen tot stop.

AutoRoute periodiek aangeroepen door auto. Autoroute werkt met een routefase, bij iedere doorloop wordt een fase doorlopen. Autoroute bepaald de routes die een loc gaat rijden, daarbij worden de bepaalde routes bezet gesteld. Als er geen routes hoeven te worden gezocht dan staat de route fase op een idle fase. Helaas daar weet ik geen nl woord voor, een fase die gewoon niks doet. Vanuit andere delen van het programma kan een 'start-zoeken-route-fase' worden ingesteld. Bekend moet zijn de rijrichting, vooruit  of achteruit rijdend, de stand, neus naar links  of neus  naar rechts en de melder van waaruit een vrije route moet worden gezocht. 

Er wordt een lijst gemaakt met alle mogelijke routes. Routes in de verkeerde rijrichting worden eruit gefilterd. 

Een route bestaat uit een onbeperkt aantal raildelen, rechte of gebogen rails, wissels kruisingen. Ieder railstuk heeft een oriëntatie van links naar rechts. En 1 of meerdere aansluitingen. Als voorbeeld een recht stuk heeft 2 aansluitingen, waar de trein het railstuk opkomt en waar het de rail verlaat. Van en naar heb ik dat in het programma genoemd. Een wissel heeft er drie en een kruising 4. Een draaischijf, nu nog niet in WMapp geïmplementeerd, dat volgt nog, heeft misschien wel 30 aansluitingen.

Railstukken kunnen in stappen 45graden worden gedraaid, zodat er per single railstuk 8 verschillende mogelijke aansluitingen zijn. Bij een rechte rail ligt de naar aansluiting in het verlengde van de van aansluiting dus is de van aansluiting bv.1 dan is de naar aansluiting 5. De van aansluiting is altijd 1,2,3 of 4 en de naar aansluiting is altijd 5,6,7 of 8. Om nu niet alle lezers te laten  afhaken zal ik de andere railstukken niet behandelen.

Een loc staat met zijn neus naar rechts en rijd de railstukken van de van aansluiting naar de naar aansluiting. Nu zit er in de route een 180 graden bocht. Aan het einde van de bocht staat de loc met zijn neus naar links. Dit wordt opgemerkt tijdens het bepalen van de route. Deze route met die bocht heeft een van aansluiting van 5 en een naar aansluiting van 5 dus is gekeerd. Dit wordt als een flag in de route meegeven. Is de loc klaar met het rijden van deze route dan wordt de oriëntatie, de stand van de loc omgezet. Ook te zien aan het plaatje in het rijvenster.  Een loc met zijn neus naar links rijdt de railstukken van de naar aansluiting naar de van aansluiting. Vanzelfsprekend bij vooruit rijden, bij achteruit rijden andersom. 

Zijn er geen routes meer  in de lijst na het filteren op rijrichting, dan stopt het zoeken, met terugmelding dat er geen routes in deze richting zijn. Rijrichting wordt gekeerd, een wachtfase gestart en na aflopen van die wachtfase worden opnieuw alle mogelijke routes bepaald en op rijrichting gefilterd. Haast onmogelijk is het dat er dan opnieuw geen routes worden gevonden, immers die loc is toch ook op deze plek gekomen, maar is dat toch zo dan wordt het autorijden voor deze loc afgesloten. 

Staat er na het filteren op rijrichting nog 1 route in de lijst. Dan hebben we te maken  met een routeblok. Een stuk rails met twee of meer melders zonder wissels of andere aftakkingen. Voor iedere route, dus van melder naar melder, in dit routeblok wordt nu een route aangemaakt in de lijst routes voor deze loc. Melders worden bezet gezet. Op het baanplan is te zien hoe 1 voor 1 de melders de kleur van de loc krijgen. Deze routes, de delen van een routeblok, kunnen niet bezet zijn. Voordat een route voor een loc kan worden ingesteld naar een routeblok wordt gekeken of alle melders in dat routeblok vrij zijn. Is dat niet zo, dan kan deze route niet worden ingesteld.

Staan er na het filteren op de rijrichting meerdere routes nog in de lijst, dan gaan we de bezette routes eruit filteren. Dit gaat in meerdere stappen.

Is het doelstation, melder van de geteste route vrij. Zijn alle wissels opgenomen in deze route vrij. (zijn alle andere blokkades, als een gelijkvloerse kruising vrij. In v2.2 nog niet geïmplementeerd) en (last but not least, and by far the most complex one) zijn alle melders van een railblok opgenomen in de geteste route vrij.

Alle bezette routes zijn dus uitgefilterd.

Zitten er nu geen routes meer in de lijst, dan zijn alle mogelijke routes dus bezet. Het zoeken stopt nu en aan het zoekproces wordt gemeld dat alle routes bezet zijn. Een wachtfase wordt weer ingesteld en na een tijdje gaan we weer opnieuw zoeken. 

Is er nog 1 route mogelijk na het filteren op bezet, dan wordt deze aan de lijst routes van de loc  toegevoegd. Melders, wissels en blokkades worden apart bezet gezet.

Zijn er meerdere routes overgebleven, dan wordt daaruit een willekeurig keuze gemaakt en deze wordt aan de lijst te rijden routes van de loc toegevoegd.

En dit werkt dus nu ....wordt vervolgd.

dinsdag 7 november 2023

Update v2.02

 Vandaag een update op de website gepubliceerd. 

Wat kan er nu met WMapp?

  • 3 arduino projecten van Wisselmotor.nl kunnen worden aangesloten met een USB kabel. PenDelDCC, MelDers en DCCmonitor. Door DCCmonitor aan te sluiten zijn de verschillende DCC commando beter te zien en te filteren. MelDers is als terug melders monitor te gebruiken op een standaard S88 systeem. Ook geeft MelDers meldingen zonder dat het aangesloten is op een S88 systeem. Te gebruiken als systeem voor bezetmeldingen of andere gebruikers input naar WMapp. PendelDCC kan met WMapp volledig worden ingesteld en bedient wat het programmeren van routes en alle andere zaken in PenDelDCC veel eenvoudiger maakt. In combinatie met WMapp is PenDelDCC ook een volledige DCCcentrale. Via de USB aansluiting stuurt WMapp commando's die door PenDelDCC als DCC commands op de rails worden gezet.
  • Baanplan. Na het installeren van WMapp opent het programma, het vraagt direct om een bestand 'actievelocs' op een door jouw te kiezen locatie  op te slaan. Een systeembestand wat noodzakelijk is. In het grote, nu nog lege witte middenvenster kun je een baanplan tekenen. Klik daarvoor op de knop baanplan wat een nieuw venster opent. Het tekengebied is aan te passen met de plus en min knopjes op de randen. Met een knop links boven in de hoek kun je een raster laten verschijnen wat het tekenen makkelijker maakt.  Klik op een vakje in het raster opent een venster waarmee je baanstukken, rails en andere zaken in het vakje kunt zetten. Rechte en kromme rails, kruising, wissels enzo. Eigenschappen van bv.een wissel als dccadres kunnen hier worden ingevuld. Op railstukken kunnen melders met hun instellingen en eigenschappen worden geplaatst. Baanplannen kunnen met opslaan en laden worden opgeslagen en terugeladen. Het laatst bewerkte baanplan wordt automatisch na het starten van WMapp geladen.
  • In locomotieven kun je locs aanmaken en opslaan. Ook kun je ze toewijzen als actieve loc. De loc komt dan in een klein venster links. Een klik daarop opent het rijvenster van de loc. Er is een keuze tussen handmatig rijden of automatisch. In automatisch moet je de oriëntatie van de loc opgeven, hoe staat de neus en gaat het vooruit of achteruit. Verder de plek waar de loc op de baan staat. Actieve melders zijn rood, daar kun je uit kiezen. Druk op rijden en de loc gaat volledig automatisch rijden.
  • In baanontwerp kun je al melderacties aan maken. Melders worden natuurlijk gebruikt voor bezet of terugmelding, maar je kan ook een melder gebruiken voor een actie zoals bv. het omleggen van een wissel, met een fysieke schakelaar aangesloten op de melder. 
Best al veel, ik maak dit programma gelijk op met het maken van een nieuwe modelbaan, en de treinen rijden hier al vrolijk in het rond, totdat ze elkaar weer in een deadlock rijden, maar dat is voor een andere keer. 

Wordt vervolgt.....

donderdag 2 november 2023

Automatisch rijden(7), snelheden en afstanden

 Locs rijden nu met de laatste versie van WMapp automatisch routes. Nog heel veel fouten onderweg, verkeerde afslagen en deadlocks bij meerdere locs, maar voor een eenvoudig baanontwerp werkt het. 

Natuurlijk moeten de locs langzaam beginnen met rijden en op tijd afremmen om langzaam aan te komen in het volgende station. Zeker niet abrupt starten en stoppen. Al snel ga je dan denken aan snelheid en afstanden op een of andere manier meten. En een heel circus optuigen om deze waardes te gebruiken om versnellingen en afremmen te berekenen en deze waardes opslaan voor vervolgsessies. Veel treinenprogrammaas gebruiken dit principe. 

De snelheid per snelheidstap nauwkeurig bepalen met bv. mijn SpeedMeter arduino project of met een ander een hulpprogramma of een functie in het treinenprogramma. Deze gevonden waardes daarna in het programma ingeven. De afstanden tussen de meldpunten kunnen dan door het programma worden berekend. 

Maar goed bekeken, de lengtes van de trajecten zijn natuurlijk ook niet 'op schaal'.  Een wisselstraat in het echt bij grootspoor met een overall lengte van een kilometer is op H0 altijd nog een metertje of 9, en zoveel ruimte hebben we meestal niet op zolder. Dus snelheden op schaal resulteerd in treinen die veel te snel rijden. De snelheden instellen op dat het er gewoon zo realistisch als mogelijk uitziet is de praktijk.

Zeker hebben programma's als koploper en Itrain bewezen dat het op deze manier wel perfect kan werken. Maar kan het niet simpeler?

De hele reden waarom ik WMapp aan het maken ben is, afgezien van het feit dat het gewoon hartstikke leuk is om te doen en dat je apetrots bent op jezelf als het überhaupt lukt, dat het eenvoudig moet worden, en dat meten van snelheden en afstanden is zo een gedoe.  Ik wil gewoon een baan plan tekenen, loc op de rails en op start drukken en de rest moet vanzelf gaan. 

Dus wat heb ik bedacht. WMapp werkt met PenDelDCC als centrale. (Of met een door jezelf te maken USB>DCC interface). Geen multiprotocol centrale, alleen DCC en alleen 28 snelheidsstappen. Zeker kun je met CV instellingen curves maken in de relaties tussen deze 28 stappen. Maar, we houden het eenvoudig, in WMapp nemen we de verschillende snelheidsstappen alsof ze volledig lineair oplopen. 

In WMapp kun je voor een loc in het locvenster een max, med en min snelheidsstap instellen. Max de maximale snelheidsstap waarin de loc mag rijden, komt voor als een loc een route, traject rijdt en het opvolgende traject, route is al bepaald en gereserveerd. De loc gaat dan niet vertragen  en stoppen  maar rijd op volle snelheid het volgende traject in. Min is de minimale snelheidsstap die de loc kan rijden, dit wordt dus eigenlijk de eerste snelheidsstap. Gebruikt vooral in het laatste stukje van een traject wachtend tot de melder actief wordt en de loc stopt. Med, medium of gemiddeld. Is de lengte van een route, traject bepaald, waarover later meer, dan rijdt de loc in snelheidsstap med +2 extra stappen tot het punt waar het afremmen moet beginnen. Is de lengte van het traject nog niet bepaald dan rijdt de loc in de snelheidsstap med -2 stappen totdat de melder van het station waar de loc naar  op weg is actief wordt en stopt de loc. 

Het automatische rijden wordt aangestuurd door een klok. 2x Per seconde wordt gekeken of er iets aan het auto-rijden van een loc moet veranderen.  Als voorbeeld stoppen als de loc het doel heeft bereikt, of sneller of langzamer gaan rijden als dat mag of moet. Bij begin van een traject wordt een variabele die de lengte van het te rijden traject voorsteld op nul gezet. Zolang de loc rijdt, en dus nog niet het eindstation van dit traject heeft bereikt, wordt deze waarde op iedere klik van de klok, 2x per seconde dus, verhoogd met de snelheidsstap waar de loc dan in rijdt. Bij het bereiken van het eindstation wordt deze waarde als de lengte/snelheid van het zojuist gereden traject opgeslagen. De rijrichting wordt hierin meegenomen, een traject heeft voor iedere loc twee waardes vooruit en achteruit rijdend. Wordt  hetzelfde traject later weer een keer gereden dan wordt de nieuwe waarde met de eerder gemeten waarde gemiddeld en dit wordt dan als de nieuwe lengte/snelheid waarde voor deze loc in deze richting rijdend onthouden.

Lengte/snelheid. Stel een gemeten waarde is 112. In snelheidsstap 28 rijdend is de loc dan 4 seconde onderweg op dit traject. Rijdend in snelheidsstap 1 duurt deze rit dan 112 seconden. In snelheidstap 8 112/8=14 seconden. De snelheid van de loc wisseld voortdurend en het gereden deel van het traject wordt in mindering gebracht op de totale afstand/snelheid. Op ieder moment is dus bekend hoever er nog moet worden gereden op dit traject. Van de huidige snelheid kan worden berekend hoeveel van deze afstand/snelheid nodig is om de loc met de minimale snelheid op het station te laten aankomen, dus wanneer het afremmen moet beginnen. 

En dit werkt dus. Al geïmplementeerd in WMapp. Versnellen, vertragen en stoppen wordt volledig automatisch bepaald. Wat je als gebruiker nog wel moet doen is de snelheden max, med en min instellen zodanig dat het er allemaal gewoon goed en realistisch uitziet.

Deze versie heb ik gepubliceerd en kun je downloaden van de website. Zoals vermeld zit nog vol met fouten, bugmeldingen naar mij hebben nu nog geen nut, er wordt aan gewerkt. Wel ben ik geïnteresseerd in hoe het installatie proces is verlopen of het überhaupt is gelukt, een mailtje hierover wordt op prijs gesteld.

Ik ga nu beginnen aan een 'afstand' bediening op de baan, om accessoires te kunnen schakelen zonder dat ik achter ' de computer' hoef te zitten. Ja ik weet er zijn prachtige digitale oplossingen voor als loconet of allerlei WiFi gedoe met apps, maar ook hier geldt ik wil iets eenvoudigs..

Wordt vervolgt....






dinsdag 24 oktober 2023

Automatisch rijden(6), Richting

De richting waarin een loc, trein gaat rijden. Lijkt eenvoudig, vooruit of achteruit. Maar een loc kan met zijn neus naar rechts staan of met zijn neus naar links. Met een baanplan in essentie een heen-en-weer nog steeds geen probleem, voor de start geef je de rijrichting en de stand van de loc op de rails aan.

Maar een baanplan met ovaal, rondgang of keerlus dan is een links/rechts aanduiding onvoldoende. Voor een rondgang kan dit nogwel, als we de richting niet links/rechts maar vanuit het midden bezien van het ovaal en dan denken als 'neus met de klok mee' of 'neus tegen de klok in'. Dit is zoals het in PenDelDCC is gedaan. 

Maar een keerlus dat gaat niet. Heeft de loc de keerlus gereden dan staat het op dezelfde rails in de zelfde rijrichting maar gekeerd op de rails en worden vervolg trajecten in de verkeerde richting gezocht.

De oplossing is gevonden in het bepalen van de trajecten, of routes. Een traject brengt de trein, loc van een beginmelder of station naar een doelmelder. Traject bestaat uit een rits railstukken aan elkaar, ieder railstuk in het traject heeft twee aansluitingen. Afhankelijk van de richting waarin dit traject wordt gereden, heeft een railstuk een aansluiting waar de trein erop komt en een aansluiting waar de trein het railstuk weer verlaat. Bepaald wordt de beginaansluiting van het hele traject en de eindeaansluiting. 

Van beide aansluitingen wordt bepaald of ze rechts of links ten opzichte van het centrum van het baanplan zitten. Zit een van de aansluitingen aan de ene kant en de andere aan de andere kant, dan wordt de stand van de loc door het rijden van dit traject niet gekeerd, zitten beide aansluitingen aan  dezelfde kant dan zal de loc na het rijden van dit traject gekeerd zijn.

Door dit mee te nemen in het bepalen van het volgende te rijden traject worden de juiste vervolgtraject gevonden in de goede rijrichting.

Mee eens, een ingewikkeld verhaal, inmiddels geïmplementeerd in WMapp en werkt perfect.

Een ander issue is het bepalen wanneer een trein het eindstation of doelmelder hoeft  bereikt.  Arduino project MelDers stuurt het bezet worden of weer vrij komen van een melder over de USB aan WMapp.

Periodiek testen we tijdens het rijden van het traject of de doel melder bezet is en is de loc op einde traject aangekomen. Maar...dat werkte niet goed, als de trein snel rijdt is de periode dat de melder actief is om meerdere redenen te kort. 

Oplossing is een lijst met melders. Als een route aan een loc wordt toegewezen dan wordt de doelmelder in deze lijst opgenomen. Wordt een melder actief, dan wordt gekeken of deze melder in de lijst voorkomt en als dat zo is dan wordt aangegeven dat deze bezet, actief is. Deze lijst wordt nu periodiek bekeken door het proces van het rijden van een loc op dit traject. ziet deze dat de melder bezet is, dus einde traject, onder nog veel meer wordt dan deze melder gewist uit deze lijst. Op deze manier onderbreekt het actief worden van de doelmelder het proces van rijden van een traject in plaats van dat af en toe wordt gekeken of de loc al in het doelstation is aangekomen. En dit werkt zonder fouten bij alle snelheden.

Wordt vervolgd....



WisselAandrijving versie V4

 Het is nu een 8 jaar geleden dat ik als 'herintreder' weer aan modelspoor ben begonnen. Voor veel modelspoorders een herkenbaar ver...