Un Arduino per domarli tutti :D

Prima cosa un saluto a tutti voi !!
Mi presento.... mi chiamo Sacha, vivo in Svizzera, di professione programmatore ....

Mi sono da poco affacciato da poco in questo mondo chiamato arduino.... dopo aver letto informazioni di qua e di la... mi è balzata in testa una certa idea alla quale al momento non ho trovato una risposta chiara e quindi la rivolgo a voi....
La mia idea era quella avere disseminati in giro per la casa diversi arduino (tipo uno in ogni locale con funzionalità varie ed eventuali :D) e poterli comandare/pilotare da una postazione centrale unica, sempre basata con arduino. Premetto che non vorrei usare come centrale in pc da dover tenere sempre acceso.
Quindi chiedo a voi .... come posso fare ??? soprattutto a livello HW ???

Anticipatamente ringrazio XD

secondo me puoi implementare una rete token ring utilizzando le seriali di arduino.

Anche il polling non sarebbe male, alla fine non credo che tu debba continuamente inviare/ricevere da un solo arduino per oltre qualche secondo. :slight_smile:

Potresti realizzare un network con un modulo XBee su ogni Arduino ( costicchia un po)

Ciao Uwe

Ciao,
ti faccio qualche domanda che aiuterà molto a capire cosa vuoi fare e quale sia la soluzione migliore, vedi te se per ogni domanda rispondere singolarmente per ogni arduino o dare un valore generale. Specifica in oltre tutte le caratteristiche che ti vengono in mente, una buona strutturazione dell'hardware e del software non può che far bene

la connessione ti serve wireless o va bene via cavo?
numero di arduino?
distanza massima tra arduino-arduino e arduino-pc?
i dati viaggiano unidirezionalmente (o solo invio dati dal pc o solo dagli arduino) o la comunicazione è a due vie (sia pc che arduino possono ricevere e inviare dati)
quantità (in bit) dei dati?
nel caso le trasmissioni possano essere effettuate ogni tot, frequenza minima di invio dei dati?
nel caso in cui le trasmissioni siano dinamiche, o meglio non puoi prevedere quando succederà un evento che scatenerà l'invio dei dati, tempo minimo di risposta da parte del pc centrale + eventuali altri arduino "tirati in causa" dall'evento?
possibilità di espandere la rete?
possibilità che l'espansione ( comunque la modifica) della rete sia più o meno automatica?

Ciao lesto, allora le risposte al questionario :smiley: sono ...

la connessione ti serve wireless o va bene via cavo?

  • beh wireless sicuramente è più pratico...

numero di arduino?

  • eh ... il numero al momento non lo so diciamo che sarebbero almeno 6 uno in ogni locale (2 camere, bagno, cucina, salotto, entrata)

distanza massima tra arduino-arduino e arduino-pc?

  • non so proprio ... forse max 5-6 metri...

i dati viaggiano unidirezionalmente (o solo invio dati dal pc o solo dagli arduino) o la comunicazione è a due vie (sia pc che arduino possono ricevere e inviare dati)

  • direi bidirezionale ossia la centrale dovrebbe visualizzare i dati provenienti da vari punti e inviare dati (tipo accendere o spegnere luci o regolare la temperatura, impostazione di timer).

quantità (in bit) dei dati?

  • questo francamente lo ignoro ...

nel caso le trasmissioni possano essere effettuate ogni tot, frequenza minima di invio dei dati?

  • hmmmmm ... su richiesta ...

nel caso in cui le trasmissioni siano dinamiche, o meglio non puoi prevedere quando succederà un evento che scatenerà l'invio dei dati, tempo minimo di risposta da parte del pc centrale + eventuali altri arduino "tirati in causa" dall'evento?

  • ...
    possibilità di espandere la rete?
  • si

possibilità che l'espansione ( comunque la modifica) della rete sia più o meno automatica?

  • non necessariamente automatica

La mia idea, comunque, era di impostare una centrale di comando magari sfruttando un bel touch screen per comandare i diversi punti della casa (i vari arduino). Magari penso le cose troppo in grande ... non lo so ...

wireless viene più costoso, ma tantè..
ci sono gli zigbee che sono simil-wifi (sono una versione wifi non compatibile con quella dei pc, ma si può dire che funzionano in modo simile) ma son molto costosi
sinceramente nell'ultimo periodi sto spingendo su dei moduletti a 433mhz da 10€ l'uno, però c'è da comprare l'accoppiata ricevente e trasmittente, e c'è da programmarsi un minimo di protocollo di comunicazione... vedi tu cosa conviene

io fare un moduletto rx/tx per ogni arduino + rx/tx per il pc.
il pc fa da master. Ogni volta che un modulo è acceso, controlla se c'è una trasmissione in corso per qualche secondo. Se non rileva comunicazioni O un messaggio di comunicazione terminata(vedi sotto) invia una richiesta di "registrazione", il pc la accetta e assegna un numero univoco, chiamiamolo IP per capirci.
d'ora in poi sia il server per comunicare con un modulo invia l'IP del ricevente+i dati. Stessa cosa, i client che comunicano col server inviano il loro IP+i dati. Ricordati di tenere un'IP di broadcast, ovvero i dati che seguono quel'ip sono da eseguire su tutti i client

Per evitare che più sistemi comunichino contemporaneamente ci servono i comandi:

  1. richiesta comunicazione, inviata dal client al server, contiene solo l'ip del client+il codice della richiesta
  2. richiesta accettata, inviata al server a tutti. Contiene l'IP dell'unico client a cui è permesso comunicare+il codice della richiesta
  3. comunicazione terminata, inviata dal client ( o dal PC nel caso il client non risponda da un pò) a tutti. Contiene l'Ip del client +il codice della richiesta, ora tutti i client possono richiedere la comunicazione

In questo modo l'espansione della rete è automatica, i dati viaggiano in 2 direzioni, c'è una bassissima probabilità di interferenze tra i moduli (solo nel caso di richiesta di comunicazione) e le trasmissioni sono dinamiche