Können 50 Arduinos verkettet werden?

7

Ich habe mehrere Benutzer auf Sitzen (50), jeder mit einer kleinen Tastatur zur Eingabe. Ich muss Eingaben von allen Benutzern sammeln. Ich möchte Arduinos für jeden Benutzer verwenden, der auch Antworten auf einer 7-Segment-Anzeige anzeigt. Ich beabsichtige, alle Arduinos über I2C zu verbinden, befürchte jedoch, dass das Signal aufgrund von Fern- und Fan-Out-Einschränkungen abfällt. Daher erwäge ich, sie zu verketten.

Ist das eine gute Idee oder gibt es einen besseren Ansatz, um dies zu tun?

Mudzify
quelle
1
Wirst du sie auch über dieses Kabel mit Strom versorgen?
Pipe
1
Jemand in der Mitte schneidet ein Kabel oder spielt auf andere Weise mit den Daten. Im wahrsten Sinne des Wortes ein Mann in der Mitte Angriff
Wayne Werner
2
Warum nicht mit jedem Arduino mehrere Sitze bewältigen? Ein einzelnes Arduino sollte schnell genug sein, um mehrere Tastaturen abzufragen und mehrere Displays anzusteuern (insbesondere mit geeigneten Verriegelungspuffern an jedem Sitzplatz). Statt 50 Geräten im Bus haben Sie möglicherweise nur 5 oder 10.
Johnny
Verwenden Sie für den Preis eines Arduino einen Raspberry Pi mit einem WLAN-Dongle. Sie werden wahrscheinlich billiger herauskommen, wenn Sie nicht das ganze Kabel kaufen müssen! Wenn dies keine absolut Echtzeit-kritische Anwendung ist, scheint dies das falsche Werkzeug für den Job zu sein.
J ...

Antworten:

21

Da der Anwendungshinweis gepostet RedGrittyBrick sagt:

Da sich die ursprünglichen I 2 C-Bus-Anwendungen in einem Gerät befanden, z. B. in einem PC oder einem Radio / TV / Audio-Gerät, wird der I 2 C-Bus bei Systemen mit großen Entfernungen und einer großen Anzahl von Abbrüchen selten in Betracht gezogen Punkte sind erforderlich.

Die Lösung im Anwendungshinweis besteht darin, bestimmte Treiberschaltungen zu verwenden, um die Signale in etwas umzuwandeln, das über größere Entfernungen angesteuert werden kann.

Da Sie ohnehin Treiberschaltungen benötigen, schlage ich stattdessen vor, dass Sie sich RS-485 ansehen . Dies ist ein bewährter Standard für die bidirektionale Übertragung über lange Kabel. Es verwendet einen normalen UART auf Ihrem Arduino, und die Treiberschaltungen können in vielen Formen und Formen gefunden werden. Wenn Sie keine eigene Leiterplatte herstellen möchten, stehen Adapterkarten zur Verfügung, die ein TTL-RX / TX-Signal von einem UART empfangen und in RS-485-Pegel konvertieren.

Rohr
quelle
3
RS485 ist konzeptionell eine gute Lösungskategorie, obwohl 50 Knoten möglicherweise die Laufwerksfähigkeit einiger RS485-Implementierungen überschreiten, ist dies zumindest ein Problem, das überprüft werden müsste.
Chris Stratton
Der schlimmste Fall (RS-485) ist ein A / B-Selektor, der zwischen zwei Gruppen von 25 Knoten umschaltet. Ein Pin vom Arduino würde das Umschalten durchführen, damit er mit dem letzten EOT-Marker synchronisiert wird. Da jeder Knoten eine eindeutige ID und eine integrierte Kollisionserkennung hat, sollte er funktionieren.
Sparky256
7

Wenn Sie nicht besonders an die Idee gebunden sind, Arduinos dafür zu verwenden, können Sie auch andere Mikrocontroller-Boards ausprobieren. Ich mag die verschiedenen Boards, die auf dem ESP8266-Chip basieren, sehr. Diese haben den Vorteil, dass sie über eine integrierte drahtlose Netzwerkverbindung verfügen, sodass alle direkt mit Ihrem zentralen System kommunizieren können, in dem die Eingaben gespeichert sind.

Jules
quelle
Wenn die zusätzlichen (wirklich anderen) Kosten kein Problem darstellen, wäre WLAN sehr vorteilhaft. Insbesondere sind keine mehr als 50 verschiedenen Kabelverbindungen und keine Gestaltung der Signalverdrahtung für den Raum erforderlich.
user2943160
1
@ user2943160 Richtig - die Kosten sind eigentlich kein Problem, es sei denn, Sie haben bereits die Ausrüstung. Ein Modul wie das allgegenwärtige ESP12-Board (von zahlreichen chinesischen Anbietern verkauft) und ein Breakout-Board (da es sich um ein oberflächenmontiertes Modul handelt und Sie wahrscheinlich möchten, dass Pins angeschlossen werden) kosten nur wenig mehr als ein chinesisches Klon-Arduino und etwas weniger als ein echtes Arduino. Und sicherlich weniger als ein Arduino + ein Ethernet-Shield oder andere externe Hardware.
Jules
5

Haben Sie über Arduino Ethernet mit PoE nachgedacht? Behebt das Problem mit der Stromversorgung der Geräte und ermöglicht 2-Wege-Kommunikation

hardillb
quelle
1
Dies ist praktisch das, wofür Power over Ethernet erfunden wurde. Hervorragender Vorschlag. Sie können es sogar selbst mit anderen Spannungen als dem Standard implementieren, da Ethernet nicht alle Paare im Kabel verwendet.
Dan
5
Ein Arduino eignet sich eher schlecht für Ethernet, da sowohl ein externer Netzwerkadapter erforderlich ist, der wahrscheinlich mehr kostet als die Basisplatine, als auch nicht viel Speicher für die Verarbeitung von Paketen vorhanden ist (obwohl sie in diesem Fall nicht lang sein müssen). Für die betreffende Anwendung gibt es das zusätzliche Problem, dass die meisten Arduino-kompatiblen Ethernet-Adapter Punkt-zu-Punkt-UTP sind, bei dem ein Hub-Port pro Knoten bereitgestellt werden muss, was bei 50 Knoten zu einem absurden Verdrahtungsaufwand führt. Um dies überhaupt praktikabel zu machen, müssten Sie eingebettete 10Base2-Adapter finden.
Chris Stratton
2
@psmears, wenn Sie mir einen Arduino-Anwendungsfall finden können, der Gigabit benötigt, werde ich beeindruckt sein
Hardillb
1
@hardillb: Haha, stimmt - ich wollte nur nicht, dass die Leute den Eindruck bekommen, dass man mit zwei der vier Paare für jedes Ethernet-Setup
davonkommt
4
@jpaugh: Die Leistung und die Signale werden über dieselben Drähte gesendet - grob gesagt werden die Signale über Wechselstrom gesendet, und die Leistung wird als Gleichstromversatz gesendet und am Empfänger herausgefiltert.
psmears
2

Wenn der Abstand zwischen Ihren Knoten nicht groß ist und Sie keine besonders schnelle Kommunikation benötigen, ist eine Verkettung, bei der Nachrichten über serielle UARTs von einem zum nächsten weitergegeben werden, wahrscheinlich eines der wenigen Dinge, die Sie ohne Hinzufügen von Hardware tun können . Es gibt keine Begrenzung für die Länge der Kette, die Sie erreichen können, wenn jede Karte das von ihr weitergeleitete Signal neu generiert. Jeder Knoten fügt jedoch eine gewisse Verzögerung hinzu, bevor er eine Nachricht weiterleitet. In der einfachsten Implementierung kann die Verzögerung pro Knoten gleich der sein Übertragungszeit des Nachrichteninhalts.

Es hört sich jedoch so an, als müssten Sie möglicherweise Nachrichten in beide Richtungen entlang der Kette weiterleiten. Die Herausforderung dabei wäre das Vorhandensein von nur einem Hardware-UART auf jeder Karte. Sie können dies mit einem Software-Uart erweitern. Um jedoch mehr als eine davon zu erhalten, müssen Sie eine komplexere Implementierung verwenden als die mit der IDE gelieferte Standardeinstellung. Wenn Sie eine integrierte USB-Serie aus dem Weg räumen können, können Sie mit dem Hardware-UART in die eine und die Software in die andere Richtung kommunizieren.

Chris Stratton
quelle
Oder Sie könnten natürlich einen Mega 2560 verwenden , der 4 UARTs hat und nicht nur 1 wie andere Arduinos.
Jules
Ja, aber die Kosten für 50 ATmega1284 / 2560-Knoten würden sich schnell summieren. Software Serial sollte eigentlich dafür funktionieren, oder es gibt mehrere UART-Teile, die weniger kosten als bei ATmega328p.
Chris Stratton
1

Sie können die I2C-Einschränkungen überwinden, indem Sie die DS28E17 1-Wire-to-I2C-Brücke verwenden.

Die Lösung hängt natürlich von Ihrem Budget und der erforderlichen Bandbreite ab.

geschlossener Ball
quelle