Arduino met touchscreen en XpressNet interface

Gestart door Dirkh, 10 maart 2019, 17:02:12 PM

Dirkh

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

Dirkh

Nog een foto vergeten :

2019-03-10_05-59-15 by D Ha, on Flickr

Arduino Mego,  RS485 modulle en Nextion 3.5" touch panel en wat draadjes meer heb je niet nodig.

modelbaanHO

Luc.
2R DC, analoog DB tp 3&4 - 2R DC Digitaal (Minibaantje Das Depot / HGK) - Verzamelaar Belgische modellen. Lid MTD.
http://www.modelbaanho.be

Robrecht

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?
H0 - 2 rail DCC-EX - Arduino - JMRI
Brussel Schuman, ooit zal het klaar zijn...

Dirkh

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.

Robrecht

Cool, en die display heeft geheugen? of met een SD kaart?
H0 - 2 rail DCC-EX - Arduino - JMRI
Brussel Schuman, ooit zal het klaar zijn...

Gerolf

Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

Dirkh

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/

Dirkh

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.

Robrecht

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
H0 - 2 rail DCC-EX - Arduino - JMRI
Brussel Schuman, ooit zal het klaar zijn...

Dirkh

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.

Dirkh

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.

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

beertje


Geert

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
Schaal HO - digitaal zelfbouw - Favoriete Lok: V200 DB
Huidig project: LocoNet 16 poorten ingangen/uitgangen

Dirkh

Nog een nieuw filmpje met een voorbeeld van het wijzigen van de configuratie


(Klik op het plaatje voor het filmpje)