Pages: [1]   Go Down
Author Topic: Modellbahn-Steuerung vom PC zum Arduino Mega  (Read 3829 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

ich bin noch ein totaler Anfänger, was den Umgang und die Programmierung des Arduino angeht. Bin erst vor 3 Tagen auf den Arduino gestoßen. Mir ist sofort, da ich Modellbahner bin, eine Steuerung der Eisenbahn eingefallen. Allerdings soll der Ardoino nicht die komplette digitale Bahnsteuerung übernehmen, sondern nur die Beleuchtung der Anlage und jetzt kommt's, nicht mit Hardware-Schaltern, die direkt mit dem Arduino verbunden sind, sondern softwaremäßig über den PC bzw. der Modellbahn-Steuerungs-Software (z. B. Traincontroller, Railware, Win-Digipet, usw.) Ich selbst benutze "iTrain".

Nun meine Frage: Ist es möglich, über den USB-Port des PCs, mehrere LEDs oder Relais, eventuell über ULN 2803, anzusprechen und damit zu steuern. Da der Mega 54 I/O-Ports hat, würde sich das doch direkt anbieten. In der Modellbahn-Software würde praktisch geschalten oder gesteuert und dann werden die Daten über den USB-Port des PCs an den Arduino ausgegeben, der dann bestimmte LEDs steuert, mit flackern, blinken oder gedimmt.

Ich habe zwar schon im Forum gesucht, aber nur eine Hardware-Steuerung für die Hausbeleuchtung gefunden. Es wäre schön, wenn mir hier jemand auf diesem Gebiet weiterhelfen könnte. Vielleicht gibt es schon eine Lösung oder ein Link, der meine Problem löst oder sich zumindest damit befasst. Für Lösungen wäre ich sehr dankbar.

Gruß
Siggi
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Der vermutlich "frickeligste" Teil wird wohl sein, das Protokoll heraus zu bekommen, das Deine Steuersoftware spricht. Außer es ist gut dokumentiert, dann wird es wohl nicht sehr kompliziert.
Der Arduino wird vom PC als serielle Schnittstelle erkannt. Daher mußt Du erstmal schauen, ob iTrain Steuersignale auf eine serielle Schnittstelle schreiben kann. Wenn das möglich ist, bist Du schon mal einen großen Schritt weiter.
Dein Arduino Sketch liest dann lediglich die ankommenden Daten aus der seriellen Schnittstelle und interpretiert die ankommenden "Befehle". Das ist dann der kniffelige Teil, rauszubekommen was da genau gesendet wird.
Bist Du erstmal soweit, das Du die ankommenden Befehle auswerten kannst, mußt Du nur noch schalten. Mit den ULN2803 kann man schon einiges schalten, die können bis zu 500mA pro Ausgang und haben bereits eine Freilaufdiode für induktive Lasten eingebaut.
Mario.
Logged

AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 21
Posts: 1148
I am 1 of 10 who understands binary
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mit dem Mega hast du vielleicht ein zu "großen" Controller für dein Projekt.
Vielleicht ist das hier
http://macetech.com/store/index.php?main_page=product_info&products_id=23
noch eine vernünftige alternative. Mit diesem Shield bekommst du 64I/O Pins zusätlich zu einem Arduino Uno. Wenn du dann noch mehr brauchst kannst du sogar noch ein zweites Shield "draufpacken".
Noch ein andere Idee wäre wenn du sowieso ULN bnutzt die mit Schieberegistern (74HC595) zu arbeiten. Da dann baust du dir einen "Motherboard" mit entsprechend vielen Schieberegistern und und ULN drauf und als CPU nimmst du dann einen Arduino Nano.
(http://www.ebay.de/itm/Duino-Nano-V3-0-ATmega328P-Free-Mini-USB-Cable-Arduino-Compatible-/280921265823?pt=Wissenschaftliche_Ger%C3%A4te&hash=item416836569f)
Der Große Votreil das man sich dann viel Arbeit spart mit Verkabelung von dem Unhandlichen Mega.
Wäre meine Herangehensweise.
Gruß
Der Dani
Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

Germany
Offline Offline
Edison Member
*
Karma: 48
Posts: 2346
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Das mit dem Mega sehe ich ähnlich, der ist aus meiner Sicht die falsche Wahl. Der Knackpunkt ist meines Erachtens die Software. Itrain unterstützt viele Protokolle, wie sie bei den Modelleisenbahnern vorkommen. Die sind in der Regel an irgendwelche Steuergeräte zu schicken, man müsste dem Arduino also zu beibringen wie ein solches Gerät agieren. Das sprach mkl0815 ja bereits an. Dazu ist es wichtig, das am besten geeignetste Protokoll herauszusuchen. Bist du (schneckerl53) auf ein bestimmtes Protokoll festgelegt? Ist bei Itrain ein Mischbetrieb von Protokollen auf unterschiedlichen seriellen Schnittstellen überhaupt möglich?

[edit] Hab das Handbuch zur Software gefunden: http://i-train.nl/download/2-0-6/iTrain%202%20Handbuch.pdf, hier heißt es:
Quote
Voreingestellt ist, dass in iTrain eine so definierte Schnittstelle Lokomotiven und Magnetartikel kontrolliert und die Rückmeldekontakte einliest, aber es ist ebenfalls möglich, den Kontrollumfang der Schnittstelle auf Teilbereiche zu beschränken. Dazu dienen die Haken unterhalb der Beschreibung. Dies wird vor allem dann nötig, wenn mehrere Schnittstellen von iTrain gleichzeitig gesteuert werden (siehe weiter hinten).
Einige Schnittstellen können auch nur bestimmte Teilaufgaben wahrnehmen (z.B. nur Rückmeldekontakte einlesen), in einem solchen Fall sind die nicht verfügbaren Teilbereiche automatisch deaktiviert.
Das würde ja schon mal bedeuten, dass der Mischbetrieb möglich ist, dies ist aber nur unter dieser Voraussetzung möglich:
Quote
Falls das Kontextmenü nicht verfügbar ist, ist Ihre Lizenz beschränkt auf nur eine Schnittstelleʼ. Sie können in diesem Fall Ihre Lizenz upgraden auf ʻProfessionalʼ über unsere Webseite.
Hast du die Professional-Version?
« Last Edit: October 18, 2012, 04:44:24 am by sth77 » Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 21
Posts: 1148
I am 1 of 10 who understands binary
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hier ein par Sachen ich glaube das bekommt man hin mit dem Atmega
Entwedeer es loconet von digitrix
http://wiki.rocrail.net/doku.php?id=loconet:lnpe-de
oder P50x
http://www.opendcc.de/elektronik/opendcc/opendcc_doc_ib.html
Gruß
Der Dani


Übringens ein schönes Projekt
Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

möchte mich erst einmal für die Antworten bedanken, habe gar nicht gerechnet, dass es so viele sind und es so schnell gegangen ist. Ausserdem ist gerade eben mein "Arduino Mega 1280" eingetrudelt. Theoretisch könnte es ja losgehen, aber bis dahin muss anscheinend noch das eine oder andere geklärt werden. Zumindest habe ich ihn erst mal nach der Installation getestet. Dazu habe ich den "Blink-Code" hochgeladen, den Code ein wenig abgeändert und alles hat funktioniert.

Doch jetzt möchte ich auf die Antworten von  "volvodani", "sth77" und "mkl0815", eingehen. Also, es ist ein virtuelles Interface vorhanden. Laut meiner "iTrain"-Software, steht bei "Einstellungen", dass über den Port "COM5", ein "DCC"-Protokoll übertragen wird. Die Schnittstelle ist "Intellibox P50X". Meine Steuerzentrale "CompuLok" und "iTrain" kommunizieren schon fleißig  drüber. Da ich für die Magnetartikel (Weichen, Relais, usw.) meine Decoder habe, braucht der "Arduino" nur die Lichtsteuerung übernehmen. Da sind die 54 I/O-Ports ausreichend. Die Schwierigkeit ist aber die Programmierung, um die Daten vom PC auszulesen, bzw. dem "Arduino" richtig zu übersetzen, damit er die LEDs, den richtigen Ports zuweist. Das ist mein Problem und ich bitte euch, da meine Programmierkenntnisse fast "0" sind, mir eventuell dabei behilflich zu sein. Ich habe zwar früher ein wenig "Basic", mit dem "Commodore 16", programmiert, aber ich schätze mal, dass es hier etwas ganz anderes ist. Ein paar Begriffe sind zwar identisch, aber es kommt ja auf's Detail an.

Werde nun noch etwas mit dem "Arduino herumspielen".

Gruß
Siggi
Logged

AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 21
Posts: 1148
I am 1 of 10 who understands binary
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Als erstes musst du rausfinden an welcher stelle im Protokoll des p50x stehen.
Dann sendust du alle Daten an den Arduino und lässt dir die Daten auf dem Seriellen Monitor ausgeben, dann weisst du ob die Kommunikation mit Ardu funktioniert und weisst das die Daten schon mal an der richtigen "stelle" sind.
Der Rest ist dann halt die Daten zu verwerfen die dich nicht interressieren und die Daten die du bruachst auszuwerten.

Gruß
Der Dani
Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Serial-Monitor könnte spannend werden, da die serielle Schnittstelle (zumindest die mit FTDI) schon belegt ist durch die iTrain-Kommunikation. Der Mega hat zwar noch weitere Serielle Schnittstellen, aber die muss man erstmal wieder an den Rechner bekommen. Falls der PC eine separate serielle Schnittstelle hat, reicht ggf. schon ein Breakout mit Pegelwandler.
Ich hab sowas mal mit einem Arduino-Ethernet gemacht, der dann per TCP auf eine mittels netcat geöffneten Port geschrieben hat, was auf der seriellen Schnittstelle gelesen wurde. Leider fällt das hier in Ermangelung eines Ethernet-Shields aus. :-)
Logged

AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 21
Posts: 1148
I am 1 of 10 who understands binary
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ooops, da hat der mkl schon recht.
Man muss die zweite Serielle Schnittstelle auf den PC bringen. Das wird wohl als erstet dein "Problem" sein. Ausser du hast eben noch ein FTDI Breakout. Es lohnt sich wenn man mit Arduino angefangen hat sich mindestens eins aus E-bay zu bestellen (sind dort sehr günstig).
Ich nutze wenn ich die Hardware Seriell Schnitstelle verwende dann software Seriell auf dem Mega und mache mit dem Breakout debug ausgaben. Vorteil an der Software Serielle da kann man nur eine TX Pin definieren also braucht man nur einen Pin
Gruß
Der Dani
Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hoppla, da hab' ich mir die Lichtsteuerung mit dem "Arduino Mega" anscheinend doch etwas zu leicht vorgestellt. Falls es doch nichts damit wird, war es wenigstens keine große Anschaffung über "ebay". Aber ich gebe nicht so leicht auf. Habe mir gestern ein Anfänger-Buch über den Arduino bestellt. Eventuell bekomme ich dort ein paar Tipps, Anregungen und vielleicht sogar einen fertigen oder von mir dann programmierten Sketch, der mir hilft. Mein Problem ist momentan, dass ich keine definitive Richtung habe, in die ich einschlagen und praktisch was unternehmen kann. Ich weiß z. B. wie ich mit einem Sketch eine LED vom PC aus über den USB-Port, auf dem Arduino zum leuchten bringen kann. Das wäre schon mal ein Anfang, den man eventuell weiterverfolgen sollte und auf mein Problem hinbiegen bzw. ausweiten könnte. Ich weiß auch nicht, ob die mit der mir vorhandenen Hardware überhaupt auskomme. Ich müsste mal einen kleinen Sketch zum Anfang haben, der mir überhaupt die Daten auslesen könnte und die ich dann auf dem Serial-Monitor lesen könnte. Ich habe gelesen, dass ich eventuell einen zweiten USB-Port aktivieren muss. Wie sieht das im Praktischen aus? Theoretisch hieße das doch, dass ich solch ein Vorhaben mit dem "Uno" nicht machen könnte, da der doch nur einen Port hat oder liege ich da falsch? Kann der Arduino überhaupt das DCC-Protokoll über die Schnittstelle P50x?

Vielleicht sollte ich doch die Vorschläge von Xander Berkhout (Entwickler von "iTrain") befolgen und auf eine bewährte Licht-Steuerungs-Hardware (z. B. OC32 (allerdings nur in holländisch) oder MoBaLiSt) zurückgreifen. Der hatte mir auch wissen lassen, dass es eventuell schwierig werden könnte. Aber ich lasse mich gern positiv überraschen.

Zumindest konnte ich mit dem Arduino, dank eines Sketches und einer Testschaltung, meine zum Teil defekten ULN2803's aussortieren. Also ganz umsonst war die Anschaffung nun doch nicht.

Gruß
Siggi
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Für eine Anfänger, und das soll in keinster Weise abwertend gemeint sein!!, ist das Projekt das Du vor hast schon recht gross. Das stimmt schon, ABER ...

1.) Kleine Schritte machen
2.) "Grundlagenforschung" betreiben
3.) Strukturiert vorgehen
4.) Teilprobleme lösen
5.) Nicht Aufgeben!

Die ungefähre Richtung in die Du willst hast Du ja schon mal. Der erste Schritt sollte sein, Dein Projekt in sinnvolle und für Dich überschaubare Teilprojekte zu zerlegen. Du wirst Deine Lichtsteuerung sicher nicht in den nächsten Tagen fertig stellen, hier ist Geduld und durchhalten angesagt.

Teilprojekt 1: Serielle Kommunikation des Arduino mit dem PC.
- Sketche schreiben, die über die serielle Schnittstelle Daten ausgeben (Zustand von Variablen, Tasten gedrückt etc.)
- Sketche schreiben, die über die serielle Schnittstelle Befehle und Daten annehmen (LED an, aus, blinken oder auch Relais schalten  etc.)
Damit bekommst Du ein Gefühl für die Programmierung der seriellen Kommunikation und damit einem wesentlichen Bestandteil Deines eigentlichen Projektes

Teilprojekt 2: Schalten von "vielen" Endgeräten
Hier geht es darum die Erfahrungen zu sammeln, welche Probleme man beim Schalten von vielen Verbrauchern (LEDs, Relais, dimmen von LEDs, zeitlich versetztes Schalten etc.) zu lösen hat.
- mechanische Probleme (wohin mit den vielen Kabeln, welche Stecker sind sinnvoll usw.)
- elektrische Probleme (Wackelkontakte, Fehlersuche, Stromversorgung etc.)
- elektronische Probleme (entstören von Schaltungen z.B.)
Falls die Beleuchtung auf Deiner Eisenbahnanlage schon vorhanden ist, kannst Du ja anfangen die per Arduino erstmal "trocken", also ohne iTrain, anzusteuern. Das bringt Erfolgserlebnisse und damit Motivation.
Am Ende solltest Du Teilprojekt 1 und Teilprojekt 2 miteinander verknüpfen und Deine Beleuchtung über Befehle der seriellen Schnittstelle steuern, allerdings noch ohne iTrain.

Teilprojekt 3: zusätzliche serielle Schnittstelle an den Arduino bauen
Damit kannst Du über den "normalen" USB-Anschluss die Kommunikation von iTrain laufen lassen und auf der zweiten Schnittstelle die Daten wieder zurück an den Rechner leiten.
Damit kannst Du dann das Protokoll analysieren, das zum Schalten der Beleuchtung verwendet wird. Parallel sammelst Du Erfahrungen, wie Du die Steuerung innerhalb von iTrain umsetzen musst, damit sie Deinen Anforderungen entspricht.

Am Ende verknüpfst Du dann nur noch das Gelernte miteinander und hast gute Chancen Dein Projekt umzusetzen.

Es wird mit Sicherheit viele kleine Stolpersteine auf dem Weg geben, aber genau dafür ist dieses Forum da. Hier wird Dir keiner Dein Projekt umsetzen, aber Du wirst immer Hilfe bei konkreten Fragen und Problemen bekommen. Ein kleiner Tip noch, ein zweiter Arduino (z.B. ein Uno, es muss nicht der gleiche Mega sein) ist immer hilfreich, um schnell mal was zu testen, ohne gleich die aktuelle Schaltung abbauen zu müssen. Den zweiten Arduino kannst Du dann auch gleich als Debugger verwenden, wenn beide Arduinos per "soft-Serial" miteinander reden und der zweite mit seinem USB-Anschluss quasi den Rückkanal zum PC darstellt.

Mario.


Logged

AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 21
Posts: 1148
I am 1 of 10 who understands binary
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Besser als mkl kann man es nicht sagen.
Wenn du dich dran setzt und einfach probierts, bei Fragen hier ans Forum wendest bekommst du mit sichhereit sehr kompetente Hilfe.
Hier wird keiner für dich ein Programm schreiben, aber hier wird geholfen.
Es ist auf jeden Fall ein gut umsetztbares Projekt, da das Protkoll offen liegt und dann ist damit alles gut umzusetzten kostet aber viel Hirnschmalz und Geduld, Denke aber das DU das umsetzten kannst wenn du wie oben schon erwähnt in schöne einzelne Projekt umsetzt.
Wobei ich warscheinlich erstmal die "Hardware" machen würde wie Eingige LED/Relais etc. schalten. Dann hast du schon mal ein Programm das bestimmte Bits braucht.
Dann die Serielle Kommunkition bauen. Erstmal mit einfachen bits die du aus dem PC an Arduino schickst.
Dann würde ich mit Teil 3 wie oben weiterführen.
Dann sind nämlich die sichtabaren Erfolge besser und dadruch die Motivation gegeben.
Gruß
Der Dani
Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
wie weit bist mit deiner Steuerung. Für das Märklin Protokoll habe ich schon mal ein Scetch geschreiben und getestet.Wenn dein iTrain Programm das auch kann, dann ist das ja schon einfach zu machen.Ich habe den Sctech aber gerade nicht hier auf dem rechner.. Wenn Du interesse hast, gerne mal mailen.."bboemer@t-online.de"
Bernd
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Bernd,

das ist ja wirklich eine positive Nachricht. Bin schon den ganzen Tag am PC, um alles interessante im Internet auf dem Gebiet zusammenzutragen. Habe heute auch mal meinen Entwickler der Zentrale angeschrieben, der mir eventuell auch weiterhelfen kann. Außerdem habe ich eine log-Datei vom virt. Interface gefunden, die mir eventuell auch einiges verraten kann. Auf Dein Angebot komme ich gerne zurück. Werde mich bei Dir melden. Ob es funktioniert, weiß ich nicht, aber man kann es ja mal versuchen und wenn nicht, dann werde ich alles versuchen, den Sketch anzupassen.

Danke, dass Du Dich gemeldet hast.

Gruß
Siggi
Logged

Pages: [1]   Go Up
Jump to: