gestione e controllare più di 10 arduino con 1 PC

Ciao a tutti,

devo gestire più di 10 arduino con lo stesso pc servendomi della comunicazione seriale attraverso un programma scritto in VB (o in java, devo verificare). non so se saranno 12 o 16 arduino... purtroppo per la quantità di input che devo gestire, che saranno circa 1000, ho bisogno di tutti questi moduli, versione mega ovviamente. Secondo voi mettendo un hub usb riesco a risolvere il problema o mi conviene abbinare un ethernet shield?

grazie per l'aiuto.

Ti va di spiegare bene cosa vuoi fare?

Con 1000 input non ti bastano nemmeno 10 MEGA

Collegare una quindicina di Arduino su alcuni hub USB in cascata mi sembra cosa ardita

Per non parlare di aprire 15 seriali, che prenderebbero il nome a seconda dell'ordine come sono collegate

Ma gli arduino li devi solo leggere o anche programmare, a gruppi

Non capisco poi cosa ci faresti con una Ethernet

Te ne servirebbe semmai una per ogni Arduino, e uno switch da 16 porte

Insomma ti devi spiegare

se lo OP vuole, basta dare uno sguardo al mio "era stagione di pin remoti"
aggiunge fino a una settantina di macchine, se vuole, che a una sessantina di pin utili (e facciamo il conto della serva) fanno oltre 4000 pin controllabili
ma la questione è: che ci deve fare con un migliaio di Input, e magari nessun output?
ha ragione il sindaco di Terminus, lo OP deve spiegarsi bene

Altra questione è il programma che gestisce il tutto

dove risiede? su un PC, su un Arduino Master?

perché un programma che gestisce 1000 input deve anche farci qualcosa, con 1000 ingressi

e anche solo il tempo di elaborazione diventa tantino

dai, che parafrasando qualcuno posso dire:

L'autore deve spiegarsi

Questa è la via :slight_smile:

cerco di spigarmi meglio: come da precedente messaggio devo gestire (ho fatto il calcolo) 16 arduino mega tramite PC (altrimenti perchè ho creato il thread....) in quanto ho 1100 ingressi digitali da gestire. sono 220 sensori di peso con chip hx711 ed ad ognuno devo attribuire 3 led (o 1 led rgb, sempre di 3 anodi si tratta..). quindi per ogni sensore devo gestire 5 ingressi digitali. 5x220 = 1100 ingressi. ogni arduino mega ha un programma di elaborazione e conversione dei dati. 220 conversioni li devo elaborare e monitorare su di un programma creato in visual basic (o altro linguaggio, devo decidere) .

la domanda che ho fatto è abbastanza semplice: come collego 16 arduino mega ad 1 solo PC per elaborare i dati? attraverso USB mediante hub per sfruttare la seriale (ma sarà ardito come dicevi) o meglio installare un ethernet shield per ogni arduino e connettere il tutto mediante switch? oppure avete altre idee?

spero di non dover scrivere altri papiri :confused: :o xD

grazie per l'aiuto

1 Like

Una rete seriale RS485?

Allora, io direi che Ethernet o WiFi è indifferente, poi ti basta progettare un protocollino di comunicazione in TCP o UDP. Vediamo.

Comunque non ho capito i calcoli che hai fatto, perché ben 16 Mega? Perché parli di 1.100 pin ossia 5 pin per sensore? Provo a spiegarmi meglio, forse non ho capito bene io cosa hai in mente...

Se è un problema "logistico" ossia i vicinanza ai carichi ok, ma se è un problema di pin, sai che ogni Mega ha 54 pin digitali e 16 analogici che puoi comunque usare come digitali, per un totale di 70, esatto? Diciamo che in ogni Mega ti riservi 10 pin per cose come la Ethernet e qualche LED o pulsante o un display, siamo a 60 pin per Mega. Ma tu con gli HX711 non devi mica controllare 5 pin! Quei modulini comunicano in seriale con solo 2 fili (Clock e dati) più i pin di alimentzione (che sono fissi). Quindi ogni modulo richiede solo 2 pin, per cui teoricamente puoi gestire fino a 30 sensori per ogni Mega, il che significa che con (220/30=7.33) 8 Mega ce la faresti.

Poi parliamo del server centrale. Pensare di controllare centralmente (ossia leggere in "tempo reale") i vari pin mi sembra una cosa poco sensata. Intanto perché tu spero che non intenda gestire centralmente anche i pin di clock... Poi dato che stai usando Arduino ossia dei microcontrollori, fagli fare il loro lavoro, ossia ogni Mega legge i valori dei "suoi" sensori, e poi saranno questi valori che manderai digitalmente al server cntrale.

Per la comunicazione col server centrale quindi ci sono varie alternative:

  1. lo fa periodicamente, quindi in "push", ossia a tempo manda i valori delle letture
  2. manda il dato solamente quando almeno un sensore cambia il proprio valore (ossia la differenza con la prcedente lettura è entro un certo range, per evitare piccole fluttuazioni irrilevanti)
  3. manda le letture solo su richiesta del server, ossia fa lui un polling quando ha bisogno di ottenere i dati chiedendo il dato di un certo sensore o tutti

Anche la stessa connessione col server può essere prevista in vari modi:
A) permanente dal client ossia ogni client alla partenza si collega al server via TCP, invia lo stato di tutti i suoi sensori, e tiene aperta la sessione per tutto il tempo (soluzione ottimale per la velocità di risposta e la possibilità di controllare che il dato sia stato ricevuto dal server, ma oltre a richiedere risorse di rete sul server stesso, sui client è necessario prevedere un controllo della sessione ed eventuale riconnessione)
B) permanente dal server ossia ogni client è "passivo" e resta in attesa della connessione da parte del server il quale si collega e richiede la lettura di uno specifico sensore o di tutti (stessi pro e contro del precedente, ma il controllo delle sessioni è delegato al server, più facile da gestire e controllare)
C) su richiesta dal server ossia quando il server deve aggiornare i suoi dati si collega via TCP ad ogni client, il quale fornisce l'informazione richiesta.
D) i client mandano al server le informazoni via UDP quindi senza connessione diretta (maggiore rapiditià e semplicità anche di gestione, ma non c'è la certezza che il server lo abbia ricevuto, a meno che non si preveda una fase di "ACK" ossia un pacchetto UDP di risposta al client, e relativo eventuale retry)
E) il server fa un polling via UDP, "interrogando" i vari client tramite un opportuno pacchetto UDP (che potrebbe anche essere in broadcast per parlare con tutti), i quali risponderanno a loro volta con un altro pacchetto UDP.

Chiariti questi aspetti, ti resta solo disegnare il formato esatto del protocollo.

I led si possono serializzare e le letture di peso si possono multiplexare, magari ne basta solo uno di arduino facendo le cose in modo differente...
Per questo i miei predecessori hanno fatto tante domande, ma se è fatica spiegare bene bene per rischiare di avere una soluzione più adatta, amen.

Maurizio

sindrome da robottone

docdoc:
Ma tu con gli HX711 non devi mica controllare 5 pin! Quei modulini comunicano in seriale con solo 2 fili (Clock e dati) più i pin di alimentzione (che sono fissi).

ragazzi, anzitutto vi ringrazio per le risposte, ma pensavo di aver scritto chiaramente... 5 pin per sensore inteso i 2 pin più i 3 anodi dei led!!!!!!!!!!!! e sono 5 !!! la matematicaaaaaaaaaaaa .

maubarzi:
I led si possono serializzare e le letture di peso si possono multiplexare, magari ne basta solo uno di arduino facendo le cose in modo differente...

@maubarzi mi potresti spiegare il sistema o suggerirmi dei link da consultare? la cosa mi interessa parecchio.

@Claudio_FF Una rete seriale RS485? mi informo anche su quello

grazie di nuovo a tutti. se avete altre soluzioni non esitate :wink:

tonyg86:
ragazzi, anzitutto vi ringrazio per le risposte, ma pensavo di aver scritto chiaramente... 5 pin per sensore inteso i 2 pin più i 3 anodi dei led!!!!!!!!!!!! e sono 5 !!! la matematicaaaaaaaaaaaa .

La matematica la conosco bene, ma scusa, tu hai letto bene quello che ho scritto e che ti ho consigliato?

Primo, il problema principale è che l'HX711 ha due pin, ma uno è un clock, mica pensavi di gestire "a distanza" una comunicazione seriale in quel modo, che deve necessariamente essere sincrona? Arduino è un microcontrollore, quindi LUI leggerà i valori e quindi potrà comunicarli al server.

Secondo, per i LED locali avevo "riservato" ben 10 pin: questo perché ci sono varie soluzioni per poterne gestire anche grandi numeri con pochi pin (generalmente con un protocollo seriale e quindi apposito driver) ed accenderli o spegnerli singolarmente in base a criteri (immagino) legati allo stato dei suoi sensori.

Poi, vedi tu.

tonyg86:
ragazzi, anzitutto vi ringrazio per le risposte, ma pensavo di aver scritto chiaramente... 5 pin per sensore inteso i 2 pin più i 3 anodi dei led!!!!!!!!!!!! e sono 5 !!! la matematicaaaaaaaaaaaa .

@maubarzi mi potresti spiegare il sistema o suggerirmi dei link da consultare? la cosa mi interessa parecchio.

Soluzioni ce ne sono tante, però dipendono da quello che devi realizzare esattamente.
Dando un taglio alle polemiche, ti consiglio di partire dall'inizio, descrivi esattamente quello che devi fare, non solo la soluzione che avevi in mente.
Se non sai da dove partire, inizia a rispondere alle domande che ti sono state fatte nei primi post.
Poi, leggi bene quello che ti ha scritto docdoc, altro che il papiro che hai scritto tu con così tanta fatica, lui ha perso molto più tempo per te, meriterebbe quantomeno uno straccio di risposta.
Se quello che stai facendo è coperto da sicurezza nazionale, inventati lo scenario ma non variare le cose fondamentali, ad es. se devi pesare plutonio per la tua piccola centrale nucleare, a noi non interessa, puoi anche dire che stai pesando banane, ma se le due pese che utilizzi sono a 2 km di distanza l'una dall'altra, ecco, questa è una informazione che non va alterata, perchè potrebbe influenzare la soluzione.

Per rispondere direttamente alla tua domanda: neopixel o simili e multiplexer, non ho link sottomano, ma se segui il suggerimento qui sopra, vedrai che poi le soluzioni arriveranno...

Maurizio

ciao @maubarzi, grazie ancora per l'aiuto, conosco il progetto che sto realizzando e l'ho spiegato: collegare 16 arduino al PC per monitorare i dati di 220 sensori di peso con led annessi. non c'è altro. il perchè non è un segreto nazionale, ma non è di certo anche un interesse nazionale. con le nozioni che ho dato infatti sia tu che claudio avete centrato la soluzione che cercavo, semplificando il tutto, e vi ringrazio ancora. ho posto una domanda precisa proprio perchè conosco il mio progetto. se non ho dato molto peso alle altre soluzioni significa che non è quel che cercavo.
con questo non voglio assolutamente polemizzare, e se sembra che nei post precedenti lo sia stato non era affatto mia intenzione, ci mancherebbe altro.
chiedo per favore al mod se si può chiudere il thread, e ringrazio ancora per l'aiuto.