Lichtsteuerung Modellbahn

Hallo zusammen,

Ich plane momentan eine etwas umfangreichere Lichtsteuerung meiner Modelleisenbahnanlage.

Geplant ist folgendes:
Softwaresteuerung über PC, ein Arduino Mega als Master und mehrere Nanos als Slaves.
Zusätzlich ist noch eine Raumlichtsteuerung über RGBW-Stripes angedacht.

Nun zu meinem Problem: Mittlerweile habe ich herausgefunden, dass der I2C-Bus über längere Distanzen Probleme bereiten kann.
Da ich die Ansteuerung der LEDs gerne dezentral organisieren möchte - nach dem Prinzip "Über Software steuern (soweit möglich), vor Ort schalten" - wären Leitungslängen von bis zu 4m erforderlich, um über den zentralen Master die Slaves zu erreichen.
Soll ich es trotzdem probieren?

Alternativ könnte ich mir auch viele Attinys, wie hier beschrieben, vorstellen. Diese würde ich vom Mega aus über Transistoren schalten, wobei ich damit dann leider nicht mehr jede LED einzeln ansteuern könnte.
Zusätzlich könnte man auch noch Port-Expander einsetzen.
Wobei hier auch wieder die Frage wäre, wie es mit der Leitungslänge aussieht...

Eingelesen habe ich mich auch schon auf die RS485-Datenübertragung (https://www.gammon.com.au/forum/?id=11428).

Wie würdet ihr das machen? Programmierkenntnisse sind soweit vorhanden, löten auch kein Problem.

Vielen Dank schonmal im Voraus!

Viele Grüße,
Michael

Mobione:
Eingelesen habe ich mich auch schon auf die RS485-Datenübertragung (Gammon Forum : Electronics : Microprocessors : RS485 communications).

Hallo Michael,
RS485 wäre sicher eine gute Lösung. Wobei ich bei Längen von 4m davon ausgehe, dass auch eine einfache serielle Schnittstelle mit 5V-Pegeln ausreicht. Sehr hohe Baudraten wirst Du ja auch nicht brauchen.
Wenn der Datenfluß nur vom Master zu den Slaves geht, kannst Du die parallel an den seriellen Ausgang anschließen, dann noch ein kleines Protokoll zur Adressierung und fertig. Nur wenn der Datenfluß in beide Richtungen geht würde sich RS485 lohnen.

Hi

Meine Arduino's kommunizieren per CAN-Module.
So brauche ich auch nur zwei Drähte, die gesamte Kommunikation wird vom Modul bzw. der Library erledigt - ich habe 'nur' Das zusammen zubauen, was verschickt werden soll.

Bei CAN ist aber Etwas anders, als sonst wo

  • jeder Knoten (Netzwerk-Teilnehmer) hat eine oder mehrere IDs, diese ID MUSS aber einzigartig im gesamten Natz sein
  • die Nachricht besteht aus maximal 8 Bytes
  • Jeder Knoten muß selber entscheiden, ob die empfangene Nachricht für Ihn relevant ist

Du hast hier also kein 'Station A ruft Station B', sondern die Station A sabbelt in den Bus und Station B muß in der Nachricht erkennen, daß Sie gemeint ist.

Man kann (wenn man kann) die Nachrichten nach der ID filtern lassen - bei mir empfängt aber noch Jeder Alles.

Wie bei RS485 ist die Übertragung sehr störfest, da mit differenziellen Pegeln übertragen wird - hier sind auch wesentlich mehr, als Deine 4 Meter möglich!

MfG

PS: Meine Verbindung besteht aus Telefon-Kabel, worin ist neben den Daten-Adern für Hin und zurück 12V mitführe.
Diese 12V werden am Arduino per StepDown auf 5V am 5V-Pin eingespeist.
(Außer bei Sensor-Knoten, Die bekommen die 12V auf Vin, da kaum Strom benötigt wird)
Die Verkabelung in Hin- und Rückweg hat den Hintergrund, daß die Module an diesem Bus wie an einer Perlenschnur aufgereiht sein sollten.
Bei Stern-Verkabelung kann man Probleme bekommen, bei einer einzigen Linie, beide Enden terminiert (auf jedem der Module möglich), läuft's störungsfrei.

MicroBahner:
Wenn der Datenfluß nur vom Master zu den Slaves geht, kannst Du die parallel an den seriellen Ausgang anschließen

Zur Ergänzung: Dann die TX-Leitungen der Slaves zur Sicherheit überhaupt nicht anschließen.

Gruß Tommy

für diesen Anwendungsfall bin ich hin und hergerissen zwischen RS485 und CAN-Bus.
vermutlich ist zum Anfangen RS485 einfacher. Aufbauend auf RS485 dann vieleicht Modbus verwenden. Da kauft man sich auch mal ein fertiges Relaisboard beim FC.

Aber als Zentrale/Master würde ich mir mindestens einen ESP8266 (immer auf einen WemosD1 oder NodeMcu), vieleicht auch ein Board mit einem ESP32 anlachen.
Wenn du dich für CAN-Bus entscheidest - sowieso den ESP32.

Vielen Dank für die schnellen Antworten!

MicroBahner:
Hallo Michael,
RS485 wäre sicher eine gute Lösung. Wobei ich bei Längen von 4m davon ausgehe, dass auch eine einfache serielle Schnittstelle mit 5V-Pegeln ausreicht. Sehr hohe Baudraten wirst Du ja auch nicht brauchen.
Wenn der Datenfluß nur vom Master zu den Slaves geht, kannst Du die parallel an den seriellen Ausgang anschließen, dann noch ein kleines Protokoll zur Adressierung und fertig. Nur wenn der Datenfluß in beide Richtungen geht würde sich RS485 lohnen.

Vorerst habe ich tatsächlich nur an eine Ein-Weg Kommunikation gedacht.
Ich möchte mir aber eigentlich eine Erweiterung offen lassen, um z.B. Taster/ Endlagenschalter oder einen LDR einbinden zu können.
Daher wird wohl eher RS485 in Betracht kommen?

postmaster-ino:
Hi

Meine Arduino's kommunizieren per CAN-Module.
So brauche ich auch nur zwei Drähte, die gesamte Kommunikation wird vom Modul bzw. der Library erledigt - ich habe 'nur' Das zusammen zubauen, was verschickt werden soll.

CAN hatte ich mir auch schon mal grob angesehen, bin aber dann (als Anfänger) bei I2C hängen geblieben, bis ich jetzt gemerkt habe, dass es wohl nicht das richtige für mein Projekt ist.
Ich werde mich nochmal damit auseinandersetzen!

Vielen Dank bis hierhin!

Mobione:
Ich werde mich nochmal damit auseinandersetzen!

Möglicherweise hilft Dir dabei UNO - Mega - Teensy mittels CAN-Bus verbinden. Wenn man sich reingewurschtelt hat, ist es nicht gar so schlimm :slight_smile:

Anstelle ESP32 ginge auch ein Teensy.

Hallo Michael,
hast Du eigentlich schonmal an LocoNet gedacht? Das ist ein Bussystem, dass von DigiTrax speziell für die Modellbahn entwickelt wurde. Es funktioniert ähnlich wie ein Ethernet-LAN, ist aber von der HW her wesentlich einfacher aufgebaut. Alle Busteilnehmer können senden und empfangen. Für die private Verwendung ist es frei, und es gibt auch eine Arduino Library dafür. Die freien PC-Modellbahn Software JMRI und Rockrail unterstützen es auch. Du bist da, was die Steuerungsmöglichkeiten betrifft - nach oben vollkommen offen, und für die Zukunft nicht auf Lichtsteuerung beschränkt.

Franz-Peter, gibst bitte uns nicht-Modellbahnerern eine Kurzfassung was das ist und physisch von den anderen Vorschlägen unterscheided?
Irgendwas serielles aber mit anderen Pegeln?

noiasca:
Irgendwas serielles aber mit anderen Pegeln?

Ja, so ähnlich. Die Bit-Codierung entspricht einer normalen asynchronen seriellen Schnittstelle. Die Übertragung läuft auf einer Leitung, an der alle Busteilnehmer angschlossen sind. Die Sendetreiber sind openCollector. Ein angesschlossener Bustreiber ( üblicherweise die Zentrale ) versorgt den Bus über eine Stromquelle. Jeder Teilnehmer darf grundsätzlich jederzeit senden. Ähnlich wie bei Ethernet gibt es eine Kollisonserkennung ( CSMA/CD ). Jeder Teilnehmer hat eine eigene Adresse, sodass eine Kommunikation zwischen beliebigen Busteilnehmern möglich ist. Die HW der Bustreiber ist rel. einfach und kann leicht selbst gebaut werden. Es gibt auch Bausätze/Platinen dafür.
Wenn Du so willst ein 'arme Leute Ethernet' :wink: .

LocoNet-Treiber.png

Wenns sozusagen "Industrie-Standard" ist für euch M-Bahner, ok. Dann erübrigt sich ja eigentlich die anderen Alternativen...

noiasca:
Wenns sozusagen "Industrie-Standard" ist für euch M-Bahner,

Naja, was ist schon 'Standard' - es gibt halt immer so viele davon :wink:

Vorteil von LocoNet ist, dass es rel. gut dokumentiert ist - auch was das Protokoll angeht - und es gibt für den Privatgebrauch auch eine Beschreibung von DigiTrax selbst.

RS485 und CanBus werden von einigen Herstellern zwar auch genutzt. Aber eher als 'Firmen Standard' für ihre eignenen Geräte und die Protokolle sind nicht offengelegt. Zumindest nicht offiziell...

Ich muss gestehen, ich bin leicht überfordert, bei den ganzen Inputs :smiley:

MicroBahner:
Hallo Michael,
hast Du eigentlich schonmal an LocoNet gedacht? Das ist ein Bussystem, dass von DigiTrax speziell für die Modellbahn entwickelt wurde. Es funktioniert ähnlich wie ein Ethernet-LAN, ist aber von der HW her wesentlich einfacher aufgebaut. Alle Busteilnehmer können senden und empfangen. Für die private Verwendung ist es frei, und es gibt auch eine Arduino Library dafür. Die freien PC-Modellbahn Software JMRI und Rockrail unterstützen es auch. Du bist da, was die Steuerungsmöglichkeiten betrifft - nach oben vollkommen offen, und für die Zukunft nicht auf Lichtsteuerung beschränkt.

LocoNet ist mir ein Begriff. Daran habe ich bisher jedoch keinen Gedanken verschwendet, da meine Bahn über CS2 und PC-Software bereits voll digitalisiert ist.

Je mehr ich mich mit den ganzen Bus-Systemen beschäftige, desto mehr Fragezeichen tauchen auf.
Welche Hardware benötige ich zusätzlich zum Arduino, um in das jeweilige Bus-System einzusteigen?
Was ich bisher gelesen habe, sind bestimmte Shields nötig, z.B.

  • RS485 Transceiver z.B. für ModBus (siehe hier)
  • CAN-Bus Module

Momentan bin ich im Besitz von zwei Arduino Uno.
Wie anfangs schon geschrieben, war mein ursprünglicher Plan, das ganze um einen Mega und mehrere Nanos zu erweitern. Wenn möglich, würde ich dabei bleiben.
Welche Vorteile hätte ich durch andere µC, wie die im Thread bereits genannten?

Seht es mir bitte nach, dass ich bei den Bussystemen noch absoluter Laie bin.
Meine bisherigen Erfolge in diesem Bereich beschränken sich auf die Verbindung der Unos über I2C bzw. seriell (TX).
Mit I2C kenne ich mich ein wenig aus, daher wäre ein System, das ähnlich (einfach) funktioniert, für den Anfang wahrscheinlich am einfachsten. Oder was würdet ihr mir raten?

Mobione:
Welche Vorteile hätte ich durch andere µC, wie die im Thread bereits genannten?

Es gibt welche, die den Can-Bus von Hause auf unterstützen. Ausserdem sind sie leistungsfähiger. Wobei die Frage ist, ob das für deinen Anwendungsfall notwendig ist.

Unterstützt denn die von dir eingesetzte PC-Software LocoNet? Dann wäre das ja eine Möglichkeit beides zu verbinden und in deine vorhanden Moba-Steuerung zu integrieren. Mega/Nano sollten für eine Beleuchtungssteuerung auf jeden Fall genug Leistung bringen. Die von mir verlinkte LocoNet Lib läuft auch nicht auf den genannten alternativen µC's.

P.S. Ich habe auf meiner Moba auch I2C im Einsatz. Die gesamten Leitungslängen sind sicher > 4m. Ich habe die einzelnen I2C Äste aber aufgeteilt und schalte über einen I2C Hub immer nur einen Ast aktiv. Hauptproblem bei I2C sind die Leitungskapazitäten, und die kann man auf diese Weise in den Griff bekommen.

Du kannst dich jetzt in loconet einlesen oder mit einem anderen Bussystem anfangen.

Bei RS485 wird in einer halben Stunde die erste zentral gesteuerte LED blinken, bei jeder Erweiterung wirst du dir Gedanken machen, wie du das in dein "Protokoll" einführst und im laufe der Zeit wirst du das 5 mal umstellen und wieder unter deiner Bahn hocken.

Bei CAN ist die Eingangshürde imho höher als RS485. Die andere Denkweise wurde auch schon erwähnt, alles ein wenig komplizierter, aber hey - du hast CAN auf der Modellbahn.

Bei Loconet - das unbekannte Ding - wirst du in den ersten Wochen fluchen und umkommen vor Informationen, bevor die erste LED blinkt wirst du 20 Posts irgendwo posten. ABER wenn dann mal die ersten Rückmeldungen dazukommen kennst du dich damit aus, ist vordefiniert. Allein schon die Tatsache dass es fertige Sachen auch gibt, würde mich in diese Richtung gehen lassen. Nicht jedes Relaisboard muss man selber bauen, das können die Chinesen schöner (billiger sowieso).

Also wenn du dir ganz ganz sicher bist, dass das heute nur ein Mega und ein paar Nanos werden, dann geh den RS485 Weg, ich unterstelle aber bei Modellbahn ist das so, dass da "immer wieder was dazukommt".

Bestell dir am Montag 5 solche RS485 Wandler, irgendwann kannst die schon mal brauchen.

Warum ESP? Weil Mehr Speicher, weil Schneller, weil WLAN zum Ansteuern über einen PC. Bevor ich mich lange mit einem egal wie groß - sowieso zu klein - Display rumschlage, mache ich einen Web-Oberfläche fürs Tablet, Handy, PC den du offenbar eh auch schon im Modellbahn-Keller hast.

Warum nicht einfach WS2812B oder kompatible?

Die gibts auch einzeln bzw. man kann einen Strip zerschneiden. Mit einem Arduino/ES8266 kann man hunderte davon in Helligkeit und Farbe steuern. Auch der Verkabelungs-Aufwand hält sich in Grenzen (3 Adern).