Modelspoormagazine forum

Modelspoor, praktijk => Modelspoor-elektronica met microcontrollers => Topic gestart door: Dirkh op 10 maart 2019, 17:02:12 pm

Titel: Arduino met touchscreen en XpressNet interface
Bericht door: Dirkh op 10 maart 2019, 17:02:12 pm
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 tft kaartje in te steken , spanning op, wachten tot de configuratie is geladen , spanning eraf, tft 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 aanpassen, 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.

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:
I = initialiseren alle wissels en accessoires met ingestelde waarden en zet de display standen op de default waarden.
   De Nextion zend vervolgens de configuratie van naar de arduino.
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.

Zo dat was het een beetje.
Een filmpje : https://www.youtube.com/watch?v=O4KnQ3amLHo (https://www.youtube.com/watch?v=O4KnQ3amLHo)
Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: Dirkh op 10 maart 2019, 18:06:54 pm
Nog een foto vergeten :

(https://farm8.staticflickr.com/7802/32397695807_e92b6d28a9_c.jpg) (https://flic.kr/p/RmSEfc)2019-03-10_05-59-15 (https://flic.kr/p/RmSEfc) by D Ha (https://www.flickr.com/photos/140921238@N04/), on Flickr

Arduino Mego,  RS485 modulle en Nextion 3.5" touch panel en wat draadjes meer heb je niet nodig.
Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: modelbaanHO op 10 maart 2019, 22:26:37 pm
mooi project.
Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: BrainFeeder op 11 maart 2019, 09:01:20 am
Mooi gedaan! Ik had ook zo iets in gedachten maar ben er nog niet uit hoe ik de interface wil, het moet eenvoudig uitbreidbaar zijn, en een Arduino zit al snel aan het geheugen limiet als je veel afbeeldingen gebruikt, niet?
Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: Dirkh op 11 maart 2019, 09:17:26 am
de afbeeldingen zitten in de nextion display dus de arduino wordt daar niet mee belast. via commando's kan je dan vanuit de arduino de verschillende toestanden oproepen en de display bedienen.
Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: BrainFeeder op 11 maart 2019, 09:37:39 am
Cool, en die display heeft geheugen? of met een SD kaart?
Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: Gerolf op 11 maart 2019, 09:46:22 am
Bijzonder interessant, zo'n display  8)
Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: Dirkh op 11 maart 2019, 10:10:47 am
Die display heeft geheugen, je moet via een SD de display laden. Via een editor maak je de verschillende schermen, kan je knoppen erop zetten en achter elke knop code (wel beperkt) zetten. De display kan je dan als een knop ingedrukt wordt een bericht via de seriële interface naar de arduino laten zenden.

Hier vindt je meer info over de display.
https://nextion.itead.cc/resources/download/ (https://nextion.itead.cc/resources/download/)
Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: Dirkh op 11 maart 2019, 10:13:30 am
Ben nog wat verder aan het debuggen want ik krijg nog error boodschappen op de interface als ik ook koploper via een s88xpressnetli van rosoft er bij aanhang. Blijkbaar nog iets mis met mijn X-OR functie en enkele andere berichten op de Xpressnet interface.
Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: BrainFeeder op 11 maart 2019, 11:37:22 am
Ik ga er ook eens eentje bestellen bij de Chinees denk ik  8) eerst nog wat rollend materieel op de budgetplanning.. daarna terug elektronica  ::)

Ik volg het draadje verder op :) Als je hulp nodig hebt met debuggen wil ik wel eens een poging doen, maar ben niet meteen een muli-talenknobbel  :o
Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: Dirkh op 11 maart 2019, 21:29:20 pm
blijf een beetje vast zitten op die errors. deju na een tijdje loopt de master multimaus vast en helpt alleen een reset.
Ergens loop er iets fout maar ik kan het niet direct vinden.
Ik vermoed ofwel een timing probleem of een probleem met de gebruikte library die ik op het internet heb gevonden. Ik het gemerkt dat de hardwareserial van de arduino een remake heeft gehad tov toen de arduino library voor xpressnet is geschreven. Volgende dagen nog eens verder zoeken.
Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: Dirkh op 17 maart 2019, 10:49:07 am
Eindelijk de fout eruit gehaald, zoals gewoonlijk iets waar ik al 10 keer over had gezien, nu werkt het paneel perfect voor mij.
Nu nog een behuizing maken om alles in te steken, eens kijken of ik hiervoor een 3D print kan ontwerpen.
Ik heb het wel enkel voorzien om wisseldecoders te schakelen, normaal zou je zelfs een Loc ermee kunnen bedienen maar daarvoor moet de library uitgebreid worden.

Net gelezen dat de XpressNet interface 20mA kan leveren per aangesloten toestel. Dus moet ik nog een externe voeding voorzien, zoals ik al eerst had voorzien een Din connector voor het paneel, voorzien van een externe 5V voeding en RJ12 connectors voor de multimaus op enkele plaatsen op de baan.

Citaat
XpressNet devices can be powered directly from the XpressNet or powered through an external supply.
The XpressNet device can be powered directly from the L and M 12 volts connections if the device draws
less than 20mA when powered. This limit is to allow the bus to power multiple devices. If the devise
requires more power than an external supply should be used

Eens de software op de arduino staat, kan je gemakkelijk van baanplan/configuratie wisselen door met een SD kaartje via de display een nieuwe configuratie te laden.
Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: beertje op 17 maart 2019, 11:23:12 am
Weer een mooi project.
Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: Geert op 17 maart 2019, 14:52:06 pm
Ik heb dit draadje blijkbaar gemist hiervoor. Wat een mooi project Dirk. Zoiets staat ook op mijn verlanglijstje. Doe maar veel ervaring op, tegen de tijd dat ik ermee begin weet ik je wel te vinden  ;)

Geert
Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: Dirkh op 17 maart 2019, 16:48:45 pm
Nog een nieuw filmpje met een voorbeeld van het wijzigen van de configuratie

(https://i.ytimg.com/vi/O4KnQ3amLHo/hqdefault.jpg?sqp=-oaymwEZCPYBEIoBSFXyq4qpAwsIARUAAIhCGAFwAQ==&rs=AOn4CLD35sgI7bS_ZvJNf5KHt-yCUORInw) (https://youtu.be/gcDnl50PRmg)
(Klik op het plaatje voor het filmpje)


Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: dani op 19 maart 2019, 14:18:26 pm
ZALIG projectje...    chapeau !

Ik ga er van uit dat alles via I2C babbelt ?  (arduino en scherm)...

Fijne vooruitzichten, toch ..  Pakweg 5 jaar geleden was dit soort experimenten ONBETAALBAAR en buiten bereik van de hobby bouwer, nu kan het zomaar.
YESS !! Ik volg in spanning
Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: Dirkh op 19 maart 2019, 15:08:31 pm
de communicatie tussen scherm en arduino gebeurt via rs232, ( die nextion heeft zelfs geen i2c) daarom ook dat ik geopteerd heb om een arduino mega te gebruiken. 1 seriele poort voor de xpressnet interface, 1 voor het scherm en dan heb je nog een seriele poort over voor debugging en zelfs nog een extra.

De schermpjes zijn te vinden rond de 20€ voor een 3.5" enhanced en dus best te doen. Spijtig dat de grotere schermen direct veel duurder uitvallen.

Voordeel van die nextion is dat je via een sd kaart een configuratie kan laden voor het scherm en zo snel een andere baanplan kan laden zonder opnieuw een programma in de arduino te moeten laden. Bij het opstarten stuurt de nextion in mijn geval een configuratie naar de arduino zodat die weet welke wissels of functies er moeten behandeld worden.

En het projectje is bijna klaar nog een behuizing en dan alles nog eens extra testen met de baan aangesloten.

Heel soms word er bij het opstarten en inlezen van de wisselstanden nog eentje gemist, maar bij het gewoon gebruik heb ik geen problemen meer.
Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: Dirkh op 24 maart 2019, 20:24:12 pm
Voor volgend probleem de oorzaak gevonden :
Citaat
Heel soms word er bij het opstarten en inlezen van de wisselstanden nog eentje gemist, maar bij het gewoon gebruik heb ik geen problemen meer.

Ik heb geen rekening gehouden met volgende toestand volgens de XpressNet spec :

Citaat
Accessory Decoder information response
...........
Data 3: Z3 Z2 Z1 Z0 Definitions for the status flags
In the case of a turnout accessory decoder: Z1 and Z0 represent the status of the first turnout in the
nibble, Z3 and Z2 represent the status of the second turnout in the nibble.
Possible combinations:

Z1 Z0 (the first turnout in the nibble)
0 0 turnout has not been controlled during this operating session.
0 1 last command sent was „0“, turnout „left“.
      This is only relative.
1 0 last command sent command was „1“
1 1 invalid combination - both end switches of a Turnout with feedback are indicating that they are active.

The same structure is used for Z3 and Z2, the second turnout in the nibble. For a feedback module, the 4
bits Z3 toZ0 directly represent the value of the 4 inputs of the requested nibble.

Ik heb geen rekening gehouden met de toestand 0 0 voor Z1 - Z0  en Z3 - Z2 , dus als de wissel nog geen commando heeft ontvangen na het opstarten van de multimaus krijg je deze responce. Daarom dat ik soms bij het opstarten wissels miste als ik direct de read optie gebruikte.

De oplossing is van bij het opstarten eerst de init routine te selecteren (Die zet alle decoder adressen in de gespecificeerde default toestand) zodat alle wissels en schakelaars een keer bediend zijn en nadien werkt alles wel correct. Lijkt me logisch dat na een powerup de multimaus de standen van de wissels niet kent als deze nog niet gebruikt zijn.

Valt weinig aan te doen tenzij ik een routine ga maken die als ik deze response krijg ik de wissel in de default toestand zet.

Hier moet ik nog eens over nadenken of/hoe ik dat ga implementeren want de arduino's die ik gebruik voor de wissels te zetten onthouden de laatste toestand in EEPROM,  daarom is de stand van de wissels en schakelaars ook niet altijd de default toestand na het opstarten van de baan.

Het is uiteindelijk een klein schoonheidsfoutje .
Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: BrainFeeder op 25 maart 2019, 09:26:09 am
Is er iets van terugmelding beschikbaar? Anders kan je proberen adhv de terugmelding ergens centraal de stand op te slaan?
Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: Dirkh op 27 maart 2019, 13:35:30 pm
Is er iets van terugmelding beschikbaar? Anders kan je proberen adhv de terugmelding ergens centraal de stand op te slaan?

Helaas geen terugmelding. Maar uiteindelijk maakt het niet zoveel uit, als ik de baan opstart wil ik alles initialiseren zodat ik zeker ben van de wisselstanden.
Nadien werkt alles correct.

Maar nog een probleempje gevonden.
Bij het inpluggen van de XpressNet interface zijn ondertussen al 3 RS485 modules gesneuveld. (Gelukkig had ik een set van 10 gekocht)
Ik maak gebruik van volgende modules van bij aliexpress :

(http://ae01.alicdn.com/kf/HTB1JLeoSFXXXXcDXpXXq6xXFXXXu.jpg?size=96847&height=400&width=400&hash=47d28d84d0e651dbe753431e4a55095a)

Ik heb wel niet echt die module nagemeten van hoe de opbouw is en welke weerstanden enz.. erop zitten vooraleer ze te gebruiken. Volgens de spec zou die op 5V dc moeten werken en de XpressNet interface is volgens de specificaties die ik heb gevonden ook 5 V. Maar ergens sneuvelt de module telkens.

Nu de module eens bekeken van dichtbij en zie ik de R1, R2, R3 en R4 langs een zijde verbonden zijn met Vcc en dienen als pullup weerstanden voor RO, RE, DE en DI van de MAX485.

Volgens de spec van de MX485 :

Citaat
pin 2  RE  Receiver Output Enable. RO is enabled when RE is low; RO is high impedance when RE is high.

pin 3  DE  Driver Output Enable. The driver outputs, Y and Z, are enabled by bringing DE high. They are high impedance when DE is low. If the driver outputs are enabled, the parts function as line drivers. While they are high impedance, they function as line receivers if RE is low
.

Dus eigenlijk is de module niet geschikt om zo direct aan te sluiten zonder DE (pin 3)  LOW (0 V) te maken. Bij het opstarten van de arduino (na het inpluggen) duurt het even eer de output die deze pin bedient in de lage stand komt waardoor even de DE ingang hoog is en bijgevolg de driver actief is en dus in conflict komt met de drivers van de andere aangesloten toestellen. Die zijn iets beter beveiligd en overleven deze fout maar op deze module sneuvelt de driver/receiver.

Default is een ouput/input pin van de arduino een HIGH impedance, dus de pullup weerstand op de module gaat ervoor zorgen dat de driver actief wordt tot de arduino de pin laag stuurt. (dit gebeurt in de setup routine maar kan wel even duren eer de arduino is opgestart en de pin laag stuurt)

Volgens mij een ontwerp fout in de module, je zou veronderstellen dat je de outputs/inputs default in een hoge impedantie brengt en niet de output driver activeert wanneer er spanning op de module komt.

Eigenlijk ook een beetje mijn fout door een kant en klare module te willen gebruiken zonder die goed te bestuderen. Gelukkig zijn de drivers in mijn andere aangesloten toestellen niet gesneuveld.  Dus een kleine aanpassing maken aan de module en R3 los te maken van de 5V en te verbinden met GND. (Doeme moet ik toch nog solderen  ;D) Dacht weer het simpel te maken door een module te gebruiken zodat ik niet zelf een klein printje moest maken voor de MAX485.

Straks de aanpassing eens doen en dan nog maar een aantal keren testen om te kijken of de module het deze keer wel overleeft.

Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: Dirkh op 27 maart 2019, 15:04:51 pm
En voila aanpassing gedaan , het is niet een mooi stukje soldeerwerk maar het voldoet om te testen en eventueel te gebruiken.
Ik heb nu eenmaal niet direct het materiaal om SMD onderdelen te solderen. Zelfs mijn fijnste punt van de soldeerbout is redelijk groot voor die kleine weerstandjes.

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.

(https://farm8.staticflickr.com/7915/32536807837_1d9f160d79_c.jpg) (https://flic.kr/p/RzaDpt)
rs485 modification (https://flic.kr/p/RzaDpt) by D Ha (https://www.flickr.com/photos/140921238@N04/), on Flickr

Zal eens eens een feedback schrijven op ALIEXPRESS om gebruikers er op te wijzen dat dit geen HOTPLUG module is.

Reeds een 10 tal keer ingestoken en getest , zonder problemen.  :) Het werkt eindelijk zonder errors te genereren in koploper en op de multimaus.
Ik heb wel veel tijd verloren omdat ik tekens dacht dat ik een programmeer fout had gemaakt bij de laatste aanpassingen en uiteindelijk was het de hardware die ondertussen gesneuveld was.

Als er iemand zich geroepen vind om hiervoor in 3D een behuizing te tekenen, die mag zich altijd melden. Ik ben er zelf al eens mee bezig geweest maar ben geen 3D tekenaar en daar kruipt dus enorm veel tijd voor mij in.
Titel: Re: Arduino met touchscreen en XpressNet interface
Bericht door: beertje op 27 maart 2019, 15:51:28 pm
Dirk,
Als je een schets van maakt met de maten,
wil ik het wel proberen.een goede leerstof voor mij.
gr.