Road-Train Dekoder für Beier SM-IR-16-2 mit Arduino

  • Hallo,

    heute möchte ich euch den Roadtrain-Dekoder für das Beier SM-IR-16-2 vorstellen. Der Roadtrain Dekoder basiert auf dem SM-IR-16-2 Dekoder und nutzt die Ausgänge 13 und 14 zur Adressierung für 3 Anhänger/Auflieger („Trailer“).

    Benötigt werden je Auflieger/Anhänger:

    • Beier Electronic SM-IR-16-2 Lichtmodul
    • Beier Electronic IR-RTA Road-Train-Adapter
    • Arduino Nano v3 (empfohlen)
    • Akku 6-12V
    • BEC (wenn Servos angeschlossen werden)
    • Platine „Die Schwarze“ (optional)

    Der Roadtrain-Dekoder gibt bis zu 2 Schaltausgänge und 2 Servos des SM-IR-16 frei oder sperrt diese in Abhängigkeit von der adressierten ID, welche über den Sender mit den Funktionen „IR: Lauflicht“ (Trailer-ID 1) bzw. „IR: Blitzer/Blinker“ (Trailer-ID 2) ausgewählt wird. Trailer-ID 0 ist immer dann aktiv, wenn keine der beiden anderen IDs ausgewählt wurde.

    Für Details zur Auswertung der beiden Ausgänge siehe den Link oben.

    Die Schaltausgänge am SM-IR-16-2 müssen mit 100% Helligkeit geschaltet werden und werden entsprechend auch nur als HIGH oder LOW ausgegeben. Die beiden Schaltausgänge könnten z.B. für eine Umpolschaltung mit Relais zur Stützen- oder Rampensteuerung dienen, ein Servo für Bremse und ein Servo für Sattelplatte oder Kupplung.

    Für die Servos stehen Ausgänge mit normalem und invertiertem Signal zur Verfügung (natürlich kann man den Sketch auch ändern um 2 Servos synchron zu betreiben).

    Es müssen nicht alle Eingänge und damit nicht alle Ausgänge verschaltet werden, noch müssen die Schalt- oder Servosignale zwingend vom SM-IR-16-2 kommen.

    Der Sketch ist für die Platine "Die Schwarze" gedacht, kann aber natürlich auch mit eigenen Platinen und anderer Pin-Konfiguration verwendet werden.

    Zu beachten ist aber, das der 2. Steuereingang an D3 einen Hardware-Interrupt nutzt. Die PWM Signale für die Servos werden über Pin Change Interrupts an Pin A0 und A1 berechnet.

    Über zwei Jumper/Lötbrücken (Pin A2 und A3) wird die Trailer-ID 0 bis 2 festgelegt, welche beim Start des Arduino einmalig eingelesen und kalkuliert wird. Die Trailer-ID is binär kodiert:

    • Beide Jumper offen = Trailer-ID 0
    • Jumper 1 geschlossen und Jumper 2 offen = Trailer-ID 1
    • Jumper 1 offen und Jumper 2 geschlossen = Trailer-ID 2
    • Jumper 1 geschlossen und Jumper 2 geschlossen = nicht erlaubt

    Die Pins A2 und A3 sind als INPUT_PULLUP deklariert, ein geschlossener Jumper zieht den entsprechenden Eingang auf GND (Masse). Daher wird beim Einlesen der Zustand mit „!“ invertiert, somit ergibt „00“ = TrailerID 0, „01“ = TrailerID 1 und „10“ = TrailerID 2.

    Die Trailer-ID wird mit der über das SM-IR-16-2 ausgegebenen ID verglichen um zu entscheiden, welcher Trailer freigeschaltet wird. Andere Trailer werden gesperrt.

    Trailer-ID 0 ist immer aktiv, wenn keiner der beiden anderen Trailer ausgewählt ist. Wird z.B. Trailer-ID 1 ausgewählt, dann werden die Signale beim Trailer 1 freigeschaltet und bei Trailer 0 sowie 2 gesperrt. D.h. Änderungen für die Schaltausgänge und Servos werden in Trailer 0 und 2 nicht mehr weitergegeben, der vorherige Zustand bleibt erhalten.

    Änderungen im Zustand der Schaltausgänge und der Servosignale bei gesperrten Trailern werden nach deren Aktivierung sofort weitergegeben. Es sollte also darauf geachtet werden, daß die Schaltausgänge und Servos sich im gewünschten Zustand bzw. der richtigen Position befinden bevor ein anderer Trailer adressiert wird, insbesondere bei Trailer 0 der durch Deaktivierung von Trailer 1 und 2 automatisch freigeschaltet wird.

    Die externe LED ist mit der LED auf dem Arduino-Board an Pin D13 verbunden und zeigt die folgende Zustände an

    ... wenn kein Trailer adressiert wurde:

    • Sehr schnelles Blinken: Trailer-ID 0 / freigeschaltet
    • Schnelles Blinken: Trailer-ID 1
    • Doppel-Blinken: Trailer-ID 2

    … wenn Trailer 1 oder 2 addressiert wurde:

    • An: Trailer-ID wurde ausgewählt / freigeschaltet
    • Aus: anderer Trailer ausgewählt / gesperrt

    Die externe LED ist optional, je nach Einbau-Position reicht u.U. die LED auf dem Arduino-Board zur Anzeige aus; diese ist vielleicht auch weniger störend als eine zusätzliche LED.

  • Pin-Belegung des Arduino

    A0 PWM-Eingang für Servo 1 (Pull-Down Widerstand empfohlen); Pin Change Interrupt

    A1 PWM-Eingang für Servo 2 (Pull-Down Widerstand empfohlen); Pin Change Interrupt

    A2 Eingang 1 (Lötbrücke) zur Einstellung der Trailer-ID

    A3 Eingang 2 (Lötbrücke) zur Einstellung der Trailer-ID

    D2 Steuereingang 1, verbunden mit SM-IR-16-2 Ausgang 13

    D3 Steuereingang 2, verbunden mit SM-IR-16-2 Ausgang 14; Hardware Interrupt

    D5 PWM-Ausgang Servo1a

    D6 PWM-Ausgang Servo1b (invertiert zu 1a)

    D7 Eingang 1 für Schaltausgang X vom SM-IR-16-2

    D8 Eingang 2 für Schaltausgang Y vom SM-IR-16-2

    D9 PWM-Ausgang Servo2a

    D10 PWM-Ausgang Servo2b (invertiert zu 2a)

    D11 Schaltausgang 1 (= X wenn freigeschaltet)

    D12 Schaltausgang 2 (= Y wenn freigeschaltet)

    D13 LED (optional, Vorwiderstand nötig)

    Andere I/O Pins auf der Platine „Die Schwarze“ werden nicht benutzt, dementsprechend werden auch die Bauteile wie Taster oder Poti für den Road-Train Dekoder nicht benötigt.

    Stromversorgung des Arduino

    Bei Verwendung der Platine „Die Schwarze“ kann der Arduino wie folgt mit Strom versorgt werden:

    1. Mit 5V der Servoausgänge des SM-IR-16-2 über A0 und/oder A1; in dem Fall sollten Servos am Arduino mit einem externen BEC (5-7,4V*) versorgt werden. Die Lötbrücke „5Ven“ darf dann nicht geschlossen werden!
    2. Über Vin mit 7-12V; in dem Fall sollten Servos am Arduino mit einem externen BEC (5-7,4V*) versorgt werden. Die Lötbrücke „5Ven“ darf dann nicht geschlossen werden!
    3. Über ein externes BEC mit exakt 5V am Anschluß „BEC“. Das BEC speist dann auch die Servos mit 5V. Die Lötbrücke „5Ven“ muß in dem Fall geschlossen werden. Die rote Ader der Kabel zwischen A0 / A1 und SM-IR-16-2 Servo-Ausgang 1 / 2 muß dann unbedingt aus dem Stecker gezogen und isoliert werden!

    * Spannung abhängig von den verwendeten Servos

    Verkabelung zwischen SM-IR-16-2 und Arduino

    SMR-IR-16-2ArduinoKabel-Typ
    Plus5VÜber Servo-Patchkabel an X5/1 oder X5/2 *
    MinusGNDÜber Servo-Patchkabel an X5/1 oder X5/2
    Servo 1 (X5/1)A0Servo-Patchkabel
    Servo 2 (X5/2)A1Servo-Patchkabel
    Ausgang 13D2Schaltlitze einadrig **
    Ausgang 14D3Schaltlitze einadrig **
    Ausgang XD7Schaltlitze einadrig **
    Ausgang YD8Schaltlitze einadrig **

    * Hinweise zur Stromversorgung des Arduino beachten!

    ** Servo-Kabel möglich: gelb/weiß D2 bzw. D7 - rot D3 bzw. D8 - braun/schwarz nicht belegt bzw. Minus wenn kein Kabel an A0 und A1.

    Allzeit Gute Fahrt,
    Reiner :fahrer

    Einmal editiert, zuletzt von Racker (25. November 2021 um 12:58)

  • Und hier der Sketch:

  • Moin Reiner,

    da steckt ja eniges an Gehirnschmalz drin. Ich habe für meine Roadtrain Ansteuerung 2 Lichtausgänge genutzt, so konnte ich alle 4 Trailer bzw. den Dolly realisieren.

    Das Modul in den Trailern bietet noch 2 Servoausgänge, einer für ein propertionales Signal (z. B. Stützen) und ein Ausgang der nur auf/zu kennt (z. B. für eine Sattelplatte oder ein Zugmaul). Neben diesen Trailer ID Kanälen werte ich noch einen Servokanal (Proportionalkanal) aus. Wird er einmal kurz nach oben getippt, dann schaltet der "Auf/Zu" Servo in die andere Position. Wird der kanal länger als 750 ms aus dem Nullbereich hinaus bewegt, dann wird dieses Servosignal an den Proportionalkanal des Trailers durchgeschleift, die Stützen fahren hoch bzw. runter.

    Im Gegensatz zu deiner Lösung gehen mir zwar 2 Lichtausgänge verloren, aber dafür ist die Auswertung um ein Vielfaches einfacher und es würde auch z. B. an den neuen Trailermodulen funktionieren.

    Hut ab vor dem was du da mit deinen Platinen geschaffen hast.

  • Hallo Peter,

    vielen Dank. ;prost Die Idee ist schon etwas älter und ich wollte den Dekoder erst aus Hardware bauen (ein paar Logik-Gatter, retriggerbare Monoflops und Transitorstufen für die Schaltausgänge), aber dann überlegt, daß es mit dem Arduino wohl einfacher und flexibler ist. Mit der Hardware-Lösung wäre ich wahrscheinlich auch wegen der kurzen, unerwünschten Signale auf die Nase gefallen - das Auge kann halt nicht so schnell sehen, wie der Arduino die Steuereingänge einliest ...

    Ich hatte vor einiger Zeit über deine Lösung schon mal was gelesen aber damals nicht registriert, das du das Servosignal des Lichtmoduls auswertest und den Arduino das Servo direkt steuern lässt statt nur das Signal durchzuschalten - dabei ist die Idee so offensichtlich wie genial. Danke für den Denkanstoß, das birgt ungeahnte Möglichkeiten! :top

    Im Dolly baue ich ein LM-16-IR-4 ein, dort werde ich die Sattelplatte über Servo 3 oder 4 betätigen. Somit bin ich von der Roadtrain-Konfiguration unabhängig, d.h. die Betätigung von Servo 1 oder 2 hat dann keinen Einfluß auf den Dolly und eine RT-Adressierung des LM selbst ist dann auch nicht nötig, da die SM-IR-16-2 Module die Signale für Servo 3 und 4 immer ignorieren. Außerdem ist der Platz etwas knapp, meiner hat nur 2 Achsen, und die Beleuchtung sorgt schon für genügend Kabelsalat. :112:

Jetzt mitmachen!

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