
Im Sommer 2022 haben wir, inspiriert durch ähnliche Projekte, ein Gleisbildstellpult für unsere Gartenbahn gebaut. Das Stellpult passt perfekt in unsere kleine Elektronikkiste am Bahnhof "Lukasdorf" und steuert Weichen und Lampen auf der Strecke per XpressNet-Anbindung an unsere DCC-Digitalzentrale mXion MZSpro. Dabei haben benutzen wir einen Arduino UNO als Steuerung und haben sowohl ein Display als auch einen "RFID-Schlüssel" mit einem Arduino Nano als Controller angebunden. Die Kommunikation mit der Zentrale und die Stromversorgung erfolgt über ein XPressNet Shield für den Arduino UNO.
Das Projekt lehnt sich an das Stellpult von Schulze Modellbau an. Einige Funktionen wurden von dort übernommen, teilweise aber angepasst. Vor Allem der Speicherbedarf wurde auf den eingesetzten Arduino UNO hin optimiert.
Features:
-
Spannungsversorgung über XPressNet Bus
-
Konfiguration per Textdatei auf MicroSD-Karte
-
Invertierte LED-Ausgänge für 2-Wege-Schaltung
-
LCD-Display
-
Schlüsselkartenleser per RFID
-
Notausschalter mit Countdown zur Weiterfahrt
-
Initialisierung der Weichen beim Einschalten
Hardware
Die eingesetzte Hardware besteht aus zwei getrennten Platinen, dem Arduino Shield für die eigentliche Steuerung und aus Platzgründen aus einer separate Platine für die Ansteuerung der LEDs. Zusätzlich wird ein Arduino UNO benötigt, auf diesem wird dann das Shield platziert.
Warning
|
Achtung: Es muss sich beim Arduino unbedingt um ein 5V Modell handeln, da dieses über den XpressNet Bus mit 5V Spannung und Signalen mit 5V Logik-Level versorgt wird. |
Zusätzlich werden ein Display und ein weiterer Arduino zur Zugriffskontrolle mit RFID Kartenleser per I2C Bus angeschlossen.
Das Stellpult wird dann mit der Zentrale am Anschluss für den XpressNet Bus angeschlossen. Bei uns läuft dies mit der mXion MZSpro.
Als Gehäuse für das LCD Display dient die Thingiverse Vorlage von byrrt. 3D-Druckvorlagen für die beiden Gehäuse für die Elektronik-Komponenten habe ich ebenfalls bei Thingiverse eingestellt. Den zweiten Arduino mit dem RFID-Leser haben wir in einem handelsüblichen Plastikgehäuse untergebracht.
Das Gehäuse des Stellpults selbst haben wir aus ein paar Holzlatten gebaut. In diese haben wir mit einer Kreissäge eine kleine Nut gesägt und eine Aluminiumplatte eingelegt. Die Aluplatte ist auf der Rückseite mit einer Kupferfolie beklebt, die als Masse für die LEDs dient. Hierdurch wird Verkabelungsaufwand eingespart, wenn auch die Kosten für die Folie vergleichsweise hoch sind. Für die Schalter und LEDs haben wir dann Löcher gebohrt und die Aluplatte von vorne mit unserem Gleisbild aus schwarzer selbstklebender Folie beklebt.
Den Anschluss der einzelnen Komponenten veranschaulicht dieses kleine Schaltbild:

Elektronik
Es werden zwei Platinen benötigt: Zum einen für das XPressNet-Shield auf dem Arduino UNO, zum anderen als Breakout zum Anschluss der LEDs. Für den RFID-Leser haben wir einen Arduino Nano auf einer Lochraster-Platine mit einem RFID Leser und einer LED verbunden und konnten hier auf eine spezielle Platine verzichten.
XPressNet Shield
Die Shield-Platine bietet Anschlussmöglichkeit für den XPressNet Bus mittels RJ-12 Stecker (6-polig), mehrere I2C-Anschlüsse als verpolungssichere JST-Stecker, sowie jeweils 2 Pins zum Anschluss der Taster und Schalter. Das Foto zeigt einen nicht fertig bestückten Prototyp der Platine.

Die Gerber-Files für diese Platine können hier heruntergeladen werden: stellpult-v1-gerber.zip
LED Breakout
Aufgrund von Platzmangel auf dem Shield wird eine separate Platine zum Breakout-Anschluss der LEDs genutzt. Hier findet sich ein dedizierter Vorwiederstand für jede LED und jeweils ein 2-poliger Anschluss für jede LED. Als Bonus finden sich für klassische 2-Wege-Weichen invertierte Ausgänge der LED-Anschlüsse 1-6 über einen Hex-Inverter.

Die Gerber-Files für diese Platine können hier heruntergeladen werden: stellpult-led-v1-gerber.zip
BOM / Stückliste
Eine Stückliste haben wir für die Platinenversion v1 zur einfachen Bestellung bei Reichelt Elektronik hinterlegt: Stellpult BOM bei Reichelt.de
Für neuere Versionen werden wir eine entsprechende Liste auch hier auf der Seite einbinden, da nicht alle Teile über Reichelt Elektronik bezogen werden können.
Schaltplan
Hier findet sich eine schematische Darstellung der aktuellen Elektronik der Hauptplatine. Die Stromversorgung erfolgt über den XPressNet Bus. Als zentraler IC dient der MAX485E, um den seriellen Bus der XPressNet-Schnitstelle auf RS232 zu wandeln. Die serielle Hardware-Schnittstelle des Arduino ist daher nicht nutzbar.
Software
Die Software für den Arduino UNO zur Steuerung kann von Github heruntergeladen werden. Bei Verbesserungen sind natürlich auch Pull Requests hierzu gerne gesehen, sollte ein Problem auftreten, kann gerne der Github-Issue Tracker genutzt werden. Zur Kompilierung wird Platform.io benötigt. Bei angeschlossenem Arduino UNO kann dann der Transfer der Firmware per platformio run --target upload
auf den Arduino übertragen werden.
Konfiguration
Die Konfiguration muss in der Datei stellpult.conf auf einer (Micro-)SD-Karte abgespeichert und diese beim Starten des Stellpults im Kartenleser eingelegt sein. Die Konfiguration wird bei jedem Start erneut von der SD-Karte eingelesen. Hier kann die Zuordnung von Tastern, LEDs und Funktionen konfiguriert werden. Ein Beispiel dafür findet sich hier:
# Konfigurationsdatei für Arduino-XpressNet-Stellpult # 23.03.2023 # # Konfiguration des Kunden name=Andreas Zöllner # Name der Anlage (max 20 Zeichen) anlage=ZoellnerBahn # Konfiguration des XPressnet # Basisadresse dieses Moduls am XPressnet adresse=12 # Offset für Weichenadresse (ggf. notwendig bei Roco) offset=0 # Konfiguration von Weichenschaltzeiten # Die Weichenschaltzeit definiert die Dauer des Weichenumlaufs (in ms) schaltzeit=500 # die Verzögerung definiert die Zeit zwischen zwei Weichenschaltungen # beim Initialisieren verzoegerung=250 # Konfiguration der Tasten # Aufbau: # linke Zahl: Tastennummer (1 bis 64) # rechts: Befehl mit Parametern wie nachstehend beschrieben # 1 = U:21 Umschalten Weiche 21 # 1 = U:-21 Umschalten Weiche 21 invertiert # 1 = S Kommando Nothalt # 1 = I:10 Licht schalten mit Weichenadresse 10 T1=U:11 T2=U:12 T3=U:13 T4=U:14 T5=S T6=I:10 # Konfiguration der LED-Adressen # pro Weiche wird eine LED-Adresse benötigt. # rechte Zahl: Weichenadresse (- für zweiten Ausgang bei nicht invertierenden Outputs 7-16) # S: Gleisspannung (Stop) L1=11 L2=12 L3=13 L4=14 L5=S L6=10 # Ende der Konfiguration
Geplante Verbesserungen und Issues
Bei Problemen mit Hard- oder Software leisten wir gerne Hilfestellung. Am besten erfolgt die Kontaktaufnahme per eMail oder Github Issue Ticket. Die folgenden Probleme bzw. Verbesserungsvorschläge wollen wir in nächster Zeit umsetzen:
Hardware-Debouncing der Taster
Derzeit erfolgt das Debouncing der Taster in Software, was zu größeren Delays und relativ späten Reaktionen der Software führt. Durch das Auslesen der Tastendrücke via I2C Bus ist das Debouncing resourcenintensiv und lässt sich nur bedingt in Software umsetzen. Außerdem lässt sich der zur Verfügung stehende Interrupt des I2C-Moduls nicht zuverlässig nutzen, wenn die Taster selbst nicht hardwareseitig debounced sind. Es würden zu viele und fehlerhafte Tastendrücke an den Controller signalisiert. Daher wird derzeit der Tastenstatus regelmäßig per I2C abgefragt, was aufgrund der Busgeschwindigkeit zu viel Performance kostet. Eine neue Version der Platine soll das Debouncing in Hardware implementieren und den Interrupt entsprechend nutzbar machen.
Logic Level mit 3,3V
Derzeit arbeitet die Platine übergreifend mit 5V Spannungsleveln. Dies entspricht sowohl der Spannungen auf dem XpressNet Bus, als auch der Betriebsspannung des eingesetzten Arduinos. Zur Erhöhung der Performance ist aber der Einsatz mit anderen Mikrokontrollern (z.B. ESP32 oder Raspberry Pi Micro) interessant. Hierfür sollen Logik- und Spannungspegel von 3,3V in der nächsten Version der Platine unterstützt werden.
Lizenz
Diese Software nutzt u.a. die XPressNet Bibliothekt von Philipp Gahtow. Der Einfachheit halber (und weil ich keine dagegen sprechende Aussage in den Lizenzbedingungen hierzu gefunden habe), ist eine aktuelle Version dieser Bibliothek inkludiert. Die Original Website ist Digital Modellbahn. Zu beachten ist, dass diese Bibliothek nur für den privaten Gebrauch eingesetzt werden darf! Dies gilt daher auch für die Software als Ganzes, auch wenn die von mir geschriebenen Teile unter MIT Lizenz auch kommerziell genutzt werden dürfen. Dies bedingt aber u.U eine separate Lizenzierung der genutzten Bibliotheken oder ein Ersatz dieser durch Alternativprodukte.