Modellbahnsteuerung für Weichen/Licht/Signale

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • 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


    Noch ein Screenshot


    Blick über die Anlage bei Nacht :)


    Eines der drei Microcontrollerboards unter der Anlage


    Die "Schaltzentrale" mit dem Raspberry Pi

    Einmal editiert, zuletzt von Cherrypie (30. März 2015 um 21:27)

  • Also die Anlage selbst ist noch eine ziemliche Baustelle, eigentlich nur ein Brett mit Schienen drauf. Landschaftsbau fehlt noch fast ganz. Da es mir hauptsächlich um den Spaß beim Spielen geht und weniger um exakte Vorbildtreue, habe ich ziemlich viele Schienen draufgepackt. Das Brett hat eine Größe von etwa 2.50m*1.50m. Ein echter Modellbahner würde mich vermutlich auslachen, alleine schon wegen der alten M-Gleise, die nicht so wirklich "echt" aussehen. Die Elektronik ist auf einem deutlich besseren Stand :)

  • Hallo Cherrypie,

    genau was du realisiert hast, ist das was ich machen möchte. Gibt es eine Mögöichkeit von dir weitere Infos zu bekommen, oder auch deine Softwarelösung. Ich bin war im Begriff mir eine Digitalzentrale zu zu legen, aber das ist eigentlich nicht das was ich möchte. Es wäre daher schön, von dir zu lesen.

    Viele Grüße,


    Timo

  • Timo

    Klar, ich wollte das ganze evtl. sowieso unter die GPL stellen.

    Ich muss aber darauf hinweisen, dass es ein privates Bastelprojekt ist und
    ich keine Garantie für irgendwas übernehmen und natürlich auch keinen
    24-h Support leisten kann. Da stecken mehr als zwei
    Jahre Freizeit-Entwicklungsarbeit drin, und Du solltest genau
    verstehen, wie es funktioniert.

    Wenn Du das akzeptierst, ist das ganze kein Problem.

    Die GUI ist wie gesagt in Perl/TK geschrieben und sollte auf jeder
    Plattform laufen (außer Android, da gibts anscheinend kein gescheites Perl).
    Entwickelt und getestet ist das ganze nur auf Linux.
    Die Widgets für Weichen/Signale etc. sind vorhanden, nur den Gleisplan
    musst Du passend zu Deiner Anlage selbst zeichnen. Das ist nervig, muss
    man aber auch nur einmal machen. Das ganze geht sicher eleganter,
    aber GUI-Programmierung wie gesagt ist nicht so meine Baustelle.

    Der Server ist in C geschrieben. Da er recht klein ist, habe ich ihn ohne
    Crosscompiler direkt auf dem Raspi übersetzt. Der Server benötigt auch die
    Konfigurationsfiles mit Deiner Anlagenbeschreibung. Beachte bitte die beschriebenen
    Einschränkung mit den Abhängigkeiten.

    Die Software für die Microcontroller ist auch in C geschrieben und mit SDCC
    übersetzt. Zwischenzeitlich gab es neue Releases vom SDCC und ich muss
    nochmal testen, ob man die Sourcefiles noch ohne Anpassung übersetzen kann.
    Sollte aber kein großer Act sein.

    Der Microcontroller ist ein PIC18F2550. Der ist ziemlich oversized,
    aber ich hatte davon noch welche übrig aus einem anderen Projekt,
    deswegen habe ich sie benutzt. Da könnte man aber auch einen anderen nehmen,
    z.B. kleiner PICs oder AVR. Die Software ist nicht wirklich kompliziert und leicht
    zu portieren. Voraussetzung ist ein I2C-Interface.


    Die Boards sind mit Eagle entworfen, das ist die einzige kommerzielle Software,
    die ich verwendet habe. Das könnte man natürlich auch in KiCad machen.
    Die Platinen habe ich bei Betalayout fertigen lassen. Die Platinen sind
    randvoll und die Löterei ist viel Arbeit, aber eine Bestückung beim Hersteller
    hätte mein Budget bei weitem gesprengt (deswegen habe ich auch keine SMDs
    verwendet, daher sehen die Boards ein wenig old-fashioned aus.)

    Ich weiß nicht, wie du hardwaremäßig ausgestattet bist. Ich würde auf jeden
    Fall dringenst empfehlen, die MCU-Hardware erst mal in vereinfachter Form auf einem
    Steckbrett aufzubauen und schauen, ob die Ansteuerung der Magnete funktioniert.
    Erst wenn Du eine Weiche und ein Signal per Notebook
    über das Netzwerk zuverlässig aus dem Nachbarzimmer schalten kannst, solltest Du zum Lötkolben
    greifen.

    Gruß
    Cherrypie

  • Hallo,
    ein sehr schönes Projekt :bravo2: . Ich wollte fragen ob die digitale Zugsteuerung vorangeschritten ist und ob du das angesprochene SRCP auf dem Pi empfehlen kannst oder davon abrätst.
    --
    VG
    dj_blue06


  • Hallo,
    ein sehr schönes Projekt :bravo2: . Ich wollte fragen ob die digitale Zugsteuerung vorangeschritten ist und ob du das angesprochene SRCP auf dem Pi empfehlen kannst oder davon abrätst.
    --
    VG
    dj_blue06


    Hallo dj_blue06,

    sorry dass ich so lange nicht geantwortet habe... ist irgendwie bei mir unter die Räder gekommen.

    Zur Zugsteuerung: Ich habe zwei Lok-Prototypen auf einer Teststrecke in Betrieb, mit selbstgebautem Lokdecoder, Booster und Steuerung über den Raspberry. Das ganze ist ein erheblicher Aufwand, und die Zugsteuerung ist eine andere Liga als Steuerung von Licht und Weichen. Leider habe ich in diesem Jahr kaum Zeit gehabt, daran weiter zu machen, aber das steht jetzt wieder auf der Agenda. Aber, wie gesagt, grundsätzlich funktioniert das.

    Ich steuere die Loks über drahtlose Gamepads, die normalerweise für Computerspiele verwendet werden. Die gibts für relativ wenig Geld und die haben so viele Schalter, dass man praktisch alle Zugfunktionen (Licht, Rauch, Telexkupplung, Rangierbetrieb) darüber steuern kann. Das Gamepad unterhält sich mit dem Raspberry, der schickt über SPI die Befehle an einen kleinen PIC-Controller, der das exakte Protokolltiming für die Schiene erzeugt. Dann gehts über den Booster zur Schiene und zur Lok. Darin ist wieder ein PIC-Controller, der die Lokhardware ansteuert

    Leider ist die Decoderplatine noch recht groß und passt zur Zeit nur in größere Dampf- und Dieselloks. Ein geshrinkte Version ist schon in Planung, und mir graut es etwas vor der SMD-Löterei.

    Zum Thema SCRP kann ich leider nichts sagen. Ich hatte das mal angedacht, aber akute Planungen habe ich dazu keine. Ich bin mit meinem eigenen Protkoll ganz zufrieden im Moment. Aber rein technisch spricht meiner Meinung nach nichts gegen SRCP auf dem Rapsberry. SCRP defniert ja nur das Protokoll. Letztenendes kommt es darauf an, dass Du einen Client und einen Server brauchst, die diese Protokoll unterstützen, und da gibt es einige.

    Grüße
    Cherrypie

  • Hallo zusammen,


    habe mir erst vor wenigen Tagen einen Pi 3 zugelegt. Ziel: Signalsteuerung (später viellecht auch die Weichen) aber keinesfalls Zugsteuerung, da man dann gar nichts mehr selber machen muss. Habe mich schon grundlegend informiert und hatte voher auch schon grundlegende Elektronikkentnisse, aber keinesfalls kann ich ein Platine wie du zusammenbauen. Mit den GPIO-Pins ein Relais zu steuern (oder eine LED) hat bei mir erfolgreich funktioniert. Aber um die Signale der ganzen Anlage zu steuern bräuchte man viel mehr Pins als es auf dem Pi gibt. Kann mir vielleicht mal jemand den grundlegenden Weg eines Befehls vom Programm zum Signal erläutern, wenn man das ganze über ein Controller-Board macht.


    Eigentlich wollten wir komplett analog bleiben, aber die vier verschiedenen Signalbilder der Viessmann-Signale ließen uns nichts anderes übrig. Und die Viessmann-Signalschaltungen sind einfach zu teuer für so viele Signale.


    Wo muss ich anfangen?


    Danke schonmal

  • Hallo Cherrypie,

    ich bin heute auf dein Modellbahnprojekt gestoßen und bin sehr angetan davon. Ich bin derzeit auf der Suche nach einem solchen Projekt und würde mich freuen, wenn ich von Dir das Projekt erhalten könnte. Das wäre toll.

    MfG

    Buddy777

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!