Workshop – RFID Car Routing

UPDATE mid-March 2023

It’s working: Arduino-Based RFID-Readers for JMRI

Original Post

In Kürze werde ich einige Zeit haben mich um das Routen von Wagons mittels RFID-Tags zu kümmern. Ich verwende dafür recht kleine 180 Byte Midas NTAG213 Klebe-Tags mit 12x19mm Abmessung (100 Stück ca. 38 Euro bei NFC-Tag Shop. Als Lesegeräte kommen RFID-RC522 (Amazon-Link) für etwa 5 Euro das Stück zum Einsatz. Ein interessanter heise.de-Artikel „Arduino spricht RFfID“ liefert dabei ein paar Hinweise. Unter anderem, wie man die Reichweite des Lesers maximiert.

Liste der Versuchswagons

#

Rep.Mk.

L ft

Typ

Farbe

Tag-ID

Bemerkung

01 BCN 50211 45 Cov.Hopper gelb 04:44:65:F2:59:66:81 3DP
02 BCN 50442 45 Cov.Hopper grau 04:04:65:F2:59:66:81 3DP
03 ABOX 51001 52 Box Car gelb 04:E2:65:F2:59:66:80  
04 GM&O 56199 52 Box Car oliv 04:25:65:F2:59:66:81  
05 SOU 1228 45 Gondola grau 04:03:65:F2:59:66:81  
06 B&A 9125 52 Box Car bwr 04:49:70:F2:59:66:81 bwr = blau, weiss, rot
07 B&A 9128 52 Box Car bwr 04:88:70:F2:59:66:81 bwr = blau, weiss, rot
09 GM&O 1108 54 Alco RS-1 maroon noTag Lok

Unter anderem plane ich mehr als zwei Lesegeräte einzusetzen, womit bereits mehr als ein Arduino in JMRI sinnvoll ist. aus diesem Grund ist ein Bussystem für die Kommunikation nötig. Siehe auch hier.

Da auch für DCC++ mittlerweile ein aktueller Maintainer Weiterentwicklungen pflegt, steht zudem der Wechsel zu DCC++EX an. Dieses Projekt hebe ich mir allerdings für den Winter auf. Die Kommunikation der RFID-Reporter ist ein eigenständiges subsystem, das im ersten Step nur Switch-Listen generieren soll. Später bindet hoffentlich JMRI’s Operations-Konzept die Daten mit ein.

First things first. Ein Testlayout, eine analoge Lok und einige Wagons werden mich begleiten. Dazu neben meinem Laptop ein paar elektronische Komponenten, RFID-Hardware, Displays, Breadboards, mehrere Arduino-Boards, ein RaspberryPi 3b und ein kleiner TV (den müsste ich sonst ohnehin vor ort leihen).

XtrkCAD-Plan

Und hier sind die sechs Grundplatten ausgelegt (105x60cm)

XtrkCAD 1:1 Ausdruck

Anbei nochmal der XtrkCAD-Plan als Ausdruck direkt aus der Software, falls jemand diesen für siene Gleisplandatenbank herunterladen will (bitte Creative Commons Lizenz beachten, siehe Impressum).

Trainz RR-Sim Test-Modell

Funktionsprinzip

Ich stelle mir vor das ein ganzer Zug über den RFID-Reader fahren kann und dabei als ganzes erfasst wird. Das dies technisch möglich ist zeigt der folgende Videoclip.

Der Versuchszug fährt über den RFID-Leser, ID-Anzeige auf dem Display

Wie man erkennen kann werden einige Labels doppelt eingelesen. Das sollte der Sketch also verarbeiten können.

Ich stelle mir vor, dass die eingelesenen IDs in eine Variablenliste (Array) geschrieben werden und dann als Block an das Backend übergeben werden, oder sequentiell an einen Backgroundprozess übergeben werden, wobei lediglich mehrfacherkennungen herausgefiltert werden (jedes Tag soll nur einmal übermittelt werden). Im ersten Step denke ich über zwei unterschiedliche implementationen nach. Bei einer wird alles in eine MySQL-Datenbank auf dem RaspberryPi mit der JMRI-Installation geschrieben. Bei der anderen kommt der internen Logik von JMRI die Aufgabe der Weiterverarbeitung zu. Am ende werde ich mich füf das simpelste System entscheiden. Die RC522+Arduino-Kombination stellt je ein eigenständiges Scannermodul dar, das lediglich Tag-IDs ausliefert und in JMRI über einen Reporter bereitstellt. es sollen sowohl einzelne Wagons, als auch ganze Züge (evtl. unter Einhaltung einer bestimmten Prozedur) eingescannt werden können. Die Weiter erarbeitung erfolgt idealerweise in JMRI. Ihr seht die zweite Methode gefällt mir schon jetzt besser.

Eine weitere Funktion könnte falls erforderlich später die Datenbankeinträge mit dem JMRI-Roster abgleichen (oder bereits auf dem Arduino) das befüllte Array sequentiell an den Reporter in JMRI übergeben.

Was soll das ganze?

Das Ziel soll eine automatische Generierung eines Zuges in OperationsPro sein. JMRI übernimmt daraufhin das Car Routing und das generieren von Rangierlisten anhand der Regeln in OperationsPro.

Neben dem automatischen Erstellen von Zügen und Rangierlisten anhand des bestehenden Lok- und Wagenparks, sowie der vorhandenen Rangierpositionen (Industry Spots), soll ein abwechslungsreicher Modellbahnbetrieb simuliert werden. Optional können Programme wie z.B. Train CrewTrain Crew dabei anfallende Arbeitsabläufe (zeitlich) simulieren. Weiteren Realismus kann die Verwendung von Pins oder Figuren bringen, die den Conductor repräsentieren, der für den Zug, die Fracht und die Besatzung verantwortlich ist. Er handhabt die Weichen zu den Industrieanschlüssen und kommandiert die Zugbewegungen.

Natürlich rennt er nicht bei jedem Aussetzen oder Abholen von Wagons vom Zugende zur Lokomotive neben dem Zug her, sondern er wird abgeholt. Es ist also am Ende einer Rangierfahrt der Zug mindestens soweit zurückzusetzen, das der Conductor-Pin auf Höhe der hinteren führenden Lokomotive ist (damit er während eines kurzen Stops gedanklich an Bord klettern kann).

All dies soll auf meiner Modellbahn simuliert werden.

Aber eins nach dem andren.

Merksatz (engl.): The Conductor is responsible for the train, the freight and the crew. The Locomotive Engineer actually operates the locomotive.