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





zaterdag 6 juli 2024

Schakelbord (2)

Volop bezig met de nieuwe versie van SchakelBord.  Dit was mijn tweede project, toen bedoelt voor analoge modelbanen om toch digitale componenten te kunnen gaan gebruiken. Als voorbeeld servo's die de wissels omleggen of mijn project WisselAandrijving hiervoor. SchakelBord is en was dus een DCC centrale voor, wat het DCC protocol noemt, accessories. Accessoires als wissels, lampjes en alles wat geschakeld wordt en niet op de rails rijdt.

Een zelf te maken bedienpaneel met schakelaars en controle lampjes sluit je aan op SchakelBord en deze maakt er een tweedraads DCC signaal van waarmee de afzonderlijke decoders kunnen worden geschakeld. 

De eerste versie van SchakelBord werkt uitstekend en gebruik ik zelf nog dagelijks voor mijn experimenten, maar is ingewikkeld en biedt behalve die basisfuncties weinig extra mogelijkheden.  

Versie 2 van SchakelBord wordt simpel in het gebruik en krijgt een paar unieke extra functies. 

Zoals veel van mijn projecten heb ik weer gekozen voor een standaard Arduino uno met daarop een zelf ontwikkelde shield met aansluitingen, een OLED display en alle andere benodigde hardware. 

8 drukknoppen waarmee direct met de module 8 accessoires kunnen worden geschakeld.

4 aansluitingen voor een 4x4 drukknoppen 'keypad'. Deze zijn in meerdere uitvoeringen te koop maar je kunt natuurlijk ook zelf iets hiervoor maken. In totaal dus 4x4x4=64 mogelijke schakelaars.

Het display maakt een GUI (=grafische user interface) toont de stand van geschakelde accessoires en voor het instellen van de functies.

Net als bij decoders zijn de schakelaars gegroepeerd in groepjes van 4. Instellingen van zo een groep met schakelaars gelden dus voor alle 4 de schakelaars. Ook afgekeken van de DCC decoders, het DCC adres stel je in per groep op een decoder adres. Dit maakt instellen veel eenvoudiger als bij versie 1 waarbij iedere schakelaar apart moest worden ingesteld. Drukknoppen of tuimel(wissel)schakelaars kunnen worden gebruikt.

Je kunt beide poorten in een channel van de decoder omschakelen, zoals bij een wissel, maar ook kun je de poorten van een channel apart schakelen zodat je 8 aan en uit schakelingen kan maken met een standaard decoder. Het schakelen kan dan continue of met een instelbare puls, standaard op 250ms. De geschakelde poort in een channel wordt dan na afloop van de pulsduur met een extra command weer uitgeschakeld. Belangrijk bij schakelen van electro-magnetische wisselaandrijvingen.

Het bovenstaande samen met nog wat meer functies, waar ik in handleiding straks uitgebreid over zal uitwijden, werkt momenteel al feilloos in het prototype.

Bezig momenteel met een DCC decoder. 

SchakelBord is een encoder (iets wat iets codeert), in het modelspoor jargon noemen we dit een centrale. De decoder (iets wat iets decodeert) in SchakelBord maakt het straks mogelijk om een DCC signaal aan te sluiten en dit te mengen met het signaal van SchakelBord. Een andere centrale kun je aansluiten op SchakelBord, een accessoire kun je dan schakelen vanuit deze centrale en vanuit SchakelBord. Dit geeft nieuwe mogelijkheden in combinaties van bedienpanelen, centrales en treinenprogrammaas als koploper en Itrain. Digitale modelbanen kunnen dan met twee gescheiden DCC systemen  werken, eentje voor alles wat op de rails staat en eentje voor alle vaste accessoires.

Hiervoor ben ik zelf een decoder aan het programmeren met een super smalle footprint. De, overigens iedereen aan te raden gratis perfecte decoder van de NMRA, neemt veel te veel resources van de Arduino in beslag om in combinatie met al het andere in de arduino gelijktijdig te kunnen draaien. Maar de decoder in SchakelBord hoeft alleen maar 3 bytes commands voor accessoires te kunnen decoderen en al die andere zaken die de NMRA decoder perfect kan zijn voor dit project niet nodig. 

Verder zal SchakelBord functies krijgen voor het schakelen van wisselstraten en andere vormen van sequenties van gebeurtenissen. En dan moet ik nog iets verzinnen voor controle lampjes die de stand van de accessoires op het bedienpaneel moeten verklappen. 

Wordt vervolgd...



 


woensdag 15 mei 2024

SchakelBord

Tijdje niet gepost. Werk aan WMapp staat even stil omdat ik aan andere projecten momenteel werk. Een robot schip, werknaam RoBoot waarmee straks op mijn baan een locomotief of wagon via (namaak)water kan worden vervoerd. Op en afrijden verplaatsen, een spoorbrug die open moeten kunnen, kortom een heel circus. 

Veel uitdagingen zijn nodig, een of andere draadloze besturing, denk nu aan RC. Stroomvoorziening op de boot, een diesel aggregaat zal op H0 schaal niet passen, voortstuwing-aandrijving. En natuurlijk het varen zelf het vinden van de route. 

En dat alles moet dan automatisch in de treinenloop worden opgenomen en aangestuurd door WMapp. Af en toe zal ik de voortgang vermelden. Momenteel de boot aan het tekenen, het fysieke maken, misschien in houtbouw of gewoon in een keer laten 3D printen.

Een van de eerste arduino projecten was SchakelBord. Het idee erachter was om voor niet-digitale modelspoor rijders het mogelijk te maken toch digitale componenten als servo's voor omleggen van wissels te gebruiken. Een zelf te maken bedien paneel met drukknoppen en signaal leds aansluiten op SchakelBord, en via twee draden een DCC signaal versturen die op zijn beurt  decoders aanstuurd welke dan weer de wissels of andere accessoires bediend. 

Eerste versie werkt prima en heb ik zelf haast dagelijks in gebruik, maar was hopeloos ingewikkeld. Vandaar het idee voor een tweede versie. De hardware, de shield is momenteel in de maak. Programma ga ik deze keer pas maken als de hardware klaar is. Voor dit idee zijn zo veel verbindingen nodig, Bedenk max. 64 drukknoppen. Dit is op een breadbord gewoon niet te doen. 

Wordt vervolgt....

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


 



Schakelbord (5)

 De wisselstraten werken. Een set van 4 knoppen kan worden ingesteld als wisselstraatset. De 4 knoppen activeren 4 verschillende wisselstrat...