ich möchte mich an euch erfahrenden Modellbau-Liebhaber wenden und bedanke mich im Voraus für eure Anteilnahme.
Es geht darum, dass ich für einen Modellbahn-Liebhaber ein Programm schreiben (Arduino) soll mit dem es möglich sein soll ein bestimmten Typ Ampeln (Viesmann) entsprechend schalten zu können. Er nutz eine Faller Car System Anlage und ein zusätzliches und spezielles Interface, welches aus der Faller-Software Daten umwandelt, sodass man diese nutzen (um z.B. andere Hardware dann steuern) kann.
Wahrscheinlich ist das für einige von euch keine große Sache mehr (?!?). Für mich ist das ganze natürlich absolutes Neuland. Programmieren kann ich zwar, aber ich bin mir in dieser Sache etwas unsicher, da ich für die Umsetzung des Programmes nicht über die entsprechende Hardware (Faller Car System, Interface) verfüge. Was ich aber mit auf den Weg bekommen habe, ist eine Loconet-Messages für die einzelnen Ampeln wie sie über den Loconet-Bus übertragen werden.
Hier ein kleiner Auszug: 17:09:16.576 -> RX: B0 48 11 16 Switch Request: 201:Thrown – On //(von Grün auf Rot) 17:09:16.676 -> RX: B0 48 01 06 Switch Request: 201:Thrown – Off //(von Grün auf Rot) 17:09:44.476 -> RX: B0 48 31 36 Switch Request: 201:Closed – On //(von Rot auf Grün) 17:09:44.614 -> RX: B0 48 01 06 Switch Request: 201:Thrown – Off //(von Rot auf Grün) 17:09:46.620 -> RX: B0 49 11 17 Switch Request: 202:Thrown - On 17:09:46.720 -> RX: B0 49 01 07 Switch Request: 202:Thrown - Off 17:09:48.507 -> RX: B0 49 31 37 Switch Request: 202:Closed - On 17:09:48.607 -> RX: B0 49 01 07 Switch Request: 202:Thrown - Off
Ich muss also ein Programm schreiben, welches die Loconet-Messages empfängt und entsprechend die Ampeln schaltet. Da ich ja aber (wie schon erwähnt) nicht direkt mit der eingesetzten Hardware arbeite muss ich mir etwas anderes als Ersatz dafür überlegen. Meine Idee ist es zwischen 2 Arduinos (Sender, Empfänger) diesen Vorgang zu imitieren. Das habe ich soweit schon umgesetzt. Der Arduino-Sender sendet z.B. die Message B0 48 11 16 (8-Byte) und der Arduino-Empfänger empfängt diese Message und würde dann entsprechend handeln. Wie schon erwähnt bin ich mir bei meinem Vorhaben nicht ganz im Klaren, ob ich das so machen kann. Im Nachhinein werde ich natürlich auf der Empfänger-Seite die Loconet-Lib implementieren und anhand dieser die empfangenen Daten zur Ansteuerung der Lampen auswerten.
Im Vorfeld habe ich mich etwas hier im Forum umgeschaut, konnte aber leider dazu nichts weiter finden. Falls jmd. von euch Anhaltspunkte/-Idee oder konstruktive Kritik haben sollte, würde ich mich sehr über deine Kontaktaufnahme freuen. Danke! Wenn ich fertig bin und alles wie gewünscht funktioniert, habe ich vor meine Arbeit (und mich) der Community (z.B. hier und auf GitHub) frei zur Verfügung zu stellen, sofern das nicht schon von jmd. anderen geschehen ist.
Ich hoffe ich konnte mein Vorhaben euch gut erklären. Bei Fragen ansonsten sehr gerne an mich wenden.
Wie ich verstehen ihn, versuchen du der Rad neu zu entwickeln. Wenn ich sehen an der Uhlenbrock 63410 LocoNet-Schaltmodul, denken ich das ihren Problem gelöst ist.....
Wenn du keine exotischen Sonderfunktionen implementieren willst, sollte das Modul den Anforderungen genügen. Wenn du es selber entwickeln willst, ohne vorhandene LocoNet-HW, dann würde ich einen Arduino nehmen und das LocoNet-PC-Interface darauf flashen. (Ist LocoLinx aus der LocoNet-Lib, ich hatte das mal auf einen Arduino Uno geflasht, funktionierte einwandfrei.) Mit einem Programm auf dem PC, z.B. JMRI, erzeugst du dann LocoNet-Messages, die über das Interface aufs LocoNet gelangen. Ans LocoNet hängst du einen zweiten Arduino, welcher deine Zielapplikation ist, also die Ampeln ansteuert.
ZitatHier ein kleiner Auszug: 17:09:16.576 -> RX: B0 48 11 16 Switch Request: 201:Thrown – On //(von Grün auf Rot) 17:09:16.676 -> RX: B0 48 01 06 Switch Request: 201:Thrown – Off //(von Grün auf Rot) 17:09:44.476 -> RX: B0 48 31 36 Switch Request: 201:Closed – On //(von Rot auf Grün) 17:09:44.614 -> RX: B0 48 01 06 Switch Request: 201:Thrown – Off //(von Rot auf Grün) 17:09:46.620 -> RX: B0 49 11 17 Switch Request: 202:Thrown - On 17:09:46.720 -> RX: B0 49 01 07 Switch Request: 202:Thrown - Off 17:09:48.507 -> RX: B0 49 31 37 Switch Request: 202:Closed - On 17:09:48.607 -> RX: B0 49 01 07 Switch Request: 202:Thrown - Off
Ich würde mich sher freuen, wenn Sie/Du mir noch etwas weiter bei meinem Vorhaben unterstützen würdest. Ich habe die JMRI-Sofware installiert. Muss aber sagen, dass ich mit dem Programm nicht wirklich viel anfangen kann.
Daher meine Frage: Wie kann ich mit dem Programm eine LocoNet-Messages erzeugen?
programmieren musst du schon selbst. Aber ich kann dich dabei unterstützen, die "LocoNet-Entwicklungsumgebung" zum Laufen zu bekommen.
Steht die Hardware? Hier mal eine Skizze.
Die Pinnummern gelten für den Arduino Uno, bei anderen Boards kann das abweichen. Widerstände sind z.B. 10k. Als Transistor eignet sich z.B. der BC 547 oder andere ähnliche NPN-Typen. Die physikalische LocoNet-Anbindung mit Pullup gegen 5V und RX-Pins direkt am LocoNet, wie ich es hier gezeichnet habe, entspricht nicht der Spezifikation und daher bitte nur zum Entwickeln nutzen und nicht ans "echte" LocoNet von den CarSystem-Modulen hängen.
Bzgl. JMRI: Starte PanelPro.
LocoNet-Interface anbinden: Unter "Edit->Preferences->Connections" wählst du:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
System manufacturer: Digitrax System connection: LocoNet LocoBuffer Settings: Serial port: halt den richtigen COMport(windows) oder tty(Linux) Command station type: Stand-alone LocoNet Connection Name: LocoNet Baud rate: 57600 Serial connection uses: no flow control Packetizer type: normal Transponding present: no Turnout command handl: normal Outpunt Interval: hab ich auf 20ms gestellt.
LocoNet-Monitor, um die aufs LocoNet gesendeten Messages anzuzeigen: Unter "LocoNet->Monitor LocoNet"
Weichenbefehle erzeugen: Unter "Tools->Turnout Control" Wenn du eine Weiche stellst, muss die entsprechende LocoNet-Message auf dem LocoNet-Monitor erscheinen.
Beliebige LocoNet-Messages erzeugen: Unter "LocoNet->Send LocoNet Packet"
Nehmen wir mal deine oberste geloggte Message:
ZitatHier ein kleiner Auszug: 17:09:16.576 -> RX: B0 48 11 16 Switch Request: 201:Thrown – On //(von Grün auf Rot)
Als Frame Packet trägst du dann ein: B0 48 11 00 Als letztes Byte trägst du immer zwei Nullen ein. Das letzte Byte einer jeden Message ist die Checksumme und JMRI berechnet die dann automatisch.
Kannst mich gerne per Du ansprechen, ist hier im Forum üblich.
Die Ports des eingesetzten 16-Bit-I/O-Expander MCP23017 können als Eingang für Taster oder z.B. Rückmelder genutzt werden und auch als Ausgang für LEDs eingestellt werden. Diese Schaltung und den Sketch nutze ich für ein LocoNet-Stellpult mit Arduino Nano. Für den Datenaustausch am LocoNet werden die z.B. Weichendecoder, Signaldecoder, Rückmelder, Servodecoder, Sounddecoder oder ControlPanel's von einer Zentrale oder einem USB-LocoNet-Interface (LocoNet am PC) mit 12V versorgt und es gibt für die Datenübertragung eine Stromquelle mit 15 mA. Willst du nur z.B. mit einem ControlPanel Weichen/Signale mit einem Decoder schalten kannst du dir mit z.B. einem Spannungsregler LM317 als Stromquelle und einem 12V Netzteil einen kleinen Verteiler aufbauen und so die Module ohne Zentrale nutzen.
Bild entfernt (keine Rechte)
So kannst du zwei Module/ ControlPanel verbinden (oder mehrere LocoNet Module), an jedem können Taster und/oder LEDs angeschlossen und geschaltet werden. Die Dateien für das ControlPanel findest du auf dieser Seite. (Sketch, Schaltplan,Platine,Beschreibung) Dateien Meinen geänderten Schaltplan mit Arduino Nano findest du in der Anlage. Vielleicht ist das etwas für Dich.
Gruß Andreas
Dateianlage:
Sie haben nicht die nötigen Rechte, um die angehängten Dateien zu sehen