DE – Arduino DCC++ als NMRA kompatible DCC Zentrale für 75.- CHF

Hallo Zusammen,

manchmal sieht man den Wald vor lauter Bäumen nicht und hat dabei selbst Tips für ein Projekt gegeben. Beim Lesen des H0 Modellbahnforums hat Jörg (aka Lernkern) einen Bericht über die Arduino/DCC++ Zentrale gepostet. Siehe hier (https://www.h0-modellbahnforum.de/t340906f19606-JMRI-DecoderPro-mit-DCC-Zentrale-aus-Arduino-Uno-und-Motorshield.html) und verweist darin auf einen Post von Björn (aka outatime) in meinen Thread (https://www.h0-modellbahnforum.de/t335075f40141-Software-fuer-den-Modellbahner-Oder-was-ich-so-verwende.html#msg3818326).

Lustig wie das so geht.

Gegenstand von Jörgs Posting ist DCC+ – eine NMRA kompatible Implementierung einer DCC Zentrale auf Basis eines Arduino und eines Motorshields. Alle Komponenten sind auf der DCC++ Webseite und auf den beiden Links genau beschrieben.

Und warum beschreibe ich das nun? Naja – ich habe mir flugs eine DCC++ Zentrale zum Mitnehmen auf Fremotreffen gebaut. Damit kann man auf FREMO Treffen zumindestens mal Decoder Programmieren und Adressen ändern.

Ob ich damit Fred’s dispatchen kann, weiss ich noch nicht. Im Moment gehe ich nicht davon aus. Wobei es von Peter Giling ein Ardunio Loconetshield gibt (GCA 185 Ardunio Shield for LNet).

Ich müsste aber den Code von DCC++ um die Loconet Funktionen erweitern – und im Moment weiss ich nicht ob ich das kann/will oder Zeit dazu habe. Eventuell kann ich das auch mit dem Locobuffer USB umgehen. Der Verbindet Rocrail mit dem Loconet… Und Rocrail kann sowohl Programmieren als auch Fredi’s dispatchen: https://wiki.rocrail.net/doku.php?id=ln-rocrail-cs-en#how_to_dispatch

So sähen die drei Platinen aus:

Bau der Zentrale:

Ich habe mich für einen orginial Ardunio Motorshield entschieden (https://store.arduino.cc/arduino-motor-shield-rev3) sowie für einen orgininalen Arduino Uno (https://store.arduino.cc/arduino-uno-rev3) und komme so auf exakt 50.- CHF

Die Spannungsversorgung sollte man NICHT wie ursprünglich geplant mit einem solchen Alteisen machen…

Besser man kauf sich ein Schaltnetzteil für 15V und 2-3A was GLEICHSTROM abgibt. Warum? Das kann man weiter unten lesen.

Zusätzlich zu dem Arduino und dem Motorshield waren noch ein paar Kabel und Buchsen und ein Europlatinengehäuse notwendig.

Wenn man statt der originalen Arduino Komponenten einen Klon kauf und einen kompatiblen Motorentreiber kauft sowie günstig an einNetzteil  herankommt, hat man eine komplette DCC Zentrale für ca. 50.- CHF gebaut. Damit wird das für Jugendliche und Clubs/Jugendabteilung sehr interessant, die mit dem PC steuern wollen!

Die Programmier Umgebung wird wahrscheinlich JMRI werden (Decoder Pro). Auch die Kollegen von Rocrail haben die DCC++ Zentrale schon entdeckt (https://wiki.rocrail.net/doku.php?id=dccpp:dccpp-en)

Zusammengesteck ist das Ganze recht schnell. Wichtig ist noch dieses PDF – es zeigt, wie die Brücken auf dem Shield getrennt werden müssen und welche Header auf dem Ardunio gebrückt werden müssen.

Programmieren der Firmware in den Arduino:

Für die Programmierung der Firmware (Sketch) benötigt man einen PC, ein USB Kabel und die Ardunio IDE. Diese kann man her herunterladen: https://www.arduino.cc/en/Main/Software

Dazu braucht es noch den Code: https://github.com/DccPlusPlus/BaseStation/archive/1.2.1.zip

Wenn man den Code heruntergeladen und entpackt hat (unzipp) hat, muss mach den sog. sketch öffnen.

Da ich daheim alle Möglichkeiten habe, habe mich für den MAC als Umgebung zum programmieren entschieden.

Die IDE mit dem geladenen Code. Oben links hat man den Button “Verify” (Harken) und “Upload” (Pfeil). Wenn der Arduino angesteckt ist, kann man so die Software auf den Prozessor laden.

Damit das alles klappt braucht man noch den richtigen USB-Port. Bei Windows PC’s sind dass die COM Ports (1-x). Auf dem MAC heissen die etwas kryptischer /dev/cu.usb…(Arduino/Genuino Uno).

Will man schauen, ob es geklappt hat, kann man oben rechts den Serial Monitor anschalten auf 115200 Baud einstellen und den Reset-Button drücken.

Wenn sich dann DCC++ meldet, hat man erfolgreich den Code auf den Prozessor geschrieben.

Vorbereiten des Motorshields

Durchtrennen der BREAK Leitungen

Aufrennen der “Brake” Brücken. Einfach mit einem scharfen Bastelmesser die Leiterbahn dazwischen durchtrennen.

Weiter geht es mit dem durchtrennen der Stromversorgung. Der Motorshield kann den Arduino mit Strom versorgen. Da wir aber über 12V für die Modellbahn in H0 verwenden, ist die Versorgungsspannung zu hoch. Der Arduino bekommt also weiterhin seinen Strom durch den USB Anschluss.

Durchtrennen Vin Connect

Anschliessend müssen noch die richtigen PIN’s mit einander Verbunden werden.

Einlöten der Brücken für DCC auf Main und Prog Gleis

Bitte die PIN’s wie folgt verbinden:

PIN12 -PIN10 (DDC MAIN Track)

PIN13 – PIN5 (DCC PROG TRACK)

Die Kabel kommen bei mir unter eine beiliegende Acrylabdeckung und das Ganze dann oben auf den Arduino.

Die Bücken unter der Acrylabdeckung

Das so vorbereitete Motorshield wird nun einfach – wie ein Legostein – auf den Arduino gesteckt. Dabei ist darauf zu achten, dass man keinen Pin verbiegt und die Pins an der richtigen Stelle stecken. Wenn das ganze SO aussieht, ist es korrekt!

Motorshield korrekt auf dem Arduino montiert

Man kann schön erkennen, das die SCL, SDA, AREF und GND Pin übereinanderliegen. Der Shield sollte ganz eingesteckt werden. Dazu muss man drücken aber nicht besonders viel Kraft aufwenden.

Stromversorgung

Und hier noch eine Warnung: Der Motorshield braucht GLEICHSTROM (12V DC)! Wenn man das gute Stück mit Wechselstrom (AC) speisst, dann löst es sich in Rauch auf. So ist es mir passiert, weil ich Trottel nicht doch noch kurz den Ausgang des Trafos angeschaut und in das Schema geschaut habe.

Ausserdem wird im Schema explizit darauf hingewiesen, dass man die Versorgung zum CPU-Board (Arduino) trennen muss, wenn man mit mehr als 12V arbeitet.

Lehrgeld! So ein MIST… Der neue Shield ist bestellt.

Ich wollte natürlich wissen, ob der Arduino mit abgeraucht ist. Als habe ich den an meinen Modellbahn Laptop angeschlossen und die Idee geladen und den Serial Monitor angeschaltet. Netterweise meldete sich DCC++ ganz brav.

Installation JMRI & Rocrail

Danach habe ich Rocrail und JMRI installiert. Beide Tools liessen sich problemlos auf den DCC++ konfigurieren.

Fangen wir bei Rocrail an: Rocrail wird recht schnell weiter entwicklet und daher gehen die Jungs aufs Ganze und liefern sogenannte Nightly-Builds. Ich habe den folgenden Build verwendet: https://wiki.rocrail.net/rocrail-snapshot/rocrail-14282-win32.exe

Die Installation geht fehlerfrei von statten. Man muss evtl. das Installations-Verzeichnis anpassen. Bei mir wollte Rocrail unter User/AppData installieren. AppData ist als Folder nicht unbedingt zu sehen und dann geht das Gerenne los… (Systemfolder sind meistens unsichtbar).

Rocrail besteht aus zwei Bestandteilen Rocview und RocrailServer. Erst den Server starten und dann Rocview. Danach kann man alles aus der Oberfläche erledigen.

Was man genau wie und wo einstellen muss, zeige ich, wenn ich den neuen Shield habe …

JMRI: Bei JMRI ist man defensiver und stellt neben den Development Builds auch die Productive Version bereit. Der Download ist hier zu finden: http://jmri.org/download/index.shtml

Bevor man loslegen kann braucht man JAVA – die Installations-Anweisung zeigt, was man machen muss: http://jmri.org/install/WindowsNew.shtml

JMRI besteht ebenfalls aus verschidenene Komponenten. Zum Loks Programieren braucht man DecoderPro. Das werde ich hier noch gesondert zeigen, wenn ich – guess what – den neuen Shild habe.

Gehäuse

Zwischenzeitlich ist es weiter gegangen. Im Forum wie auch bei mir. Nach dem Jörg mit einem innovativen Gehäusevorschlag gekommen ist, habe ich mir ein sogenanntes Europlatinen Gehäuse gekauft. Die Booster von Tams sind ebenfalls in solchen Gehäusen verbaut. Ein Vorteil der Gehäuse ist, dass sie sich ohne Werkzeug öffnen lassen!

Arduino und Motorshild im Eurogehäuse
USB Anschluss und 15V Spannungsversorgung
Das Ganze nochmals geschlossen…
Die eingeklebten Hochstromstecker aus dem RC Modellbau (Track und Prog)

Probleme beseitigen

Irgendwie ist es etwas tricky. Wenn ich JMRI oder Rocrail verwende, kann ich den Track nicht anschalten. Die LED auf dem Shield bleiben dunkel.

Wir gehen wie folgt vor: 1) Überprüfen der Verbindungen und Brücken – Ist alles richtig? 2) Kann man den Shield von der Seriellen Konsole aus “AN” und “AUS” schalten? 3) Sind die Settings in der Software richtig gesetzt? Kenne ich alle Settings?

Überprüfen der Verbindungen und Brücken: JA – die Brücken waren richtig gesetzt und der Shield richtig auf dem Arduino aufgesteckt.

Schalten des Shields über die Serielle Konsole: Wenn ich aber mit dem Serial Monitor von der IDE die Commands “<1>” für Trackspannung EIN und “<0>” für Trackspannung AUS verwende, kann ich das Shield steuern und bekomme die entsprechenden LED’s angeschaltet und kann Spannung am Ausgang messen. Aus den 15V werden 12.7V – Vielleicht zu wenig?

Zum Testen habe den Arduino mit der IDE verbunden und den Serial Monitor gestartet.

IDE und Serial Monitor mit Startup des Arduino

Mit dem Seriellen Kommando <1> kann man die Gleisspannung anschalten. Einfach die spitzen Klammern und die 1 oben in das Eingabefeld tippen und mit Enter bestätigen.

Das Ganze sieht dann so auf dem Shield aus:

Gleisspannung angeschaltet – LED A und B leuchten

Anschliessend habe ich mit <0> wieder ausgeschaltet. Dann habe ich mit dem Reset-Button auf dem Shield in den Neustart geschickt und den Serial-Monitor neu gestartet (der verliert die Verbindung beim Reset).

Nun habe ich das Kommando <D> gesendet und so das System in den Diagnose Modus versetzt.

Senden des Komanndos <D>

Auf dem Shield fangen die LED an zu blinken und das System gibt auf der Konsole zurück, dass es im Diagnose Modus ist.

https://vimeo.com/289438692
DCC++ im Diagnose Modus – LEDs A und B blinken

Für mich schaut es so aus, also ob DCC+ und das Shield funktionieren, aber die Kommunikation mit JMRI oder Rocrail fehlschlagen. Weder JMRI noch Rocrail schalten die Spannung ein, wenn man das im User-Interface klickt.
Logischerweise schlagen dann auch alle weiteren Aktionen fehl.

Es muss also an der Seriellen Verbindung liegen…

Überprüfen der Settings: Nein es lag nicht an der Seriellen Verbindun sondern im Fall von JRMI an ein paar fehlenden Settings.

Die Definition der DCC++ Zentrale in JMRI sieht wie folgt aus:

JMRI DCC++ Settings – Verbindungen

Zusätzlich müssen noch die Settings im Vorzug angepasst werden. Da JMRI eine “Software Zentrale” zum Simulieren enthält, muss man der Software mitteilen, welche Zentrale für welchen Zweck zu verwenden ist.

JMRI DCC++ Settings – Vorzug

Wenn für Throttle, Power Control, Command Station, Service Programmer, Ops Mode Programmer und Consists der Toggel bei DCC++ gesetzt wurde, kann man eine neue Lok mit “Identify” einfach und bequem auslesen.

JMRI DCC++ – Rooster

Im Rooster kann man unten in Grün lesen, dass beide Programmer (Programmiergleis und Hauptgleis) eine Zentrale gefunden haben. Die Lok mit der ID 6465 (lange DCC Adresse) habe ich eben ausgelesen.

Jetzt muss ich das nur noch für Rocrail hinbekommen und dann habe ich DCC++ mit beiden Steuersoftware Produkten zum Laufen bekommen.

DCC++ mit Loconet

Oben habe ich ja erwähnt, dass ich das evtl. selbst versuchen will. Vorher habe ich aber noch im Internet gesucht und herausgefunden, das schon jemand die DCC++ Zentrale mit LOCONET erweitert hat!
Wer Interesse hat, muss einen Arduino MEGA verwenden und kann hier weiterlesen:
http://www.clubncaldes.com/2017/04/cheap…ation-with.html

Aussserdem kann man auf der gleichen Homepage noch einen Loconet ServoDecoder mit Polarisation per Relais für 8 Servos finden…
Der passt für den UNO.
http://www.clubncaldes.com/2017/08/ardui…-with-frog.html

Sehr cool wie ich finde. Mal schauen, wann ich dafür Zeit finde.

LG,
Axel

Comments are closed.