Trainduino: Rocrail & PIPO X9

Gestart door minitreintje, 20 augustus 2014, 22:01:44 PM

minitreintje

Misschien dat er al sommige dit topic in de gaten houden op het 3Railforum.nl maar ik wou dit niet onthouden voor de anderen :)
Ik ga niet het hele topic copy-pasten maar een samenvatting ervan geven zodat ik er later verder in kan posten


Trainduino

Dit project is OPENSOURCE! Alle sketches & EAGLE printontwerpen worden geplaatst op Github.
GITHUB LINK


De 3D ontwerpen kan je vinden op Thingiverse:
THINGIVERSE LINK

INDEX

1. Wat is dat? + S88Wireless

De naam Trainduino is simpelweg een samenstelling van 'Train' en 'Arduino'. Dit project gaat immers over treinen in combinatie met Arduino  ;)

1.1 RandomLEDController

Het eerste project in deze reeks. Deze print moet de straatverlichting en de verlichting de huizen regelen.
Doormiddel van een timer wordt er bijgehouden in welk 'deel' van de dag de Arduino sketch zich bevindt, een dag (24 uur) is in de sketch slechts 24 minuten natuurlijk.

Er zijn 4 mogelijke toestanden:

  • Ochtend: 9 van de 14 uitgangen maximaal AAN (mensen staan op)
  • Dag: 4 van de 14 uitgangen maximaal AAN (mensen zijn op het werk)
  • Avond: 11 van de 14 uitgangen maximaal AAN (mensen komen thuis)
  • Nacht: 2 van de 14 uitgangen maximaal AAN (mensen slapen)
De toestanden gaan volledig automatisch in elkaar over of door middel van een DCC adres kan de gewenste stand worden geselecteerd.

1.2 RGBLEDController

Een RGB ledstrip die wordt aangestuurd samen met een witte ledstrip. Zo kan een bijna perfecte dag/nacht schakeling worden bekomen.
De aansturing werkt volgens het principe van de RandomLEDController, dus met een cyclus van 24 minuten. Hierdoor loopt deze synchroon met de RandomLEDController.
Ook hier kan de stand worden gekozen met een DCC adres, deze is natuurlijk dezelfde als die van de RandomLEDController.

1.3 DCCSwitchDecoder

De DCCSwitchDecoder is een DCC decoder met een extra toets, speciaal voor diegene die graag rijwegen willen gebruiken maar met meer instelmogelijkheden als de commerciële centrales.
De decoder kan 1 NMBS signaal (4 LED's), 2 wissels en één afremmodule aansturen. Deze decoder was vroeger nuttig voor mij maar nu niet meer sinds ik wens over te stappen op PC sturing.

1.4 S88Wireless

Het nieuwste project: een draadloos S88 terugmeldsysteem, door middel van 2.4Ghz radio's worden de terugmeldingen van elke 'slave' doorgestuurd naar een 'base' die de data uitschrijft naar het command station. Dankzij het poll principe kan geen enkele slave 'praten' zolang de 'base' dat niet wil. De base kan tot 32 S88 modules simuleren maar ik heb deze beperkt tot 10 omdat anders de s88 terugmeldingen niet snel genoeg worden geüpdatet, de oorzaak is de snelheid waarmee de data draadloos wordt verstuurd.

De voordelen van dit systeem zijn natuurlijk dat je geen kabels meer moet trekken langs je baan en je geen storingen op deze kabels kan krijgen.
De draadloze radio's gebruiken CRC en ACK om de data te valideren hierdoor is de kans dat de data corrupt is veel kleiner.

Het nadeel is dat de draadloze oplossing niet zo snel is als de bedrade oplossing maar toch nog voldoende om te gebruiken.



De slave die 10m verder in de keuken ligt: een Arduino MEGA met een breakout board voor de RF24L01+ radio omdat deze op 3.3V werkt en de Arduino MEGA op 5V.



De base: een Arduino UNO ook met zo'n breakout board en wat jumpers om de Arduino te verbinden met de S88 bus van het CS1R.
De LEDjes geven de status aan van de S88 en de 2.4 Ghz connectie.




Zo, het resultaat. Ik heb slechts 1 slave in werking en die werkt met de 10 verschillende slave adressen.
In de 'echte' versie bedient elke slave slechts 1 slave adres natuurlijk :D


OPGELET: De S88 Wireless module moet achteraan in de S88 bus aangesloten worden want hij leest geen data in van andere S88 units.

groeten Dylan

P.S.: Ik bedank Patrick (Sattrickske) voor zijn hulp voor de S88 Wireless sketch! Zonder zijn hulp was het niet gelukt :)
Märklin C-rail modulebaan met Arduino

dani

interessant project, Dylan...
Bedankt om het hier ook te delen.   en benieuwd hoe dit verder gaat evolueren, het ziet er veelbelovend uit.
De kruik is te water gegaan...
De kruik is niet meer.

philippe_007

Inderdaad interessant,
ben reeds wat bezig met de arduino, maar waarom het warm water opnieuw uitvinden als het als bestata he....

Frank_N

Interessant! Deze ga ik ook volgen ;)
Dank voor het delen, Dylan!
Groet van Frank

minitreintje

#4
@Iedereen

Mercikes :)
Ik heb nu nog wat de settings geoptimaliseerd van de RF24 radio waardoor alles nog wat stabieler is maar ook sneller.
De 2de slave heb ik nu ook meedraaien in het systeem en dat gaat goed :)
Aan de slaves heb ik dan maar 2 Arduino's gehangen die wat pinnen van HIGH naar LOW brengen.
Hierdoor denkt de slave dat er een melding is (locomotief massacontact) en kan ik testen of het werkt wanneer er actief meldingen worden gemaakt.


groeten Dylan
Märklin C-rail modulebaan met Arduino

dani

da's zo typisch....    Om willekeurig ingangen te simuleren op een arduino , daarvoor gebruik je toch.....   een tweede arduino.
Geweldig, Dylan !
De kruik is te water gegaan...
De kruik is niet meer.

minitreintje

Ik was het beu telkens die jumper wires in te pluggen en uit te pluggen en dat bij 2 slaves :O

groeten Dylan
Märklin C-rail modulebaan met Arduino

Sattrickske

Citaat van: minitreintje op 20 augustus 2014, 22:01:44 PM
P.S.: Ik bedank Patrick (Sattrickske) voor zijn hulp voor de S88 Wireless sketch! Zonder zijn hulp was het niet gelukt :)
't Was graag gedaan!
PS. Je kan meer dan 10 aan hoor.  Gewoon asynchroon werken.  De slaves uitlezen en in een eerste array stoppen.  Dan telkens bij het reset signaal van de s88 (of de PS/load moet ook lukken denk ik), de hele array transfereren/copiëren naar een 2e array.  Verzenden doe je enkel vanuit de 2e array, en de eerste gebruik je om de updates van je slaves binnen te halen.
Tussen de reset (of PS/load) en de eerste klokpuls zit denk ik net genoeg tijd om een ganse array te copiëren.  Ik zou in C daar gewoon een memcpy commando voor gebruiken.

minitreintje

Hoe levert dat een voordeel op dat asynchroon?

Groeten Dylan
Märklin C-rail modulebaan met Arduino

Sattrickske

Je werkt met 2 arrays.  Eentje die exclusief dient om te verzenden en eentje die dient om de data binnen te halen van de draadloze modules.  De 2 arrays werken op deze manier onafhankelijk en de ene kan de andere niet beïnvloeden.
Enkel wanneer de s88 het toelaat, copieer je de data van de ene array naar de andere (als de s88 dus niets verzendt).  Enkel vlak na het copiëren zijn beide arrays aan mekaar gelijk, maar meestal zijn ze verschillend (asynchroon dus).

minitreintje

Oops, ik had je reactie niet gezien.
Ik zal dat eens proberen.

groeten Dylan
Märklin C-rail modulebaan met Arduino

minitreintje

#11
2. S88Wireless deel 2

Vorige keer had ik al het grootste deel van de S88Wireless uit de doeken gedaan maar sinds vandaag is het ook klaar voor gebruik!
De base en de slaves zijn nu op PCB's gemonteerd en met DIP schakelaars kunnen tot 63 modules ingeschakeld worden. Dus de volledige S88 bus kan worden gesimuleerd op slechts 1 base.

2.1 Adressering

De adressering gebeurt via een binair getal waarvan de eerste 6 bits ingesteld kunnen worden via de DIP schakelaar. Dit is hetzelfde principe als het zogenaamde 'muizenklavier' bij decoders van Märklin en andere merken. Bij het opstarten wordt het adres uitgelezen bij de slave via 3 analoge ingangen.

Via een weerstandsnetwerk krijg je dus andere spanningen op de analoge pin als je schakelaar 1 aanzet t.o.v schakelaar 2 of nog een andere waarde als je beide aanzet. Hiermee heb ik mijn I/O tekort opgelost bij de slave. De base had nog genoeg I/O's over dus daarom heb ik daar gewoon gewerkt met een digitalRead() statement, de DIP schakelaars van de base bepalen hoeveel slaves de base moet pollen. Eén probleem is er wel dat de weerstandswaarde verschilt van weerstand tot weerstand een beetje en daarom moet je soms de waarde van de schakelaars hercalibreren per PCB. Gelukkig is dat slecht éénmalig...

2.2 Veiligheid & betrouwbaarheid van de S88 terugmeldingen

Omdat de terugmeldingen draadloos worden verstuurd moet er een extra veiligheid worden ingebouwd om te voorkomen dat er slaves niet meer reageren om de base of foutieve data zenden, enz...
Zo zit er al standaard CRC en ACK in van de NRF24L01+ radio module om de data te checken maar dat is onvoldoende! Een slave die niet meer reageert zal door de NRF24L01+ aangeduid worden maar wat kan de base dan doen om de veiligheid van de treinen te garanderen? Als er een korte storing is zal de base eerst nog een aantal pogingen doen om de communicatie terug op gang te krijgen, lukt dat dan gaat de ERROR_LED terug uit. Lukt dat niet zal de base de centrale afschakelen via de DCC-booster kortsluitdetectie ingang van de centrale, zodra er een probleem is schakelt een transistor naar de GND en de centrale gaat over in kortsluitmodus.
Ik heb op de PCB rekening gehouden dat mensen ook een HSI-S88 gebruiken hierdoor heb ik een extra GND ingang geplaatst voor de kortsluitdetectie want de GND van de HSI-S88 en de centrale zijn dan normaal gescheiden. Gebruik je een CS1R/Ecos/... met zijn eigen terugmeldbus zoals ik dan is de GND normaal doorverbonden. Dan is die extra GND aansluiting natuurlijk overbodig.

De terugmelddata zelf is ook voorzien van een extra veiligheidslaag namelijk de anti-spookmeldingen beveiliging. Een melder wordt pas geactiveerd als hij binnen de leescyclus X keer positief is gelezen. Dus een valse melding wordt zo gefilterd uit de terugmelddata.

2.3 Testperiode

Vanaf vandaag zal deze versie een testperiode ondergaan van enkele weken om de stabiliteit van het systeem te testen. Dit in een omgeving waarin veel 2.4Ghz communicatie aanwezig is.

2.4 Foto's




De base PCB, hij haalt zijn voeding van de S88 bus van de centrale. Dat is simpel en cheap :P
De S88 pins zijn volgens de S88 specificatie dus je kan je eigen S88 kabel inpluggen zonder probleem.
De NRF24L01+ pins zijn niet in de juiste volgorde omdat ik anders een dubbelzijdige PCB moet hebben.
In dit geval is dat geen probleem aangezien je met jumpwires (Dupont kabels) werkt die je kan verplaatsen  ;)



De connecties van de base PCB naar de centrale CS1R.
Van links naar rechts: de DCC kortsluitbus, de S88 bus.



De slave PCB, zo moet ik er nog een aantal solderen...
De voeding wordt geleverd door een 7805 en een 1000uF buffer condensator, een ideale ingangspanning is 12V DC.
Ook hier zijn de NRF24L01+ pins niet in de juiste volgorde door dezelfde rede.

Groeten Dylan

P.S.: Voor mensen die zich afvragen hoe ik een layout op een zelfgemaakte PCB krijg hier is het antwoord: een simpele papieren plakker waar ik de layout vanuit EAGLE PCB op print.
Dan de stikker van zijn vel halen en omdraaien, de PCB op de board afmetingen leggen van de EAGLE en doorprikken met een passer.
Bij de base PCB ben ik de bottom layer vergeten uit te zetten bij het printen van de layout hierdoor is deze een wat rommeliger dan bij de slave PCB.
Märklin C-rail modulebaan met Arduino

Sattrickske

Proper gewerkt, dat zie ik graag!
Wel uitkijken met de afstanden als je alle modules gaat voeden vanaf de basisprint.  5V op de basis zal geen 5V meer zijn op de slave wanneer de afstand groter wordt.  Voor een normale baanafmeting zal je hier echter nooit een probleem mee hebben.  Ik laat altijd de hoogste spanning (12V in jouw geval) naar alle slaves gaan en converteer naar 5V of 3.3V op de print zelf.

Wat betreft de volgorde van de pinnetjes, die lap ik zelf ook dikwijls aan m'n laars om dezelfde reden.

minitreintje

Mercikes!

Die 5V van de centrale is voor de basis alleen anders het niet 'draadloos' meer :p
Een 7805 zorgt voor de voeding van slaves welke zijn voeding krijgt van de kring die ook de verlichting op de baan verzorgt (12V DC).
Dus ik moet enkel 4 draden leggen tussen mijn modules: Baanspanning (B en O) en de 12V DC kring (+ en -).

groeten Dylan
Märklin C-rail modulebaan met Arduino

PietB

Netjes werk Dylan!!!
Citaat van: minitreintje op 16 september 2014, 18:47:07 PM
P.S.: Voor mensen die zich afvragen hoe ik een layout op een zelfgemaakte PCB krijg hier is het antwoord: een simpele papieren plakker waar ik de layout vanuit EAGLE PCB op print.
Dan de stikker van zijn vel halen en omdraaien, de PCB op de board afmetingen leggen van de EAGLE en doorprikken met een passer.
Bij de base PCB ben ik de bottom layer vergeten uit te zetten bij het printen van de layout hierdoor is deze een wat rommeliger dan bij de slave PCB.
Dat moet je nog eens wat uitgebreider uitleggen.

grt Piet.