BeneluxSpoor.net forum

Vraag en antwoord => Digitaal => Topic gestart door: DirkH op 28 maart 2019, 10:25:08

Titel: XpressNet interface met touch panel (Arduino projectje)
Bericht door: DirkH op 28 maart 2019, 10:25:08
Waarom dit projectje ?
Als ik eens met de baan wil rijden moet ik ofwel de PC opzetten en met een USB verlengkabel die aansluiten aan de baan, ofwel alles bedienen via de multimaus. Ik heb steeds het probleem om de verschillende wissel nummers te onthouden ofwel vindt ik het papiertje met de nummers niet, kortom rijden met enkel de multimaus is ook niet ideaal.

Nu had ik een 2 in 1 laptopje met touchscreen aangekocht voor de modelbaan maar die ondertussen aangeslagen door mijn lieftallige vriendin om die te gebruiken als tablet. Om de goede vrede te bewaren maak ik maar geen bezwaren en zwijg ik maar stilletjes en knoei maar verder met de multimaus en de papiertjes of met de desktop PC.

Zo kwam ik op het idee om een klein bedieningspaneel te maken om de wissels en accessoires te bedienen. In deze moderne tijden is een paneeltje met schakelaars ook eigenlijk een beetje achterhaald. Dus op zoek naar eventueel een oplossing met een touchscreen.
Na even zoeken had ik op het internet al een arduino-library gevonden om een Xpressnet interface te maken met een arduino en een RS485 interface. 
De library vond ik nogal ingewikkeld en te uitgebreid voor mijn doel dus ik heb zelf een library gemaakt op basis van de originele. (Ook nog enkele kleine aanpassingen gedaan voor de werking van mijn projectje).

Even enkele van mijn eisen opsommen :

•   Ik wil met mijn paneeltje kunnen rondlopen zoals met de multimaus en dat paneeltje op verschillende plaatsen kunnen inpluggen op de XpressNet aansluitingen.
•   Bij het opstarten moet ik de mogelijkheid hebben om de status van de wissels uit te lezen of deze te initialiseren op een ingestelde toestand.
•   Het moet gemakkelijk aan te passen zijn om nieuwe functies toe te voegen zonder teveel programmatie.
•   Het moet mogelijk zijn om gemakkelijk van baan te wisselen (Nieuwe configuratie in het toestel laden). Opladen gebeurt door even een SD kaartje in te steken , spanning op, wachten tot de configuratie is geladen , spanning eraf, SD eruit een terug opzetten.
•   De baan moet opgedeeld kunnen worden in verschillende schermen zodat de display niet te overladen wordt.
•   De display moet altijd zo correct mogelijk de toestand van de baan blijven weergeven, ook als er tussendoor commando’s met de multimaus of PC gestuurd worden.
•   Bij power onderbreking van het DCC signaal mogen er geen commando’s naar de XpressNet interface gestuurd worden tenzij het power on commando om te vermijden dat de display niet meer de correcte toestand van de baan weergeeft.

Na een beetje zoeken heb ik een Nextion 3.5” touchscreen aangeschaft omdat die het mogelijk maakt om de schermen gemakkelijk grafisch te ontwerpen op de PC en een deel van de logica reeds door de Nextion display zelf kan afgehandeld worden. Zo kan de arduino bijna volledig gebruikt worden voor het behandelen van de Xpressnet commando’s en enkel beperkt dient in te grijpen bij commando’s ontvangen van de Nextion of van de XpressNet interface.

(Volgende keer wel een groter schermpje aanschaffen, min een 4.5” of groter)

Het gemakkelijkste leek mij om een arduino mega te gebruiken omdat die 3 seriële poorten heeft.
Poort 0 gebruik ik voor het debuggen en uploaden van het arduino programma.
Poort 1 is voorzien voor de Xpressnet interface
Poort 2 is voorzien voor de Nextion display interface.

Om de voeding van Xpressnet interface niet teveel te belasten (ik weet niet hoeveel stroom die kan leveren, dat moet ik nog onderzoeken) heb ik besloten om aparte connecties te voorzien voor het paneeltje met een eigen 5V voeding voor de Arduino en de Nextion display. (Later eventueel via een dc-dc convertor uit de voeding van de XpressNet interface.
Voor de RS485 interface gebruik ik een standaard printje van bij ali. Buiten enkele draden voor de Xpressnet interface en wat verbindingen kan alles gemonteerd worden met de standaard Dupon draden. Na testen is gebleken dat is een kleine aanpassing aan de standaard RS485 module moest doen aangezien deze bij het opstarten in de Write toestand kwam en daardoor problemen op de XpressNet interface maakte en de module zelfs in enkele gevallen sneuvelde.

Links de originele module , rechts de aangepaste versie, weerstandje R3 (10k) losgemaakt en verschoven naar onder en dan de losse zijde verbonden met de GND aan C1 via een stukje lakdraad. Hierdoor komt de module default in read stand.
(https://farm8.staticflickr.com/7915/32536807837_1d9f160d79_c.jpg)

Voor de sturing van de Nextion display heb ik besloten om zelf enkele kleine functies te maken omdat ik de Nextion arduino library een beetje overkill vond. Ik moet enkel een commando naar de Nextion kunnen sturen en vastgestelde berichten van de Nextion ontvangen.

Ik heb een beetje een protocol samengesteld :
Te ontvangen commandos van de Nextion display:

N = inlezen van configuratie uit de nextion display
I = initialiseren alle wissels en accessoires met ingestelde waarden en zet de display standen op de default waarden.
R =lees de toestand van alle wissels en accessoires uit de Xpressnet master en zet de display met de ingelezen standen.
Wnnn-x  = zet wissel/accessoire met dcc nr ‘nnn’ in stand ‘x’  (x=1 rechtdoor, x=0 afbuigend)
PON = zet de track spanning op
POFF = zet de track spanning af

Bij het ontwerpen van het scherm houd ik volgende regels aan :
Ik gebruik bijna voor alles dual state buttons die telkens 2 afbeeldingen hebben om de toestand weer te geven.
Wissels /accessoires krijgen steeds als object naam Wnnn waar nnn het DCC adres is.
Bij een touch release wordt steeds via een ‘ get “Wnnn-x” ’ de status doorgegeven naar de arduino.
Op elk scherm staat er onderaan een power button die de toestand van de trackspanning weergeeft en gebruikt kan worden als noodstop. Als de noodstop is geactiveerd worden alle andere knoppen op het scherm gedeactiveerd en kan er niet meer geschakeld worden tot de noodstop is opgeheven om te vermijden dat het scherm niet meer de juiste toestand van de baan weergeeft.
In de arduino worden alle wissels/accessoires beschreven met een DCC adres, stand, default stand en pagina naam van de Nextion display waarop de desbetreffende wissel/accessoire is terug te vinden.
Bij opstarten wordt er steeds de keuze gevraagd om te initialiseren of de standen in te lezen. Zo ben ik er zeker van dat de stand van de display overeenkomt met deze van de baan.
Als het Xpressnet signaal wegvalt schakelt de display over naar het startscherm.(Nog te implementeren)
Er is een mogelijkheid om de display te herstarten via het scherm. Start geeft terug de opstartmogelijkheden ‘Init’ of ‘Read’ weer.
Het scherm heeft knoppen om de verschillende delen (pagina’s) van de baan weer te geven.

Een foto van de volledige testopstelling :

(https://farm8.staticflickr.com/7802/32397695807_e92b6d28a9_c.jpg)

Zo dat was het een beetje. Nog een paar filmpjes, wel niet de beste kwaliteit want deze zijn uit de hand gemaakt terwijl ik ondertussen de display en de multimaus nog moest bedienen.

https://youtu.be/O4KnQ3amLHo (https://youtu.be/O4KnQ3amLHo)

https://youtu.be/gcDnl50PRmg


 (https://youtu.be/gcDnl50PRmg)
Titel: Re: XpressNet interface met touch panel
Bericht door: ruudns op 28 maart 2019, 11:50:26
 (y) leuk projectje, ziet er goed uit.
Titel: Re: XpressNet interface met touch panel
Bericht door: bask185 op 28 maart 2019, 12:08:56
Hoewel ik niet je mening deel over touchscreens die beter zijn dan old fashion schakelpanelen, vind ik het wel erg mooi project.

Waar je ook aan kan denken is om op Xpressnet bus een module met een bluetooth module te zetten. Dan zet je de andere bluetooth bij je schermpje en dan heb je hem draadloos :-)   Misschien dat de multimaus ook wel draadloos te maken valt  ;) maar het is net wat je wilt/nodig heb.

Zou je misschien de software gedeeltes omtrent het Xpressnet procol kunnen delen? Die vind ik interessant. Ik heb straks onder mijn baan ook een Rs485 bus liggen maar wel met mijn eigen protocol. Ik moet ook nog een handregelaar bouwen. Maar als ik XpressNet protocol ga gebruiken, kan ik ook een maus gaan gebruiken en misschien kan ik koploper eens proberen als ik niks meer te doen heb  ;)

Titel: Re: XpressNet interface met touch panel
Bericht door: DirkH op 28 maart 2019, 15:44:46
Ik heb niet beweert dat touchscreens beter zijn dan old fashion schakelpanelen. Vindt het zelf ook wel iets hebben zo een hoop schakelaars.

Ik denk enkel , even meegaan met de tijd en waarom een hoop schakelaars gebruiken als het met een simpel touchscreen ook gaat. Verder laat het touchscreen toe om deze te gebruiken voor verschillende banen zonder een hoop draden te moeten wijzigen, dit kan gewoon door een andere configuratie te laden. Met schakelaars is dat iets moeilijker.
(Ik denk zelfs dat ik het projectje zo kan maken dat met een keuze menu meer dan 1 baan kan geselecteerd worden. Enkel het geheugen zal dan de beperkende factor worden)

De XpressNet bus via bluetooth zal niet gaan, al de bluetooth modules die ik ken werken enkel met 8 bit datacommunicatie , XpressNet gebruikt 9 bit datacommunicatie. Dat maakt het ook moeilijker om een arduino te gebruiken. Die library zorgt ervoor dat de seriële interface en de RS485 met 9 bit kan werken wat standaard niet kan.

Wat wel mogelijk zou zijn is de arduino en RS485 interface aan de centrale koppelen en dan het touchscreen via bluetooth met de arduino laten communiceren, dat is een gewoon RS232 signaal 8 bits.

Ik had dat zelf ook al in gedachten. Het grote struikelblok voor mij is dan, dat ik een batterij moet voorzien, een laad circuit en een beveiliging die het touchscreen uitschakelt als de spanning onder de 4.75 V komt om beschadiging van het scherm te voorkomen. Ik ken wel een beetje van elektronica maar om aan zoiets te beginnen heb ik geen zin. Normaal verbruikt het 3.5" schermpje ongeveer 150 mA, dus met en Li-ion batterij van 1500mA zou je ongeveer 10 u moeten kunnen werken. (Iets minder omdat de bluetooth module ook nog wat verbruikt)

Ik probeer steeds alles te bouwen met kant en klare componenten. Dat maakt het gemakkelijker om iets te vervangen moest er iets stuk gaan. En tot hier toe heb ik nog geen betrouwbare laad/beveiligings/spannings regeling module gevonden.

Hier vind je trouwens alle info over de XpressNet arduino library.  http://pgahtow.de/wiki/index.php?title=XpressNet (http://pgahtow.de/wiki/index.php?title=XpressNet)

Ik ben zelf ook vertrokken van deze (slave) library maar heb die een beetje aangepast en gestript omdat ik enkel wissel commando's wilde behandelen, dus alle andere dingen eruit gegooid.

Ik ben nu bezig met de code te optimaliseren om wat meer geheugen te besparen in de arduino en tevens een poging aan het doen om alles te laten werken met een arduino UNO R3 ipv de arduino MEGA. Ik bouw de code zo op dat je niets moet wijzigen in de arduino code, de compiler zal de verschillen opvangen afhankelijk van het type arduino dat je gebruikt.
Voor het ogenblik gebruik ik teveel strings (was gemakkelijker om de commando's voor de Nextion samen te stellen) waardoor het geheugen snel vol loopt , ik moet me nu beperken tot +/- 100 wissels/schakelfuncties bij de arduino mega. Maar ik denk dat met een beetje optimalisatie ik wel tot 200 stuks kan uitbreiden. Hoeveel ik er ga kunnen laden in de UNO weet ik nog niet.

Wordt vervolgd.
Titel: Re: XpressNet interface met touch panel
Bericht door: Sven op 28 maart 2019, 15:45:22
Knap hoor.  (y)
Titel: Re: XpressNet interface met touch panel
Bericht door: Keessap op 23 september 2019, 13:23:51
Ik ben een TCO aan het bouwen.
De RS485-module is bij mij ook al een keer gesneuveld dus heb ik de modificatie op de RS485-kaartje uitgevoerd, maar nu krijg ik geen verbinding meer met de centrale.  ???Dirk, zie ik iets over het hoofd?
Titel: Re: XpressNet interface met touch panel
Bericht door: DirkH op 23 september 2019, 17:54:38
Ik heb er zelf ook al enkele gesneuvelde.
Tot nu heb ik nog steeds niet de oorzaak hiervan gevonden. Ik dacht de oplosing gevonden te hebben met de aanpassing maar dit is blijkbaar niet voldoende. Als ik van de week tijd heb ga ik nog eens terug zoeken naar de oorzaak van de defecte modules.
Titel: Re: XpressNet interface met touch panel
Bericht door: Keessap op 23 september 2019, 19:30:51
Dirk,

Ik denk zelf aan een andere oorzaak. Wanneer ik aan het programmeren ben schakel ik de 12V van de Centrale uit en koppel de Arduino aan op de computer via de USB. De Arduino Mega en de Max485 worden dan gevoed door mijn PC. Ik heb wel een met audio apparatuur meegemaakt dat er een spanningsverschil ontstond via aarde door slecht geschakelde voedingen (ongeveer 100v).
Ik ga het testen door de Arduino voor lange tijd niet meer via de USB aan te sluiten op de PC.
De Max485 sneuveld bij mij meestal binnen 10 dagen.

Ik zal het resultaat melden.
Titel: Re: XpressNet interface met touch panel
Bericht door: Ronaldk op 23 september 2019, 20:22:32
Hum. Ik heb het nog niet meegemaakt. Het werkt nog steeds  ::) Een beetje duimen. Ik heb het ding gebruikt om een sniffer voor xpressnet te hebben. Maar je voed de Arduino dan toch nog niet apart? Die wordt dan toch alleen door de USB gevoed? Is de PC wel goed geaard?

Groet Ronald.
Titel: Re: XpressNet interface met touch panel
Bericht door: DirkH op 23 september 2019, 20:42:13
Ik denk eerder dat ik de arduino en de module eerst van spanning moet voorzien en dan pas de xpressnet connectie moet maken. Nu gebruik ik de 12v van de xpressnet interface om de arduino te voeden.
Ik heb nog 5 modules over om te testen, ben benieuwd of ik de oorzaak ga vinden.
Titel: Re: XpressNet interface met touch panel
Bericht door: Timo op 23 september 2019, 23:48:01
Leuk projectje! Zeker slim dat met een Nextion te doen! Die zou ik ook eens moeten gebruiken, die van mij ligt eigenlijk al sinds de Kickstarter in de kast ::)

Wat betreft een accu moet dat tegenwoordig toch niet zo moeilijk meer zijn? Zijn best veel standaard (all-in-one) printjes voor te krijgen. Maar dat zou misschien nu juist het probleem kunnen zijn, door de bomen het bos niet meer zien :police: Zelf ben ik er weer even uit dus welk handig is zou ik eerljk gezegt ook weer moeten zoenen.

Reken je niet direct rijk met 150mA van een 1500mAh = 10 uur! Allereerst is BT niet echt zuinig als je geen BLE gebruikt. Daarnaast is die 1500mAh op de nominale spanning van de accu, niet op 5V ;) Nu is 150mA niet echt weinig maar iets voor de treinbaan (runtime, paar uur) moet wel goed te doen zijn. Of je dan BT voor de communicatie moet willen gebruiken is een tweede :D

Best dom inderdaad dat die standaard modules de DE standaard hebben voorzien van een PULL up  :-\ Als alternatief voor het omsolderen van die 10k is om er een zwaardere (bijvoorbeeld 1k) pull down te plaatsen. Dit zou extern kunnen als je bijvoorbeeld de DuPont nog eens vervangt voor een printje (kan ook experimenteerprint zin :))

Wat betreft spanning en dingen stuk gaan is de eerste vraag die in me op komt, heb je de GND van XN wel aangesloten?

Voor het ogenblik gebruik ik teveel strings [...]
Niet Strings met strings verwarren ;) Niets mis met het gebruik van strings. Overigens is het geen verschil voor serieel of je doet:
Serial.print("Hello world");
//of
Serial.print("Hello");
Serial.print(" world");
Veel geziene "fout" is dat mensen onnodig dingen aan elkaar willen rijgen voor het over serieel te versturen. Vaak met meer geheugen honger tot gevolg.

En over de libraries, is het allemaal zo erg dat de library meer kan dan je gebruikt? Als je het niet gebruikt zal de compiler (of eigenlijk de linker) slim genoeg zijn dat niet op te nemen in de uiteindelijke machine code. Dus tenzij een library heel slecht is geschreven heeft het vaak weinig zin om te gaan knippen.


Timo
Titel: Re: XpressNet interface met touch panel
Bericht door: Keessap op 30 september 2019, 12:40:57
Ik ben er uit wat de oorzaak is van het sneuvelen van de RS485 printjes. Ik gebruikt een naast mijn Multimaus 10810 centrale een oude lokmaus 2 (10792) als slave om twee treinen tegelijk te kunnen besturen. Bij het aanzetten gaat het na een paar dagen mis. De Lokmaus 2 maakt geen verbinding meer als het RS485-printje (als slave) is aangesloten. Zodra ik de RS485-print loskoppel en de Lokmaus 2 opnieuw aankoppel en het RS485-printje weer aansluit gaat het weer goed. Ik denk dat het iets met de belasting van de RS485 te maken heeft. Ik heb R7, de 120 ohm afsluit weerstand, al uit het printje verwijderd. De afsluit weerstand is, volgens de specificaties van RS485 interface, alleen nodig, wanneer je een hele lange kabel gebruikt vanaf de centrale naar de TCO (denk aan 50 tot 100 meter of meer) en dan alleen aan het begin en aan het eind. Ik heb overigens nog geen echte oplossing.

Graag reactie van mensen die ook een Lokmaus 2 gebruiken in deze kombinatie?
   
Titel: Re: XpressNet interface met touch panel
Bericht door: Timo op 30 september 2019, 12:48:10
Hoi Kees,

Mooi dat je iets verder bent. De 120Ω is echter niet alleen voor lange kabels. Maar aangezien XN maar een relatief lage snelheid gebruik en toch al voor een ster/free-form netwerk gaat is hij wel iets minder "kritisch". Even snel gekeken en geen van de XN ontwerpen die ik tegen kom heeft dan ook een terminatie weerstand.

Ondanks de losse voeding heb je neem ik aan de XN GND/Massa wel aangesloten?


Timo
Titel: Re: XpressNet interface met touch panel
Bericht door: Keessap op 11 oktober 2019, 22:21:23
Timo,

Uiteraard is alles verder normaal aangesloten.
Ik maak alleen geen gebruik van de 12V die met RJ12 connector mee komt. Ik heb een eigen voeding gebouwd met LM7805.
Verder blijf ik bij het aanzetten problemen houden met de oude Lockmaus 2 controler die als slave is aangesloten.
Ik heb kunnen vaststellen dat wanneer de RJ12 niet is aangesloten de Lockmaus2 wel verbinding maakt met Xpressnet interface. Als je daarna de RS485 kaartje met daaraan de Arduino aansluit gaat alles goed. Zelfs als de spanning van de het RS485-kaartje afhaal en aangesloten houdt aan  het spanningsloze kaartje maakt de oude Lockmaus 2 geen verbinding met Xpressnet.
Ik heb daarom gekozen voor de volgende oplossing. Ik plaats een relais tussen de A en B van de RS485. Het relais wordt na 4 sec.bij het aanzetten van de spoorbaan geactiveerd (nadat de Lockmaus2 gereed). Hierdoor wordt het RS485-kaartje met daaraan de Arduino op de Expressnet aangesloten. Alles gaat nu goed.

PS het RS485 kaartje is ook niet meer stuk gegaan.

vr. gr. Kees   
Titel: Re: XpressNet interface met touch panel
Bericht door: MdBruin op 13 oktober 2019, 12:18:02
Ik vraag me toch een paar dingen af over het RS485 printje, je heb nu zover ik zonder zo'n printje heb alleen de DE laag gemaakt maar niet de inverse RE. Of zitten deze op de print al aan elkaar gekoppeld?
De 10k weerstand, is dat geen pull up constructie waardoor de module standaard op zenden staat? Als het een pull up constructie is dan verwacht ik dat de RE standaard ook een pull up constructie heeft, immers de verbinding is half duplex bij dit protocol. Zenden en ontvangen gebeurt dan om de beurt.

Om de MAX485 in ontvangst mode te zetten moet je zowel pin 2 (inverse RE) als 3 (DE) aan ground (0V) leggen, volgens de datasheet is daar geen weerstand bij nodig waardoor ik denk dat het of een pull up of pull down constructie is (waarbij pull up het meest logisch mij lijkt).

Heb je bij je oplossing voor de time out voor je Lockmouse ook gedacht om een wachttijd in te bouwen in de software? Als je Lockmouse je enige bediening is dan zou je een harde delay(4000); kunnen gebruiken en anders kan je ook gebruik maken van de millis() functionaliteit waardoor je arduino niet 4 seconden op slot staat.
Titel: Re: XpressNet interface met touch panel
Bericht door: Keessap op 24 oktober 2019, 19:11:37

Ik ben er (eindelijk) achter wat er mis gaat en waardoor RS485 printje stuk gaat. Ik ben inmiddels 3 kapotte RS485 printjes verder.  XpressNet van Roco maakt gebruik van een RJ12 connector. Van de RJ12 worden er maar 4 van de 6 draden gebruikt 2=12v,  3=B, 4=A, en 5=GND. 1 en 6 worden niet gebruikt, maar dat blijkt niet waar te zijn. In de Lockmoaus2 (oude Centrale van Roco) worden de 1 en de 6 wel verbonden. Ik ben met het bouwen daar wat onnadenkend mee omgegaan. Ik heb niet goed gekeken of deze pinnen ergens aan op de print waren aangesloten.
Ik heb ze nu los gemaakt van de montageprint en het probleem is opgelost.

Kees

   
Titel: Re: XpressNet interface met touch panel
Bericht door: MdBruin op 24 oktober 2019, 20:37:38
Dat kan inderdaad voorkomen, de pinnen 1 en 6 worden ook gebruikt om een DCC signaal aan te bieden op een Xpressnet booster.