dinsdag 15 oktober 2024

RoBoot

 Tijdje niet gepost. Druk, vakantie en zo. 

Laatste project SchakelBord is af, gaat mee naar de beurs en helemaal geworden wat ik ervan had gehoopt. Momenteel bezig met project RoBoot. Een robot boot.

Dit is een waanzinnig idee van jaren terug om een model bootje op schaal HO te maken. Die ergens een loc of wagon laad en daarmee zelfstandig naar een andere plek op de modelbaan  'vaart' en daar dit rollend materieel afleverd. Idee is om het model te tekenen in OnShape en door mijn vrienden van de JLCPCB te laten 3D printen. Tekening schiet al aardig op. 

Boot wordt een driewieler met twee vaste wielen aan de boeg en een aandrijfwiel die 360graden kan draaien bij de steven. Sturen gebeurt dus vanuit de achtersteven. Twee kleine stappenmotor doen de aandrijving en het roer. Hiervoor een behuizing getekend, best een opgave want er is daar maar 23 mm ruime tussen het 'wateroppervlak', de onderplaat van de modelbaan en het dek. 

Voeding voor het geheel een oplaadbaar 9V batterij die in het stuurhuis zit verborgen. Als microcontroller een standaard Arduino, gewoon omdat ik die heb, en ik ben redelijk handig in het programmeren van die dingen. Wel een beetje groot maar past wel in de romp van de boot. Via twee A4988 stepper drivers stuurt de arduino de stappen motoren aan. 

Een boot aan een kabel kan als het aan de kade blijft liggen, maar gaat de boot varen dan is een of andere vorm van draadloze communicatie nodig. Keuze is gevallen voor RC zoals je dat ook zit bij radiografische besturing van model boten en autootjes.

Hiervoor zijn in het verre China kleine modules te krijgen die kosten weinig, zijn klein en, zoals mijn recente testen hebben getoond, voldoen prima.

Voor het project is ook een tweede arduino project nog voor besturing van de boot en de interfacing met DCC. 

Momenteel is dit project nog heftig in de ontwerpfase. Er zijn nog vele zaken te onderzoeken, zoals hoe krijg ik een DCC signaal op de rails van de boot waar een loc op kan rijden. 

Wordt vervolgt....


zaterdag 14 september 2024

Demo plank

 Project SchakelBord is klaar. Dit is het eerste project waarbij ik eerst de hardware heb verzonnen, de print met onderdelen, en daarna pas de bijbehorende software. Weet nog dat ik toen helemaal nog niet zeker wist of alle onderdelen van het project ook inderdaad samen zouden kunnen gaan werken. Het arduino project heeft een DCC encoder die een DCC signaal maakt. Maar ook een DCC decoder die een DCC signaal uitleest. Beide zitten in dezelfde tijdschaal, gelijktijdig dus.  De NMRA decoder, was gewoon veel te groot dus zelf een decoder verzonnen op basis van een externe register interrupt, de encoder werkt met een interrupt op een van de drie timers. De encoder heeft een buffer waar tijdelijk de commands in worden opgeslagen, de interrupt van de decoder heeft hogere prioriteit dan die van de encoder. Anders gezegd als er een command wordt ontvangen dan wordt de encoder even gepauzeerd. Natuurlijk de stroom pulsen gaat gewoon door.
Uitgebreid getest op mijn automatische modelbaan aangestuurd door WisselMotor(het programma) en PenDelDCC(als USB~DCC interface) en werkt perfect.
Voor de smartleds is ook een serieel aansturing nodig. Dit werkt op een hogere tijdschaal, gaat veel sneller dan de dcc en zit de dcc niet in de weg. In de duur van 1 'dcc' puls wordt de data voor alle 64 pixels uitgezonden. Het uitlezen van de 64+11 schakelcontacten gaat natuurlijk vele malen langzamer haast in een voor ons te behappen tijdschaal. De contacten worden in sets van 8, set voor set uitgelezen, per single schakelaar ongeveer een keer per 32ms.
De logica, wat alles aanstuurt wat er moet gebeuren, staat helemaal achteraan in de rangschikking. Dit is door ons te zien en gaat zo langzaam dat de arduino dit afwerkt als er even niks anders te  doen valt.  

Op de Demoplank die ik altijd meeneem naar de Houten beurs heb ik SchakelBord ook geplaatst. Aangesloten op de ServoControl en DeKoder die beide ook op de plank zitten. Met de DCC aansluiting naar ServoControl laat ik zien hoe ServoControl met DCC aan te sturen is, en hoe de wisselstraat functie werkt van SchakelBord door alle 8 servo's tegelijk in een stand te zetten.
In DeKoder heb ik een fotoflits ingesteld met twee timers. SchakelBord triggered met een DCC command deze 'fotograaf'. 
Hiermee wordt de moment schakel functie van SchakelBord gedemonstreerd. 

Ook neem ik mee naar Houten een stuk M-Rails waar ik een IRrail sensor op heb gezet.
Een terugmelder maken op M-rail is gewoon lastig. Je hebt schakel rails maar die zijn ondertussen ook meer dan 30 jaar oud. Magnetische toepassingen met reedcontact of hallsensor is haast niet te doen omdat de rails van ijzer is. Verder kun je gaan zagen en slijpen om een stuk spoorstaaf te isoleren. 

Met een IRrail infrarood reflectie sensor is het wel heel eenvoudig om een terugmelder te maken op M-rail. 




zaterdag 31 augustus 2024

SchakelBord (7)

De tweede versie van SchakelBord is klaar. Deze is vele keren eenvoudiger dan de eerste versie van enkele jaren terug en met veel meer functies. De module is direct klaar voor gebruik. Voeding aansluiten, en DCC uitgang verbinden met de decoder is alles wat nodig is om te starten. Ideaal voor wanneer je DCC nodig hebt voor testen, decoder CV programmeren of maken van een model op de werkbank. Voor mijzelf een perfect hulpmiddel bij maken en testen van mijn arduino projecten. En een schakelpaneel met DCC is nu voor alle modelspoorders mogelijk. Digitaal aansturen van wissels en verlichting ook als je de treinen analoog wil laten rijden.

Volgende beurs neem ik ze mee. Teksten op de website voor handleiding werk ik nog wel even aan door, maar dat is altijd zo. Opmerkingen en feedback van gebruikers zijn daarbij altijd een welkome hulp. 

Voor de beurs demo zet ik SchakelBord er nog wel bij. Al wordt de demo plank dan wel nog chaotischer. Ik heb ondertussen zoveel arduino modules die ik wil laten zien, dat het geheel een ratjetoe begint te worden. Nu ja het is maar een hobby, en ik ben er altijd bij voor uitleg. 

De meest unieke functie van SchakelBord is de DCC ingang die wordt gemengd met de DCC die schakelbord zelf aanmaakt. Mengen is dan een verkeerde term. De commands ontvangen op de DCC ingang worden ingelezen in 3 bytes, daarna getest, en in de wachtrij, buffer van uit te zenden commands geplaatst samen met de in SchakelBord met de knoppen aangemaakte commands. Het uitzenden van de commands gaat in een strak regime. De in de buffer opgeslagen commands worden zo een voor een verwerkt.

Om dit op de demoplank te laten zien wordt zo een digitaal gedoe dat ik dit maar achterwege laat. Demo van de extra knoppen, wisselstraten met behulp van Servo control en de signalering met de smartleds, dat zal het wel worden.

Komt dat zien op de Houten beurs  op 5 oktober dus....


zondag 28 juli 2024

SchakelBord (6)

 Na het programmeren van de functie voor wisselstraten is het kunnen versturen van CV commands de laatste grote functie van SchakelBord. Dit werkt nu ook. 

SchakelBord heeft naast de in-bedrijf mode, waarbij de 64 drukknoppen of schakelaars, accessoires als wissels omschakelen of wisselstraten instellen, een mode voor het instellen van de werking van de knoppen in een knopset en een mode voor het instellen van meer algemene zaken. In de laatste zit dan een venster voor het creƫren en instellen van wisselstraten, een venster voor het samenstellen en versturen van CV commands, een venster voor het instellen van diverse en een venster waarmee de module kan worden terug gebracht in de begin instellingen.

Het kunnen versturen van CV commands heeft weliswaar niks van doen met de hoofdfunctie van SchakelBord, een bedienpaneel, maar maakt project SchakelBord een heel handig veelzijdig hulpmiddel voor experimenten en allerlei bouwprojecten. Benodigde DCC commands voor bediening van een (zelfbouw)project kunnen op de werkbank door SchakelBord worden gegeven.

SchakelBord doet niet aan terugmelden of uitlezen van de aangesloten decoders. De gestuurde CV commands overschrijven altijd de geadresseerde CV van de decoder. Vindt je het belangrijk om te weten hoe je de CV’s hebt aangepast, dan moet je daar een administratie voor maken. 

In het CV venster kies je loc of accessoire  decoder. Stel het adres in. Kies welke CV. Stel de de nieuwe waarde in en verstuur het command.  Decoder zal dan de CV instellen. Er is geen weg terug.

Decoders kunnen in de meeste gevallen terug worden gezet in hun begininstellingen door het versturen van een reset command: CV8 met waarde 8.

SchakelBord kent ook een kunstje voor wanneer je ook het adres van de loc niet meer weet. Met SchakelBord kun je een command als broadcast versturen. Ongeacht het adres zal een decoder deze command uitvoeren. Zo kun je het adres instellen met CV 1 of de decoder resetten met CV 8. Doe dit nooit op de baan met vele locs en accessoire decoders want die staan dan allemaal op hetzelfde adres. Gebruik een rollenbank of programmeerspoortje.

Schakelbord is dus een veelzijdige module. Te gebruiken om een bedienpaneel te maken met drukknoppen en of schakelaars. Met multikleuren leds of aparte rode en groene leds om de standen van de wissels en wisselstraten te laten zien. 

SchakelBord kun je nesten, op de DCC  ingang kun je nog een SchakelBord aansluiten, voor nogmaals een 64 drukknoppen, of een andere centrale.  De DCC signalen worden met elkaar gemengd. Twee of meerdere DCC 'stroomkringen' een voor de rails met het rollend materiaal en een aparte stroomkring voor de stationaire decoders. Werkt ook met een treinenprogramma als Koploper of Itrain. Itrain kan je wissels automatisch zetten en op je met SchakelBord zelfgemaakte paneel kan dit gelijktijdig ook. 

Met wisselstraten is onder meer een schaduwstation te besturen. Een druk op een knop zet alle wissels om een trein naar het gewenste spoor te sturen.

Met het CV venster zijn eenvoudig en snel instellingen van loc- of wisseldecoders aan te passen. 

Wordt vervolgt.....



dinsdag 23 juli 2024

Schakelbord (5)

 De wisselstraten werken. Een set van 4 knoppen kan worden ingesteld als wisselstraatset. De 4 knoppen activeren 4 verschillende wisselstraten. Iedere wisselstraat heeft nu 8 acties , een actie zet als voorbeeld een wissel in een bepaalde stand. De indicatie, de smartled voor deze knop, brand geel als de knop een wisselstraat bedient en wordt paars als de wisselstraat wordt geactiveerd. Daar is aan te zien dat de wisselstraat is gezet en dat de trein erover kan gaan. Zet je nu een van de wissels apart om, dan wordt de indicatie voor de wisselstraat weer geel.

Diverse zaken moeten nog worden gefinetuned maar dat komt later, eerst alle hoofdzaken. 

Volgende hoofdstuk is de CV aansturen.

Het plan is om SchakelBord ook als een enorm basic CV programmer te kunnen inzetten. Dan zonder alle fancie opties die je op centrales tegenkomt, geen handshakes of terugmelding voor het uitlezen van decoders. Alleen basis. Instellen: is het een multifunctie decoder, zoals in een loc?  Of een accessoire decoder. Dan het adres, dan het CV nummer en de nieuwe waarde en een knop voor verzenden. SchakelBord stelt dan een DCC command samen en stuurt dat uit. Spijkerhard instellen van een CV. Top voor een ieder die precies weet wat hij wil. Aan te raden voor starters je eerst even in te lezen in de materie voordat je gaat experimenteren.

Wordt vervolgt...



woensdag 17 juli 2024

Schakelbord (4)

Signalering met gebruik van de smartleds werkt perfect. Volgende stap zijn de wisselstraten. 

Gewoon zet een knopactie 1 wissel of andere accessoire.  Met een wisselstraat zet je meerdere wissels tegelijk. Wisselstraten kun je gebruiken bij stations om alle wissels te zetten nodig om een trein van een spoor naar een specifiek perron te laten gaan. Voor een schaduwstation kunnen met een druk op een knop alle wissels worden gezet om een trein naar een vrij opstelspoor te sturen. Zeker zijn er nog veel meer toepassingen te bedenken.

Ook instellen van de wisselstraten gaat in een set van 4 knoppen. SchakelBord heeft aansluitingen voor 64 knoppen, schakelaars, opgedeeld in 16 sets van 4 knoppen. Een (knoppen)set schakelt als voorbeeld de 4 kanalen, channels van een decoder. Maar door een wisselstraat op een set in te stellen schakelen de 4 knoppen in de set dan 4 wisselstraten. Iedere wisselstraat krijgt een aantal acties. Een actie is het zetten van een wissel of andere accessoire in een vooraf ingestelde stand.

Hoeveel acties per wisselstraat en hoeveel wisselstraatsets SchakelBord straks heeft weet ik nog niet omdat dat afhangt hoeveel geheugen er overblijft.

Het ontwerp moet rekening houden met meerdere zaken.

Timing. Stel een wisselstraat heeft 8 acties die alle 8 een electro-magnetische wissel aansturen. De acties moeten dan 1 voor 1 met minimaal de pulsduur van 1 wissel ertussen worden gezet. 250ms is een bekende  waarde voor zo een puls. Doen we dit niet dan worden de wissels alle 8 tegelijk bekrachtigd en dat gaat niet. De voeding van de wissels kan dit niet aan. Dus een kwart seconde tussen de acties. Keer aantal acties duurt dan het omleggen van de hele wisselstraat 2 seconden. 

Een accessoire heeft een DCC adres en kan continue aangezet worden of met een puls. Verder kan het DCC command omgedraaid worden voor wanneer de aanduiding niet overeenkomt met de werkelijke stand. Immers bij een wissel aangestuurd door een servo maakt het uit aan welke kant van de wissel de servo zit. 

Meerdere gegevens zijn al ingesteld voor iedere accessoire bij de gewone knop bediening, en worden door de wisselstraten ook gebruikt.  Andere al ingestelde waardes bij de accoires zoals de knopfunctie en continue of moment schakeling, worden genegeerd. Dit kan ongewenste effecten hebben. 

Een knop ingesteld op een wisselstraat krijg in de smartled een eigen kleur, we hebben 16.581.375 kleuren dus keuze genoeg. Is de wisselstraat gezet, dat geeft dan weer een andere kleur. Maar wanneer een wissel opgenomen in een straat met zijn eigen knop in een andere stand wordt gezet, dan moet de indicatie van de knop  van de wisselstraat weer terug naar uit.

Best nog wel een uitdaging.

Wordt vervolgt......


woensdag 10 juli 2024

Schakelbord (3)

 In de vorige post ging het over een DCCdecoder opgenomen in het project. Dat werkt nu. Alle 3 bytes DCC commands ontvangen door deze decoder van een andere centrale worden samengevoegd met de commands die in SchakelBord zelf worden opgewekt door het schakelen van de 64 aan te sluiten  accessoires. 

Deze 3 bytes commands zijn alle 2048 mogelijke aansturingen voor accessoires. Maar ook de aansturing voor 127 verschillende locs van rijopdrachten en het schakelen van de eerste 12 functies in de loc. Anders gezegd, de commands bedoeld voor locs met een 7 bits adres worden ook doorgeven.

Dit geeft mogelijkheden waar ik bij start van het project niet eens aan had gedacht, SchakelBord is ook als een booster te gebruiken. Met die verstande dat het alleen werkt met kort adres (7bits) locs. In uitgebreidere centrales als Ecos of CS3 kunnen ook locs met lang  adres (15bits) decoders worden gebruikt, dus 9999 verschillende adressen. Zoveel locs staan natuurlijk zelden samen op 1 modelbaan.

MFX en vergelijkbare terug- en aanmeld systemen worden door SchakelBord niet ondersteund. Ook CV boodschappen ontvangen in de decoder worden niet doorgestuurd naar de DCC uitgang. Wel zijn er plannen als er nog wat geheugen over is om SchakelBord ook vergaande functies te geven als CV programmer.

Punt van aandacht is nog wel een dubbele aansturing van een accessoire door SchakelBord en door een extern aangesloten centrale. De extern aangesloten centrale kan nooit weten wanneer SchakelBord deze accessoire omzet, dus de externe centrale toont dan de verkeerde stand van dit accessoire. Andersom zou in theorie, door het door de externe centrale gestuurde signaal te decoderen, SchakelBord dit wel kunnen weten. Maar SchakelBord heeft meerdere methoden om de aangesloten schakelaars te interpreteren. En dat kan de centrale ook niet weten. Beste om er gewoon niks mee te doen. Als gebruiker moet je je gewoon realiseren, dat als je een accessoire vanuit een externe centrale omzet, de aanduiding op SchakelBord niet meer klopt en andersom.

Volgende hoofstuk in het project is de signalering. Natuurlijk kun je voor de signalering aparte decoders op het DCC signaal zetten. 

Maar SchakelBord krijgt ook een aansluiting voor smartleds van het type WS2811. Deze chips zijn er in meerdere uitvoeringen. Losse chips voor drie leds rood, groen en blauw. Of meerdere versies 3-kleuren leds waar de chip ook bij is ingebouwd. Deze smartleds zijn dan weer los te verkrijgen of als ledstrip of als slinger van leds, vergelijkbaar met een kerstboomverlichting. Alle 64 mogelijk accessoires krijgen een pixel.(zo worden die setjes van drie rood, groen en blauw in dat wereldje genoemd) Het kleurenschema moet ik nog bedenken.

Nu volgt een technisch verhaal: Voor Arduino zijn er meerdere libraries te vinden om die smartleds aan te sturen. Bekendste is FastLed, een aanrader voor een ieder die met die World Semi chips (WS=worldsemi) wil experimenteren. Aardige lui trouwens van World Semi voor mijn eerste project 'LicHt' waar ik deze chips in gebruik, hebben ze mij  veel ondersteuning en uitleg gegeven hoe dit te doen, maar dit terzijde.

Die libraries als bv. FastLed hebben allen 1 probleem. Voor iedere pixel dient er een geheugen plekje te zijn voor drie bytes die de waarde van lichtsterkte voor de drie leds in een pixel bevat. Voor 64 pixels zijn dat dus 192 bytes. Zoveel ruimte is er dus niet meer in het geheugen van de Arduino over met SchakelBord. Nodig is dus dat de lichtsterkte per led in de pixel berekend moet worden uit de gegevens die al bekend zijn, zoals de stand van het accessoire. Maar dat kan Fastled niet. Een zelf te maken smartled encoder is dus nodig. 

De datasheet van de WS2811 leert dat er een pulstrein nodig is van ongeveer een 800khz.  Een serieel gestuurt bit  is opgedeeld in een aan-tijd direct gevolgd door een uit-tijd. De totale tijdsduur van een bit is ongeveer constant. Is het deel aan-tijd 2x langer als het deel uit-tijd dan interpreteert de WS2811 dit als een 1. Is het deel uit-tijd twee keer het deel aan-tijd dan is het een nul. Een pixel krijgt 24bits. Een pixel leest 24 bits en stuurt de rest van het signaal door naar de volgende pixel. Zonder die eerste 24bits dus.

Na experimenten is gebleken dat die chips het niet zo nauw nemen met die pulsduur. Wat belangrijk is, is die verdeling van die twee helften in tijdsduur die het onderscheid maken tussen een 1 of een 0.

Praktisch heb ik het opgelost door voor een 0 bit een minimale pulsduur mogelijk met een arduino te maken. Dat is twee keer een PINB |=(1<<0). Pin 8 van de arduino heb ik gebruikt voor de smartleds. En direct daarachter de port hard naar laag met PORTB &=~(1<<0). Hierna moet een volgend bit worden bepaald, uitvoering van die logica duurt lang genoeg om dit als een 0 bit te kunnen gebruiken.

Voor een 1 bit ligt het lastiger. Na het zetten van de pin moet deze minstens 2x langer hoog blijven als het tweede laag deel inclusief weer de tijd voor het bepalen van het volgend bit. Dit gedaan met een delay bestaande uit een aantal direct door de compiler in te voegen assembler nop instructies.

En zo waar dit werkt nu perfect.....

Maar nu  nog implementeren in de rest van het SchakelBord project......

Wordt vervolgt...





RoBoot

 Tijdje niet gepost. Druk, vakantie en zo.  Laatste project SchakelBord is af, gaat mee naar de beurs en helemaal geworden wat ik ervan had ...