1. Cees Baarda
  2. Modelbaanautomatisering
  3. woensdag 08 april 2020
Inleiding
Ik ben al enige tijd bezig met mijn 8modulenbaan, die tot nu toe uit 4 modules bestaat. Doel is om zo veel mogelijk gebruik te maken van Arduino's voor de besturing per computer. Voor een aantal voorzieningen heb ik daarvoor al het e.e.a. bedacht, uitgezocht en uitgewerkt.
In deze draad ga ik het e.e.a. proberen op te zetten. Wat ik in deze draad beslist niet wil doen; is discussiëren over hoe iets door anderen is opgelost. Daarover verderop meer.

Om een modulaire baan te besturen middels een computer zijn er al heel veel oplossingen en onderdelen in de handel. Of als doe het zelf project beschikbaar. Waarom dan toch nog een eigen project?
Eigenlijk alleen maar omdat ik het leuk vind om dat soort besturingshardware te vertalen in schakelingen waarin een Arduino het 'zware' werk voor zijn rekening neemt. In deze 'thuis blijf'-tijd is discussiëren of praten hierover op ledenbijeenkomsten even niet mogelijk. Misschien is dat op dit forum nog wel te doen. Zijn er mensen, die mee willen denken of helpen dilemma's op te lossen?

Als er belangstelling is, dan ga ik in een volgende post e.e.a. uitgebreider toelichten.
Bijlagen
Reacties (43)
Geaccepteerd antwoord In Afwachting Moderatie
lijkt me top. ? ga dit zeker volgen
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 1
Geaccepteerd antwoord In Afwachting Moderatie
Dag Cees,

Ik wil graag meedenken of helpen en eventueel dilemma's op lossen. Ik moet wel toegeven dat ik zelf op de bijna klassieke digitale methode (CS Reloaded, S88 en wisseldecoders) werk.

Groet, Chris Burger
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 2
Geaccepteerd antwoord In Afwachting Moderatie
Hieronder het vervolg van mijn introductie:

Dit project betekent concepten en schakelingen 'verzinnen', waarbij ik uitgebreid gebruik maak van bestaande ideeën en wat je allemaal op internet kunt vinden. Als daarbij een bestaand idee direct bruikbaar is, zal ik dat ook zo kunnen gaan gebruiken. Denk hierbij aan zaken als DCC++, BNLS Boosterhub, en onze eigen LocoNet Stop&Go.
Daarna komt natuurlijk ook het programmeren van de firmware voor de Arduino's.

Ik heb voor mezelf al keuzes gemaakt:
- Besturing m.b.v. computer en Rocrail
- Communicatie via LocoNet voor terugmelding en sturing van accessoires
- Seinbesturing - heb ik nog niet lang genoeg over nagedacht
- DCC wordt het protocol om mee te rijden
- Zo veel mogelijk opdelen in eenvoudige behapbare delen

Dit betekent niet dat e.e.a. niet toepasbaar zou kunnen zijn voor andere systemen, maar daar wil ik bij gebrek aan ervaring niet aan beginnen.
Verder zal ik eerder kiezen voor een extra Arduino om een conflict in firmware te omzeilen dan op zoek te gaan naar een oplossing daarvoor. Ik denk dat het voordeel hiervan is dat door het klein houden van de verschillende oplossingen er minder snel 'bugs' geïntroduceerd worden.
Daarmee is gelijk gezegd, dat er een modulaire wijze van maken zal ontstaan.

Mijn hiervoor gemaakte keuzes betekenen ook dat ik niet in ben voor discussies over en vergelijkingen met al die andere goede en mooie oplossingen voor modelbaanbesturing. Ik wil me beperken tot het project zoals het me nu voor de geest staat. Ik zal dan ook niet op 'off topic' vragen en opmerkingen reageren.
Mochten er producten ontstaan voor zelfbouw, dan ga ik met HCC!m overleggen of dit iets voor hen is en hoe e.e.a. dan daar beschikbaar gesteld kan worden.

Welke software gebruik ik?
In het ontwerpproces:
- Arduino IDE - firmware ontwikkeling
- Processing 3 - desktop software ontwerpprogramma, indien nodig
- KiCad - print ontwerpprogramma
- OneNote - om alle gedachten en ideeën te ordenen
Voor de plaatjes:
- Affiinity Photo - foto bewerkprogramma
- Affinity Designer - vector tekenprogramma
Beide geen gratis software, maar naar mijn mening wel erg goed. Op het moment van schrijven (14-04-2020) loopt er wel een heel aantrekkelijke Corona aanbieding voor beide programma's.

Laat ik beginnen met een schematische opzet van wat me voor de geest staat (zie de afbeelding in de bijlage.
Bijlagen
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 3
Geaccepteerd antwoord In Afwachting Moderatie
Hoe ga ik met dit draadje om?
Ik denk dat een soort langdurige lezing mij het beste zal bevallen.
Iedere post wordt dan een volgende dia van de lezing.
Na iedere 'dia' met begeleidende tekst kan er dan gereageerd worden. De volgende post wordt dan dia 1.
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 4
Geaccepteerd antwoord In Afwachting Moderatie
HW_voor_8m_baan.png

Dit zou de startdia van een presentatie kunnen zijn.
Bijlagen
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 5
Geaccepteerd antwoord In Afwachting Moderatie
Tekst Dia 2:
- Modelspoor-modules maken verbindingen onderling noodzakelijk
- Ook bij een grotere baan met 'knooppunten'
- Een verbindingsmodule

Als je een module-baan maakt en deze wordt transportabel, dan ontkom je niet aan los te nemen verbindingen tussen de modules onderling. Ook als je een grotere baan maakt wil je misschien wel geen groot aantal lange leidingen naar 1 schakelpaneel bij je centrale maken. Dan maak je ook een soort modulaire opbouw van je schakelpaneel, door deze te verdelen in een aantal satellieten. In beide gevallen heb je een middel nodig om die modules of satellieten gemakkelijk te kunnen verbinden.
Vragen daarbij zijn:
Wat moet ik verbinden?
- Alleen LocoNet of
- ook DCC en
- misschien ook een vaste gelijkspanning
Hoe maak ik de verbindingen?
- LocoNet met standaard kabels of een ander en misschien steviger systeem
- DCC met DIN-stekers zoals bij de WokoBaan of anders
- Gelijkspanning ook met DIN-stekers
[code type="markup"]

Hoe denken jullie hierover?

In de volgende post stel ik de verbindingsmodule van mijn 8modulenbaan voor.
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 6
Geaccepteerd antwoord In Afwachting Moderatie
Hallo Cees en andere belangstellenden. Cees, volgens mij had ik je ooit beloofd mijn URL te sturen, en ik weet niet meer of ik dat ook heb gedaan. Bij deze:
hvdheijd.home.xs4all.nl

Ik heb op mijn modelbaan een stukje snalspoor gemaakt, en dat stuk wordt met een Arduino bestuurd. Onder 'Computersturing' licht ik een en ander toe. Ook staat daar de source code die ik gebruik.
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 7
Geaccepteerd antwoord In Afwachting Moderatie
Ik heb even gekeken. Leuk project en al aardig gevorderd. Ik hou wel van de eenvoud van je oplossing. Geen 'programmeer kronkels' om een werkend geheel te krijgen. Daardoor misschien wel meer code maar dat kan die MEGA vast wel aan.
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 8
Geaccepteerd antwoord In Afwachting Moderatie
Tekst Dia 2 vervolg
De verbindingsmodule van de 8modulenbaan ziet er zo uit.

Kabelhub.png

De 6-polige RJ12 connectoren zijn voor LocoNet:
- links in van de vorige module
- rechts uit naar de volgende module en
- in het midden een aftak naar deze module.
Bovenaan op de print zitten 2 15-polige sub-D connectoren, waarin 4 x 3 pennen parallel staan voor:
- links een male als ingang van de vorige module
- rechts een female als uitgang naar de volgende module
- in het midden zijn schroefconnectoren voorzien waar je voeding en rijspanning af kunt halen
- 2 ledjes laten zien of de spanningen aanwezig zijn.
Afhankelijk van de toepassing kan evt. iets worden weggelaten.

Is er iemand die dit anders zou doen?

De volgende bespreking wordt van een centrale voeding en verdeling van spanningen
Bijlagen
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 9
Geaccepteerd antwoord In Afwachting Moderatie
Voor de DCC-LED zou ik een Duo-LED inzetten om te kunnen zien of er een wisselend signaal binnenkomt, of twee losse LEDs anti-parallel; kan helpen bij foutzoeken
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 10
Geaccepteerd antwoord In Afwachting Moderatie
Dat ga ik in een volgende versie meenemen. Waarschijnlijk toch maar een tweede LED ernaast, want duo LED's heb ik niet.
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 11
Geaccepteerd antwoord In Afwachting Moderatie
Dia 3 -
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 12
Geaccepteerd antwoord In Afwachting Moderatie
Dia 3 - Voeding en verdelen
Deze keer een opzet om de baanmodule te voorzien van een gelijkspanning (12V) en de verdeling van spanningen / signalen. Ik denk nu aan een aantal min of meer kant en klare schakelingen, zoals downconvertor en een soort kroonsteen print.
2buckconv.jpg
Een downconvertor, zoals je veel kunt vinden op bijv. Chinese verkoopsites
printkroonsteen.jpg
Deze is bedacht door Modelbouwled

Wat moet er gebeuren?
In mijn modulaire opzet van mijn baan is onder iedere module een vorm van bezetmelding en schakel-sturing nodig. Dat gebeurt steeds met een Arduino (pro Mini) https://store.arduino.cc/arduino-pro-mini o.i.d. Die heeft een voedingsspanning nodig van tussen de 9 en 12 volt gelijkspanning. Als er voor de besturing meerdere Arduino's ingezet gaan worden dan heeft iedere Arduino dat nodig. Je kunt per Arduino-schakeling 12V maken uit de centrale 19V voeding, maar dat gaat meestal om slechts enkele milliAmperes. Dan kan het voordeliger uitpakken om dat per module centraal, met bijv. 1 downconvertor, te doen.
De baanmodule (of deel) zal dan een vorm van plaatselijke voeding krijgen. Als de baanmodule slechts een paar bezetmelders en bijv. geen wissels heeft is het niet zo zinnig om daarvoor een aparte netvoeding in te zetten. Dan is het handiger om een beetje stroom van een naburige module of de centrale voeding te gebruiken. Bij alleen bezetmelders is zelfs te overwegen de voedingsspanning uit het LocoNet te halen.
Als ik dit alles voor elkaar wil krijgen, zou er weer een printje bedacht kunnen worden. In het schema (bij de bijlagen) heb ik proberen te vangen wat er mogelijk moet zijn. Vertaald naar een printje ziet er zo uit.
print_basisvoeding.png
Een print is handiger dan losse onderdelen onderling bedraden.

Dit keer 2 vragen (ik stel ze om te leren hoe anderen met de besproken materie om zouden gaan):
Zouden jullie voor een print gaan of de onderdelen los onder je baan monteren?
Zou een schakeling als de voorgestelde print gecombineerd moeten worden met de verbindingsmodule en zou je dan ook een verdeelprint mee combineren?
Bijlagen
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 13
Geaccepteerd antwoord In Afwachting Moderatie
Erg interessant om op deze gestructureerde manier tot en modelspoorbaan te komen, zal dit ook zeker blijven volgen. Heb ook nog een paar vragen: a) waarom en waarvoor ga je "Processing" gebruiken en b) kan de gemiddelde modelspoor-enthousiast aan de al beschreven printen komen?
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 14
Geaccepteerd antwoord In Afwachting Moderatie
Ik ben nog niet zeker genoeg over de inmiddels besproken printen om ze te publiceren. Als ik daar wel aan toe ben ga ik HCC!m vragen of zij er een leden-item van willen maken. Anders zal het wel uitdraaien op beschikbaar stellen van de ontwerpfiles voor ieder lid op de HCC!m-site, die er zelf mee aan de slag wil gaan. Dit draadje zal helpen om ook een duidelijke handleiding te produceren.

groet Cees
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 15
Geaccepteerd antwoord In Afwachting Moderatie
Nog even over Processing.
Er komt nog een servo-steller, die primair bedoeld is voor omzetten van wissels met een gepolariseerd hartstuk, aan . Daarbij ga ik uitgebreid op een sketch in Processing in.
Voor nu; het programma is multi-platform en je kunt er computer-programmaatjes mee maken, die met een Arduino kunnen communiceren. Voor de verdere uitleg zul je even geduld moeten hebben.

groet Cees
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 16
Geaccepteerd antwoord In Afwachting Moderatie
Dia 4 - Een stukje geschiedenis
Ik ben nu toe aan wissels bedienen en terug melden. Om wat inzicht te geven in mijn gedachten over hoe op te lossen eerst en beetje geschiedenis.
Vanaf 1978 is het HCC!m-systeem ontstaan. De hardware was een 19" rek met 16 x 10 cm grote printen (Eurokaarten) en printen voor bij de baan, die gezamenlijk het hardware gedeelte vormden t.b.v. de besturing van een analoge modelbaan.
Wat kon je er mee:
Met blokkaarten de rijspanning regelen van delen van de baan
Met latchkeuzekaarten en latchprinten van alles besturen door steeds 1 aansluiting hoog of laag te kunnen maken
Met losse printen op de baan seinen en wissels besturen m.b.v. de signalen uit de latchprinten
De introductie van dit systeem kun je hier downloaden (alleen voor HCC-leden). Het is weliswaar een al wat ouder systeem, maar een groot deel van de gedachten erachter gaan nog steeds op. De technologische ontwikkeling heeft dit systeem allang ingehaald.
De opzet die ik nu voor mijn oplossing bedenk, gaat wel op een deel van de principes uit dit oude systeem lijken.

Terug naar de plannen
Ook ik wil een centrale interface die terugmeldt en enkelvoudige uitgangen van een 1 of een 0 voorziet.
Een microcontroller, die voor dit doel wordt ingezet, kan veel. Echter het kan ook snel te veel worden voor 1 zo’n controller. Daarom zullen de enen en nullen nog vertaald moeten worden in fysieke acties.

De volgende keer terugmelden en sturen.
Bijlagen
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 17
Geaccepteerd antwoord In Afwachting Moderatie
Dia 4a - Terugmelden en besturen
Je zou eigenlijk verwachten dat ik nu ga praten over een booster onder de modules van mijn baan, maar dat stel ik nog even uit. Want er zijn nog maar 4 modules en daarop kunnen maximaal 4 treinen hun rondjes rijden. Mijn huidige centrale kan dat makkelijk aan. Het is daarom handiger eerst te kijken hoe je (en de computer) er achter komt of een (deel van een) spoor al dan niet bezet is en hoe je de wissels gaat aansturen. Want dat wordt de basis van de hele computerbesturing; weten waar een trein is en zorgen, dat die zijn weg op de juiste manier vervolgt.

Bij de bijlagen vind je een afbeelding van de printen daarvoor, die ik in eerste instantie bedacht heb. Wat is dat nou?
Een print met een microcontroller (blauwe header = Arduino Pro Mini) en een i2c expander (een chip om van 2 Arduino-pins 16 inputs of outputs te maken). Wat doet die microcontroller:
Praten met LocoNet
Luisteren om wisselstanden te decoderen
Praten om de stand van de sensor-ingangen te laten weten
Decoderen
Wisselcommando's vertalen naar de toestand van 8 mogelijke uitgangen, t.w. aan of uit (rechtsboven onder OUT). 1 daarvan kan verbonden worden met een ompool-relais (DCC reverser)
Terugmelden
De status van de 16 ingangen van het grote IC via LocoNet richting een centrale en de computer sturen
Met 4 setjes van deze print(en) is mijn baan nu uitgerust en het geheel lijkt netjes te werken. Wat er nog bij komt in de huidige opbouw op de baan zijn servosturingen. Ik gebruik nu een aantal dubbele van mezelf (later meer hierover) en 2 afkomstig van RoSoft/KDesign, die via DCC aangestuurd worden.

Ik heb dit concept inmiddels wat aangepast daarover volgende keer meer.
Bijlagen
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 18
Geaccepteerd antwoord In Afwachting Moderatie
Hoi Cees,
Goed initiatief om je gedachten en ontwikkelingen op het forum te delen.
Even een nabrander op dia 2:
Hoe maak ik de verbindingen?
- LocoNet met standaard kabels of een ander en misschien steviger systeem?

Ik neem aan dat je bekend bent met de oplossing van Peter Giling (GCA)?
Voor de GCA 50 (loconet I/O) gebruikt hij D sub 9 connectoren i.p.v. RJ12. Zelf kabel maken met cat 5 ethernet. 7 pins aangesloten als in z’n manual beschreven. Misschien voor jou een iets andere kleuraansluiting ?
GCA50 Loconet I/O
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 19
Geaccepteerd antwoord In Afwachting Moderatie
Hoi Jarno,

Ja, dat ken ik ook.
Peter gebruikt al heel lang die degelijke verbindingen. Echter wij hebben binnen de HCC!m die 9-polige sub-D ooit gedefinieerd voor een s88-koppeling (was bij de WoKo-baan o.a. zo). Bovendien hebben we voor de Digi-Baan geopteerd voor 6-polige DIN-pluggen. Door de sub-D nu te gaan inzetten voor LocoNet (en wat extra zoals bij GCA) zouden we wel eens veel verwarring of erger verkeerde verbindingen kunnen introduceren. Daar moet nog maar eens stevig over nagedacht worden.

groet, Cees
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 20
Geaccepteerd antwoord In Afwachting Moderatie
Dia 4b - vernieuwingen
Zoals jullie wellicht weten doe ik veel van het denkwerk in samenspraak met Daan Neijenhuis en Peter de Heij. Dat is ook gebeurd in de aanloop naar het ontwerp van de schakelingen, die ik nu hier voorstel. Eén van de opmerkingen van Peter was bijvoorbeeld dat door het gebruik van poort-expanders je veel meer modulair kunt werken en daarmee voor iedere functie, zoals detecteren en de invoer of uitvoer van signalen, een aparte expander kunt gebruiken. Dat idee ga ik voor een deel volgen. Wat betekent dat? Een opdeling in modules/printen, bijv.:
- een microcontroller print (MLHP)
- een detectie print (MDTE = expander)
- een keerlus print met detectie (MDTK = expander)
- een invoer/uitvoer print (MOIE = expander)
- een servo stuur print aan te sturen uit invoer/uitvoer print (MSSP)
- en meer…
De nu gebruikte afkortingen leg ik uit bij de besprekingen van die modules.

De gedachte is per modelbaanmodule een combinatie te maken van deze prints en expanders. Er is dan 1 microcontroller/LocoNet-device (MLHP) per baanmodule. De rest wordt dan opgebouwd uit de aanvullende schakelingen.
Hierbij is er uitgegaan van de volgende veronderstellingen:
- maximaal 32 bezetmeldingen per baanmodule (= 2 x MDTE)
- maximaal 16 uitgangen voor wissels (= 1 x MOIE) voor bijv. 16 wissels via stuurprinten
- eventueel 2 keerlussen (= 1 x MDTK), nog in ontwerpstadium, ten koste van 2e MDTE
- andere expanders, die ik nog moet bedenken, voor de aansturing van seinen
De hoeveelheid te detecteren/sturen entiteiten hou ik bewust beperkt om te zorgen dat de microcontroller die de communicatie verzorgt naar LocoNet het allemaal nog aan kan.

Ook nu weer 2 vragen:
Ga ik met deze uiteenzetting niet te ver voor een aantal van jullie?
Als de microcontroller(s) aan de orde komen, willen jullie dan ook weten hoe de programma's er uit gaan zien?


In de volgende aflevering 3 van deze modules.
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 21
Geaccepteerd antwoord In Afwachting Moderatie
Dia 4c - 3 modules (om mee te beginnen)
Om te beginnen met computersturing heb je behalve een (DCC-)centrale iets nodig om te weten waar een trein is en iets om wissels te kunnen besturen. Vandaag de manier waarop ik het wil oplossen.
Je kunt m.b.v. LocoNet in 2 richtingen communiceren over je modelbaan. Naar de baan toe met alle commando's die nodig zijn om treinen te laten rijden en wissels te besturen. Vanaf de baan meldingen over de toestand op de baan (waar is een stuk rails bezet). Dit is het concept dat ik wil benutten.
Zoals in de vorige post al gezegd heb ik e.e.a. opgedeeld in een aantal modules, die iets moeten doen. Hier de beloofde uitgebreidere uitleg:
1. Loconet Hoofd Print - MLHP (de M staat voor het modulair zijn)
Deze schakeling is verbonden met het Loconet van de centrale en daarmee met de computer. Er kunnen Loconet wisselcommando's vertaald worden in het aan- en uitzetten van de uitgangen van een i2c-poortexpander (later meer). Er kunnen ook toestanden van zo'n poortexpander als bezetmeldingen teuggestuurd worden. Verder zijn er 8 eigen I/O-pennen van de Arduino naar een aparte uitgang gebracht op deze print voor toekomstige toepassingen. Zie ook de afb. in de bijlage.
2. Detectie en Terugmeld Expander - MDTE
Hier wordt gebruik gemaakt van stroommeting om van de aanwezigheid van een verbruiker een laag niveau te maken. Dat gaat een i2c poortexpander in, die door de MLHP afgevraagd wordt. In mijn opzet kunnen 2 van deze expanders worden gebruikt.
3. Output Input Expander - MOIE
De MLHP bepaalt welk niveau aan de uitgangen van een i2c expander staat. Dit gaat via een buffer IC naar de aansluitingen aan de rand. Op de schakeling is al voorzien in het gebruik van deze module als ingang. Daarover later meer.

Volgende keer; een module om de servo's voor wissels te stellen en een hartstuk te polariseren.
Bijlagen
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 22
Geaccepteerd antwoord In Afwachting Moderatie
Verrassend dat gebruik wordt gemaakt van een arduino mini-printje in plaats van een ATMEGA328 met kristal en een programmeer-header. Daar moet voor een nieuwe print een goede reden voor zijn! Uiteindelijk kun je ook gewoon van de AVR public domain compiler gebruik maken ipv de arduino IDE.
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 23
Geaccepteerd antwoord In Afwachting Moderatie
Ja, ik zou de Arduino kunnen vervangen door een zelf opgebouwde, echter per saldo is die oplossing prijziger en neemt niet minder ruimte in met gewone zelf soldeerbare DIL componenten.
In mijn eerste post heb ik ook duidelijk aangegeven, dat ik mogelijk bestaande hardware in een Arduino jasje wilde stoppen ter lering ende vermaak zal ik maar zeggen.
Daarom wil ik niet overstappen van Arduino IDE naar een andere programmeeromgeving zoals Atmel Studio of Eclipse met wat plug-ins. En ook omdat:
1- Ik geen Windows gebruik voor dat doel.
2- Voor mezelf is de 'eenvoud' van de Arduino-omgeving inclusief die printjes de reden om er nog bij te blijven.
3- Als iemand e.e.a zou willen proberen na te bouwen, dan is m.i. Arduino met IDE handiger om mee van start te gaan.
4- Het is niet mijn doel om een product te gaan maken, dat misschien in de handel komt.
Heeft iemand ambities om professioneler aan de gang te gaan, dan moet die dat vooral doen. Dat verplicht mij niet om dat ook te willen of doen.

groet Cees
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 24
Geaccepteerd antwoord In Afwachting Moderatie
Dia 5 - Servosturing voor wissels
We hebben nu wel een besturing opgebouwd. Echter als je nu een wissel omzet met de centrale, dan zal er op de uitgang van de expander (MOIE) alleen maar een corresponderende pen hoog (12V) of laag (0V) worden. Daar heb je niet zoveel aan als je wilt dat een wissel omloopt. Wat nu:
Als je het introductieverhaal van het oude HCC!m-systeem (zie Dia 4) gelezen hebt, zag je daarin dat er nog een wisselkaart nodig was. Toen ging dat om wissels met spoelen-aandrijving. Ik heb voor mijn baan gekozen de wissels te bewegen m.b.v. servo's. Daarbij hebben mijn wissels ook nog een stroomgeleidend puntstuk. Die moet ook nog omgepoold worden.
Zo'n vijf jaar geleden had ik al eens een schakeling gemaakt om 2 servo's te kunnen bedienen met drukknoppen of schakelaars. DCC decoderen zat toen ook in de plannen. Daar is toen niets van gekomen doordat bij een Arduino Uno de DCC-library en de Servo-library een interrupt conflict gaven. Ik ben er nooit aan toe gekomen om dat verder uit te zoeken. Nu ben ik intussen overgestapt van DCC naar LocoNet voor het decoderen van allerlei commando's. Echter ook hier kwam ditzelfde conflict weer boven drijven.
Met mijn keuze om zaken zo eenvoudig mogelijk te houden heb ik er dan ook voor gekozen om het basis-systeem uitsluitend te laten decoderen naar het omschakelen van één uitgangspin middels wisselcommando's recht en gebogen.
Dat heeft geresulteerd in een nieuwe schakeling (foto MSSP) bedoeld voor de sturing van 2 wissels met servo's m.b.v. Arduino Pro Mini, waarbij het hoog of laag zijn van een ingang bepalend is voor de stand van het wissel en de ompoolrelais. Dat signaal komt van de Output Input Expander. Dan is dat geregeld.
Niet helemaal. Immers die servo's werken niet allemaal gelijk en ook je wissels zijn niet perfect gelijk in de beweging van de tongen. Je zult daarom nog in staat moeten zijn om de servo-beweging te gaan beheersen:
- beide eindposities moeten ingesteld worden
- de bewegingssnelheid wil je misschien ook wel instellen
Daarvoor heb ik in Processing een programmaatje gemaakt, waarmee je dit kunt doen. De microprocessor op de MSSP kun je via USB koppelen met je computer met daarop dat Processing-programmaatje (afb. MSSP-setup). Hier uitleggen hoe dat werkt is wat veel van het goede. Dat is meer iets voor in de te maken documentatie.
Bijlagen
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 25
Geaccepteerd antwoord In Afwachting Moderatie
Het is mij inmiddels gelukt om het conflict met de DCC-library en de Servo-library te omzijlen.
Ik zal de oplossing ( gebaseerd op jou ontwerp van 5 jaar geleden) de komende dagen publiceren in een apart item.
vrgr
Gerard te Nuyl
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 26
Geaccepteerd antwoord In Afwachting Moderatie
Dia 6 - Introductie firmware

Als je een Arduino iets wilt laten doen, zul je die moeten voorzien van een programma. Dat noem ik in deze context firmware. Wat is dat nu?
Arduino is meer dan alleen stukjes hardware met een microcontroller erop. Er hoort ook een ontwikkelomgeving voor de firmware bij. Zo'n omgeving heet een IDE. Die van de Arduino is zo ontworpen, dat je met minimale kennis van programmeren toch kleine programmaatjes voor je Arduino kunt maken. Ze worden sketches genoemd, omdat het meestal oefeningetjes zijn om je als 'programmeur' bekend te maken met 1 hardware onderdeel dat iets voor je kan doen.
Bij de wat ingewikkelder onderdelen is er vaak al iemand geweest, die uitgezocht heeft hoe je zo'n onderdeel gebruikt m.b.v. een Arduino of andere microcontroller in C++. Zo'n gevorderde programmeur biedt zijn oplossing vaak aan als een library. Daarmee heeft die programmeur nieuwe en eenvoudiger commando's gemaakt, waarmee een minder begaafde programmeur zijn voordeel kan doen met de betreffende component. In de Arduino IDE zijn al een behoorlijk aantal libraries ingebouwd. Eén van de mensen, die veel bijdraagt aan het maken van nieuwe libraries is Limor "Ladyada" Fried van AdaFruit). Een ander bedrijf dat daarin veel doet is ( Sparkfun.). Er bestaat ook een lijst met librarieslibraries t.b.v. de meest uiteenlopende zaken.
Een library wordt ook wel gemaakt om een groter programmeer probleem te vereenvoudigen. Voorbeelden zijn "Servo", "Serial" enz. Voor de modelspoorwereld zijn er niet zo veel. De bekendste is wel "NmraDcc" en degene die ik nodig heb: "LocoNet". Beide te vinden op de "Model Rail Roading With Arduino" website. https://mrrwa.org/

De firmware die ik wil opzetten maakt in ieder geval gebruik van de volgende bibliotheken/libraries:
- LocoNet van het MRRwA-project, dit verzorgt toegang tot de LocoNet-communicatie
- Adafruit_MCP23017, de bibliotheek, die de sturing van de in- en uitgangen van deze poort-expander voor zijn rekening neemt
- Bounce2mcp, een kontaktdender onderdrukker specifiek voor deze poort-expander
- EEPROM, om instellingen in niet vluchtig geheugen te bewaren
- Bounce2, een kontaktdender onderdrukker. Dit is één van meerdere. Ik heb deze gekozen omdat, die geen interrupt gebruikt
- NmraDcc, voor het geval ik alsnog DCC wil gaan decoderen naast via LocoNet.

Het eerste stukje code zou er als volgt kunnen uitzien:

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* L O C O N E T T E R U G M E L D E N E N D E C O D E R E N
* H C C ! m A R D U I N O W e r k g r o e p
*
* Sketch : prog_LN_verzendenEnOntvangen_Netjes.ino
* Auteur : Cees Baarda
*
* H i s t o r i e
* Datum : Opmerkingen ; initialen
* 19-12-2019 : Eerste opzet in nette vorm ; CB
* 17-01-2020 : 2e expander toegevoegd. ; CB
* 10-04-2020 : Debounce van de ingangen toegevoegd m.b.v.
* Bounce2mcp library. Dit getest met 8modulenbaan.
* Dat lijkt goed te werken. ; CB
*
* E i n d e h e a d e r * * * * * * * * * * * * * * * * * * * * * * * * * */

//#define DEBUG // Maak deze commentaarregel aktief om te debuggen.
#define ZONDER_WISSELS // Voor versie zonder decoderen deze regel commentaar maken

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* B i b l i o t h e k e n t o e v o e g e n
*
*/
#include <EEPROM.h> // Om de terugmelder/decoder instellingen
// in niet vluchtig geheugen te bewaren.
#include <LocoNet.h> // Verzorgt de communicatie
#include <CB201917_LN_sens_en_switch.h> // Een lijst met constanten voor pennen
// van de Arduino op de prints CB201917 en
// CB201921
#include <Adafruit_MCP23017.h> // Voor de verwerking met deze portexpander
// bind ook Wire.h in
//#include <Bounce2.h> // alvast opgenomen om iets met de ingangen van de MHLP te doen
#include <Bounce2mcp.h> // bedoeld voor sensor debouncing


De volgende keer gedachten over hoe de rest van het programma zou kunnen zijn.
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 27
Geaccepteerd antwoord In Afwachting Moderatie
Dia 7 - firmware opbouw
Op de Module Loconet Hoofd Print zit een microcontroller. Ook die moet van firmware worden voorzien. Om te beginnen terugmelden met 1 of 2 MDTE.
Een manier om je gedachten om te zetten in programmacode is om te beginnen met globaal op te schrijven wat je wilt dat er gebeurt. In gewoon Nederlands, zoals bijv.:

Kijk naar de toestand van 16 (of 32) bezetmelders en bewaar dat
Vergelijk die toestanden met de vorige keer kijken
Was die veranderd meld dat dan op LocoNet

Ik maak daarna een structuurdiagram:
structuurdiagram LeesEnRapport.png

Om dit soort plaatjes te maken gebruik ik Structorizer.
Dit programma kan ook code genereren. Meestal doe ik de echte code net even anders, omdat ik een iets andere stijl gebruik.
Het resultaat is dan code zoals dit:

void detectiesTest()
{
for (byte teller = 0; teller < sensorsEnWissels.aantalSensors; teller++)
{
if ( teller < 16)
{
//sensorWaarden[teller] = !sensorGroep1.digitalRead(teller);
testGroep1[teller].update();
if (testGroep1[teller].fell()) sensorWaarden[teller] = true;
if (testGroep1[teller].rose()) sensorWaarden[teller] = false;
}
else
{
//sensorWaarden[teller] = !sensorGroep2.digitalRead(teller-16);
testGroep2[teller-16].update();
if (testGroep2[teller-16].fell()) sensorWaarden[teller] = true;
if (testGroep2[teller-16].rose()) sensorWaarden[teller] = false;

}
if (sensorWaarden[teller] != vorigeSensorWaarden[teller])
{
vorigeSensorWaarden[teller] = sensorWaarden[teller];
verstuurNaarLoconet(teller);
}
}
}
Bijlagen
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 28
Geaccepteerd antwoord In Afwachting Moderatie
Tussendoor
Voor een andere baan heb ik een combinatie gemaakt van MLHP en MDTE voor uitsluitend terugmelden van 16 of 32 bezetmelders. Met inmiddels negen van die melders klaar leek het me goed om die eens te gaan testen. Daarvoor een opstelling gemaakt en een standalone LocoNet opgezet. Dat resulteerde in een beetje chaos op mijn werktafel.
LocoLinxEnMeer.jpg
Daar moest iets aan gebeuren. Een doosje met een paar functies, die ik toch al wilde hebben moet er komen.
Doosje met front.png
Wat kan dit doosje:
1. fungeren als locobuffer = Arduino met Locolinx firmware.
2. de baanspanning aan en uitzetten = Arduino met onze Stop&Go firmware
3. eventueel 12V spanning leveren aan LocoNet voor de aangesloten apparaten, als er geen centrale is aangesloten
4. eventueel een (extra) stroombron toevoegen aan LocoNet, als er geen centrale is aangesloten
De functie 1 en 2 zijn fysiek gescheiden van de functies 3 en 4 om vergissingen hiermee tot een minimum te beperken. In de bijlage staat nog een 3d afbeelding van de print, die in het doosje gaat komen. De printen zijn besteld en hoop ik over een week of 2 in huis te hebben.
Bijlagen
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 29
Geaccepteerd antwoord In Afwachting Moderatie
Dia 8 - Loconet terugmeldingen testen

Je wilt graag vooraf weten of de manier van terugmelden, die je geprogrammeerd hebt, zijn werk goed doet.
Daarbij is vooraf een beetje uitleg over terugmelden wel nodig.

S88(-N)
In het verleden werd terugmelding hoofdzakelijk gedaan middels een zo genoemde s88-bus. Dat is een reeks modules, met discrete hardware, die achter elkaar geknoopt worden en zo een lange rij meldpunten vormt. De centrale haalt die lange rij meldingen met regelmaat één voor één naar zich toe. Te beginnen met de dichtst bij zijnde tot aan de laatste die werd aangesloten. Om storingen in lange bedrading tussen modules en centrale te voorkomen is er een oplossing bedacht die gebruik maakt van netwerkkabels i.p.v. platte bandkabels. Die vorm heet s88-N. Daar bestaat een aparte website over. Deze manier van terugmelden wordt nog steeds veel gebruikt.

Via Loconet
Een andere manier om storingen op s88-kabels te verminderen is de toepassing van een conversie-module: s88 naar LocoNet. De terugmelders waren nog steeds s88 echter dat signaal wordt omgezet naar LocoNet berichten. Die conversie-modules kun je voor 1 s88-module gebruiken, maar ook voor meerdere. Daarbij is er een maximum gesteld aan het aantal s88-modules die je mag aansluiten. Dit is een voorbeeld van zo'n module.

Mijn LocoNet terugmelder
Deze is gebaseerd op een Arduino Pro Mini en bestaat uit 2 of 3 delen: MLHP + (2)MDTE ( voor uitleg van deze namen zie post "Dia 4c" ). De microcontroller doet hiervoor al het werk:
- kijken of een aansluiting al of "bezet" is en indien veranderd sinds de vorige keer dit melden op LocoNet.
- bij opstarten altijd de status van alle aansluitingen naar de centrale sturen.
- direct na het aangaan van de baanspanning (GP_ON) de status van alle aansluitingen naar de centrale sturen.
Dat sturen van de meldingen doet de microcontroller op eigen houtje en wordt niet geïnitieerd door de centrale zoals bij s88.

Hoe werkt dat op LocoNet?
LocoNet is een netwerk net als dat voor je computer thuis. In dat netwerk gelden wat regels om te zorgen dat signalen foutloos van één plek naar een andere komen. Alle apparaten op dat netwerk moeten zich aan die regels houden. Als een apparaat iets op het netwerk wil zeggen moet die eerst kijken of dat wel kan (is er niet iemand anders aan het praten). Is de "weg" vrij dan wordt het bericht verzonden. Is de "weg" niet vrij, dan moet het apparaat zich een willekeurig tijdje terugtrekken en het opnieuw proberen.
Heb je maar één terugmelder op je LocoNet en de baan gaat aan of de rijspanning gaat aan dan kun je dat in een LocoNet-monitor voorbij zien komen en dan ziet dat er zo uit:
17:13:21.990: [B2 00 40 0D] Sensor LS 1 () is Laag.
17:13:21.998: [B2 00 60 2D] Sensor LS 2 () is Laag.
17:13:22.005: [B2 01 40 0C] Sensor LS 3 () is Laag.
17:13:22.008: [B2 01 60 2C] Sensor LS 4 () is Laag.
17:13:22.014: [B2 02 40 0F] Sensor LS 5 () is Laag.
17:13:22.018: [B2 02 60 2F] Sensor LS 6 () is Laag.
17:13:22.024: [B2 03 40 0E] Sensor LS 7 () is Laag.
17:13:22.028: [B2 03 60 2E] Sensor LS 8 () is Laag.
17:13:22.036: [B2 04 40 09] Sensor LS 9 () is Laag.
17:13:22.040: [B2 04 60 29] Sensor LS 10 () is Laag.
17:13:22.047: [B2 05 40 08] Sensor LS 11 () is Laag.
17:13:22.049: [B2 05 60 28] Sensor LS 12 () is Laag.
17:13:22.057: [B2 06 40 0B] Sensor LS 13 () is Laag.
17:13:22.062: [B2 06 60 2B] Sensor LS 14 () is Laag.
17:13:22.066: [B2 07 40 0A] Sensor LS 15 () is Laag.
17:13:22.073: [B2 07 60 2A] Sensor LS 16 () is Laag.


Heb je meer LocoNet terugmelders dan zie je in zo'n monitor een heel andere lijst dan je misschien zou verwachten:
17:15:54.350: [B2 30 40 3D] Sensor LS 97 () is Laag. 
17:15:54.356: [B2 50 40 5D] Sensor LS 161 () is Laag.
17:15:54.374: [B2 48 40 45] Sensor LS 145 () is Laag.
17:15:54.403: [B2 68 40 65] Sensor LS 209 () is Laag.
17:15:54.410: [B2 20 40 2D] Sensor LS 65 () is Laag.
17:15:54.415: [B2 58 40 55] Sensor LS 177 () is Laag.
17:15:54.422: [B2 30 60 1D] Sensor LS 98 () is Laag.
17:15:54.427: [B2 08 40 05] Sensor LS 17 () is Laag.
17:15:54.433: [B2 10 40 1D] Sensor LS 33 () is Laag.
17:15:54.439: [B2 00 40 0D] Sensor LS 1 () is Laag.
17:15:54.444: [B2 50 60 7D] Sensor LS 162 () is Laag.
17:15:54.449: [B2 38 40 35] Sensor LS 113 () is Laag.
17:15:54.454: [B2 48 60 65] Sensor LS 146 () is Laag.
17:15:54.458: [B2 68 60 45] Sensor LS 210 () is Laag.
17:15:54.462: [B2 20 60 0D] Sensor LS 66 () is Laag.
17:15:54.466: [B2 58 60 75] Sensor LS 178 () is Laag.
17:15:54.471: [B2 31 40 3C] Sensor LS 99 () is Laag.
17:15:54.475: [B2 08 60 25] Sensor LS 18 () is Laag.
17:15:54.480: [B2 10 60 3D] Sensor LS 34 () is Laag.
17:15:54.485: [B2 00 60 2D] Sensor LS 2 () is Laag.


Niet mooi op nummer maar lekker gevarieerd. Hoe komt dat nu?
Door het terugtrekken, als het netwerk bezet was of als er 2 modules gelijktijdig wilden gaan praten, kan een andere module de kans schoon zien om zijn bericht te sturen en ook doen. De volgorde van een enkele module blijft daarbij hetzelfde omdat dat zo in zijn eigen firmware staat. Het lijstje hierboven laat van de eerste 20 van 256 regels de meldingen zien als er 11 LocoNet terugmelders zijn met 16 of 32 aansluitingen. Het hoogste sensor-nummer was in deze opstelling 256.

Hoe kom ik aan die lijstjes hierboven?
Sluit alle modules aan op LocoNet en ga daarna m.b.v. een LocoNet-buffer via USB naar je computer gaat. Je moet wel zorgen dat LocoNet functioneert door ook een centrale of een voeding met stroombron aan te sluiten op datzelfde LocoNet. Daarna kun je in het programma Decoderprogrammer van JMRI een Loconet-monitor venster openen. Daarin komen dit soort meldingen dan voorbij. Je kunt instellen wat je wilt lezen. Ten behoeve van deze forumpagina heb ik de voor nu niet relevante tekst na Laag. weggelaten.

Groet, Cees.
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 30
Geaccepteerd antwoord In Afwachting Moderatie
Dia 9 - Verder testen en firmware aanpassen

De opstelling uit de vorige post bestond alleen uit LocoNet terugmelders zonder een fysieke baan. Ik mocht van HCC!m de modules van de Digi-baan gebruiken om deze terugmelders te gaan testen. Daarvoor worden ze ingebouwd in de afzonderlijke modules.

Ook dan ontkom je niet aan uitvoerig testen van het geheel. Dus steeds 1 module ombouwen en dan aan een centrale aansluiten en kijken of e.e.a. nog functioneert zoals we willen.

Wat heb ik daarmee ontdekt:
Sommige meldingen van sensors bleken te blijven 'knipperen' als er een gebruiker stil stond op de rails. Dat moest een oorzaak hebben.

Oorzaak en oplossing:
Als je een gebruiker op een DCC-gevoede baan zet gaat er een soort wisselspanning door de melder heen. Als je stroommeting nu toevallig precies op de nul-doorgang van dat DCC-signaal gedaan word, dan loopt er geen stroom door het meetcircuit en is dat stuk rails dus 'niet bezet'. Je kunt dit fenomeen opvangen door in de firmware 'contact-dender' te onderdrukken. Dat deed ik in eerste instantie met een wachttijd van slechts 5 milliseconden. Door deze wachttijd langer te maken is het mogelijk het 'knipperen' veel minder te maken. Ik ben gaan proberen tot 50 milliseconden en was tevreden met het dan behaalde resultaat.

Contact-dender onderdrukken:
Als je een mechanische schakelaar omzet dan heb je meestal geen directe overgang van aan naar uit maar door het stuiteren van de metalen delen op elkaar zal de schakelaar meerdere malen aan en uit gaan. Dat wordt contact-dender genoemd. In de tijd van discrete electronica werd dit opgelost m.b.v. een paar NAND-poorten. Tegenwoordig wordt dit vaak in software opgelost want dat scheelt onderdelen, die inmiddels niet zo ruim meer beschikbaar zijn. En meestal nemen die onderdelen ook ruimte in je schakeling in.

In mijn firmware maak ik gebruik van de Bounce2 library van Thomas O. Fredericks. In het geval van de firmware voor de MLHP gebruik ik een aangepaste versie voor de gebruikte poortexpander (Bounce2mcp).

groet Cees
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 31
Geaccepteerd antwoord In Afwachting Moderatie
Dia 10 - MLHP naar een definitieve(re) versie

Verder denkend over mijn baan-modules en de hardware die er moet komen blijken de koppelprint en een hoofdprint met micro processor op iedere baan-module te moeten komen. Daarom ben ik de MLHP ook gaan voorzien van de onderdelen van de koppelprint (zie afb. in de bijlage). Daarmee is één print van 10 x 10 cm2 ontstaan. Voor mijn toepassing zal dat goed zijn.
Er is nu voorzien in al dan niet doorlussen van rail- en voedingsspanning, via de 15 polige sub-D connector voor de volgende module, welke eventueel afzonderlijk onderbroken kunnen zijn. Er kan ook plaatselijk een voeding van 15-19 V= aangesloten worden. Een rijtje diodes, die je wel of niet plaatst, zorgen ervoor, dat er geen gekke verbindingen kunnen ontstaan richting de print en uitgangen aan de rechterkant (zie tekening CB202029_MLHP_layout.jpg).

Het wordt tijd om de firmware van 1 lange file (Arduino sketch) op te gaan delen in functionele losse stukken. Tot nu toe heb ik me alleen toegespitst op terugmelden en rudimentair wissels zetten.
Wat wil ik in aparte files doen:
- LocoNet functies (.ino)
- Detecteren en terugmelden evt. met keerlus(sen) (.ino)
- Schakelen
- Wissels (.ino)
- Seinen (.ino)
- Basisinstellingen en naamgeving onderdelen in verschillende files (.h)
Je vraagt je misschien af; kan dat dan? Ja, je kunt in de Arduino IDE meerdere files in je project onder brengen. Ik vind het voordeel hiervan, dat als je een goed werkend deelprogramma hebt je die met zo'n aparte file ook weer in een andere sketch kunt gebruiken. Bovendien blijft het hele firmware project hierdoor iets overzichtelijker. Eigenlijk ga ik met deze opzet halverwege C++ en Java zitten in de hoop dat ik van beide werelden de positieve kanten kan gebruiken. De taal blijft natuurlijk C++, want dat is de taal van de Arduino IDE.

Ik zit nog met een instel dilemma. Nu heb ik in de firmware geïmplementeerd, dat je het adres van de eerste terugmelder moet opgeven en het aantal melders. En zo zou ik het ook kunnen doen met de wissels en evt. keerlussen.
Omdat in het concept voor deze zaken uitsluitend "i2c expanders" gebruikt zullen gaan worden is het ook mogelijk het aantal melders en uitgangen uit de i2c bus te halen. Een MDTE heeft 16 ingangen en een MDTK 14 ingangen en 2 uitgangen (die alleen lokaal gebruikt worden). Die aantallen zijn ook te gebruiken. Nadeel is dat je bij bijv. terugmelders in veelvouden van 16 moet gaan denken en je niet meer kunt besluiten het aantal op een kleiner aantal dan 16 te zetten als je de resterende melders niet gebruiken gaat.

Vraag: Wat is wenselijker; het instellen van de MLHP eenvoudiger maken, door aantallen vast te leggen m.b.v. een i2c scan of de gebruiker meer vrijheid geven en daardoor 'opzadelen' met een iets ingewikkelder instelprocedure?
Hoe denken jullie hier over?

Groet Cees
Bijlagen
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 32
Geaccepteerd antwoord In Afwachting Moderatie
De printen van de vorige post zijn binnen. Dat is best wel snel; 2 weken na uploaden van de bestanden.
In dat pakketje had ik ook printen voor een pure servo-steller meegenomen. Dit dingetje kan 4 servo's besturen met sturing door omschakelaars. Omdat Gerard te Nuyl inmiddels een versie van de firmware heeft gemaakt waarmee je ook middels DCC kunt aansturen (zie zijn draadje), zit er op dit printje ook een DCC-ingang. En dat komt voor mij weer van pas bij een vraag van een vriend, die ontkoppelaars wil aansturen. Het printje van de foto gaat daar naar toe. De ontkoppelaars kun je dan met een drukknop bedienen i.p.v. omschakelaars, want dan wil je dat bij loslaten van de drukknop de ontkoppelaar weer zakt.
Groet Cees.
Bijlagen
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 33
Geaccepteerd antwoord In Afwachting Moderatie
Dia 11 - firmware, je kunt ook foutjes maken

De firmware van de MLHP heb ik inmiddels, in een aangepaste versie, ook gebruikt voor een test met de Digi-baan. Daarbij bleek dat er een stevige semantische fout in zat - het compileert wel maar functioneert niet zoals bedoeld. Er zat dus geen syntax-fout in. Het gaat om dit stukje programma


void zendAlleSensors()
{
{
for (byte teller = 0; teller < sensorsEnWissels.aantalSensors; teller++)
{
sensorWaarden[teller] = !sensorGroep1.digitalRead(teller);
verstuurNaarLoconet(teller);
}
}
}


De array sensorWaarden[] is 32 posities groot. De class sensorGroep1() slechts 16. Daardoor krijg je vanaf teller == 17 ongedefinieerde waarden terug, want dit stukje programma kijkt dan op plekken in de hardware waar geen sensordata vandaan komt.
Dit is volledig correcte code. Echter het resultaat geeft niet het gewenste effect. De verbetering:


void zendAlleSensors()
{
{
for (byte teller = 0; teller < sensorsEnWissels.aantalSensors; teller++)
{
if (teller < 16)
{
sensorWaarden[teller] = !sensorGroep1.digitalRead(teller);
}
else
{
sensorWaarden[teller] = !sensorGroep2.digitalRead(teller - 16);
}
vorigeSensorWaarden[teller] = sensorWaarden[teller];
verstuurNaarLoconet(teller);
}
}
}


Er is ook een class sensorGroep2(). Daarin worden de sensors 17 t/m 32 benaderd. Door de if..else constructie worden de 32 sensors nu wel correct verstuurd. Als je dan toch bezig bent in zo'n functie kijk je gelijk of je nog meer verbeteren kunt:
Ergens in het hele programma wordt vergeleken m.b.v. twee arrays of een sensor veranderd is, voordat een bericht naar LocoNet gaat. De hier getoonde functie wordt alleen gebruikt tijdens het opstarten van de schakeling en als er een Global Power On event - de baan wordt (opnieuw) gestart - plaats vindt. Het leek me daarom handig om de array vorigeSensorWaarden[] op deze plek opnieuw te initialiseren.

Groet Cees.
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 34
Geaccepteerd antwoord In Afwachting Moderatie
Dia 12 - MSSP's instellen

In dia 5 heb ik al een MSSP (= servosteller) voorgesteld. Gerard te Nuyl heeft met deze als basis een eigen invulling gemaakt voor 4 wissels. Deze versie is te sturen via 4 x 2 drukknoppen of via een DCC-ingang. Zie daarvoor zijn draadje. Voor een collega modelbouwer en voor die situaties waarbij relais niet nodig zijn, heb ik nog een variant gebouwd en die MSSP-Z gedoopt. Deze schakeling kan bestuurd worden door 4 schakelaars en DCC (firmware nog niet af) voor 4 servo's. Gerard heeft voor zijn versie de setup-software weten onder te brengen op een Raspberry Pi, zodat hij gewapend met zo'n kleine computer de decoders makkelijk in de baan kon gaan instellen.
Zo'n handzame bediening wil ik ook wel en ben bezig gegaan met het bedenken en maken van een setup uitbreiding voor mijn 2 versies van de MSSP. Ik heb de software-versie m.b.v. processing proberen onder te brengen op een uitbreidingsprint voor die 2. Het hardware resultaat zal er uitzien als op de afbeeldingen. De verbinding tussen de print op de baan en die in mijn hand is nu gedacht met een netwerkkabel. Ik hoop dat dat gaat werken met i2c.

Groet Cees
Bijlagen
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 35
Geaccepteerd antwoord In Afwachting Moderatie
Dia 13 - Peco code 55 wissels bedraden

Voor de HCC!m Digibaan heb ik een beschrijving gemaakt voor de ombouw van PECO Electrofrog wissels. Dat hield onder andere in dat er ergens in het wissel gezaagd moest worden. Dat is bij die baan dan ook gedaan om deze bedrijfszekerder te krijgen. Ik heb ook uitleg in het Engels gevonden op deze plek: DCC-wiki.
In de bijlage de pagina uit het documentatie boek van de Digi-baan. Op mijn baan zullen de wissels ook nog die behandeling moeten ondergaan.
PECO heeft deze manier van bedraden ook in hun reeks UNI-frog wissels ondergebracht. We zijn daarmee door de fabrikant ingehaald. Voor Peco is het misschien ook wel een besparing in de productie, want als je het hartstuk niet aansluit op je voeding heb je feitelijk een geisoleerd puntstuk (Insulfrog). Het zal me dan ook niet verbazen als in de toekomst Electrofrog en Insulfrog versies uit de handel genomen worden.
Bijlagen
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 36
Geaccepteerd antwoord In Afwachting Moderatie
Dia 14 - MSSP op herhaling

In de afgelopen tijd heb ik 2 MSSP-versies gemaakt en Gerard te Nuyl heeft een derde bedacht op bijna hetzelfde principe. Het verschil in benadering zat in:
Gerard wilde een DCC-decoder, die ook bediend kon worden met drukknoppen en één relais voor de omschakeling van een geleidend puntstuk halverwege de beweging van de servo.
Ik was uit op een aparte module te sturen uit een andere DCC decoderende module. Bovendien wilde ik het geleidende puntstuk omschakelen m.b.v. 2 relais, die pas opkomen na de beweging van de servo. Ook had ik bedacht, dat je op een bedienpaneel kunt volstaan met een omschakelaar om het wissel met de hand te bedienen.
Het is mogelijk drie versies te maken met een Arduino ProMini waarop maximaal 4 schakelingangen, 4 servo's en 4 relais onder te brengen zijn. Je houdt dan ook nog een pin over om een DCC-ingang te kunnen realiseren.
Instellen van deze nieuw bedachte versies zou nog steeds moeten kunnen m.b.v. het eerder voorgestelde Processing programma. Leuk is voor mij om een aparte schakeling te maken voor dat doel, die je kunt aansluiten op deze printjes om de servo's in te stellen.
Voor het instellen van de (start)adressen bij DCC wil ik op een al meer gebruikt systeem terugvallen; zet de module in programmeermodus en stuur het eerste te gebruiken adres naar de module.
Om de printen te kunnen maken leek het me handig een overzicht te hebben van hoe e.e.a. op te bouwen. Dat kun je doen met een pinout-tekening zoals je die veel voor Arduino's op het internet kunt vinden. In de aanloop naar het ontwerpen van nieuwe prints en een bijbehorende bibliotheek voor de Arduino heb ik zo'n pinout gemaakt als hulpmiddel om mezelf op de rails te houden. (zie pinout_uitleg_MSSPs.png in de bijlage). Ik heb de namen, die ik voor de Arduino-pinnen wil benutten, hier ook ingezet. Er ontbreken aan het ProMini-symbool wat pinnen, die er hier niet toe doen.
Verder een vaste opstelling gemaakt om gaandeweg de opbouw van een nieuwe bibliotheek te kunnen testen. (zie foto Testopstelling.jpg in de bijlage).

Waarom schakelaars i.p.v. drukknoppen?
Schakelaars vind ik praktischer dan drukknoppen ( zie ook de foto schakelpaneel_voorbeeld.jpg in de bijlage) omdat je maar 1 van de schaarse ingangen nodig hebt van je microcontroller. Bovendien kun je dan dezelfde ingang(en) gebruiken voor koppeling met een aparte DCC-decoder.

Wat valt er nu te realiseren:
• MSSP-Z: 4 knoppen, 4 servo's, geen relais. Bedoeld voor wissels met geisoleerd puntstuk of algemene toepassingen. Denk aan ontkoppelaars en bijv. deuren van loodsen.
• MSSP-4: 4 knoppen, 4 servo's, 4 relais. Voor wissels met een gepolarisleerd puntstuk, dat halverwege omgepoold wordt..
• MSSP-2: 2 knoppen, 2 servo's, 4 relais. Voor wissels met een gepolarisleerd puntstuk, dat voor de beweging stroomloos wordt en na de beweging de juiste polariteit krijgt.
De laatste versie zou ook realiseerbaar kunnen zijn met 4 druktoetsen op een bedienpaneel. Echter omdat je dan afwijkt van de 2 andere versies wil ik dat niet zelf doen. Op de MSSP-2 print zal ik wel de bedrading t.b.v. de 2 extra knoppen kunnen maken. De firmware voor zo'n versie staat bij mij niet bovenaan mijn te doen lijstje.
Nu maar weer eens aan de slag met schakelingen en bibliotheek ontwerpen.
Bijlagen
  1. meer dan een maand geleden
  2. Modelbaanautomatisering
  3. # 37
Geaccepteerd antwoord In Afwachting Moderatie
Cees, ik ben inmiddels ook begonnen met het maken van printjes em programma's voor decoders , in mijn geval meestal gebaseerd op een OC32 of PM32 interface (Dinamo) gebaseerd op een Arduino Nano, of met een dcc ingang, waarmee ik DCC commando's decodeer. Ik wil deze universeler maken, door bv ook op een LocalBus aan te kunnen sluiten.
Ik heb echter geen goed inzicht in de localbus commando's. Wel weet ik dat het feitelijk een RS485 bus is, met slechts één signaalader, een half duplex serieel protocol, 8N1, met een bittijd van 60µsec, baudrate 16.666 Kbps, waarbij collision detect softwarematig gaat, door eenvoudig terug te leven, en zodra er iets fout gaat een BREAK signaal op de bus te zetten, waarop dan wer retransmissions kunnen plaatsvinden. Softwarematig erg eenvoudig te implementeren voor een seriele poort en een beetje hardware.
Jij werkt voornaamlijk met de Arduino IDE, in mijn geval doe ik ook veel direct in assembler via AVR Studio.
Dit omdat de nieuwst chips, met UPDI programmeer interface, nog vrijwel niet ondersteund worden in deze omgeving.
Voordeel van deze chips is dat ze sneller zijn, een dat je ze eenvoudig mat een seriele interface kan programmeren, zodat er geen bootloader meer nodig is. Sommige van deze chips kan je ook in een DIP behuizing krijgen, dus ook zelf solderen is geen probleem.

Mijn verzoek aan jouw is, heb je ook documentatie hoe decoders aan te sturen (software commando's en responses), in het bijzonder seindecoders, wisseldecoders en decoders met een PWM uitgang ??? Gaarne een link .

In de bijlage een foto van een prototype DCC decoder met 16 uitgangen via L293 drivers, max 12 Volt 500 Ma per uitgang (niet allemaal tegelijk). Prototype DCC decoder.jpg
Bijlagen
Geaccepteerd antwoord In Afwachting Moderatie
Dag HannesB,
LocoNet is wat mij betreft geen RS485 bus. Het lijkt meer op ethernet. Zoals je wellicht eerder hebt gelezen probeer ik alle communicatie richting de computer via LocoNet te doen.
Mijn doel is nog steeds om een aantal schakelingen te krijgen, die op 1 module van een modulenbaan met 1 Arduino alle functies op zo'n module verzorgt. Inmiddels ben ik zo ver, dat er een MLHP is. Dat is de basis module die de verbinding vormt met de rest van de baan. Er worden wisselcommando's gedecodeerd naar 1 van 8 pennen, die aan/uit toestanden kennen. Van maximaal 32 secties kan de status teruggemeld worden. Er is ook een MDTE stroomdetectie naar een i2c expander. En verder een MSSP-2 om servo's te stellen met hartstukpolarisatie. Ik heb nog niet ervaren dat een Arduino daarvoor onder bemeten is.
Ik maak gebruik van de Arduino IDE omdat die lekker eenvoudig is en voor deze bijna 70-jarige moeilijk genoeg. Ik heb nog niet de drang gevoeld terug te gaan naar Atmel-studio, dat ik in het verleden heb gebruikt. Ik heb zelfs nog een STK500 en een AVR-dragon min of meer werkeloos in de kast liggen.
Ik gebruik bij voorkeur de LocoNet-library van mrrwa.org. Voor DCC zou ik voor de library NmraDcc van dezelfde club mensen kiezen. Beide bibliotheken kun je hoogstwaarschijnlijk ook in Atmelstudio gebruiken. Voor de uitleg van DCC kun je het beste kijken bij de NMRA en voor een LocoNet beschrijving bij Digitrax. Van beide kun je op die plekken uitgebreidere beschrijvingen vinden van de commando's en de opzet van de protocollen.

Je schakeling ziet er netjes uit. Een Nano als micro heb ik zelf ook overwogen, maar nog niet nodig gevonden. Voor mij geldt immers hoe eenvoudiger, hoe beter. Ik vraag me af of je niet beter gebruik kunt maken van ULN2803 als driver voor je uitgangen. Ik kan die H-bruggen alleen plaatsen als je de spanning aan de uitgangen ook omgekeerd nodig hebt. Ze kosten je ook wat meer dan de ULN.
groet Cees
Geaccepteerd antwoord In Afwachting Moderatie
Nadeel van een ULN2803 driver is dat het alleen een open collector uitgang, pull-down heeft. De L293 heeft een een push-pull uitgang, en kan dus ook stroom leveren, wat handig kan zijn.
In de aardleiding naar dit IC heb ik een weerstand van 0,2 Ohm gezet, een van de (analoge) ingangspinnen gebruik ik om hier de spanning over te meten, als er te veel stroom wordt getrokken wordt dat gedetecteerd, en worden de uitgangen gedisabled (in 3 state gebracht) dus effectief afgeschakeld. Hierdoor kan ook ook direct kleine (stappen) motortjes aansturen, zonder externe electronica, of servo motortjes voor wisselaansturing.
Ik heb deze uiteraard via AliExpress besteld, dan maken de koop je ze al vanaf 35 cent/stuk.

Als je nog wat schakelingen hebt waarvoor je printjes wilt ontwerpen, stuur het schema maar op, ik teken ze graag met Eagle (heb een licentie voor max 10x16 cm).
Geaccepteerd antwoord In Afwachting Moderatie
Wat betreft Wisselaansturing, ik heb een (arduino) testprinten, welke per print max 32 wissels kunnen aansturen, zowel enkel als dubbelspoel, welke een (Dinamo) pm32 nabootsen, maar welke ook via DCC kan worden aangestuurd. Op dit printje kan je via UTP 8 expanders zetten, de die elk 4 wissels (enkel of dubbelspoel) aansturen, met tevens een dubbel-om relais, waarmee je dus het hartstuk kan schakelen. Min wissels hebben dat niet nodig, maar met Dinamo kan het handig zijn om de sporen achter de wissel al naar gelang de wisselstand van spanning te voorzien.
Zou met kleine aanpassing ook kunnen worden geschikt gemaakt om via LocalNet aangestuurd te worden.
Geaccepteerd antwoord In Afwachting Moderatie
Mij gaat het niet zo zeer om aantallen. Voor mijn opzet is uitgegaan van een mogelijke baan, die modulair wordt opgebouwd. Om zo min mogelijk verbindingen tussen de bakken te moeten maken, wil ik daarom per bak iets kunnen doen. Anders gezegd max. 32 bezetmelders, max. 8 uitgangen voor diverse doeleinden en max. 32 uitgangen die hoog of laag kunnen zijn. Dat vind ik genoeg voor 1 microcontroller. Al het overige dat ik zou willen realiseren los ik daarna op met aparte microcontrollers voor de betreffende functie (evt. getriggerd door 1 van de 32 uitgangen). Daarmee maak ik e.e.a. m.i. overzichtelijker.
Printjes ontwerp ik met KiCad. Helemaal gratis en onbeperkte printgrootte. Niet zo geavanceerd als Eagle misschien, maar voor mijn doeleinden ruim toereikend. Scroll maar een aantal berichten terug. Daar vind je 3D afbeeldingen uit dat programma.
groet Cees
Geaccepteerd antwoord In Afwachting Moderatie
Dia 15 - Demo opstelling MSSP-2

Om de MSSP-schakelingen in de toekomst op een tentoonstelling/bijeenkomst te kunnen laten zien, heb ik in de afgelopen week een demo-opstelling gemaakt van een bestaande opstelling (zie foto). Deze was van een vorige versie van de schakeling, die ik nu MSSP-2 noem. De demo is nooit helemaal af geweest, want de ledjes om de stand van de relais te laten zien zaten er nog niet eens op.
In de maak is nu een demo opstelling voor de instelprint (ook een foto).
Ik maak ze natuurlijk niet alleen voor tentoonstellingen en zo, maar ook omdat ze veel netter staan op mijn werktafel/bureau en de kans op het maken van kortsluiting door metalen deeltjes wordt dan ook gelijk voorkomen.

Groet Cees
Bijlagen
  • Pagina :
  • 1


Er zijn nog geen reacties op dit bericht.
Reageer als een van de eersten op dit bericht!
Nog geen HCC-gebruikersaccount aangemaakt? Klik dan hier.

Inloggen