Comunicazioni wireless con Arduino

Abbiamo visto qui come sia semplice collegare ad Arduino un sensore e leggerne i valori, ma per il mio progetto di monitorare tutte le stanza di casa e comandare i vari dispositivi è necessario che tutti i valori acquisiti siano a disposizione di un unico computer, quindi ogni Arduino deve avere un trasmettitore per comunicare le letture ed alcuni devono avere un ricevitore per ricevere gli ordini.

Ci sono decine di moduli diversi per la comunicazione, bluetooth e wifi fra i più conosciuti, ma mi serviva qualcosa di semplice e dai bassi consumi, così ho optato per i moduli da 433 Mhz, che hanno come primo vantaggio di essere separati fra ricevitore e trasmettitore, quindi monto solo quello che mi serve, inoltre il ricevitore può ricevere più trasmettitori senza bisogno di accoppiamenti, password e gestione di protocolli. La libreria per utilizzarli puoi scaricarla da questo sito dove trovi anche delle informazioni più approfondite. Come visto in precedenza scaricala e installala sull’IDE di Arduino; Per rimuovere eventuali librerie installate precedentemente devi cancellare la cartella che si trova ne seguente  percorso : c:\users\maurizio\documenti\arduino\libraries naturalmente al posto di maurizio ci sarà il tuo nome.

Scriviamo il programma per trasmettere

Per presentare la libreria basta aggiungere il il file di Header inserendo la riga #include <RH_ASK.h> all’inizio del programma e subito dopo assegnarle un nome inserendo la riga RH_ASK trasmittente; aggiungiamo le righe nello stesso programma usato per leggere il DHT11 così ne trasmettiamo il valore; Nella sezione SETUP inseriamo la riga trasmittente.init(); per inizializzare la trasmittente; nel LOOP , dopo la lettura del sensore aggiungiamo la riga  char msg[20]; per definire una variabile di nome msg, lunga 20 caratteri massimo che conterrà i dati da trasmettere e subito dopo la l’istruzione per impostarla con i valori: sprintf(msg,”%02d%02d”,sensore.temperature,sensore.humidity);  a questo punto con l’istruzione trasmittente.send((uint8_t *)msg, strlen(msg)); trasmettiamo le informazioni e con l’istruzione trasmittente.waitPacketSent(); attendiamo che la trasmissione sia completa;

programma di trasmissione

Nella mia versione ho aggiunto un contatore alla trasmissione per accertarmi che tutti i pacchetti arrivassero a destinazione, e una A a inizio trasmissione perché ho intenzione di identificare ogni dispositivo con una lettera e quindi analizzandola dal ricevitore posso sapere a quale stanza si riferisce la lettura. Per il collegamento fisico del trasmettitore bisogna collegare, da sinistra a destra (verificare sempre lo schema di quello acquistato) il primo piedino al piedino 12 di Arduino(Dati), il secondo ai 5V e il terzo a GND; il piedino 12 è quello previsto di default dalla libreria, se volete utilizzare un piedino diverso dovete modificare il codice comunicando alla libreria il piedino utilizzato.

programma per ricevere 433 mhz

Scriviamo il programma per ricevere

Per il ricevitore serve un’altro Arduino; il collegamento, sempre da sinistra, primo piedino ricevitore5V, secondo piedino (Dati) al piedino 11 e terzo piedino GND; Scrivi un nuovo programma con la presentazione della libreria, l’assegnazione del nome(in questo caso ricevitore) e l’inizializzazione nella sezione SETUP; nella sezione LOOP dobbiamo definire la variabile dati e la variabile lunghezza dati e poi una istruzione  IF, “SE” in italiano, per istruire Arduino a visualizzare i dati SE(IF) li abbiamo ricevuti. Il programma è questo:

Se tutto è andato bene, lanciando i due programmi e aprendo la porta seriale su entrambi i computer si vedranno i dati letti dal sensore; se hai un solo computer, carica prima lo sketch di trasmissione sull’Arduino che ha il trasmettitore, e alimentalo con una power-bank, poi colleghi l’Arduino con il ricevitore al computer e gli carichi il programma di ricezione.

Suggerimenti

due Arduino trasmettono e uno riceve

Vedi di tenere molto vicini i due Arduino, la distanza che i moduli possono coprire senza antenna è di circa 20 cm. Per aumentare la distanza fino a circa 20 metri senza muri o 12 metri con una parete da 20 cm devi saldare all’occhiello con la dicitura antenna, al trasmettitore e al ricevitore, un filo lungo 17,3 cm.

Ho fatto successivamente delle prove con due Arduino a trasmettere e uno a ricevere, modificando la prima lettera trasmessa, funziona!

Maurizio

Se vuoi acquistare un Arduino lo trovi QUI, i ricevitori e trasmettitori li trovi QUI e se vuoi un kit completo per sperimentare con Arduino lo trovi QUI.

Lascia un commento