Mit dem Raspberry Pi die Modellbahn steuern

Stephan Richter, Promotionsstudent an der Uni Jena, hat viele Hobbys, eines sind Modelleisenbahnen. Im Frühjahr 2014 wollte er eine neue Anlage aufbauen, nachdem er eine Modellbahn-Ausstellung besucht hatte. Ausschlaggebend war dabei, dass die Anlage möglichst kostengünstig in der Installation sein sollte. Wie er diese Aufgabe gelöst hat, erfahren Sie in diesem Beitrag:
Für mich war dabei wichtig, dass ich die Modellbahn digital steuern kann und das zudem ohne große Kosten zu verursachen. Dazu habe ich an einigen Stellen auf "selbstgemachte" Alternativen zurückgegriffen.
Statt einer teuren Digitalzentrale habe ich einen preisgünstigen Raspberry Pi verwendet. Anstelle verhältnismäßig teurer S88-Rückmelde-Encoder benutzte ich preiswerte Schieberegister. Herkömmliche Weichenantriebe habe ich durch KACO-Relais ersetzt. Von einem Desktop-PC aus steuere ich die Modellbahn dank RocView.
Falls Sie sich dazu entschließen meiner Bauanleitung zu folgen, benötigen Sie Folgendes:
- Lötkenntnisse
- einen Raspberry Pi
- einen SRCP-Client wie z. B. jman für den PC (SRCP = Simple Railroad Command Protocol) oder SRCPC für Ihr Smartphone
Die digitale Modellbahn via Computer steuern
Wenn man heute eine Modellbahn aufbauen möchte, kommt der Punkt, an dem man sich für digital oder analog entscheiden muss, wobei es für beide Varianten gute Argumente gibt:
Die digitale Modellbahn hat jedoch den Vorteil, dass sich mehrere Züge zur selben Zeit auf einem Gleis steuern lassen. In jedem Triebfahrzeug muss sich dafür ein kleines Stück Elektronik befinden - der Digitaldecoder.
Dieses elektronische Wunder bietet, obwohl es nur fingernagel- bis münzgroß ist, zahlreiche Möglichkeiten. Eine davon ist zum Beispiel, die Modellbahn direkt per Computer zu steuern und zu automatisieren.
Da die Digitaldecoder allerdings auch sehr kostspielig sind und jede Lok, Weiche und jedes Signal damit ausgerüstet werden muss, spricht der finanzielle Aspekt gegen die digitale Technik. Doch es kann mit ein paar Tricks an manchen Stellen gespart werden.
Hierfür muss das PC Signal in die Decodersprache umgewandelt werden, die mittels einer Digitalzentrale übersetzt wird. Diese kostet zwischen 50 und 100 Euro. Oder man lässt das Signal direkt von einem PC erzeugen.
An dieser Stelle kommt die Software SRCPD, ein Open-Source-Programm, ins Spiel. Es erzeugt eine Schnittstelle für das Steuersignal der Züge und des Zubehörs. Es erhält die umzusetzenden Befehle vom sogenannten Simple Railroad Command Protocol.
Das Simple Railroad Command Protocol (SRCPD) ist ein offener Standard für die Kommunikation von Modellbahnbefehlen ist. Zudem ermöglicht es dem Nutzer, ein eigenes Programm zu schreiben oder RocRail, ein Modellbahnsteuerungs-Programm, die Anlage steuern zu lassen.
Weil aktuelle PCs aber fast nie eine serielle Schnittstelle besitzen, ist ein Raspberry Pi empfehlenswert. Dieser ist mit allen herkömmlichen Komponenten eines PCs ausgestattet, kostet in etwa 30 Euro und kann das Digitalsignal mittels SRCPD erzeugen.
Dafür muss Folgendes vorbereitet werden:
- Der Booster der Modellanlage muss mit dem Raspberry verbunden werden
- auf dem Raspberry muss die Software installiert werden
- Rückmeldekontakte sind für eine Automatisierung der Modellanlage anzuschließen
Den Raspberry mit dem Booster verbinden
Ein Booster ist notwendig und muss zwischengeschaltet werden, weil das Signal des Raspberry Pi selbst zu schwach ist. Erst ein Booster sorgt für die erforderliche Leistung. Diese sind in einfacher Ausführung relativ günstig und ab ca. 20 Euro bei eBay erhältlich. Eine Roco "Zentrale" 10764 aus einem Digital-Startset war meine Wahl für dieses Projekt.
Weil das Signal des Raspberrys noch nicht mit dem des Boosters übereinstimmt, muss es von einem Pegelumsetzer, einem Chip namens Max232ECPE, angepasst werden. Das 3-V-Logiklevel des PCs wird so auf das 5-V-Signal des Boosters gebracht. Die folgende Abbildung erklärt, wie die beiden zu verbinden sind.
Das Raspberry versorgt den Chip mit Strom. Von ihm aus führen zwei Leitungen, Signal sowie Erde (T1 und GND) über ein Kabel zum Booster, welcher durch einen Westernstecker verbunden ist. Das notwenige Kabel, womit sonst Lokmäuse und Booster gekoppelt werden, habe ich ebenfalls einer Startpackung entnommen.
Das Schaubild in unserer Bildershow zeigt zudem 3 Keramikkondensatoren mit 0,1 µF, die Sie in jedem Elektronikfachgeschäft bekommen. Ich habe mir für den ersten Aufbau eine Sockelleiste besorgt, an welche ich die Kondensatoren gelötet habe. Der Chip sollte jedoch erst nach dem Löten aufgesteckt werden, weil die Hitze ihn zerstören kann.
Die Software installieren
Um die Software zum Laufen zu bringen, sind folgende Schritte notwendig:
- Das Betriebssystem installieren
- Die Logmeldung auf dem Terminal abschalten
- Den SRCP-Server kompilieren und installieren
- Anschließend einrichten Testen Und automatisch starten
Das Betriebssystem installieren
Zunächst muss auf dem Raspberry ein Betreibsystem installiert werden, damit überhaupt Programme ausgeführt werden können. Von Berryterminal kann der sogenannten Bootloader als Zip-Datei (berryboot-YYYYMMDD.zip) heruntergeladen und auf einer leeren SD-Karte entpackt werden. Anschließend wird die Karte in den Raspberry Pi gesteckt und mit Tastatur, Maus, Monitor, Internet und danach mit der Stromzufuhr verbunden.
Sobald der Einrichtungsdialog erscheint, wird gefragt, ob oben und unten grüne Balken zu sehen sind. Je nachdem ist "Yes" (ja) oder "No" (nein) zu wählen. Die Netzwerk-Voreinstellungen können übernommen werden und die Regions- und Spracheinstellungen sollten daraufhin automatisch erfolgen.
Danach erscheint die Frage, ob die Installation auf die SD-Karte oder auf ein anderes Medium erfolgen soll. Da "SD-Karte" bereits voreingestellt ist, kann dieser Schritt übersprungen werden. Anschließendes Klicken auf "Format" richtet die SD-Karte ein und installiert den Bootloader. Daraufhin erscheint die Betreibsystem-Übersicht, in der "Debian Wheezy Raspbian" zu wählen und "OK" anzuklicken ist. Nach einigen Minuten ist das Betriebsystem heruntergeladen und installiert. Es erscheint der BerryBoot Menü-Editor, der mit der ESC-Taste verlassen wird und das Betriebssystem startet.
Es müssen beim ersten Start noch ein paar Einstellungen vorgenommen werden:
- Das Standardpassword "raspberry" sollte unter 'Change User Password' durch ein neues Passwort ersetzt werden
- Es sollte bei 'Enable Boot to Desktop/Scratch' "Console" eingestellt werden, weil eine Desktop-Umgebung das System ausbremsen würde. Für ein deutsches Tastaturlayout ist unter 'Internationalization' "de_DE.UTF8" einzustellen. Die nicht benötigte Kamera kann mit 'Enable Camera' ausgeschaltet werden
- Das 'Add to Rastrack' kann ignoriert werden 'Overclock' ist nicht notwendig
- Falls ein Zugriff via Netzwerk auf das Gerät gewünscht ist, sollte unter 'Advanced Options' SSH aktiviert und die Option "Update" für den neusten Versionsstand benutzt werden.
Zuletzt werden die Einstellungen mit "Finish" gespeichert und Sie gelangen in ein Terminal (eine Eingabeaufforderung).
Die Logmeldungen auf dem Terminal abschalten
Das standardmäßig auf dem seriellen Port installierte Debian hilft bei der Fehlersuche und gibt Statusmeldungen aus, die aber in unserem Fall nur störend sind. Zum Deaktivieren muss in der Datei "/etc/inittab" die Zeile "T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100" entfernt und danach der Raspberry neugestartet werden. Für Linux-Kenner lässt sich das einfach in der Konsole erledigen. Als Alternative ist "sudo startx" einzugeben. Daraufhin öffnet sich eine Desktop-Umgebung mit Admin-Rechten. In dessen Startmenü befindet sich unter Zubehör der Texteditor Leafpad. Dieser muss gestartet werden und danach klicken Sie auf "Datei > Öffnen". Im geöffneten Dialog wird links "Dateisystem" gewählt und dann zu "/etc" übergegangen. Nach dem Öffnen der Datei "inittab", wird die entsprechende Zeile entfernt. Jetzt muss nur noch gespeichert und die Sitzung über das Startmenü durch "Abmelden" verlassen werden.
Den SRCP-Server kompilieren
Zunächst wird das Programm zur Erzeugung des Digitalsignals auf den Raspberry heruntergeladen und installiert, wozu noch einmal eine Desktop-Umgebung zu öffnen ist. Diesmal ohne Administrator-Rechte, weshalb nur "startx" ohne "sudo" eingegeben wird.
Die Desktop-Verknüpfung "Midori" ist ein simpler Webbrowser, der es ermöglicht, unter " http://sourceforge.net/projects/srcpd/files/srcpd/" den erforderlichen Quellcode herunterzuladen. Im Archiv ist eine Version des Quellcodes auszuwählen - beispielsweise "srcpd-2.1.2.tar.gz" oder "srcpd-2.1.2.zip".
Wichtig: Die 2.1.1 Version läuft auf dem Raspberry nicht, weshalb 2.1.2 (falls keine neuere vorhanden) genutzt werden sollte! Diese wird heruntergeladen und die gepackte Datei, die Sie mit dem im Startmenü unter Zubehör befindlichen Dateibrowser finden, geöffnet. Vermutlich befindet sich die Datei unter "/home/pi". Nach anschließendem Rechtsklicken darauf und Wählen der Option "Hier entpacken" erscheint der Ordner "srcpd-2.1.2". Dieser wird mit Doppelklick geöffnet und danach ist "F4" zu drücken.
Im erschienenen Terminal führen Sie "./configure" aus. Es ist ein Programm zur Überprüfung der benötigten Hilfsprogramme. Die erste Ausführung dieses Programms müsste zu folgender Fehlermeldung führen: "checking for libxml - version >= 2.4.0... no [...] configure: error: no matching library found". Hieraus ist zu schließen, dass ein Hilfsprogramm fehlt, welches Sie aber mit dem Befehl "sudo apt-get install libxml2 libxml2-dev telnet" installieren können. "sudo" bedeutet wieder "als Administrator", "apt-get install" ist der Installationsbefehl und "telnet, libxml2" und "libxml2-dev" sind die Namen der zu installierenden Programme.
Nach der Installation geben Sie erneut "./configure" ein. Auf den von mir benutzten Debian und SRCP-Versionen liefen die Vorbereitungsprogramme ohne Probleme durch. Dies besagt die Zeile: Run 'make' to continue. Daraufhin geben Sie "make" ein und drücken Enter.
Das Programm wird jetzt zusammengestellt und die Installation vorbereitet, was einige Minuten dauert. Lassen Sie sich nicht von den etwas kryptischen Meldungen während der Installation beunruhigen - das ist normal. Falls die letzte Zeile "make[1]: Leaving directory `/home/pi/srcpd-2.1.2'" lautet, hat das Erstellen funktioniert und es kann mit "sudo make install" installiert werden.
Das Einrichten
Um das Programm einzurichten, starten Sie zunächst wieder die grafische Oberfläche mit "sudo startx" und öffnen dann "Leafpad". In der Datei "/usr/local/etc/srcpd.conf" ist die Zeile "<verbosity>3</verbosity>" in "<verbosity>0</verbosity>" zu ändern. Den Abschnitt "<bus number="1"> ... </bus>" ersetzen Sie bitte durch
<bus number="1">
<ddl>
<enable_maerklin>no</enable_maerklin>
<enable_nmradcc>yes</enable_nmradcc>
<enable_usleep_patch>yes</enable_usleep_patch>
</ddl>
<use_watchdog>no</use_watchdog>
<verbosity>0</verbosity>
<auto_power_on>no</auto_power_on>
<device>/dev/ttyAMA0</device>
Eventuell lässt sich "maerklin aktivieren/DCC" deaktivieren. Damit später keine Timing-Probleme auftreten, ist die Verbosity-Einstellung bzw. das Abschalten der Logmeldungen entscheidend. Sobald Sie gespeichert haben, können Sie sich von der grafischen Oberfläche abmelden.
Der Test
Um zu testen, ob Sie das Programm ausführen können, tippen Sie "/usr/local/sbin/srcpd -v" in die Konsole ein und drücken Enter. Daraufhin sollte das Programm die eigene Version angeben, wobei bei mir diese Ausgabe erschien: "srcpd V2.1.2; SRCP 0.8.4; SRCPOTHER 0.8.3"
Der nächste Befehl ist "/usr/local/sbin/srcpd -n" und sollte das Programm starten. Falls Sie erst nichts sehen, ist das nichts Ungewöhnliches. Wechseln Sie mit Strg+Alt+F2 in eine zweite Konsole und melden Sie sich dort mit Nutzername (pi) und Passwort (raspberry) an. Um die momentane Adresse des kleinen Computers zu erfahren, wird "ip a" eingegeben. Es sollte jetzt eine Ausgabe erscheinen wie:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc >pfifo_fast state UP qlen 1000
link/ether b8:27:eb:d9:b1:e5 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.133/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
Bei mir war 192.168.0.133 die gewünschte Adresse. Geben Sie nun "telnet <Adresse> 4303" ein. Bei mir war es dann folglich "telnet 192.168.0.133 4303". Hierdurch melden Sie sich bei dem Programm für Testzwecke an. Es müsste zudem die Antwort "Escape character is '^]'. srcpd V2.1.2; SRCP 0.8.4; SRCPOTHER 0.8.3" kommen, was bedeutet, dass der Server funktionstüchtig ist und auf Clients wie z. B: jman oder SRCPC wartet. Diese Verbindung ist ebenso einfach durch Strg+AltGr+] drücken und "quit"-Eingabe wieder zu trennen.
Zu diesem Zeitpunkt sollte ein beliebiges Programm, welches das Simple Railroad Command Protocol (SRCP) beherrscht, mit der oben ermittelten Adresse des Raspberry verbunden werden können. Falls Sie den Anschluss bereits wie beschrieben vorgenommen haben, können Sie jetzt die Modellbahnfahrzeuge via Computer fahren lassen.
Das automatische Starten
Weil es viel zu umständlich ist, sich jedes Mal neu am Raspberry anzumelden und das Programm per Hand zu starten, sind noch ein paar Modifikationen nötig.
Zunächst geben Sie "sudo startx" ein und öffnen per Leafpad die Datei "/etc/rc.local". Dann fügen Sie vor der Zeile "exit 0" die Zeile "/usr/local/sbin/srcpd" ein und speichern die Datei. Dann melden Sie sich ab und starten den Raspberry mit "sudo reboot" neu.
RocRail - die Software
RocRail erstellt ein virtuelles Gleisbildstellpult und ermöglicht es auf diese Weise, eine Modellbahnanlage vom PC aus zu steuern sowie zu automatisieren.
RocRail installieren
Sobald der Raspberry neugestartet ist, laden Sie die Konsole, bei der sie sich wieder mit "pi" und "raspberry" anmelden müssen. Jetzt ist noch die Installation einiger Hilfsprogramme notwendig, wozu Sie zunächst "sudo -s" ausführen, um sich wieder als Admin anzumelden. Es steht nun etwas wie "root@raspberrypi:/home/pi#" in der Eingabezeile. Dann führen Sie "apt-get install git libusb-1.0-0-dev" für die benötigten Programme aus. Nach deren Installation verlassen Sie den Admin-Modus mit "exit".
Jetzt holen Sie sich mit
git clone --depth 1 https://github.com/rocrail/Rocrail.git
Rocrail
den Quellcode von RocRail, was wieder etwas dauert. Anschließend wechseln Sie durch "cd Rocrail" in das heruntergeladene Verzeichnis, wo Sie "make server" ausführen, damit sich die Server-Software erstellt. Es erscheinen wieder einige kryptische Meldungen bis letztlich die Zeile "make[2]: Leaving directory /home/pi/Rocrail/rocnetnode'<br/> make[1]: Leaving directory/home/pi/Rocrail/rocrail'" auf dem Desktop angezeigt wird.
Das gerade erstellte Programm muss nun installiert werden, wozu Sie erst "sudo make install" eingeben und dann das Serverprogramm mit "/opt/rocrail/rocrail.sh" starten.
Falls Sie von einem anderen PC des Netzwerks aus RocView starten, können Sie sich per "Datei" > "Verbinden mit..." mit dem zuvor geschaffenen RocTail-Server verbinden.
Wenn dies funktioniert, können Sie RocRail noch so einrichten, dass es automatisch startet, wofür Sie ein zusätzliches Hilfsprogramm benötigen. Dieses wird mit "sudo apt-get install screen"installiert. Anschließend betreten Sie durch "sudo startx" wieder die grafische Oberfläche als Administrator und öffnen erneut Leafpad sowie die Datei "/etc/rc.local". Hier fügen Sie die Zeilen "sleep 10" und "su pi -c 'screen -d -m -S RocRail'" ein und schreiben zwischen die Zeilen "/usr/local/sbin/srcpd" bitte die Zeile: "exit 0". Jetzt starten Sie "leafpad .screenrc", damit eine neue Konfigurationsdatei für das Programm "Screen" erzeugt wird. Hier rein schreiben Sie:
startup_message off
altscreen on
screen bash -c 'sleep 7; /opt/rocrail/rocrail.sh'
detach
Sobald Sie nun einen Neustart durchführen, sollten der SRCP-Server und RocRail auf dem Raspberry gestartet werden.
RocRail einrichten
Im nächsten Schritt muss die Anbindung von RocRail an den SRCP-Server erfolgen, wozu Sie in RocView auf "Datei" > "Rocrail Eigenschaften" gehen, was nur verfügbar ist, solange RocView mit dem Server verbunden bleibt. Klicken Sie dann im geöffneten Dialog auf den Reiter "Zentrale".
Entfernen Sie die Zentrale "cvs-1 - virtual", entscheiden Sie sich bei "Neu" für die Zentrale "srcp" und klicken Sie auf "Hinzufügen". Nachdem Sie die neue Zentrale markiert haben, wählen Sie "Eigenschaften". Hier müssen diese Werte eingetragen werden:
Schnittstellenkennung: srcp
Hostname: 127.0.0.1
Port: 4303
Gerät: /dev/ttyAMA0
Sub-Bibliothek: TCPIP
Gehen Sie im gleichen Dialog auf "Busse" und setzen Sie alle Werte auf 1. Der Server ist der einzige, der auf 0 gesetzt wird. Die gemachten Änderungen aktivieren sich allerdings erst nach dem Neustart von RocView. Danach ist es allerdings möglich, in RocView Lokomotiven anzulegen und diese per Hand zu steuern. Auf eine Erklärung dessen verzichte ich jedoch an diesem Punkt und verweise Sie auf die Seite http://wiki.rocrail.net/doku.php. Dort wird Ihnen genau erklärt, wie die Steuerung funktioniert.
Die Rückmeldekontakte mit dem Raspberry Pi verbinden
Hier ist es erneut notwendig, etwas Elektronik zu löten. Die benötigten Teil dafür sind: ein MCP23S17-Chip, eine Lochrasterplatine und eine Sockelleiste. Auf der folgenden Abbildung sehen Sie den Schaltplan zum Anschließen des Chips.
Zuerst wird die Leiterbahn auf der Platine unterbrochen und die Sockelleiste über die Trennstelle gelötet. Daraufhin werden Drahtbrücken und Widerstände gesetzt, um Verbindungen herzustellen, die dem Aufbau des ersten Bildes entsprechen. Die Gleiskontakte, die gegen Masse (GND) schließen, können Sie an die Pins 21 bis 28 anschließen. Die Stromversorgung (3V bis 3,3V) kann mit zwei Batterien oder einem Netzteil verbunden werden. Dadurch ist die Hardware vollständig.
Zusätzlich ist noch ein wenig Software vonnöten, die die Kontaktinformationen bereitstellt.
Auf Rückmeldeergebnisse reagieren
Um SRCP-fähige Programme mit Informationen über Kontakt-Ereignisse zu versorgen, habe ich das Python-Script " model-rail-control" geschrieben. Es ist eine Schnittstelle zwischen dem SRCP-Programm und einem Client-Programm. Getestet habe ich es mit RocRail und der Oberfläche RocView.
Als nächstes sind diese Schritte auszuführen:
model-rail-control-Script installieren RocRail-Eigenschaften anpassen RocRail testen
Das model-rail-control-Script installieren
Zunächst müssen Sie sich wieder als Benutzer mit "pi" und dem passwort "raspberry" anmelden. Anschließend führen Sie diesen Befehl aus:
git clone
https://github.com/StephanRichter/model-rail-control.git
Das Script wird dadurch heruntergeladen und in dem Ordner "/home/pi/model-rail-control" abgelegt. Ein automatischer Start sollte hierbei ebenfalls eingerichtet werden, was Sie diesmal jedoch via Screen-Konfiguration erledigen können. Dazu starten Sie leafpad .screenrc und schreiben
split
screen bash -c 'cd /home/pi/model-rail-control/src; sudo ./proxy.py'
focus down
hinein und ergänzen zwischen den bereits vorhandenen Zeilen "altscreen on" noch "screen bash -c 'sleep 7; /opt/rocrail/rocrail.sh'".
Die RocRail-Eigenschaften anpassen
Sobald Sie den Raspberry Pi neugestartet haben, öffnen Sie wieder RocView. Falls noch keine automatische Serververbindung zu raspberry pi aufgebaut wurde, stellen Sie diese im Menü "Datei" her. Dann gehen Sie wieder im Menü "Datei" auf die Option "Rocrail Eigenschaften". Jetzt sollte sich der bekannte Dialog öffnen, in dem Sie auf "Zentrale" drücken sowie den SRCP-Server markieren. Ändern Sie noch die Portnummer unter "Eigenschaften" von 4303 in 4034. Nach dem Speichern sollte der Kontakt zu den zuvor angeschlossenen Reckmeldern hergestellt sein.
RocRail testen
Um die Funktionen zu überprüfen, loggen Sie sich in den Raspberry ein und führen "screen -r" aus. Es erscheint die Ausgabe von RocRail. Falls Sie nun einen an den MCP23S17 angeschlossenen Rückmelder von Hand auslösen, wird voraussichtlich eine entsprechende Fehlermeldung angezeigt. Dafür muss aber auch das Monitoring in den RocRail-Einstellungen angeschaltet sein, wozu Sie einfach in RocView auf "Datei > Rocrail Einstellungen" gehen und dann nur auf "Fehlerprotokoll" klicken.
Bei mir wird die Meldung 1000 sensor 0:31=1 ident= eingeblendet. Es ist also der Sensor Nummer 31 ausgelöst worden. Sie können in dem Gleisplan von RocView nun Rückmelder einbauen. Hierfür geben Sie nach diesem Beispiel bei der Eigenschaft "Schnittstelle" 0 für den Bus-Wert (die Zahl vor dem Doppelpunkt) sowie 31 für den Sensor-Wert (die Zahl nach dem Doppelpunkt) ein.
Sobald daraufhin der Sensor ausgelöst wird, sollte der Sensor-Gleisabschnitt in RocView blinken.
Damit sind alle Vorbereitungen abgeschlossen. Sie können nun eine automatische Modellbahnsteuerung in RocView programmieren, was jedoch kein Teil dieser Anleitung mehr ist. Aber unter RocRail-Informationen finden Sie alles Nötige, um die Aufgabe zu meistern.