Master Slave

Guten Abend,

Ich würde gerne 4 Arduino Unos untereinander kommunizieren lassen. Ich würde gerne einen als "Master" laufen lassen, der alle Daten empfängt, auswertet und Daten sendet. Dann würde ich gerne die anderen als "Slave" laufen lassen. Einer von ihnen soll Daten sammeln, via Sensoren und diese Daten dann an den Master schicken. Die anderen zwei sollen Relais usw. ansteuern. Sie bekommen die Befehle vom Master, also wann sie etwas an und aus schalten sollen.

Ich hoffe ihr versteht auf was ich hinaus will... :slight_smile:

Ich habe keinerlei Erfahrung in dieser Richtung. Die Grundlagen eines Arduinos habe ich verstanden, aber solche Dinge wie in meiner jetzigen Frage, weiß ich nicht.

So, nun zu meinen Fragen.

  1. Kann das so überhaupt funktionieren, wie ich mir das ganze vorstelle?
  2. Wenn nein, was muss ich ändern dass das Ganze funktioniert?
  3. Wie "verdrahte" ich die einzelnen Arduinos untereinander?
  4. Welche Anschlüsse/Pins der einzelnen Arduinos muss ich verwenden?
  5. Wie muss ich das Programm schreiben?

Falls ihr sonst noch Anregungen, Tipps, usw. zu dem Thema habt, würde ich mich sehr über Antworten freuen.

Hat vielleicht jemand eine Internetseite oder ein Video wo das ganze Thema besser erklärt wird?

Ich bedanke mich schon mal ganz herzlich im voraus. Ich hoffe ich habe den Rahmen nicht gesprengt. :slight_smile:

Liebe Grüße und einen guten Rutsch ins neue Jahr!

Da ist noch eine wesentliche Frage offen: Wie weit sollen die Arduinos räumlich auseinander liegen?

Wenn sie nahe beieinander sind, könntest Du I2C als Bus nehmen.

Der Master ist nicht nur die Zentrale, er bestimmt dabei auch wann welcher Slave "reden" darf. Der "Mess-Slave" könnte aber auch über eine zusätzliche Leitung signalisieren, dass er neue Messwerte hat.

Gruß Tommy

I2C ist für mich in diesem Fall auch die erste Wahl.
In diesem Beitrag findest du viele Beispiele, die du für dein Projekt nutzen kannst.
Und wie Tommy schon schrieb, wenn der Slave von sich aus Daten senden muss, musst du den Master per IRQ auffordern, die Daten vom Slave abzuholen.

Die Arduinos sollen nahe bei einander sein.

Ihr habt von I2C als Bus geredet. Ist der Bus die 6 Pins, die einzeln auf dem Board sind?

Und du hast geschrieben, dass der Mess-Slave über eine zusätzliche Leitung signalisieren kann, dass er neue Daten hat. Wie genau ist das mit der zusätzlichen Leitung gemeint?

Gruß

Nein, das ist SPI.
I2C liegt beim UNO auf A4/A5, beim MEGA auf D29/D31. D20 und D21

Wenn der MessSlave neue Werte hat, legt er z.B. einen Pin kurzzeitig auf Low. Dieser Pin geht zu einem Eingang des Masters und löst dort einen Interrupt aus, der eine Variable setzt, so dass im nächsten Loop-Durchlauf die Daten vom MessSlave abgeholt werden können.

Es geht auch ohne Interrupt, wenn man es etwas anders macht.

Gruß Tommy

[EDIT] I2C Pins des Mega korrigiert. Uwe, Moderator [/EDIT]

Bei SPI werden neben GND für den Bus SCK, MISO und MOSI benötigt, und für jeden Slave eine eigene CS Leitung, und bei Bedarf auch eine INT Leitung, die signalisiert daß Daten vorhanden sind.

Bei I2C braucht man kein CS und keinen extra Interrupt, wenn ein Slave Daten verfügbar hat; er kann dann die Daten direkt über I2C abschicken. Damit kommt so ein Bus mit der minimalen Anzahl von Strippen aus, ist aber in seiner Länge beschränkt.

DrDiettrich:
Bei SPI werden neben GND für den Bus SCK, MISO und MOSI benötigt, und für jeden Slave eine eigene CS Leitung, und bei Bedarf auch eine INT Leitung, die signalisiert daß Daten vorhanden sind.

Bei I2C braucht man kein CS und keinen extra Interrupt, wenn ein Slave Daten verfügbar hat; er kann dann die Daten direkt über I2C abschicken. Damit kommt so ein Bus mit der minimalen Anzahl von Strippen aus, ist aber in seiner Länge beschränkt.

Multimaster halte ich für den Einstieg nicht unbedingt geeignet, falls Du das gemeint haben solltest.

Gruß Tommy

Wäre da ein einziger Mega nicht einfacher?

Ja, ein MEGA wäre auch eine Wahl. Die Aufteilung auf 4 UNO kann aber sinnvoll sein, um

a) mit mehreren Leuten parallel daran zu arbeiten
b) selbst überschaubare Einheiten zu bauen, die sich einfacher testen und überblicken lassen

Ich würde diese Lösung mit 4 UNO nicht von vorn herein als unbrauchbar abstempeln.

Gruß Tommy

Leon-Ranger:
.....
Ihr habt von I2C als Bus geredet. Ist der Bus die 6 Pins, die einzeln auf dem Board sind?

Und du hast geschrieben, dass der Mess-Slave über eine zusätzliche Leitung signalisieren kann, dass er neue Daten hat. Wie genau ist das mit der zusätzlichen Leitung gemeint?

Warum liest du nicht den von mir zitierten Beitrag ?

Tommy56:
Nein, das ist SPI.
I2C liegt beim UNO auf A4/A5, beim MEGA auf D29/D31.

Haben sie die Pins in letzter Zeit gewechselt?
Auf der Arduino MEGA-Seite steht:
TWI: 20 (SDA) and 21 (SCL).

Grüße Uwe

Dir würde ich das auch problemlos zutrauen. Aber der TO könnte sich da doch mal klärend äussern, warum es 4 Uno sein sollen.

uwefed:
Haben sie die Pins in letzter Zeit gewechselt?
Auf der Arduino MEGA-Seite steht:
TWI: 20 (SDA) and 21 (SCL).

Grüße Uwe

Wenn ich die Brille aufsetze und dann den Ausdruck des Pinout betrachte, sehe ich: Du hast Recht. Sorry für die Fehlinfo.

Gruß Tommy

Ich tendere auch zu einem Arduino MEGA2560 da dieser nur 2 Pins weniger hat als 4 UNOs. Der Mega hat 70 Pins während 4 UNOS 80 Pins haben, aber wegen der Vernetzung je 2 besetzt sind also im Endeffekt nur 72 zur Verfügung stehen.
Durch den MEGA entfällt die Master/Slave Protoll-Verbindung und der Sketch wird viel einfacher.
Laut Projektbeschreibung soll auf den Slaves keine Datenverarbeitung erfolgen und darum ist für mich 1 Mega 2560 die beste Lösung.
Sollten unerwartet dennoch zuwenig Pins vorhanden sein können I2C oder SPI Expander pins on mass bereitstellen.

Grüße Uwe

Tommy56:
Wenn ich die Brille aufsetze und dann den Ausdruck des Pinout betrachte, sehe ich: Du hast Recht. Sorry für die Fehlinfo.

Gruß Tommy

Hab mir erlaubt die Pins in Deinem Tread auszubessern damit niemand auf schlechte Gedanken kommt.
Uwe

Danke.

Gruß Tommy

Hi

Da noch nicht wirklich bekannt ist, was die UNOs so Alles nebenbei machen sollen, wenn der Messwert fertig ermittelt ist, könnte ich mir durchaus vorstellen, daß man Denen noch genug Arbeit aufhalsen kann, daß die Lösung einzelner 'Knoten' durchaus berechtigt sein kann.

Muß aber nicht :wink:

@Leon-Ranger
Was soll's werden, wenn's fertig ist?
Was hast Du bereits am Laufen und warum kann sich der Master nicht selber um die Temperatur kümmern? (sofern die Sensor-Abfrage die einzige Aufgabe des einen UNO ist).

MfG