ich möchte mal hier meinen Infrarot Zugbus vorstellen. Er ist aus dem Bestreben entstanden verschiedene Funktionen einzelner Waggons gezieht zu bedienen. Alles unter der Vorgabe, dass ich meine Lokomotiven per Funk steuere und Waggons beliebig an und abkoppeln möchte, ohne dass ich Kabel stöpseln muß.
Nachteil ist, dass jeder Wagen einen Akku benötigt. Dies könnte jedoch bei Versorgung über das Gleis vermieden werden.
Zum Aufbau:
Die Lok hat einen IR-Sender mit Emittern (IR-LEDs) an beiden Pufferbohlen.
Jeder Wagen hat eine IR-Auswerteeinheit mit je einem Empfänger und einem Emitter pro Pufferbohle.
Somit kann jeder Wagen, egal in welcher Richtung er läuft, an der einen Pufferbohle Kommandos der Lok empfangen und an der anderen Seite an den nächsten Wagen weiter geben.
Der Loksender besteht aus einem kleinen Arduino, der Fernsteuersignale bzw. Servosignale auswerten kann und dann die beiden IR-LEDs gleichzeitig bedient.
Die Waggoneinheit hat auch einen kleinen Arduino der die Signale empfängt, auswertet und an den nächsten weitergibt. Die Kommandos wandelt er dann in Servo oder Schaltsignale für verschiedene Funktionen.
Übertragungsprotokoll:
Das Übertragungsprotokoll baut auf dem RC5-IR-Code auf. Obwohl eigentlich nur einzelne Bits übertragen werde und diese beliegig genutzt werden könnten, habe ich mich an den grundsätzlichen Aufbau gehalten.
Hier der Aufbau nach RC5 (Quelle: https://de.wikipedia.org/wiki/RC-5):
- Ein Start-Bit, das immer logisch 1 ist und es dem Empfänger erlaubt, die korrekte Verstärkung für die nachfolgenden Datenbits zu wählen.
- Ein Field-Bit, das verwendet wird, um zwischen einem unteren Kommandobereich mit einem Wertebereich von 0 bis 63 und einem oberen Kommandobereich mit einem Wertebereich von 64 bis 127 zu unterscheiden.
- Ein Steuerbit, das bei jedem Tastendruck auf der Fernbedienung seinen Zustand wechselt. Damit kann zwischen dem permanenten gedrückt Halten einer Taste und dem wiederholten Drücken und Loslassen unterschieden werden.
- Eine 5 Bit lange Systemadresse zur Auswahl zwischen 32 verschiedenen Gerätearten.
- Ein 6 Bit langer Kommandowert, der eine Funktion aus einem Set von 64 Möglichkeiten (bzw. in Kombination mit dem Field-Bit 128) auswählt. Jeder Funktion, wie beispielsweise dem Verstellen der Lautstärke, ist dabei ein bestimmter Kommandowert zugeordnet.
- Das Start-Bit behält seine Funktion
- Das Field-Bit definiert, ob die Funktion an oder abgeschlten werden soll
- Das Steuerbit toggelt bei jeder neuen Übertragung (Ideal für eventuelle Tastfunktionen)
- Die Systemadresse definiert die gewünschte Funktion. (z.B. Türen, Licht, Kippfunktion oder ähnliches)
- Der Kommandowert sagt, welche Postion geschalten werden soll.
- 0x00 Licht
- 0x01 Zugschlusslicht
- 0x10 Türen
- 0x10 Klappen
Woher weiss nun der Waggon, welche Tür gemeint ist?
Mal angenommen, der Waggon hängt mit Pufferbohle 2 an der Lok. An Pufferbohle 1 hängt der nächste Waggon. Der Waggon hat pro Seite 4 Türen, wie bei meinen 4yg-Wagen, also insgesamt 8 Türen.
Nun kommt der Befehl Tür 3 auf, also:
- Field-Bit 1
- Steuerbit 1
- Systemadresse 0x10
- Kommandowert 0x03
Die Tür wird geöffnet.
Sollte Field-Bit 0 gesendet worden sein, geht die Tür zu.
Soweit alles gut.
Nun soll am 2. Waggon die 3. Tür auf der rechten Seite geöffnet werden. Also Befehl:
- Field-Bit 1
- Steuerbit 0
- Systemadresse 0x10
- Kommandowert 0x0C (12)
- Field-Bit 1
- Steuerbit 0
- Systemadresse 0x10
- Kommandowert 0x06
Das Spiel kann beliebig vorgesetzt werden.
Bei dem ganzen gibt es 2 besondere Kommandowerte:
- 0 keine Funktion wird betätigt. Sollte von Waggon zu Waggon weitergegeben werden, wenn die betreffende Funktion bereits gefunden wurde. Nur um die IR-Detektion sicherzustellen (siehe dazu weiter unten mehr)
- 0x3F alle Funktionen. Dieser Wert wird unverändert weitergegeben. Ideal um z.B. bei Abfahrt alle Türen gleichzeitig zu schließen.
Sofern die Lok im defineirtem Rythmus IR-Pakete versendet und auch von Wagen zu Wagen weitergegeben werden, kann der Wagendecoder erkennen, ob das Kommando von "seiner Lok" oder als Irrläufer kommt. Damit können z.B. vorbeifahrende Züge keine Störung verursachen.
Somit mal zum theoretischem Teil. Wenn interesse besteht, kann ich auch noch meine Umsetzung im Detail hier beschreiben.