Ausgangspunkt meiner Arbeit waren Überlegungen zum Bau eines Weichenstellpults, das ich zur Steuerung der Weichen meines Betriebswerks nutzen wollte. Hier wird bis auf ein Ein-/Ausfahrsignal nur auf Sicht gefahren und die Weichen manuell gesteuert. Außerdem soll in einem späteren Ausbauschritt auch die Drehscheibe in das Stellpult mit einbezogen werden.
Die ersten Überlegungen zur Realisierung liegen schon einige Jahre zurück, kamen aber aufgrund mangelnder Zeit und anderer wichtigerer Tätigkeiten über einen einfachen Testaufbau nie hinaus, Allerdings war es mir bereits vor längerer Zeit schon möglich Fahrstraßen über die Auswahl von Weichen festzulegen, geplante Weichenstellbefehle über eine UNDO-Funktion rekursiv zurückzunehmen oder aber auch die gesamte Auswahl über einen weiteren Taster zu resetten. Die Auswahl selbst wird durch eine Quittiertatste bestätigt, die Weichen werden anschließend zeitversetzt über den DCC-Ausgang der Zentrale und passende Weichendecoder geschaltet. Die Übertragung vom Stellpult zur Multibus-Zentrale (hier: Yamorc 9401) erfolgt über eine Arduino/Loconet-Schnittstelle. Das Loconet-Shield entstand aus einem Nachbau eines einfachen aber voll funktionstüchtigen Loconet-Interfaces, das ich auf der Internetseite von Philipp Gahto gefunden habe (https://pgahtow.de/w/Loconet#/media/Date...t_Interface.png).
Die Kommunikationssoftware zum Loconet nutzt die Loconet-Bibliotheken (Loconet.h) von Alex Shepherd und Damian Philipp, ebenfalls im Internet frei verfügbar. Außerdem diverse andere Programmteile zum Lesen und Schreiben der Loconet OP-Codes (z. B. auch bei Philipp Gahtho und anderen).
An dieser Stelle nochmal ausdrücklich mein Dank an all die, die diese Informationen zur freien, privaten Nutzung zur Verfügung stellen.
Neben der anfänglichen, doch sehr rudimentären Testphase, bei der es u. a. auch darum ging wie ich die Tastenbefehle in den Arduino bekomme (Test mit Encoder, Multiplexer oder I2C-Bus) sowie die Möglichkeit wichtige Daten auch nicht flüchtig in ein Fram zu speichern, habe ich mir mittlerweile für meine im Arbeitszimmer befindliche Testanlage ein passendes Stellpult aufgebaut und bin aktuell dabei die gesamte Software neu zu schreiben. Wozu auch die Implementierung der von der Zentrale über Loconet gesendeten Weichen- und Belegtmeldungen auf dem Stellpult gehört. Das funktioniert mittlerweile einwandfrei. An den Eingaben zur Eingabe Weichenstellungsänderungen bin ich momentan mit Unterbrechungen dran. Erste Überlegungen zur Fahrstraßeneingabe mittels Start- und Zieltaster habe ich auch schon gemacht, die entsprechenden Taster sind auf dem Stellpult bereits vorgesehen. Die Realisierung ist allerdings ergebnisoffen und zeitlich unbestimmt.
Mein Stellpultaufbau hat kein reales Vorbild, ich habe es halt so gebaut wie ich mir eine vernünftige Steuerung vorstelle, der Einfachheit halber mit je zwei Tastern je Weiche (gerade/abzweigend) und jeweils aktueller Anzeige der Stellungsänderung. In einer späteren Version vielleicht nur noch mit einer Taste für die Weichenauswahl allgemein und einer Taste je Weiche zum wechselseitigen Umschalten. Damit könnte ich in etwa die Hälfte an Weichentastern einsparen und damit letztlich auch Eingängen an den I2C-Bausteinen, die ich zur Eingabe verwende. Eine Erweiterung mit Signaltasten und -anzeigern ist ebenfalls möglich, derzeit von mir allerdings nicht vorgesehen.
Bild entfernt (keine Rechte)
Zusammenfassend läßt sich folgendes festhalten:
Aktuell: realisiert bzw. noch in der Softwareentwicklung
- - Arduino Uno mit Loconet-Shield und Loconet-Bibliothek
- Ein- und Ausgabe über I2C-Schnittstelle (hier: Marke Horter)
- Speicherung der Weichenstellungen und div. anderer wichtiger Daten auf 8 kByte Fram SPI
- Lesen der Weichen-und Belegtmelderangaben von der Zentrale und Ausgabe auf dem Stellpult
- je zwei Drucktasten für Weichen (gerade/abzweigend) mit LED-Ausleuchtung der aktuellen Stellung und der ausgewählten Stellung (blinkend)
- UNDO-Taste bei Weicheneingabe am Stellpult
- Resett-Taste für Gesamtresett der Eingabe
- Quittiertaste zum Auslösen der Weichenstellbefehle, Wenn man die Taste gedrückt hält kann man die Weichen auch einzeln schalten
- Modusschalter für Eingabe Weichenauswahl oder Fahrstraßenauswahl
Zukünftig oder optional:
- -Vorbereitung Start- und Zieltaste für Fahrstraßen mit Belegtmelderabfragen und vereinfachter Ausleuchtung des Fahrwegs
Hierzu hatte ich schon Tests mit Graphentheorien zur automatischen Ermittlung der kürzesten Verbindung von Start nach Ziel
durchgeführt.
- Speziell bin ich hierbei auf ein Verfahren nach Dijkstra gestoßen, das ich auch programmtechnisch bereits umgesetzt
habe und das, basierend auf der eigegebenen Gleistopologie und Gewichtung der Zweigelemente, auch wunderbar funktioniert, allerdings auch nicht praxistaugliche Lösungen liefert. in der Art, daß zum Erreichen eines Zielgleises auch schon mal eine in Rückwärtsrichtung liegende Weiche genutzt wird. Das ist ggf. halt der kürzeste Weg.
Möglicherweise kann ich das damit umgehen, daß ich zwei richtungsabhängige Topologien erstelle. Die ersten Überlegungen hierzu liegen vor, vorab muß ich allerdings wieder die Grundfunktionalitäten zum Laufen bringen.
- Nebenbei stellt sich dabei allerdings auch die Frage, ob ich die gesamte Funktionalität überhaupt im Arbeitsspeicher des Arduino unterbringe oder ob ich ggf. noch einen weiteren Arduino verwenden muß oder ggf. auch das Fram zur Speicherung größerer Laufzeitvariablen und Strukturen mit einbeziehe. Von der Laufzeit her sollte das kein Problem sein, eher vom direkten Zugriff auf die Datenfelder. Aber sicherlich machbar. Die Definition der Gleistopologie benötigt halt schon etwas Platz, auch bei meiner kleinen Testanlage und trotz spezieller Verfahren zur Kompression der Topologiematrizen.
- Anzeige der Fahrzeug-IDs über Railcom und OLED-Display (als allerletztes in weiter Ferne)
Hier ein Video zur Demonstration der Rückmeldungen
https://youtu.be/CH62CX3IRik
Die Frage, die sich nebenbei stellt ist, ob dieser ganze "Quatsch" überhaupt Sinn ergibt, gibt es doch fertige Modellbahnsteuerungen, die das alles bereits drin haben und noch einiges mehr. Ein bißchen Interesse an der Materie und der Aha-Effekt wenn es denn funktioniert spielt bei mir halt auch eine wichtige Rolle. Eigentlich die wichtigste überhaupt, das berühmte Erfolgserlebnis. Und da ich fast lieber baue als zu fahren, paßt das auch.
Mit meiner kurzen Beschreibung wollte ich hier jetzt keine (1:1)-Bauanleitung liefern, Details kann man aber dennoch erfragen. Ich wollte nur zeigen, welche komplexe Funktionen mit relativ kleinem Geld und hardwaremäßig einfach zu realisieren sind. Auch für Anlagen, die größer als meine Testanlage sind und wo die analoge Realisierung mit Diodenmatrix und ggf. Relaistechnik doch erheblich mehr Verdrahtungsaufwand bedeuten. Von Weichen- und Belegtmelder-Rückmeldungen mal ganz zu schweigen, die bekomme ich als Abfallprodukt so nebenbei gratis mit dazu. Der wesentliche Aufwand steckt in der Entwicklung der Software. Zumindest für mich.
Wer Interesse hat kann mich gerne fragen. Aber bitte beachten, ich bin kein Informatiker und auch kein Computerfreak. Vieles was ich mache basiert auf dem Try- und Error-Prinzip. Einige Kenntnisse der Programmiersprache c (nicht C++) sind vorhanden. Für das was ich mache reichen die aus.
Wer Fragen oder noch weitere Ideen hat, nur zu. Aktuell kämpfe ich beispielsweise mit dem Problem bei der Weichenauswahl (Eingabe der umzusteuernden Weichen am Stellpult) die zugehörigen Weichenabgänge vor Quittierung blinken zu lassen, ohne durch hierzu oft verwendete "delays" den gesamten Programmablauf innerhalb der Schleife zu behindern. Ein programmtechnisches Problem für das ich sicherlich auch eine Lösung finden werde. Etwa durch zyklisches Schreiben und Löschen der Ausgabepuffer der I2C-Bausteine, wobei die betreffenden Bits der Weichen-LED in der Schleife gesetzt und anschließend wieder gelöscht werden. Verzögerung möglicherweise durch Abfragen der aktuellen Programmlaufzeit.
Grüße Thomas