Zentrale Z21PG
Eigenbau |
Zentrale Z21PG |
Z21 mobile |
XpressNet |
LocoNet |
Booster
Arduino UNO Version | Arduino MEGA Version | ESP8266 (WeMos D1 mini) Version | ESP32 Version | Sanguino Version
![]() |
![]() ![]() |
Grundlage
Die komfortable aber sehr teure Modellbahnsteuerung Z21 von Roco und der genutzte XpressNet-Bus brachte mich auf die Idee, eine eigene Zentrale zu entwickeln.
Im Mittelpunkt dieser Idee, stand die Absicht, die dort eingebrachte umfangreiche Hardware zu reduzieren bzw. durch Software zu ersetzen. Die Eigenbauzentrale sollte auch ein Netzwerk Interface (für APP und PC), XpressNet, S88 und LocoNet Bus bereitstellen.
Hier wird der Aufbau einer Z21 DCC Digitalzentrale auf Basis eines Arduino (Arduino MEGA über AliExpress ab 7,30 Euro) zur Steuerung der Modellbahn über das Z21 LAN Protokoll beschrieben. Auf den Arduino MEGA wird in der Grundversion dazu ein Ethernet Shield mit dem W5100 Chip (bei AliExpress ab 4,80 Euro), aufgesetzt. Mit diesem Ethernet Shield, kann der Arduino MEGA in ein bestehendes Netzwerk integriert werden und über einen Router mit WLAN mit Handreglern oder der Computersoftware zum Beispiel Rocrail kommunizieren.
Durch Erweiterungen lässt sich zum Beispiel ein WLAN AP/Client mittels ESP6288 in die Zentrale integrieren.
Funktionsumfang
- Kommunikation via Ethernet über "Z21 LAN Protokoll" von ROCO/Fleischmann, mit mehr als nur zehn "Endgeräten"!
- Ethernet Interface
- WLAN Interface (Accesspoint- und/oder Client-Betrieb)
- Ausgabe der Temperatur, Gleisspannung und Stromaufnahme in Rocrail/App (Support ab v4.76)
- 29 Funktionen (Licht F0, F1 bis F28) steuerbar,
- bis zu 2048 Weichen schalten,
- externer Booster Ausgang für ROCO 10761/10764 Digitalverstärker oder CDE-Anschluss
- integrierter DCC Booster mit RailCom® Cutout (beliebiger H-Brückentreiber [L6206N, L298N] mit Kurzschlusserkennung über ACK-Sence oder TLE5205 bis 5A)
- RailCom® Cutout über Z21 mobile App Einstellungen de/-aktivierbar (Support ab v4.76)
- CV lesen und schreiben (optionaler Programmiergleisausgang) (Support ab v4.75)
- Globaler RailCom® Detector für POM, programmieren am Hauptgleis (nur für Arduino MEGA)
- Standard Fahrstufen im Sketch auswählbar (14/28/128)
- S88N[2] Rückmeldebus (Arduino Simpel S88 Interface)
- NEU: kontinuierliches DCC Signal am S88N (Support ab Arduino DCC Interface Library v5.20)
- schnellere Abfrage von Clients und CV schreiben (Support ab XpressNetMaster Library v2.0)
- NEU: Automatisch Umschaltung zwischen Master (Zentrale) und Slave (Endgerät)
- Support für F9 bis F28 (ab v4.72)
- LocoNet-Client Mode (Slot-Server abschaltbar) für den Anschluss an der Intellibox
- Programmierung von LocoNet LNCV über die Z21 mobile APP
- NEU: LocoNet Booster Interface (Support ab Arduino DCC Interface Library v5.20)
DCC-Input Anschluss einer "Fremdzentrale" (nur für Arduino MEGA)- Extra: Softwareupdate & eigene Anpassungen über Upload des Sketch mittels Arduino IDE.
geplante Erweiterungen
- I2C Bus für 0,96" OLED-Display und Temperatursensor DS18B20 (über OneWire mittels ATTiny)
- Umbauanleitung für XpressNet ROCO MultiMaus zu einer WLAN MultiMaus
- Unterstützung des Arduino DUE und ESP8266 als leistungsfähige Hardwarebasis für die Zentrale
Notes
bekannte Bugs
Da dieses Projekt eine persönliche Entwicklung von mir ist bleibt es nicht aus das einige Protokolle nicht 100%tig unterstützt, oder mit kleineren Ungenauigkeiten Implementiert wurden. Hier eine Auflistung der bekannten
- (gelöst, ab XpressNetMaster Libary v2.9.0) Beim CV lesen am XpressNet hängt sich die Multimaus auf.
- NEU: Keine Statusanzeige von LocoNet Belegmeldern in der Z21-App auf mobilen Geräten.
- (gelöst, ab v4.85) Nicht korrekte Abschaltung des Prog-Realis beim Programmieren. (Loks auf dem Hauptgleis erhalten auch die Befehle!)
- (gelöst, ab XpressNetMaster Libary v2.8.0) Fehlerhafte Ansteuerung von langen Lok-Adressen über XpressNet-Interface im Adressbereich 128 bis 255 (Thomas)
- (gelöst, ab v4.84) Versendung eines 0 Byte Packet mit der Länge 1
- (gelöst, ab v4.65) Problem: Kein 'Init...' bei der Kommunikation mit dem Freiwald Train Controller - Anpassung der Z21 Netzwerkimplementierung vorgenommen. Bugfix auch für ESP8266 ab v26 enthalten!
- (gelöst, ab v4.70) Problem: Synchronisation Zentrale XpressNet Client - Aktive Funktionen und Fahrbefehle werden nicht an die Roco MultiMaus übertragen und auf dem Display dargestellt (XpressNet Busy Feature).
- (gelöst, ab v4.71) Problem: LocoNet Interface steuert nur Funktionen F0 bis F8
- (gelöst ab XpressNetMaster Library v2.0) Probleme bei der XpressNet Kommunikation mit Lenz Hardware LH100 und LH90.
Gerne nehme ich Anregungen und Probleme auf: Email oder TICKET.
Hardware
Die Arduino Z21 DCC Zentrale erzeugt mithilfe der DCCInterface Library und dem Timer1/Timer2 (wählbar) ein DCC-Signal. Die Zentrale unterstützt je nach gewünschtem Funktionsumfang verschiedene Protokolle. Jedes dieser Protokolle benötigt um mit der Zentrale kommunizieren zu können ein eigenes Interface. Außerdem muss das jeweilige Protokoll im Sketch aktiviert werden (Durch "//" vor dem #define
oder #include
wird das jeweilige Protokoll deaktiviert!).
LAN Interface
Das LAN-Interface kann mittels "#define LAN" im Sketch aktiviert werden. Es stellt die Kommunikation der Z21 Protokoll Library über das Kabel gebundene W5100 Arduino Shield bereit. Die IP-Adresse um das LAN-Interface zu erreichen ist Standardmäßig fest auf 192.168.0.111/24 eingestellt und wird nicht automatisch über DHCP bezogen. NUR über das Webinterface kann die IP-Adresse geändert werden. Das Webinterface muss dafür im Sketch mittels #define HTTPCONF"
aktiviert sein und der Client muss sich im entsprechenden Netzwerkbereich befinden! Ein Reset der IP-Adresse kann beim Einschalten der Zentrale (Betriebsspannung) und gleichzeitigem Drücken des Power On/Off Taster durchgeführt werden (DCC LED blinkt schnell, solange der Taster gerückt wird).
Bei der Verwendung am Arduino UNO mit WLAN über Software Serial, kann das LAN-Interface nicht aktiviert werden!
Wenn nach dem Einschalten der Zentrale keine Verbindung über die Ethernet-Schnittstelle (W5100) möglich ist und diese nach dem Drücken von RESET auf dem LAN Interface sich aufbaut, dann muss ein 1uF Kondensator, C- nach GND 0V, C+ nach RESET auf dem Shield installiert werden. Das LAN W5100 Board ist dann immer direkt nach Power on (ohne Betätigung der Reset Taste) erreichbar.
DCC Input Interface
Mit Hilfe des DCC Fremdeingang wird der DCC Datenstrom einer angeschlossenen DCC Zentrale mit in das eigene DCC Signal integriert. Hierbei erfolgt keine Rückkommunikation zu der externen Zentrale. Der Anschluss kann verwendet werden um zum Beispiel eine Piko Fern / Digi 1 (55019) zu nutzen. Da kein Timer zur Dekodierung notwendig ist läuft ist diese Integration unter allen Zentralen-MCUs möglich. Um das DCC-Interface zu verwenden, muss dies mittels #define DECODER
im Sketch aktiviert werden.
Wird in den aktuellen Versionen nicht mehr unterstützt!
XpressNet Interface mit Booster Support (externer Booster)
![](/wiki/images/thumb/Arduino_ROCO_Booster.png/160px-Arduino_ROCO_Booster.png)
Wenn ein preisgünstiger ROCO Booster 10761, 10764 oder Freischmann Digitalverstärker 680801 bereits vorhanden ist, kann dieser als externer Booster genutzt werden. Dafür reicht ein XpressNet-Interface ohne die Funktionalität des MAX485 aus. Die dafür notwendige Kurzschlusserkennung ist in der Software der Zentrale integriert. Im Sketch muss der externe Booster aktiviert werden:
#define BOOSTER_EXT
#define BOOSTER_EXT_ON HIGH
#define BOOSTER_EXT_OFF LOW
Um eine Kommunikation mit der Lokmaus2 oder Multimaus herzustellen, ist ein XpressNet-Interface mit dem MAX485-Treiber notwendig. Die Z21 Zentrale arbeitet dann wie ein XpressNet Master für die LokMaus2 oder MultiMaus. Es können dabei bis zu 31 XpressNet Slaves (Clients) an die Arduino Z21 DCC Zentrale angeschlossen werden.
Aktivierung des XpressNet-Interface im Sketch mittels:
#define XPRESSNET
#include <XpressNetMaster.h>
In der rechts dargestellten Schaltung ist der Aufbau der DCC Ansteuerung des ROCO Boosters 10761 und das XpressNet-Interface dargestellt. Am XpressNet-Interface sind möglicherweise noch zusätzliche Pull Up/Down und/oder eine XpressNet Bus-Terminierung an der Leitung A und B notwendig (siehe XpressNet Hardware).
Das XpressNet Interface untersützt die automatische Umschaltung zwischen Master und Slave Betrieb. Daher ist es möglich eine Koppelung über XpressNet mit einer vorhanden Zentrale herzustellen um die Z21 Funktionalitäten per Ethernet oder WLAN an dieser nutzen zu können.
LocoNet
![](/wiki/images/thumb/Arduino_LocoNet_Master.png/160px-Arduino_LocoNet_Master.png)
Durch die Integration eines LocoNet-Interface ist es möglich die Arduino Z21 Zentrale mit der Intellibox zu verbinden oder mit LocoNet-Handregler wie den Fred zu nutzen. Um den Fred nutzen zu können muss in der Software der notwendige LocoNet Slot-Server aktiviert werden, dann ist ein Anschluss an der Intellibox (welche bereits einen Slot-Server integriert hat) nicht mehr möglich. Die LocoNet Library nutzt zur Signalerzeugung im Arduino UNO den Timer 1 und im Arduino MEGA den Timer 5. Aktiviert wird das LocoNet-Interface mittels:
#define LOCONET
#include <LocoNet.h>
Der Slot-Server kann mittels #define LnSLOTSRV
zugeschaltet werden. Für den Betrieb als LocoNet Client muss der Slot-Server inaktiv sein. Sollen alle Lokinformationen ins LocoNet (auch ohne explizite Anfragen) übermittelt werden, muss #define TXAllLokInfoOnLN true
gesetzt werden. Dies kann sinnvoll sein, wenn eine Steuerungssoftware über LocoNet mit der Zentrale kommuniziert.
Beachte: Das LocoNet-Interface unterstützt jetzt auch die Funktionen bis F28!
LocoNet-B
Zum Anschluss eines LocoNet-Booster (Uhlenbrock 63240 Power 4 oder ähnliches) wird am LocoNet-Bus auf den Leitungen 1 und 6 (Raildata) ein DCC-Signal benötigt. Für die Erzeugung des Signals mit einem 12 Volt Pegel wird ein kleiner 4A H-Brückentreiber IXYS IXDF604PI in 8-Pin PDIP Bauform genutzt. Dieser wird angesteuert vom DCC-Signal (PIN 6) oder beim Arduino MEGA über den seperaten PIN 11, wo ein konstantes DCC-Signal ausgegeben wird. Dies kann direkt an IN A und IN B des IXYS angelegt werden. Die Signalisierung für das An- und Abschalten oder bei Kurzschuss des Booster erfolgt mittels LocoNet-Befehlen an die Zentrale.
Hinweis: Eine Unterstützung erfolgt ab Software v4.83!
S88N
Rückmeldungen können mit dem S88N-Interface an die Steuersoftware weitergeleitet werden. Es werden bis zu 62 Rückmeldemodule mit 8 Eingängen unterstützt. Einstellungen zur Anzahl der abzufragenden Module lassen sich über die Webkonfiguration mittels LAN oder WLAN vornehmen. Aktiviert wird das S88-Interface mittels:
#define S88N
Hinweis: Ab ca. 5 Modulen sollte ein Ausgangstreiber 74HC244 für den S88 Bus verwendet werden.
interner Booster
![](/wiki/images/thumb/TLE5205-2_Booster.png/160px-TLE5205-2_Booster.png)
Ein einfacher und sehr kostengünstiger Booster (z.B.: H-Brücke TLE5205) zur Verstärkung des DCC-Signal direkt in der Zentrale. Implementierung einer zweiten Kurzschlusserkennung für den internen Booster und die Erzeugung eines separaten GO/STOP Signal. Die Aktivierung im Sketch erfolgt mittels:
#define BOOSTER_INT
#define BOOSTER_INT_ON LOW
#define BOOSTER_INT_OFF HIGH
Genutzt wird dazu ein H-Brückentreiber TLE5205 oder der Baugleiche TLE5206-2 welcher bis zu 5A Ausgangsstrom liefern kann. Eine Beschreibung ist auch unter Booster3 zu finden. Für eine Datenausgabe mit RailCom muss zwingend die Hardware des Booster3R verwendet werden.
- Achtung: Im Datenblatt des TLE5205 ist eine falsche Logiktabelle abgebildet!
interner Booster mit Railcom
![](/wiki/images/thumb/TLE_Booster3R.png/160px-TLE_Booster3R.png)
![](/wiki/images/thumb/Z21_globalRailComDetector.png/160px-Z21_globalRailComDetector.png)
Ab der Softwareversion v4.70 ist es möglich Railcom zu aktivieren. Um die für Railcom notwendige Abtastlücke zu erzeugen, muss der interne Booster umgebaut werden. Für die Ansteuerung des TLE wird nun ab v4.70 auch das DCC Signal auf den GO/STOP2 Pin (Booster intern) gelegt. Der Anschluss des internen Booster erfolgt damit so wie zuvor (DCC = DCC1), nur DCC2 des Booster muss an GO/STOP2:
- DCC => DCC1,
- GO/STOP2 (Booster intern) => DCC2,
- SHORT2 (Booster intern) => SHORT.
Um die geänderte Ansteuerung zu aktivieren muss im Sketch folgende Zeile 'aktiv' sein:
#define BOOSTER_INT_NDCC
RailCom selbst kann über folgende Zeile 'aktiviert' werden:
#define RAILCOM
Zur Anzeige der Stromaufnahme muss #define BOOSTER_INT_MAINCURRENT
aktiviert werden.
Damit ist nun auch möglich eine andere H-Brücke (zum Beispiel L6206N oder L298n) zu verwenden. (Die Kurzschlusserkennung mittels SENCE Widerstand muss dabei trotzdem installiert werden!)
Am Ausgang des Booster3R kann ein allgemeiner Railcom Detector angeschlossen werden. Über diesen können beim Programmieren mittels POM die CV-Daten von Dekodern auf dem Hauptgleis ausgelesen werden. Der RailCom Detector muss zwischen TLE Ausgang RAIL_1/RAIL_2 und dem Prog. Relais installiert werden. Bei der MEGA Variante wird "RAILCOM_RX" mit dem Serial3 Port verbunden. Ein Pull-Up von 100k kann für eine bessere RailCom Erkennung optional am Ausgang des UND installiert werden.
WiFi (WLAN Add-On)
![](/wiki/images/thumb/ESP8266-01_Modul.png/160px-ESP8266-01_Modul.png)
Für die WiFi-Kommunikation wird das ESP82660-01 Modul eingesetzt. Das ESP-Modul benötigt ein eigenes Sketch, welches im Downloadbereich heruntergeladen werden kann. Das ESP-Modul verbindet sich mittels Serial mit der Zentralen-MCU.
Anschluss ESP8266 WLAN-Modul:
- Arduino UNO = Serial (0,1) [oder über Software Serial (13,12)]
- Arduino MEGA = Serial2 (16,17)
- andere = Serial (0,1)
Die Kommunikation mit dem ESP erfolgt nicht mittels AT-Befehlen, sondern über ein modifiziertes Z21 LAN Protokoll mit Client-Erkennung (Sketch für ESP im Downloadbereich). Da das ESP-Modul mit 3,3Volt (ca. 200mA) arbeitet ist ein extra Spannungsregler und Pegelwandler auf dem WLAN-Interface zu installieren. Die zwei Taster auf dem Adapter im Bild, sind für das aufspielen des Sketch (Firmware-Update) und Reset beim ersten installieren des ESP-Moduls nötig. Programmiert wird das ESP wie ein Arduino, aus einer angepassten Arduino IDE heraus.
Für den Anschluss an der Zentrale können die auf dem Adapter installierten Taster und LED entfallen! Diese sind nur für die einmalige Programmierung notwendig. Um WLAN in der Zentrale zu aktivieren muss folgende Zeile einkommentiert werden: #define WIFI
Das ESP8266 stellt einen AcessPoint (AP) bereit. Über diesen kann mithilfe eines Webbrowser (http://192.168.0.111) die Standard-Einstellungen (SSID "Z21_ESP" und Passwort "12345678") und der WLAN Client-Betrieb (Client-Mode) an einem vorhandenen WLAN-Router konfiguriert werden. Wenn das S88-Interface genutzt wird, kann über das Webinterface auch die Modulanzahl angepasst werden.
Debugging (optional)
Um im Bedarfsfall interne Daten über den Serial Monitor überwachen zu können, gibt es dafür eine Debug-Ausgabe. Diese muss beim Arduino UNO und aktivem XpressNet oder WLAN komplett deaktiviert sein!
Aktiviert wird das Debugging mittels:
#define Debug Serial
#define DebugBaud 115200
muss auch aktiviert werden und legt die Geschwindigekeit fest.
Einstellung welche Daten/Protokolle ausgegeben werden sollen:
#define DEBUG
Ausgabe von Einstellungen und Softwareversion
#define REPORT
Ausgabe der Zustände von S88 Rückmelder
#define LnDEB
Ausgabe LocoNet Kommunikation
#define XnDEG
Ausgabe XpressNet Kommunikation
#define Z21DEBUG
Ausgabe Z21 Protokoll Kommunikation
#define Z21DATADEBUG
Ausgabe RAW Daten des Z21 Protokoll
#define Z21SYSTEMDATADEBUG
Regelmäßige Ausgabe der Systemwerte
#define DEBUG_WLAN_CONFIG
Konfiguration des ESP8266 Interface mit IP-Adressen, SSID, Passwort, etc.
#define RCDEB
RailCom RAW Daten werden ausgegeben.
Hardware MCUs (Schaltpläne)
Die Arduino Z21 DCC Zentrale kann unter verschiedenen Mikroprozessoren eingesetzt werden. Dabei richtet sich die Auswahl nach den notwendigen Funktionen (Interfaces).
- Arduino UNO Z21 DCC Zentrale (ATmega328p) - klein
- Arduino MEGA Z21 DCC Zentrale (ATmega2560) - mittel
- Sanguino Z21 DCC Zentrale (ATmega1284p/ATmega644p) - groß
- Arduino DUE Z21 DCC Zentrale (SAM3X8E 32-bit ARM) - schnell
Software
Die Software ist mit der Arduino IDE geschrieben.
- Arduino Plug-In: Anpassung der Arduino IDE für die Funktion mit Sanguino oder ESP-Modul sind unter Arduino#Hardware beschrieben.
Das Sketch kann universal für den Arduino UNO [eingeschränkt], Arduino MEGA oder für den Sanguino Mikroprozessor ATmega1284p (ab Sw. v31) eingesetzt werden. (Übersicht Arduino Mikroprozessoren)
In dem Sketch ab der Softwareversion 3x sind alle Protokolle variable aktivierbar/deaktivierbar. Bitte nutzt die Sketch Version 4 oder höher, hier wurden viele Fehler beseitigt! Bitte ladet euch auch die jeweils letzte Version der Bibliotheken herunter, denn nur so ist die Software lauffähig!
- Bemerkung: Ab der Version 31 ist die neue DCC Interface Library mit Timer 2 funktionalität zu nutzen. Darüber hinaus, wurden die unterstützten Protokolle/Interface für dem Arduino UNO eingeschränkt (zu wenig RAM/ROM)!
Z21 WLAN Add-On Sketch
- Z21 ESP8266 UDP v31 Sketch (28.05.2020) Download - mit automatischer Baudratenbestimmung
- Z21 ESP8266 UDP v31 Sketch (28.05.2020) Download - mit automatischer Baudratenbestimmung
Diese Software ist für das WLAN Add-On (ESP8266) der Arduino Z21 DCC Zentrale notwendig. Sie muss in das ESP8266, mit Hilfe der Arduino IDE, hochgeladen werden. Die Software beinhaltet einen AJAX Webserver zur Konfiguration und die Option die S88-Modulanzahl zu ändern. Außerdem ist ein Reset Fall-back (Timeout) des Daten-Buffer für die Serial-Kommunikation zur Arduino Z21 DCC Zentrale implementiert. Zu beachten ist, dass es sich hierbei nur um das Sketch handelt welches für das WLAN-Modul notwendig ist, dies ist keine eigenständige Zentrale.
Info: Bei Konfigurationsänderungen am AccessPoint (AP) wird dieser beim Speichern automatisch neu gestartet - es erfolgt dadurch keine Rückmeldung oder Bestätigung des Speichervorgangs! Eine freie Kanalauswahl (1-13) für den AP ist nur möglich, wenn keine Client Verbindung besteht.
Fix v27: Akzeptiert jetzt auch eine SSID mit nur einem Zeichen.
Arduino Z21 DCC Zentrale Sketch
Änderungen:
- Fix von kleinen Fehlern beim Einlesen von Analog-Werten
- Zusatzlicher DCC PIN beim Arduino MEGA ohne Abschaltung
- Gleisspannung ist beim nach dem Starten direkt aktiv
- Verbesserung der Serial-Kommunikation mit dem ESP WLAN Interface
- Unterstützung des günstigen ENC28J60 Ethernet Interface
Ältere Versionen können über Sourceforge heruntergeladen werden:
notwendige Bibliotheken
Hier sind die notwendigen Bibliotheken aufgeführt. Nur damit ist das Sketch der DCC Zentrale lauffähig. Informationen wie ihr Bibliotheken installiert, findet ihr auf der Arduino Webseite (engl.).
- Arduino Z21 LAN Protokoll Library - Arduino Z21 LAN Protokoll Library - Neu: POM read byte!
- Arduino DCC Interface Library - NEU: Support von Railcom und zusätzlicher invertierter DCC Ausgang.
- Arduino XpressNet Master Library - Neu: Automatisches wechseln zwischen Master und Client Modus
- Arduino LocoNet Library
- Arduino UIP Ethernet Library Download
Rechtsbehelf
Hinweis: Die auf dieser Webseite vorgestellte Software und Schaltungen können für den privaten Gebrauch frei genutzt werden, eine kommerzielle Verwertung bedarf einer schriftlichen Genehmigung.