Railuino Hacking your Märklin (Slightly extended edition) Jörg Pleumann LinuxTag 2012 26.05.2012
Fahrplan Arduino Digitale Modellbahn Steuerung Rückmeldung Beispiele
Arduino (I) Einfach zugängliche Microcontroller-Plattform Zielgruppe sind Bastler, Künstler, Schüler,... Open-Source (Hardware & Software) Sehr populär, viel Material & Zubehör Sehr günstig, ab 15 Euro aufwärts
Arduino (II) Basiert auf Atmel-Microcontrollern Programmierung basiert auf Wiring Untermenge von C++ Spezielle Bibliotheken Eigene Entwicklungsumgebung Möglichkeit zur Professionalisierung In Java implementiert Flashen z.b. über USB-Kabel
Hardware Boards Shields
Software ieru s i l a i Init ng hle c s s o Endl ife
Digitale Modellbahn (I) Analog: AC oder DC, v ~ U U, v t Digital: DC plus Protokoll U t
Digitale Modellbahn (II) Viele Vorteile Weniger Kabelsalat Spitzenlicht hat konstante Helligkeit Loks und Zubehör brauchen Decoder Alles hat eine eindeutige Adresse Verschiedene Protokolle MM2 Märklin-proprietär alt MFX Märklin-proprietär neu DCC Offenes Protokoll der NMRA
Digitale Modellbahn (III) Infrarot-Fernsteuerung Nur vier Lokomotiven Nur MM2, fixe Adressen Mobile Station 2 MM2, MFX und DCC Weichen schalten Central Station 2 Gleispläne darstellen Ethernet-Anschluss, iphone
Steuern Mobile Station 2 reines Bediengerät Digitalsignal wird in der Anschlussbox erzeugt Die beiden kommunizieren via CAN-Bus Das Protokoll ist (teilweise) offengelegt (Da (Damuss mussdoch dochetwas etwaszu zumachen machensein?) sein?) Es gibt einen CAN Shield von Sparkfun Dazu passend existiert eine Library Diese benötigt allerdings Anpassungen
CAN Shield von Sparkfun CAN-Bus SD-Karte Joystick GPS LCD-Display
Kabel zur Anschlussbox 9-Pol Sub-D auf 10-Pol Mini-DIN DIN-Stecker von www.can-digital-bahn.com Belegung der beiden Seiten Signal 9-Pol Sub-D 10-Pol Mini-DIN CAN_L 5 8 CAN_H 3 4 GND 2 2 Vcc 9 1 Versorgt den Arduino mit Strom
Protokoll (I) 11 Bit SID 18 Bit EID 44Bit Bit 88Bit Bit 11Bit Bit Prio Cmd Rsp Prio Cmd Rsp 16 16Bit Bit Hash Hash Länge Daten 44Bit Bit DLC DLC 88Bit Bit 88Bit Bit 88Bit Bit 88Bit Bit 88Bit Bit 88Bit Bit 88Bit Bit 88Bit Bit D1 D2 D3 D4 D5 D6 D7 D8 D1 D2 D3 D4 D5 D6 D7 D8 Jede Nachricht: 29 Bit Header, 8 Byte Daten Priorität immer 0x0 Hash identifiziert Gerät (z.b. 0xff10) In den meisten Fällen Frage / Antwort Nachricht kommt als Bestätigung zurück Nachricht enthält Antwort auf Anfrage Antwortbit gesetzt
Protokoll (II) Library kann senden und empfangen Der Rest ist Bitschubserei Die wichtigsten Kommandos sind dokumentiert Steuern von Lokomotiven, Funktionen, Zubehör MM2, DCC, MFX, Selectrix Darüber hinaus hilft Sniffing Mobile Station und Arduino anschließen Der Arduino sieht alle Kommandos auf dem Bus
Rückmeldung (I) Wissen, wo ein Zug gerade ist Möglichkeiten Schaltgleise Kontaktgleise Lichtschranken Magnetkontakte Achtung: Galvanische Trennung wichtig! An den Schienen liegen 18V Elektronische Bauteile mögen nur 5V
Rückmeldung (II) Variante 1: Schalter direkt an Arduino Einfach, skaliert aber nicht Man muss im richtigen Moment abfragen Variante 2: S88-Bus Sechsadriger Standardbus für Rückmeldung Parallele Eingänge, serieller Ausgang, Puffer Zur Zentrale Modul Modul11 Modul Modul22 Eingänge Eingänge1-16 1-16 Eingänge Eingänge17-32 17-32 Weitere Module
Schaltung
Software Timing (via Google) > LOAD > CLOCK > RESET < DATA 1 2 3 Auf dem Arduino leicht zu realisieren Zwei Stunden Arbeit Enthält eine Stunde Dummheit 4
Die Summe der Teile (I)
Die Summe der Teile (II) Einfach zugängliches API #include <Railuino.h> Klasse TrackController mit z.b. setlocodirection() setlocospeed() setaccessory() Klasse TrackReporter mit z.b. refresh() getvalue()
Beispiele & Demo Manuelle Steuerung Autonome Steuerung Steuerung über USB Weiche Weicheauf aufmm-adresse MM-Adresse11 Lok Lokauf aufmm-adresse MM-Adresse21 21 Action! Action! Schaltgleis Schaltgleis Rechts: Rechts: S88 S88Kontakt Kontakt11 Links: Links: S88 S88Kontakt Kontakt22 Achtung: Achtung:Masse Massevom vom Gleis getrennt!!! Gleis getrennt!!!
Weitere Möglichkeiten Unterstützung für Infrarot-Fernbedienung Noch einfacher (Standardbeispiel, drei Bauteile) Eingeschränktere Möglichkeiten Steuerung über Netzwerk Bluetooth / Ethernet / WLAN Steuerung mit Android-Smartphone Accessory Development Kit (ADK) USB Host-Funktionalität (seit 3.x) Eigene Platinen mit Fritzing
Erfahrungen mit Arduino Man kommt schnell zu Ergebnissen Es existieren viele Shields / Libraries Erst Breadboard, später eigene Hardware Spezialanwendung erfordert oft Anpassung Anzahl der IO-Pins begrenzt Shields kommen sich in die Quere Lösung 1: Arduino Mega (mehr Pins) Lösung 2: Mehrere Arduinos vernetzen (I2C) Es macht wirklich einen Heidenspaß!
Danke für Euer Interesse! joerg dot pleumann at gmail dot com
Anhang 1: Referenzen Homepage des Arduino-Projekts www.arduino.cc Shops für Arduino und Zubehör www.sparkfun.com www.watterott.com Informationen zu digitaler Modellbahn und Protokollen www.maerklin.de/de/produkte/modellbahnsteuerung/digital.html www.digital-bahn.de Alternative Projekte zum Thema Digitalbahn www.can-digital-bahn.com www.skrauss.de/modellbahn/index.html www.opendcc.de developer.berlios.de/projects/microsrcp
Anhang 2: Bauteile Arduino Uno CAN Shield USB-Kabel 10-poliger Mini-DIN-Stecker 9-poliger Sub-D-Stecker männlich mit Gehäuse Geschirmtes 3-Adriges Kabel Pfostenleiste 6 polig Breadboard mit Jumper-Kabeln