PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kabelfernbedienung mit Arduino?



Andi#87
24.10.2019, 11:25
Hallo,

ich habe verschiedene Geräte gebaut, die teilweise per Kabel fernbedient werden. Im Prinzip simple Schaltvorgänge, indem aus einem Nachbarzimmer per Kabel verschiedene Relais geschaltet werden. Da es auch noch eine Rückmeldung gibt (auf den Fernbedienungen leuchtet dann jeweils eine LED bei aktivierter Funktion), kommen da einige "Drähte" zusammen, die ich aktuell mit SubD-15 oder sogar SubD-25 Steckern beschaltet habe. Die passenden Kabel sind dann entsprechend dick und nur wenig flexibel. Nun möchte ich das etwas eleganter lösen. 8 Taster (on/off) sowie 8 Rückmeldungen per LED über eine 2- oder 4-Draht Fernbedienung. Dabei muss es möglich sein, dass mehrere Taster gleichzeitig gedrückt werden und auf der Gegenseite diese Schaltimpulse auch entsprechend richtig interpretiert werden und den zugehörigen Relais zugeordnet werden. Letztlich funktioniert jede Computertastatur per USB auf diese Art, nur dass hier über 100 Tasten gemanaget werden.
Ich kann das selbst nicht, habe aber auch nichts entsprechendes gefunden beim googeln. Allerdings denke ich, dass sowas möglich ist mit z.B. Arduino UNO.
Kann mir von Euch evt. jemand Tips, Hinweise, weiterführende Links, ggf. Bauanleitungen incl. Arduino-Sketch geben, wie ich das realisieren könnte?

Andi

Mxt
24.10.2019, 11:54
Hallo,

da würden sich einige verbreitete Technologien anbieten: z.B. DMX (aus der Beleuchtungs- und Bühnentechnik) was hardwaremäßig auf RS485 basiert. Oder der aus dem Auto stammende CAN-Bus. Beides ist mit Arduino machbar.

Ceos
24.10.2019, 12:12
Möglichkeiten gibt es mannigfaltig viele

Du könntest bei deinem Stecker System bleiben und einfach die Eingänge und Ausgänge serialisiert übertragen, das ging e theoretisch auch ohne Arduino auf reiner Chiplogik (Mux und DeMux oder Multiplexer als Stichwort)
Mit Arduino (und irgend einem Funkboard) kannst du sogar auf die Kabel verzichten

Andi#87
24.10.2019, 12:54
Danke für die Antworten.

Es soll/muss eine Kabelfernbedienung sein, Funksteuerung soll es nicht werden, besonders nicht diese 433MHz-Module. Die werden auch bei z.B. Homematic verwendet, wenn ich richtig informiert bin. Und da ist mir die Zuverlässigkeit und die Reaktionszeit zu ungenau.

Der 74HC595 wäre so ein Kandidat. Den hab ich schon im Auge gehabt. Der wäre sozusagen der Decoder, der im Empfänger verbaut wird, stellt also 8 Ausgänge bereit. Welcher IC kommt dann auf der Sonderseite in Frage? Hier müssten ja die 8 Schaltimpulse der einzelnen Taster zunächst auf 3 PINs kodiert werden. Welcher IC macht das? Aber da komme ich mit meinen gewünschten 4 Kabeln nicht hin, oder? Wenn es in eine Richtung schon 3 codierte Kabel sind, benötige ich ja für die Rückmeldung nochmal 3 Kabel, das wären dann schon 6. Hinzu kommt noch die Stromversorgung, damit bin ich dann bei 8 Kabeln.

Ich hatte noch vergessen: Es sollen 3 Fernbedienungen gleichzeitig (parallel) an einen Empfänger angeschlossen werden, wobei alle 3 identische Funktionen haben und auch immer den Status ("Rückmeldung") anzeigen, auch wenn eine Funktion z.B. von Fernbedienung 1 ausgelöst wurde, sollen FB 2 und 3 das übernehmen und entsprechend anzeigen. RS485 ist ja "nur" ein Übertragungsprotokoll. Da findet kein Codieren von 8 auf 3 (oder weniger) Drähte statt. Sofern der RS485 in Frage kommt, dann käme hier nur der Half-Duplex-Betrieb in Betracht. Bei Voll-Duplex gibt es ja nur einen Master, bei Halb-Duplex sind die Geräte identisch, sofern ich das richtig lese... (?)

Andi

Ceos
24.10.2019, 13:11
Es soll/muss eine Kabelfernbedienung sein, Funksteuerung soll es nicht werden, besonders nicht diese 433MHz-Module. Die werden auch bei z.B. Homematic verwendet, wenn ich richtig informiert bin. Und da ist mir die Zuverlässigkeit und die Reaktionszeit zu ungenau.

Gibt auch elaboriertere und stabilere Varianten, Wifi (ESP32/8266), Bluetooth (grusel) und viele andere Funkprotokolle die auch absolut stabil sind (bei Heise haben sie gerade erst ein "neues" Konzept präsentiert ^^)
Wenn Stabilität also das Kriterium ist würde ich deswegen nciht auf Funk verzichten!

der 74HC595 scheint mir ein wenig überzogen (aber konfigurierbar) .. ich hatte jetzt schon an den gaaaanz einfachen clocked Mux-DeMux gedacht so ausm E-Technik Unterricht halt, aber wenn ich einfach 2 µController nehme und SPI oder sowas dazwischen hänge ist das wohl wesentlich simpler :D

Wenn du mehrere Fernbedienungen am selben Ausgang betreiben willst wäre das sogar noch ein Argument für Funk!

Dein Empfänger macht einen Wifi AccessPoint auf und die Fernbedienung (oder dein Smartphone/PC sogar :P) kann darauf verbinden und dann Befehle senden und Status Informationen abrufen.

Oder du hängst alles direkt in dein normales WLAN und musst dann nur an die IP deines Empfänger kommen (Stichwort Multicast/UDP Discovery)

Ich würde bei einer Kabellösung nicht unbedingt auf reines RS485 setzen sondern (wie schon empfohlen) auf ein bestehendes Protokoll wie DMX setzen und dann einen Empfänger schreiben der auf bestimmte Befehle eben Ausgänge setzt oder einließt oder den Zustand ausgibt. Die Fernbedienung muss dann nur deine Eingabe entgegennehmen (Knöpfe? Joystick? Schalter?) und in den passenden Befehl über das Protokoll umsetzen.

Problematisch von meiner Seite hier ist nur dass ich mit den Protokollen und Techniken auf Kabelseite (jenseits von SPI/I2C und anderen kurzstrecken PCB Verbindungen) keine Ahnung habe und nur auf der Wifi/Ethernet Schiene Erfahrung habe.

edit: deine Fernbedienung kann auch ein beliebiges Wifi-fähiges Gerät mit einem Browser sein wenn du auf deinem Empfänger einfach einen kleinen Webserver mit einer Steueroberfläche platzierst (smart TV sogar XD)

Mxt
24.10.2019, 13:15
Also die normalen 5V Logikpegel, wie bei 74HC..., sind eigentlich nicht dafür gedacht über lange Kabel versendet zu werden. Selbst sowas wie RS232 ist von der Leitungslänge beschränkt, könnte in deinem Falle aber eventuell gehen. RS485 und CAN arbeiten mit differentiellen Signalen und können lange Strecken zurücklegen.

Bei mehreren Empfängern und Sendern, Rückmeldungen usw. würde ich zu CAN tendieren.

Ceos
24.10.2019, 13:33
sind eigentlich nicht dafür gedacht über lange Kabel versendet zu werden

Zur maximalen Kabellänge hat er sich ja nicht geäußert, aber da es "von Zimmer zu Zimmer" geht, denke ich sind 5V ausreichend, solange man die Taktrate nicht zu hoch wählt wegen der Kapazität des Kabels.

Für nennenswerten Spannungsverlust braucht es schon deutlich längere Kabel, die Signalverschleifung (eben wegen der Kapazität) ist bei langen Kabeln eher ein Problem

(ich hab schon I2C auf 5V mit 100kHz auf 10m mit einfach verdrilltem Kabel stabil hinbekommen, je niedriger die Frequenz desto stabiler)

und da wir auch keine Anforderung an die Reaktionsgeschwindigkeit haben würde ich sagen 1kHz reicht hier vollkommen aus ... (1000/9)bytes pro sekunde, davon ~30% Overhead (wenn ich I2C annehme) mach immernoch ~100bytes/sekunde und wir brauchen hier vll. maximal 4Bytes pro Aktualisierung also reichlich schnell IMHO

wifi ist für dieAnwendung wahrscheinlich totaler overkill aber elegant

Mxt
24.10.2019, 13:53
Hm, ja, I2C hätte zumindest auch den Vorteil einer eleganten Rückmeldung in Form von ACK und NACK. Wäre allerdings eine sehr "kopflastige" Geschichte, wo der Master alles regelt.

74HC595 wäre eher so eine Art SPI für Arme. Wenn da Übertragungsfehler auftauchen wird die Fehlersucher sicher lustig.

CAN wäre eher dezentral und hat, aufgrund des Botschaftskonzeptes, schon vieles eingebaut, was man sonst programmieren müsste. Wichtig ist nur, dass es nie zwei Teilnehmer gibt, die die gleiche Message ID verwenden. Das kann man aber einfach sicherstellen, in dem man eine Gerätenummer vergibt, z.B. über Codierschalter oder Mäuseklavier einstellbar, die beim Senden in die Message ID aufgenommen wird.

Weitere Bits der Message ID kann man dann verwenden, um Gruppen von Empfängern zu definieren, z.B. "das ist eine Nachricht für alle Lampen" oder "das ist für die Ventilatoren". Jeder Empfänger, der sich da zugehörig fühlt, macht dann was damit. Wenn man beide Bits setzt, kann man dann auch einfach "alle Ventilatoren und Lampen" ansprechen, usw. Empfänger können die Botschaften dann wieder mit eigenen Botschaften quittieren, so kann das Netzwerk erfahren, wer alles da ist. Geräte können also einfach entfernt und hinzugefügt werden, Fragen wie "welche Lampen sind da ?" lassen sich einfach realisieren.

Es wird ja z.B. auch bei manchen Modelleisenbahnen verwendet. Da hat man ja auch viele Teilnehmer zu koordinieren.

Aber für den Anfang kann man es ja mal mit I2C versuchen, halte ich immer noch für besser als diskrete Logik ICs.

Andi#87
24.10.2019, 14:09
"...einfach 2 µController nehme und SPI oder sowas dazwischen hänge ist das wohl wesentlich simpler..."
Und das könnte ich dann über das DMX-Protokoll senden/empfangen?

CAN-Bus... Hab ich da einen Denkfehler? Ich dachte, CAN ist dasselbe, wie RS485...? Muss ich nachsehen.

Was die "Reaktionsgeschwindigkeit" betrifft: da sind 1kHz völlig ausreichend.

Ceos
24.10.2019, 14:37
Ich dachte, CAN ist dasselbe, wie RS485

Jein, RS485 ist eine Übertragungstechnik (differentiell, stromschleife um induktive Störung zu minimieren), CAN ist das Protokoll, welches RS485 (unter anderem) einsetzt :)

Ich kann CAN auch nur mit 5V und ohne differentielle Übertragung machen. Es ginge aber auch ein Zeilenbasiertes UART Protokoll wie HART (welches man, der Stabilität wegen, auch über RS485 übertragen kann)

Ich denke du solltest dich mit den beannten Technologien mal befassen und deinen favoriten finden, jeder Ansatz hat seinen gewissen Aufwand und seine Schwächen, da entscheidet mehr die Lust und die Affinität was einem gefällt und einfacher scheint (mir persönlich gefällt der Wifi weg am besten)

Andi#87
24.10.2019, 15:11
Mit Funk... irgendwie ist mir kabelgebunden lieber. Das ist zuverlässiger. Und wenn ich WIFI höre... Netzwerk... dann mache ich da einen ganz grossen Bogen drum. Klar, es gibt nette Sachen inzwischen, die über Netzwerk laufen. Aber wehe, das Netzwerk fällt mal aus, Störung o.ä... dann ist es dunkel in der guten Stube. Und in diesem komplexen Protokoll dann auf Fehlersuche zu gehen, das ist - auch wenn es sich alles so easy anfühlt - eine andere Hausnummer.
By the way: Funksteuerung, diese 433MHz-Module. Mal ganz banal gefragt: könnte mann auf diesen Modulen denn einfach auf der Transmitter-Platine, wo die Antenne angelötet ist, statt dessen ein Kabel anlöten und dieses dann auf der Receiver-Platine auch dort anlöten, wo dessen Antenne auf der Platine sitzt?

Andi

Moppi
24.10.2019, 17:33
Wie das mit einem µC und RS485 aussieht, dazu mal hier eine Beispielseite, da gibt es eine Beispielschaltung mit 2 Arduinos: http://www.gammon.com.au/forum/?id=11428



MfG

Andi#87
24.10.2019, 18:11
Danke für den Link. Sehr komplex... Muss ich mich einarbeiten.

Danke
Andi

wkrug
25.10.2019, 06:33
Wenn keine Rückmeldung gefordert ist würde Ich auch ein DMX ( ähnliches ) Protokoll vorschlagen.
Vom Controller kann die normale serielle Schnittstelle verwendet werden, man braucht lediglich einen Leitungstreiber z.B. SN75176 oder MAX 485.
Dazu reicht dann eine normale abgeschirmte 2 Draht Leitung für die Übertragung ( Bei sehr langen Leitungen sollte man hier auch den Wellenwiderstand beachten ).
Es muss natürlich auf beiden Seiten ein Controller mit Schnittstellentreiber verbaut werden ( 1* Sender, 1* Empfänger ).

Andi#87
26.10.2019, 14:52
Eine elektrische Rückmeldung ist notwendig für meine Anwendung. Damit ist DMX auch nicht die passende Wahl. Ich hab zu den Funkmodulen mal geforscht. Es gibt ja auch diese 2,4 GHz-Module (NRF24L01). Die scheinen mir deutlich zuverlässiger und auch reaktionsschneller zu sein. Kennt Ihr die?
Wenn die auf 2,4 GHz arbeiten, wie ist das dann mit z.B. WLAN oder anderen Funkstrecken, die ebenfalls 2,4 GHz verwenden? Gibt es da gegenseitiges Störpotential? Ich hatte das tatsächlich mal in einer Anwendung mit 2,4 GHz Funkmicrophonen. Dort konnte ich durch Kanalauswahl das Problem umgehen. Wenn ich aber einen Sender/Empfänger bauen möchte, wie beschrieben (also diese 8 Taster mit LED-Rückmeldung), sollen die Dinger dann dastehen, anschalten und funktionieren. Das heisst, niemand wird da nachträglich einen Kanal auswählen oder irgendwas korrigieren. Anschalten, läuft! Wäre das mit diesen 2,4 GHz-Modulen möglich? Oder bieten die da Störanfälligkeiten? WLAN ist heute im Prinzip überall. Die Geräte, die ich bauen möchte, sind transportabel und können (so das Ziel) in verschiedenen Räumen zum Einsatz kommen. Ich weiss also jetzt, zum Zeitpunkt des Bauens, nicht, welche Umgebung mich erwartet, welches WLAN dort auf welchem Kanal grad vorhanden sein wird. Ich muss die Geräte also so bauen, dass ALLE Störmöglichkeiten in 2,4 GHz grundsätzlich und dauerhaft ausgeschlossen sind. Geht das mit diesen Modulen und Arduino?

Andi

Moppi
26.10.2019, 15:47
Den NRF24L01 kennen vermutlich nicht so viele hier.
Mit dem nodeMCU z.B. ist es möglich einen eigenen WLAN Zugriffspunkt zu erstellen. Also ein Netzwerk, nur für diesen einen Zweck. Dabei kann der Kanal ausgewählt werden und die SSID des Netzwerks kann verborgen werden. Bei Problemen könnte man den Kanal auf auf Knopfdruck hin wechseln lassen (sowie speichern, um das nächste Mal diesen Kanal wieder zu verwenden). Um in das Netzwerk hineinzukommen, muss man die SSID kennen, die nach außen nicht bekannt ist und das Passwort. Ansich sollte dies sicher genug sein. Funktionieren tun die Module eigentlich einwandfrei. Inwiefern die zuverlässig auch über mehrere Räume einer Wohnung funktionieren, habe ich noch nicht probiert. Ansonsten: Einschalten und nach wenigen Sekunden sollte das Netzwerk verfügbar sein. Es dauert auch nur wenige Sekunden, wenn sich ein anderes Modul in solchem Netzwerk anmeldet.


MfG

Moppi
28.10.2019, 14:47
Für den ESP8266 gibt es fertige Relaiskarten. Ich habe Einer und Vierer gefunden, wo direkt ein ESP8266 aufgesteckt wird.


MfG

Andi#87
19.11.2019, 10:51
Ich komme nicht voran. Gibt es evt. jemanden unter Euch, der mir den Arduino-Code (auf Basis UNO) schreiben könnte für meine 8-Tasten-Kabelfernbedienung? Selbstverständlich gegen Bezahlung.

Andi

Moppi
19.11.2019, 11:56
Hallo Andi,

beschreibe mal bitte die genaue Funktion Deiner Fernbedienung(en), ich habe da z.B. noch keine vollständige Vorstellung, wie das nun ganz genau funktioniert. Vielleicht kannst Du das mal auf Papier zeichnen?
Du schreibst: "Ich komme nicht voran." - Warum denn nicht?
Zum einen brauchst Du passende Relais (-karten), zum anderen wahrscheinlich dann auch eine andere Verkabelung an den Geräten.

MfG

Andi#87
19.11.2019, 13:41
Hallo,

es sind 3 Bedienpulte an verschiedenen Orten im Raum mit jeweils 8 Tastern/LED pro Bedienpult, die gleichzeitig aktiv sind. Diese "senden" an einen gemeinsamen Empfänger. Das kann durchaus eine Relaiskarte sein oder Open-Kollektor o.ä. Wichtig ist, dass der jeweilige Schalt-Zustand als "echte" Rückmeldung auf den einzelnen "Sende-Bedienpulten" z.B. per LED sichtbar ist. Wenn also jemand auf Bedienpult 1 den Taster 2 drückt und damit im Empfänger das Relais 2 schaltet, so soll auf allen 3 Bedienpulten die entsprechende LED zu Taster 2 leuchten, auch wenn dieser Taster nur auf einem Bedienpult gedrückt wurde. Wenn also 3 Personen vor jeweils einem dieser 3 Sende-Bedienpulte sitzen, soll jederzeit für alle diese Personen erkennbar sein, welcher Taster aktuell On bzw. Off ist, auch wenn nur eine Person den Taster gedrückt hat. Mit "echter" Rückmeldung meine ich, dass der Empfänger (z.B. besagtes Relais 2) einen Impuls zurück schickt an die LED der Bedienpulte. Es soll also nicht einfach nur direkt im Bedienpult die LED für Taster 2 bei Tastendruck angehen, indem ich diesen Kontakt direkt im Bedienpult abgreife und damit gleich die LED schalte, denn damit hätte ich keine wirkliche Rückmeldung, ob im Empfänger das Relais auch wirklich geschaltet ist.
Im Prinzip kann man das also gar nicht trennen als Sender / Empfänger, sondern die Sende-Bedienpulte sind zugleich wieder Empfänger (der Impulse der Relais aus dem "eigentlichen" Empfänger), so wie natürlich der eigentliche Empfänger zugleich auch wieder Sender ist, indem er die Rückmeldung an die 3 Bedienpulte sendet. Wobei es auch aus elektrischer Sicht möglich sein muss, dass statt 3 manchmal nur 2 oder 1 Sende-Bedienpult angeschlossen ist. Die 3 Sende-Bedienpulte sind also parallel geschaltet und es soll keine Beeinflussung geben, wenn z.B. nur 2 Pulte angesteckt sind. 3 Pulte sollen maximal gleichzeitig angeschlossen werden können (ohne dass man vorher etwas umprogrammieren oder neu einrichten muss usw.).
Ich habe das schon gebaut, allerdings mit 25-PIN-SubD-Stecker/Buchsen und entsprechend dickem Kabel. Ich möchte das alles gern "geschmeidiger" haben, da die Kabelstärke im Handling und nicht zuletzt auch in der Optik "störrisch" ist. Mir schwebt eine Kabelverbindung aus max. 4 Adern vor, von denen 2 Adern als Spannungsversorgung verwendet werden und somit 2 Adern als eigentliche Steuerleitungen verfügbar sind. Übertragungsweg jeweils max. 100m für jedes Bedienpult.
Alles auf Arduino-UNO-Basis, da ich die gesamte Schaltung auf ein eigenes Layout bringen möchte, was mit dem im UNO verwendetet ATMEGA 328 auch möglich ist (mit PIN-Erweiterung ICs). Den Arduino MEGA, der von Hause aus entsprechend viele PINs zur Verfügung stellen würde, kann ich nicht "nachbauen", sondern müsste einen MEGA als fertiges Produkt integrieren. Würde auch gehen, aber mein Wunsch ist erstmal, das mit dem 328 zu machen (RM 2,54).
Per Funk möchte ich das nicht machen, da ich in der Vergangenheit immer wieder unerwartet Ausfälle feststellen musste mit handelsüblichen Geräten (besonders bei 433MHz). Und auch hier wäre die Rückmeldung optisch auch eine Zusatzeinrichtung. Kabelgebunden mag "altmodisch" sein, aber eben auch zuverlässig.
Anbei ein Bild als Übersicht.
Ist sowas machbar?

Andi


34496

hasta
19.11.2019, 14:20
Hallo,

wie stellst Du dir die Verkabelung vor? Hast Du eine strukturierte Verkabelung die Du nutzen kannst/willst oder willst Du mit der Kabeltrommel rumrennen bei 100m Kabellänge. Und zw. 2 Bedienpulten via "Empfänger" sind das dann schon im ungünstigsten Falle 200 m Leitungslänge. Da kommt schon was an Leitungsverlusten zusammen.

hasta

Andi#87
19.11.2019, 14:31
Die Kabel werde ich legen, da muss ich nicht mit der Kabeltrommel rumrennen...
Und 100m sind mit viel Reserve. Aktuell ist die weiteste Entfernung vom Empfänger zu einem der Sende-Bedienpulte ca. 18m. Da man aber nie weiss, was noch kommt, nenne ich mal 100m, um damit auch zukünftig arbeiten zu können. Meines Wissens wäre das z.B. für RS485 unproblematisch, ob nun 15 oder 100m.
"...im ungünstigsten Fall 200m..." Wieso? Sternförmig verkabelt (wie auf der Zeichnung zu sehen) würden es niemals mehr als eben (max) 100m pro Sendepult.

Andi

Moppi
19.11.2019, 17:55
Meines Wissens ist RS485 ist eine Punkt zu Punkt Verbindung. Stern geht damit nicht. Jedes Bedienpult bräuchte also drei RS485 Schnittstellen. Zu jedem Bedienpult eine und jeweils zu dem Empfänger. Das wären für jedes Bedienpult 3x3 Adern. Richtig oder falsch? Das würde Dein Problem nicht lösen. Wird dann wohl nur I2C bleiben. Das ist aber nicht für so lange Leitungen, mit mehreren Metern Länge, ausgelegt. Verlängert werden könnte das wohl, aber irgendwie haben andere User in anderen Foren, dafür geschirmte Leitungen CAT5 genommen (Stärke ca. 5mm). Ob das eine Verbesserung für Dich, zum jetzigen Zustand, darstellt? Dann muss es jemand realisieren können. Da habe ich gerade was vom P82B96 gelesen. (https://www.mikrocontroller.net/topic/251808) Ob das funktionieren kann? Da muss sich jemand finden, der das ausprobieren kann oder direkt weiß, wie man so etwas baut. Für mich wäre das auch Neuland und daher scheide ich dann wohl aus. Habe auch kein Oszilloskop, um da irgendwas überprüfen zu können.



MfG

Andi#87
19.11.2019, 20:00
I2C hatte ich auch schon im Visier, aber da waren/sind besonders die Unsicherheiten mit der Kabellänge ein Hindernis. Insofern ist Dein Link zu dem Beitrag auf microcontroller.de sehr interessant, vielen Dank dafür. Diesen Beitrag kannte ich bisher noch nicht. Ich habe allerdings schon viele Erfahrungen gesammelt hinsichtlich Kabel und Kabelqualität. Das ist ein Aspekt, der jedenfalls nicht zu unterschätzen ist.
Was RS485 betrifft, so habe ich dessen Prinzip anders verstanden, als Du schreibst. Meine vorangegangene Formulierung war da möglicherweise irritierend, indem ich "sternförmig" schrieb. Wenn ich es aber richtig verstehe, so ist RS485 ein Bussystem, auf das man sich an jedem Ort (innerhalb der möglichen Kabellängen) einklinken kann, und es werden keine Signale durchgeschliffen durch eines der angeschlossenen Geräte siehe z.B. https://www.wut.de/e-6wwww-11-apde-000.php). Insofern betrachte ich den Bus dort als "sternförmig", denn ob der Bus nun 100m lang ist oder 20cm, dürfte dann keine Rolle spielen. Bitte mich korrigieren, wenn ich das falsch verstanden habe. Allerdings ist die Kabellänge vom Bus zu den einzelnen Geräten dann eingeschränkt (zumindest im Halbduplex), und das könnte für meine Anwendung wiederum Auswirkungen haben, da ich diesen 2-Draht-Bus verwenden wollte, um das Kabel aus bereits genannten Gründen schmal und flexibel zu halten. Wenn CAT-Kabel ins Spiel kommt (zumindest solches mit Abschirmung), kann ich "eigentlich" auch bei meiner bisherigen SubD-25-Varinte bleiben, denn gut geschirmte CAT-Kabel sind prinzipbedingt nicht wirklich flexibel.
Ich grüble nun schon eine Weile an diesem Vorhaben und muss zunehmend feststellen, dass es wohl keine wirklich einfache Lösung dafür gibt. Da schaue ich neidisch auf meine USB-Tastatur, die auf einem 4-adrigen Kabel locker über 100 verschiedene Tastensignale überträgt und auf der Empfängerseite erkennt und bin der Meinung, da sollten meine 8 läppischen Tasten doch auch möglich sein. Wird es vermutlich auch, aber die physikalische Grenze bzw. Hürde wird wohl die Kabellänge sein. Symmetrische Verkabelung kenne ich z.B. aus der Musikecke oder DMX und weiss von dort, dass es einen erheblichen Unterschied in der Signalqualität gibt, wenn man ein Line-Signal über 30m Kabel schickt. Daher der Gedanke an RS485...

Andi

Moppi
19.11.2019, 22:03
Ich glaube aber, ich hatte einen Denkfehler. Jeder Sender benötigt nur eine RS485. Das sollte machbar sein. Anscheinend kann man mehrere RS485 sternförmig zusammenschalten: https://www.mikrocontroller.net/topic/372367
Bloß das Handling ist dann wohl nicht so einfach. Allerdings kann ich mich nicht erinnern, so etwas schon angewendet zu haben. Ich kenne RS485 nur als Verbindung zwischen zwei Geräten.
Unmöglich scheint es jedenfalls nicht zu sein:
34502

Hier gibt es z.b. die RS485 Boards für Arduino. (https://www.amazon.de/ARCELI-STÜCKE-MAX485-RS-485-Entwicklungsboard/dp/B0785B3BS8/ref=asc_df_B0785B3BS8/?tag=googshopde-21&linkCode=df0&hvadid=310746423059&hvpos=1o1&hvnetw=g&hvrand=4408237529892788771&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9041550&hvtargid=pla-737564946208&psc=1&th=1&psc=1&tag=&ref=&adgrpid=63368234873&hvpone=&hvptwo=&hvadid=310746423059&hvpos=1o1&hvnetw=g&hvrand=4408237529892788771&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9041550&hvtargid=pla-737564946208)

Wer sucht, der findet ... irgendwann. Im RN-Wissen steht es auch noch mal: https://rn-wissen.de/wiki/index.php/RS485

Muss sich jemand finden, der sich damit auskennt.



MfG

021aet04
21.11.2019, 19:56
RS485 ist ein Bussystem. Alle Teilnehmer sind an 2 differenziellen Adern angeschlossen (Ader A und B). Dadurch kann immer nur 1 Teilnehmer senden.

Ich würde das mit einem Master-Slave System an einem RS485 Bus lösen. Da du nur einen Empfänger hast, würde ich den als Master nehmen. DMX basiert auf dem RS485 System und ist ein spezielles Protokoll. Profibus (Bussystem in der Industrie zur Kommunikation in Anlagen) basiert ebenfalls auf RS485.

Ich würde es so lösen:
Master (es wird eingestellt wieviele Slaves es maximal gibt) => Empfänger, Slave => Terminal mit eindeutiger Adresse (einmal einstellen z.B. über Dipschalter oder fix programmiert)
Wichtig ist das nur ein Teilnehmer auf Senden geschalten ist.

Master sendet an Adresse 1 ein Komanndo um zu prüfen ob es ihn gibt (z.B. Startbyte, Adresse, Stoppbyte)
Slave vorhanden (z.B. Slave sendet Startbyte, Adresse, Status der Tasten, Stoppbyte zurück) => Master sendet Status der Relais an Slave, nächste Adresse wählen
Slave nicht vorhanden (keine Antwort für eine gewisse Zeit) => nächste Adresse wählen
Gleich wie oben mit Adresse 1, den Ablauf wiederholen bis die letzte Adresse erreicht ist und dann wieder bei Adresse 1 starten

MfG Hannes

HaWe
21.11.2019, 20:15
mit allem nötigen Vorbehalt:
ich habe von RS485 oder evtl. auch UART Protokollen gehört, bei denen mehrere Teilnehmer an RX/TX aufgereiht sind.
Alle Nachrichten per TX erreichen daher alle RX.

Man kann unterscheiden, welcher RX Slave Nachrichten beachtet, indem man einen"Adress-ID-Header" mit verschickt, und nur derjenige RX Slave beachtet die msg, dessen Adress-ID damit identisch ist.

wkrug
21.11.2019, 22:14
RS 485!
Wenn man das so machen will müsste dann wohl der Empfänger der Master sein.
( Nur ein Controller im System kann Master sein ! )
Der verschickt dann einen Token mit der Adresse der jeweiligen Tasteneinheit.
Diese und nur diese darf dann seinen Sender einschalten und Steuernachrichten verschicken.
Kommt nicht innerhalb einer bestimmten Zeit eine Antwort wird der Token an die nächste Steuereiheit weitergegeben.
Um das Ganze flexibel zu Halten wären wohl 16 Adressen sinnvoll.
Eventuell kann der Master auch nur bei jedem x-sten Durchlauf alle möglichen Adressen abfragen.
Ansonsten nur die bereits aktiven, das beschleunigt das System.
Noch mehr mögliche Adressen verlangsamen aber zunehmend das ganze System.
Auf der Tastenseite könnte man die Adresse per DIP Fix Schalter, oder Lötbrücken einstellbar machen.
Dann kann für alle Tastenteile die gleiche Software verwendet werden.
Es darf immer nur ein Sender aktiv sein. Dann würde das Ganze auch mit nur 2 Drähten funktionieren.
Als Treiberbausteine könnten hier die "üblichen Verdächtigen" verwendet werden ( MAX 485, SN75176 ).
Als Ansteuerung für die Bausteine wäre der ganz normale USART + 1 bis 2 Steuerleitungen möglich.
Das Bussystem muss an beiden Enden mit Abschlusswiderständen abgeschlossen werden.
Bei DMX verwendet man hierzu Terminatoren ( Einfach in einen Stecker eingelöteter Widerstand. ).

Das System entspricht in etwa dem, was auch HaWe und 021aet04 vorgeschlagen haben.

Ich würde hier noch mal ein anderes Bussystem in den Ring werfen.
Wäre das nicht eine klassische Anwendung für einen CAN Bus?
Hier sendet jeder Teilnehmer seine Nachrichten in einem festgelegten Frame, die Kollisionserkennung passiert hier ja auf dem Bus ( Der Teilnehmer der eine Buskollision feststellt schatet seinen Sender ab ! ).
Der Bus arbeitet Nachrichtenbezogen.
Das bedeutet ein Sender gibt nur eine Nachricht auf den Bus und nur die Teilnehmer die diese Nachricht "interessiert" werten diese aus.
Damit liesse sich so ein System auch problemlos mit mehreren Sendern und Empfängern erweitern.
Die Geschwindigkeit auf dem Bus bestimmt hier die Reichweite.
Ich kenn jetzt die Lösung mit 2 Chips. Einer für den Protokollstack ( MCP 2515 ) ein weiterer als Bustreiber ( MCP 2551 ).
Librarys sollten sich für den Arduino finden lassen.
Es gibt auch Controller mit integrierter CAN Schnittstelle, aber es soll ja ein Arduino verwendet werden!
Wobei das CAN Protokoll doch relativ komplex ist.


Meines Wissens ist RS485 ist eine Punkt zu Punkt Verbindung. Stern geht damit nicht.
Stern geht nicht, das stimmt.
Aber die Leitung darf ohne weiteres von einem Teilnehmer zum nächsten, ohne Abzweigungen, gelegt werden.
Die Bustreiber sind dabei für max. 32 Teilnehmer ausgelegt.

Moppi
22.11.2019, 11:34
Wir haben das aus dem RN-Wissen:

34523

Da ist doch das, was gebraucht wird. Es waren doch 3 Bedienungen und ein Empfänger, nicht?

Dann haben wir diese MAX485-Module für Arduino (https://de.banggood.com/5V-MAX485-TTL-To-RS485-Converter-Module-Board-For-Arduino-p-912674.html?cur_warehouse=CN) (ATmega328P bspw.).

Müssen diese 120Ohm-Widerstände etxra angeschlossen werden?

Hier habe ich ein Anschlusschema (https://produto.mercadolivre.com.br/MLB-1172710294-modulo-conversor-rs232-ttl-para-rs485-max485-arduino-pic-_JM?quantity=1) gefunden. Verbunden werden R0 mit Rx, DI mit Tx, DE+RE gebrückt und mit einem beliebigen anderen Pin (damit wird wohl das Modul enabled/disabled, nehme ich an).

Dann müssten die Geräte (Arduinos) nur noch programmiert werden. Fehlt noch was?





MfG

wkrug
22.11.2019, 21:43
Dann haben wir diese MAX485-Module für Arduino (https://de.banggood.com/5V-MAX485-TTL-To-RS485-Converter-Module-Board-For-Arduino-p-912674.html?cur_warehouse=CN) (ATmega328P bspw.).

Müssen diese 120Ohm-Widerstände etxra angeschlossen werden?

Der Bus ist recht stabil, es wird bei 18m sicher auch ohne diese Widerstände funktionieren.
Von der reinen Lehre her müssen aber die Widerstände an beiden Enden der Leitung eingebaut werden.
Wie man das technisch löst ist auch vom verwendeten Stecksystem abhängig.
Jeder Busteilnehmer bekommt 2 Stecker. Ob man da 1*männlich 1* weiblich oder gleiche Stecker verwendet ist erstmal egal.
Natürlich geht auch fixe Verdrahtung mit Schraubklemmen.
Die Abschlusswiderstände kann man ja auch in jeden Busteilnehmer einbauen und über einen Jumper zuschaltbar machen.
Oder man macht das eben in einen Stecker rein ( wie bei DMX 512 ) .


Hier habe ich ein Anschlusschema (https://produto.mercadolivre.com.br/MLB-1172710294-modulo-conversor-rs232-ttl-para-rs485-max485-arduino-pic-_JM?quantity=1) gefunden. Verbunden werden R0 mit Rx, DI mit Tx, DE+RE gebrückt und mit einem beliebigen anderen Pin (damit wird wohl das Modul enabled/disabled, nehme ich an).
Das mit den Enable Leitungen hast Du richtig erkannt.
Alle Empfänger können aber trotzdem fix aktiv geschaltet werden.
Das ist eventuell sogar ein Vorteil, weil der aktive Sender sein eigenes Signal wieder empfängt und man somit auch gleich eine Busüberwachung mit integrieren kann.
Die Sender müssen aber auf jeden Fall abschaltbar sein, weil das Protokoll differentielle Signale verwendet und damit 2 Sender gleichzeitig mit unterschiedlichen Signalzuständen einen Quasi Kurzschluss produzieren könnten.

Moppi
23.11.2019, 06:18
Danke wkrug!


Der Vollständigkeit halber:



Wir haben das aus dem RN-Wissen:

34523

Da ist doch das, was gebraucht wird. Es waren doch 3 Bedienungen und ein Empfänger, nicht?

Dann haben wir diese MAX485-Module für Arduino (https://de.banggood.com/5V-MAX485-TTL-To-RS485-Converter-Module-Board-For-Arduino-p-912674.html?cur_warehouse=CN) (ATmega328P bspw.).

Müssen diese 120Ohm-Widerstände etxra angeschlossen werden?

Hier habe ich ein Anschlusschema (https://produto.mercadolivre.com.br/MLB-1172710294-modulo-conversor-rs232-ttl-para-rs485-max485-arduino-pic-_JM?quantity=1) gefunden. Verbunden werden R0 mit Rx, DI mit Tx, DE+RE gebrückt und mit einem beliebigen anderen Pin (damit wird wohl das Modul enabled/disabled, nehme ich an).



Gearbeitet wird im Halbduplexverfahren, weil nur 2 Leitungen da sind. Angeschlossen werden alle MAX485 auf dem Bus parallel. Widerstände an den Kabelenden gehören offenbar rein (bei kurzen Leitungslängen kann drauf verzichtet werden - Definition "kurz" fehlt).


5x Arduino Nano-Platinen, Leisten zum Einlöten: 15,-EUR
5x MAX485-Levelkonverter-Boards: 8,- bis 10,-EUR

Dann bleibt nur noch die Frage, ob Andi#87 genügend Platz in jeder Sendeeinheit und Empfangseinheit hat, für Arduino Nano + MAX485 Board. Zusätzlich ist auch ein wenig Elektronik drumrum notwendig, um Relais und Dioden zu steuern. Dafür fehlt hier aber der interne Schaltplan aller Geräte, so dass dazu nichts weiter gesagt werden kann. Außerdem müssten die vorhandenen Geräte umgebaut werden, wie ich das sehe.

Damit war es das erst einmal so weit, denke ich.



MfG

- - - Aktualisiert - - -

Habe mir gerade ein paar Gedanken zur Abwicklung gemacht, auch das ist nicht ganz unproblematisch. Pauschal würde ich ca. 150 EUR Entwicklungskosten ansetzen. Dann wird die Hardware gekauft und alles aufgebaut. Dann programmiert. Sollte es trotz aller Bemühungen nicht funktionieren, ist das Geld für Andi#87 futsch. Ich denke, eine Garantie mag hier, im Hobbybereich, keiner geben. Nachdem das dann funktioniert und sie Sachen verschickt wurden, müssen die Teile verbaut werden, in die Geräte. Das am besten vor Ort, wo auch gleich alles in Betrieb genommen werden kann. Wenn der Verbund der Geräte funktioniert, heißt das noch lange nicht, dass es vor Ort eingebaut auch funktioniert. Versendet man die Elektronik und die wird falsch angeschlossen, könnte sie im schlimmsten Fall zerstört werden.
Ich sehe das eher als Selbstbauprojekt für Andi#87.

wkrug
23.11.2019, 12:03
Ich sehe das eher als Selbstbauprojekt für Andi#87.
Das seh Ich genauso.
Da es sich prinzipiell alles aus vorhandenen Librarys zusammenbasteln lässt, sollte das auch nicht so schwierig werden.
Ein Problem seh ich eventuell noch bei der Abschaltung der Sender der RS 485 Treiber.
Die muss ja relativ zeitnah nach versendung des letzten Bytes erfolgen, aber das könnte man per Polling lösen ( Interrupts wären da natürlich eleganter ).


Widerstände an den Kabelenden gehören offenbar rein (bei kurzen Leitungslängen kann drauf verzichtet werden - Definition "kurz" fehlt)
Wir haben bei DMX schon Leitungslängen mit 30m und Kabel mit falschem Wellenwiderstand gehabt und auch das hat, mit Abschlusswiderstand auf einer Seite, funktioniert.
Da wir hier von einem finanziellen Aufwand von 20 Cent ( 2* Widerstand + 2* Jumper ) reden würd Ich auf die Abschlusswiderstände nicht verzichten.
Nötigenfalls kann man die Widerstaände auch direkt in die Kabelklemmen der RS 485 Platine mit reinquetschen.


Dann bleibt nur noch die Frage, ob Andi#87 genügend Platz in jeder Sendeeinheit und Empfangseinheit hat, für Arduino Nano + MAX485 Board. Zusätzlich ist auch ein wenig Elektronik drumrum notwendig, um Relais und Dioden zu steuern.
Ich wär da auch gleich wieder auf dem Trip ein kleines OLED Display mit SPI, oder I²C Schnittstelle in die Tasteneinheiten mit einzubauen.
https://www.ebay.de/itm/0-96-I2C-IIC-Serial-Blue-OLED-LCD-LED-128X64-128-64-Display-Module-for-Arduino/401921105504?hash=item5d945d5e60:g:Ak4AAOSwDwhdo9y u
Wenn die Relaisplatine den Token veschickt könnte er doch gleich in einem 2ten Byte den aktuellen Zustand der Relais verschicken.
Damit hätten dann alle Tastenmodule die Information über den aktuellen Zustand der Relais und könnten diesen auf den Displays anzeigen.

Moppi
23.11.2019, 13:33
Ein Problem seh ich eventuell noch bei der Abschaltung der Sender der RS 485 Treiber.
Die muss ja relativ zeitnah nach versendung des letzten Bytes erfolgen

Dafür gibts sogar Beipsielcodes für Arduino im Netz.


Nötigenfalls kann man die Widerstaände auch direkt in die Kabelklemmen der RS 485 Platine mit reinquetschen.

Hätte ich auch so gemacht und funktioniert auch.



MfG

Andi#87
27.11.2019, 08:29
Hallo zusammen,

vielen Dank für Eure vielen Antworten und die Zeit, die Ihr Euch dafür genommen habt. Credo: es ist kompliziert. Ich bin definitiv in diesen Programmier-Dingen ein Anfänger, habe bisher lediglich Sketches nachgebaut usw. Daher wird das meine Fähigkeiten übersteigen. Sofern ich niemanden finde, der das machen könnte, lege ich das erstmal wieder auf Eis, bis ich mehr Kenntnisse habe und dann einen neuen Anlauf wage...

Danke
Andi

Moppi
27.11.2019, 08:53
Hilfe, beim Erstellen des Programmcodes, so weit es notwendig ist, würdest Du hier bekommen. Du müsstest es aber selbst umsetzen.
Lohnt denn das Umstellen auf zwei Drähte den Aufwand? Und wäre es überhaupt möglich das so umzubauen?



MfG

Andi#87
27.11.2019, 09:16
Ob sich das lohnt...? Es bringt absolut keinen Gewinn, weder funktional noch finanziell, ausser dass es mir besser gefallen würde, wenn an den Stationen ein kleinerer Stecker und dünneres, flexibleres Kabel dran ist. Es gibt also keinen triftigen Grund, dass zu realisieren. Im Gegenteil, mit der bisherigen Ausführung mit SubD-Stecker usw bin ich, was die Elektronik betrifft, sehr variabel. Ich kann die Dinger anstecken, ob 2 oder 3, ist völlig egal, da parallel geschaltet. Solange das Netzteil alle Geräte füttert, läuft es, und das sehr zuverlässig. Da muss ich also nichts anmelden oder terminieren. Ist nur eine subjektive Wunschvorstellung :-)

Andi

Moppi
27.11.2019, 15:38
Hallo Andi#87,

um diese Idee nochmal aufzugreifen:



Der 74HC595 wäre so ein Kandidat. Den hab ich schon im Auge gehabt. Der wäre sozusagen der Decoder, der im Empfänger verbaut wird, stellt also 8 Ausgänge bereit. Welcher IC kommt dann auf der Sonderseite in Frage?


Hier geht es darum, direkt die Logik-Ein-/Ausgänge miteinander per langer Leitung zu verbinden. Dass man sich dabei Störungen einfangen kann, ist die eine Sache, aber die andere Sache ist die, dass so eine Variante bis 20m Leitungslänge funktionieren könnte. Entscheidend wäre ein Spannungspegel der vom Sender ausgeht und die Leitungslänge übersteht. Das sollte mit +5V und 0V machbar sein. Störungen könnte man noch mit einem Filter (Widerstand und Kondensator) wegbekommen. Ansonsten sind ja keine schnellen Signalwechsel geplant, so dass man auf die Weise auch was realisieren könnte. Die Datenübertragungsrate wäre alles andere als hoch, aber das ist hier nicht die Zielsetzung. Geht ja nur darum, ein Signal zu übertragen. Wenn Du 25 Logikpegelwechsel pro Sekunde übertragen könntest wäre das schon in etwa ausreichend? Ich glaube schon. Da könntest Du völlig taktunabhängig arbeiten, indem Du einfach 2 Arduinos per GND-Leitung und 1 oder 2 Signalleitung(en) verbindest. GND ist klar und muss sein. 1 Status-/Steuerleitung und eine Datenleitung. Von jeder Bedienung gehen also 3 Adern weg zum Empfänger, wo dann die 6 (9, davon 3x GND) Adern ankommen und die Signale zentral verarbeitet und verteilt werden. Ist vor allem viel Programmierarbeit und etwas kniffelig. Leuchtdioden steuert ein Arduino an und ein Relais kann man damit auch noch schalten, wenn man das nicht sogar weglassen könnte und mit Transistor oder gleich nur mit den Arduino-Ausgängen steuert. Ein paar mA vertragen diese Ausgänge schon.

8 Taster on/off und 8 LEDs pro Arduino (UNO) sollten kein Problem sein, dafür wären zumindest keine Relais oder so notwendig.
Als Kabel würde ich denken, dass ein zweiadriges Kabel mit Abschirmung ausreichend ist. Die Schirmung ist dann Masse (GND). Bloß zum Leitungswiderstand fällt mir nichts ein. Das müsste man praktisch vielleicht einfach messen: 5V an einer Seite anlegen und am andern Kabelende, nach 20m, messen. Da kommen dann meinetwegen 4V an oder auch 4.5V, das wäre wichtig zu wissen. Wenn zu wenig ankäme, könnte man einen einfachen Leitungstreiber per Transistor realisieren, der die Spannung so weit anhebt, dass nach der gewünschten Strecke wenigsten 4.5V ankommen (aber wahrscheinlich auch unnötig, weil der Arduino Analogeingänge hat, was auch funktioniert). Der Arduino sollte dann aber schon mit 5V und nicht mit 3.3V betrieben werden. Eine Minimalbeschaltung für den ATmega328P wäre da völlig ausreichend (1x 16MHz-Quarz, 2x Kondensator, Spannungsregler).



MFG

- - - Aktualisiert - - -

Sag bescheid, wenn Du einen Beispielplan zur Beschaltung brauchst! ;)

- - - Aktualisiert - - -

Spannungsregler kann ein MCP1702-5002 sein.

- - - Aktualisiert - - -

Ein Plan, wo man welche Sachen anschließen könnte, was damit noch nicht funktioniert, ist, dass mehrere Taster gleichzeitig gedrückt werden:

34541

Hier ein Beispiel, wie das mit einem Bedienteil aussehen könnte. Hier können auch mehrere Taster gleichzeitig gedrückt sein und werden erkannt:
34542