Comunicazione tra due Arduino Uno e una terza parte

Salve sto lavorando ad un piccolo progetto e mi piacerebbe avere dei consigli per capire come realizzarlo al meglio:

vorrei fare comunicare due Arduino Uno (chiamiamoli A e B) con una terza parte (C) che legge i dati di A e B e li rielabora (magari mandando il risultato su uno schermo)

esempio: A e B sono programmati per generare numeri da 1 a 100 in modo indipendente; C legge i numeri generati da A e B e li somma.
Quindi se A genera 33 e B genera 45, C dovrebbe leggere questi due dati (33 e 45) e sommarli (78).

Ho già acquistato 2 Arduino Uno ma non so come posso farli comunicare e cosa usare come parte C. Mi serve un terzo Arduino, o posso usare altra componete (forse un breadboard? o I2C?).

grazie per i consigli

giorgio

Se è una semplice connessione punto-punto (due soli oggetti) puoi proficuamente utilizzare una porta seriale dotata di bus trasmissivo amplificato con un integrato tipo MAX232.

Dipende poi dalle distanze, che non hai specificato. Puoi far comunicare i due Arduini in I2C (distanza non superiore al metro) e poi la comunicazione con il terzo elemento attraverso una RS232. (fino a 40 metri)

BaBBuino:
Se è una semplice connessione punto-punto (due soli oggetti) puoi proficuamente utilizzare una porta seriale dotata di bus trasmissivo amplificato con un integrato tipo MAX232.

Dipende poi dalle distanze, che non hai specificato. Puoi far comunicare i due Arduini in I2C (distanza non superiore al metro) e poi la comunicazione con il terzo elemento attraverso una RS232. (fino a 40 metri)

Ciao, prima cosa grazie per la risposta.

Cerco di spiegare meglio:

si tratta di un progetto in cui devo per forza usare 3 hardware, per una questione di visualizzazione.

gli hardware A e B sono interconnessi tramite C, così:

A C B

Le distanze sono ridotte, diciamo mezzo metro tra un hardware e l'altro.

A e B generano in continuazione dati/numeri che mandano a C.
C legge i dati/numeri di A e B e li rielabora.

Mi è stato suggerito di usare 3 Arduino Uno, o 2 Arduino Uno e un Arduino Mega.

Potrebbe essere un buon suggerimento?

grazie

Per la distanza che dici, I2C va bene. Ti sviluppi un tuo protocollo e sei a posto.

Quanto all'Harware sei troppo generico. Cosa ci colleghi? Un Display 7"? Un led? Niente?

oigroig:
Mi è stato suggerito di usare 3 Arduino Uno, o 2 Arduino Uno e un Arduino Mega.

Potrebbe essere un buon suggerimento?

Relativamente alla connettività ...SI, 2 Arduino UNO ed una Mega sono la configurazione migliore ...

... la Mega a ben 4 vere porte seriali; tolta porta Serial standard che puoi continuare ad usare per debug, te ne restano comunque TRE disponibili quindi non avresti difficoltà ad interfacciarlo agli altri due Arduino UNO via seriale.

Guglielmo

BaBBuino:
Per la distanza che dici, I2C va bene. Ti sviluppi un tuo protocollo e sei a posto.

Quanto all'Harware sei troppo generico. Cosa ci colleghi? Un Display 7"? Un led? Niente?

Hai ragione, scusa, per hardware intendevo questo:

A e B, e a questo punto suppongo anche C, devono necessariamente essere schields (Arduino) perché devono generare e processare dati.
C verrebbe collegato ad un semplice LED.

gpb01:

oigroig:
Mi è stato suggerito di usare 3 Arduino Uno, o 2 Arduino Uno e un Arduino Mega.

Potrebbe essere un buon suggerimento?

Relativamente alla connettività ...SI, 2 Arduino UNO ed una Mega sono la configurazione migliore ...

... la Mega a ben 4 vere porte seriali; tolta porta Serial standard che puoi continuare ad usare per debug, te ne restano comunque TRE disponibili quindi non avresti difficoltà ad interfacciarlo agli altri due Arduino UNO via seriale.

Guglielmo

Ciao Guglielmo, grazie per il suggerimento.

Dici che 3 Arduino Uno, invece di 2 Arduino Uno + 1 Arduino mega, vadano bene lo stesso?

Lo chiedo solo per una questione economica, dato che l'Arduino Mega è un po' più caro.

grazie

Arduino Mega ha 4 interfaccie seriali. Arduino ne ha 1 e puó essere emulata una seconda via software. Puoi collegare la seriale software di ciascun uno alla seriale 2 e 3 del Mega. Non serve traslare l' interfaccia a RS232.
Se le distanze sono piccole puoi usare abche la I2C. È un bus dove puoi collegare piú dispositivi. In questo caso vanno bene anche 3 Arduino UNO. c diventa master e A e B slave con un indirizzo. Il master chiede un nuemro a un slave e quello lo manda.

Ciao Uwe

oigroig:
Dici che 3 Arduino Uno, invece di 2 Arduino Uno + 1 Arduino mega, vadano bene lo stesso?

Se NON devi ricevere contemporaneamente dai due Arduino UNO (... chiamiamoli SLAVE) allora SI, va bene ugualmente ...
... grazie alla libreria SoftwareSerial (... a cui fa riferimento ache Uwe) puoi avere più porte seriali "virtuali" anche sulla UNO ... con il limite che ne puoi attivare solo una per volta.

In questo modo, sul ... MASTER ... conserveresti comunque la vera seriale per il collegamento con il PC ed il debug ed avresti due seriali virtuali per il colloquio con le altre due schede ... SLAVE. Date le corte distanze colleghi tutto direttamente con dei cavetti senza necessità di traslatori di livelli o quant'altro :wink:

Guglielmo

uwefed:
Arduino Mega ha 4 interfaccie seriali. Arduino ne ha 1 e puó essere emulata una seconda via software. Puoi collegare la seriale software di ciascun uno alla seriale 2 e 3 del Mega. Non serve traslare l' interfaccia a RS232.
Se le distanze sono piccole puoi usare abche la I2C. È un bus dove puoi collegare piú dispositivi. In questo caso vanno bene anche 3 Arduino UNO. c diventa master e A e B slave con un indirizzo. Il master chiede un nuemro a un slave e quello lo manda.

Grazie Uwe, una cosa non mi è chiara:

tu dici che posso usare sia Arduino Mega, che I2C (se le distanze sono piccole, e lo sono!).

Se io uso Mega, collego i due Arduino direttamente al Mega e li faccio interagire (come se il Mega fosse un Master e i due Arduino slaves)?

Ho letto che si può anche usare I2C per fare interagire due Arduino come fossero due Master indipendenti. Ma non parlava di un terzo Arduino. Il Bus era applicato sul breadboard.
Potrebbe fare al caso mio?

Ma in definitiva, dato che non sono espertissimo, quale è tra le due la soluzione più semplice da realizzare e con cui lavorare:

  • 2 Arduino e 1 Mega; oppure
  • 2 Arduino e Bus I2C?

Spero non siano troppe domande!

gpb01:

oigroig:
Dici che 3 Arduino Uno, invece di 2 Arduino Uno + 1 Arduino mega, vadano bene lo stesso?

Se NON devi ricevere contemporaneamente dai due Arduino UNO (... chiamiamoli SLAVE) allora SI, va bene ugualmente ...
... grazie alla libreria SoftwareSerial (... a cui fa riferimento ache Uwe) puoi avere più porte seriali "virtuali" anche sulla UNO ... con il limite che ne puoi attivare solo una per volta.

In questo modo, sul ... MASTER ... conserveresti comunque la vera seriale per il collegamento con il PC ed il debug ed avresti due seriali virtuali per il colloquio con le altre due schede ... SLAVE. Date le corte distanze colleghi tutto direttamente con dei cavetti senza necessità di traslatori di livelli o quant'altro :wink:

Guglielmo

ciao Guglielmo,

In realtà i due Arduino (A e B) dovrebbero inviare continuamente e contemporaneamente dati al terzo elemento (C) che li rielabora, senza tuttavia mandare indietro risposte ad A e B.
Il compito di A e B è solo quello di generare dati e mandarli a C che li rielabora.

Dovrò fare uno schema con una spiegazione specifica del progetto!

grazie ancora per i consigli

Se devi inviare "continuamente" dati, allora l'UNICA soluzione che hai è quella dei due Arduino UNO e della Mega con le VERE porte seriali ...
... tutte le altre soluzioni, inclusa la I2C, prevedono configurazioni in cui un MASTER interroga e lo SLAVE risponde, quindi ... per quanto veloce, mai contemporaneamente !

Guglielmo

gpb01:
Se devi inviare "continuamente" dati, allora l'UNICA soluzione che hai è quella dei due Arduino UNO e della Mega con le VERE porte seriali ...
... tutte le altre soluzioni, inclusa la I2C, prevedono configurazioni in cui un MASTER interroga e lo SLAVE risponde, quindi ... per quanto veloce, mai contemporaneamente !

Guglielmo

chiaro!
grazie