Hallo,
ich möchte mein Raspberry-Projekt kurz vorstellen. Es geht um das Thema Steuerung einer Modelleisenbahn, genauer um die Steuerung der Weichen, Signale und Beleuchtungen (die digitale Zugsteuerung ist in Planung aber noch Zukunftsmusik). Haben sicher schon viele gemacht, aber vielleicht interessiert es trotzdem jemanden.
Aufbau:
Kern des Ganzen ist ein Server (in C geschrieben) auf einem Raspberry Model B, der eine Konfigurationsdatei einließt und damit die gesamte Modellbahnanlage "kennt". Der Server kommuniziertauf der einen Seite über ein einfaches UDP-Protokoll mit einer GUI (Geschrieben in Perl/Tk). Diese GUI kann ebenfalls auf dem Raspberry laufen, oder auf einem anderen PC im Netzwerk.
Anstelle der GUI könnte man auch eine "intelligente" Software zur automatischen Steuerung verwenden. Der Server bildet praktisch eine Software-Schnittstelle zur Anlage, und wer diese Schnittstelle benutzt, ist letztlich egal. Bisher existiert aber nur die GUI.
Auf der anderen Seite gibt der Server Steuerbefehle für die Anlage über den I2C-Port des Raspberry aus. An diesem I2C-Bus hängen zur Zeit drei Microcontrollerboards, von denen jedes 64 digitale Ausgänge ansteuern kann. Jeder Controller interpretiert die Steuerbefehle vom Raspberry und steuert dann einen oder mehrere digitale Ausgänge an. Streng genommen bildet der Raspberry nur einen Teil der ganzen Geschichte, ein großer Teil der Arbeit steckt in den Controllerboards.
Die Modellbahnanlage ist zur Zeit aus drei Segmenten aufgebaut, von denen jedes einen eigenen Controller verwendet. Das ist ein Kompromiss zwischen einer vollkommen zentralen Steuerung mit einem großen Controller (das benötigt kilometerlange Kabelstränge und ist kaum erweiterbar) oder einer vollkommen dezentralen Lösung (jede Weiche/Signal/Lampe hat ihren eigenen Controller, aber wer will schon 50 Controllerplatinen bauen).
Die Controller bestehen aus einen PIC-Prozessor mit einer Menge Hardware drumherum (Spannungsversorgung, Schieberegister, Leistungstreiber). Wenn die Anlage wächst, was sie hoffentlich
irgendwann tun wird :-), kann man einfach weitere Controllerboards an den I2C-Bus anschließen.
Es gibt keine "anlagenspezifischen" Teile in dem ganzen System bis auf die Server-konfigurationsdateien. Darin steht, welche Weiche/Signal/Lampe an welchen Ausgang von welchem Controller angeschlossen ist.
Aktueller Stand:
Funktioniert zuverlässig und ist im Einsatz. Nach dem Starten schaltet der Server zunächst alle Weichen und Signale in ihren Ausgangszustand (das rumpelt dann mal kräftig auf der Anlage). Dann wird die GUI gestartet. Der ganze Startvorgang dauert recht lange (etwa eine Minute vom Einschalten) aber danach ist das System flüssig bedienbar.
Zukünftige Arbeiten:
- Abhängigkeiten zwischen Weichen und Signalen sind noch nicht implementiert.
Beispiel: Das Bahnbetriebswerk besteht aus einer baumartigen Verzweigung. Jeder Zweig führt über mehrere Weichen und Signale. Bisher muss man alle diese Weichen und Signale manuell einstellen, wenn man eine Lokomotive in einen Zweig hineinfahren will. Besser wäre es, man wählt nur den Zweig aus und alles wird automatisch eingestellt. Ich überlege, diese Abhängigkeiten mit einem LUA-Script zu beschreiben.
- Bisher gibts keine Möglichkeit zur Rückmeldung von Zuständen zum Server. Das ist ein Nachteil gegenüber anderen Systemen, ist aber grundsätzlich kein großes technisches Problem. Muss halt gemacht werden. Ist aber eigentlich nur interessant für eine vollautomatische Steuerung, und die ist zur Zeit nicht geplant.
- Das anwendungsseitige Protokoll, also zwischen Server und GUI, ist sehr rudimentär. Hier wäre das SRCP-Protokoll besser geeignet (Simple Railroad Control Protocol). Dann könnte man auch andere Software zur Steuerung verwenden. Meine Perl/TK-Gui ist keine Schönheit, aber GUIs zu schreiben ist auch nicht gerade meine Lieblingsbeschäftigung. Die Umstellung auf SRCP erfordert jedoch tiefgehende Änderungen am Server.
- Eine Remote-GUI auf einem alten Android-Tablet und einer Anbindung an den Raspberry über WLAN oder Bluetooth schwirrt mir auch im Kopf herum. Dann kann man die Anlage steuern, ohne vor dem Bildschirm sitzen zu müssen. Allerdings muss die ganze GUI dann neu implementiert werden. Perl/TK auf Android gibts meines Wissen nicht.
Ok, jetzt werden sicher einige sagen: Gibts doch schon alles, wozu also das Ganze?
1. Die Preise für kommerzielle digitale Modellbahnsteuerungen sind geradezu lächerlich überzogen. Ich hätte ein Vermögen dafür investieren müssen. Das Hobby heiß Modellbau, nicht Modellkauf.
2. Die Teile der Modellbahnanlage sind sehr alt (teilweise über 40 Jahre), und ich wollte nichts daran verändern oder umbauen. Die Elektronik und Software ist gezielt so ausgelegt, dass sie mit dem alten Zeug funktioniert. Sogar die alten Transformatoren verwende ich weiter.
3. Ich kann es, und mir macht es Spaß, deswegen habe ich es gemacht. Mein System ist zu keinem kommerziellen System kompatibel, ich habe es genau so gebaut, wie ich es mir gefällt. It's my baby.
Das ganze ist übrigens ausschließlich auf Linux entwickelt worden. Bis auf die Software für das Platinenlayout der Microcontroller habe ich ausschließlich Opensource-Programme und -Bibliotheken verwendet.
Ok, comments are welcome
Auf Wunsch hier noch ein paar Bilder :
Screenshot der Perl/TK-GUI
Blick über die Anlage bei Nacht
Eines der drei Microcontrollerboards unter der Anlage
Die "Schaltzentrale" mit dem Raspberry Pi