Arduino, ZigBee e le infinite possibilità (1)

Che cosa hanno in comune un prato che si innaffia da solo quando ne ha bisogno, una lampada che decide di accendersi o meno in base alla luminosità della stanza, un campanello portatile, una versione di ‘Pong’ giocabile sulla facciata di un grattacielo?  A prima vista forse nulla, ma indagando un po’ si scopre che sono tutti progetti realizzabili con una tecnologia assolutamente alla portata di chiunque (a patto di essere un po’ ‘makers’ nell’anima).

In questa serie di articoletti vi renderò partecipi di qualche esperimento sulla tecnologia in questione, esperimenti che dimostrano che, in effetti, funziona! Ed è più semplice di quanto sembri!

Il primo pezzo fondamentale per giocare è il noto Arduino (www.arduino.cc). Si tratta di una piattaforma Open Source per la prototipazione di circuiti elettronici basata su un microcontrollore ATMega che è in grado sia di ricevere input esterni digitali ed analogici (sensori, output di altri circuiti, ecc..)  sia di comandare a sua volta dispositivi di vario tipo: luci, motori, attuatori in genere. La programmazione di Arduino è davvero semplice: il linguaggio è basato sul C ed esiste un IDE apposito che facilita il compito di sviluppare il software e caricarlo sul chip senza bisogno di nient’altro che di un cavo USB.

Il secondo pezzo di tecnologia è quello che permette ad Arduino di abbandonare la trasmissione delle informazioni via cavo per  passare al wireless: parliamo di ZigBee, protocollo di comunicazione (e non solo), e di XBee, un dispositivo radio che lo implementa. Visto che questo minimo articoletto non ha certo la pretesa di essere un trattato esaustivo sul protocollo, nel seguito troverete una descrizione sintetica di come far parlare due radio XBee tra loro e di come interfacciare una radio XBee con Arduino, con aggiuta di considerazioni ‘teoriche’ sul protocollo quando proprio sono indispensabili.

Per poter  ‘giocare’ con soddisfazione serviranno (almeno):

  1. due moduli XBee (vedi paragrafo seguente);
  2. due schede Arduino (in generale di qualunque tipo, io ho usato una ‘UNO’ ed una ‘Duemilanove’ che avevo da un po’);
  3. un paio di breadboard;
  4. fili unipolari di collegamento (da elettronica).

I moduli XBee

Premessa: i moduli XBee, prodotti dalla Digi, non rappresentano certo l’unico pezzo di hardware che supporta ZigBee, ma sono molto popolari perchè semplici da utilizzare e sufficientemente ‘robusti’ in termini di firmware. Ne esistono fondamentalmente di due tipi diversi ed incompatibili tra loro: la serie 1 e la serie 2, per entrambe delle quali esiste sia una versione standard che una versione Pro, caratterizzata da una maggiore potenza. Nei miei test ho  utilizzato due moduletti serie 2 come quello in figura, con antenna a filo: ne esistono altri modelli con l’antenna contenuta nel chip o con la possibilità di utilizzare un’antenna esterna ma il filo mi è sembrata la scelta più…flessibile!

Il primo passo è puramente ‘fisico’: come fare a parlare con il mio moduletto? Ci sono varie possibilità: adattatori di vario genere (tipo questo) che spesso mettono a disposizione  servizi accessori come regolatori di voltaggio, interfacce aggiuntive, ecc… oppure schede di proptotipazione dedicate o altro ancora. Dal momento però che l’obiettivo è utilizzare il modulo con  Arduino, sarà sufficiente una schedina che adatti la spaziatura dei pin del modulo (2 mm) a quella, più larga, della solita ‘breadboard’ (0,1 pollici, corrispondenti a circa 2,54  mm): una cosa di questo tipo, insomma. Ci penserà poi Arduino a gestire la comunicazione. L’adattatore è venduto in pezzi separati che devono essere saldati, ma l’operazione non è difficile (ci sono riuscito io senza problemi, il che è tutto dire!):

I  pezzi da saldare: la scheda, le due strisce di pin femmina spaziati di 0,2 mm su cui si inserisce il modulo XBee, la striscia da 0,1 pollici da cui ricavare i pin per inserire la scheda sulla breadboard.

E’ più comodo partire dai pin con spaziatura più ridotta, che dovranno essere saldati sul lato superiore della scheda: l’operazione  sarà più semplice con la scheda bloccata in qualche modo sulla breadboard (ovvero: i mille usi del nastro isolante). Un’unica accortezza: dal momento che il modulo XBee dovrà essere collocato sopra l’adattatore, la saldatura degli alloggiamenti (pin femmina) sarà fatta sul lato inferiore, quindi la scheda sulla breadboard dovrà essere rovesciata (lato superiore in basso).

Preparazione.........e primo giro fatto!

Una volta completato questa prima parte si capovolge la schedina e si saldano le due strisce rimanenti inserendole prima sulla breadboard in modo che siano bloccate.

Secondo giro.... .....e lavoro concluso!

Un veloce giro con il tester per controllare di non aver fatto pasticci et voilà, si può iniziare a fare sul serio!

Configurazione dei moduli

Il protocollo ZigBee prevede la costituzione di reti con diversa topologia, ma tutte basate su tre tipi di nodi:

  • Coordinator: deve esisterne uno ed uno solo per ciascuna rete. Ha il compito di creare la rete, gestire gli indirizzi dei nodi, la sicurezza ed in generale tutte le funzioni che concorrono alla definizione della rete stessa.
  • Router: è in grado di identificare ed inserisi all’interno di una rete esistente, può ricevere e trasmettere informazioni da e per altri nodi (routing). Solitamente è un nodo costantemente attivo, proprio per il suo ruolo di ‘messaggero’ all’interno della rete.
  • End device: sono essenzialmente dei router molto semplificati. Possono unirsi a reti esistenti e trasmettere o ricevere informazioni, ma non sono in grado di fare routing. Hanno bisogno di un altro nodo di tipo router o coordinator per funzionare e tipicamente alternano periodi di attività (brevi) con periodi di ibernazione (più lunghi): dal momento che spesso si tratta di nodi remoti alimentati a batterie, il basso consumo di corrente è un requisito essenziale.

I nostri moduli XBee possono essere configurati in tutti e tre i modi, a patto di essere inizializzati con il firmware opportuno: per facilitare il compito Digi mette a disposizione X-CTU, un’utility attraverso la quale è possibile gestire tutti i parametri di configurazione dei moduli, firmware compreso.

Ma andiamo con ordine. Dovremo fare tre cose:

  1. Cablare opportunamente ciascun modulo in modo che sia accessibile dal PC attraverso un Arduino (come detto, per questo primo giro sevono due schede Arduino, una per ciascun XBee) ;
  2. Installare X-CTU sul PC (gira solo in ambiente Widows 32 bit, ma è possibile farlo funzionare anche sotto Linux utilizzando wine);
  3. Segliere e caricare il firmware, uno per ciascun modulo.

In questo primissimo giro Arduino sostanzialmente non ha alcun ruolo, se non quello di fornire un convertitore seriale-USB  pronto all’uso ed un’alimentazione a 3,3 V in CC il più possibile stabile. Il circuito tra modulo e Arduino è assolutamente banale ed è visibile sotto:

Vanno connessi i pin seguenti:

  1. Pin 1 del modulo XBee (VCC, alimentazione a 3,3V) con il pin a 3,3V di Arduino;
  2. Pin 2 del modulo XBee (DOUT, Data Out) con il pin 1 di Arduino (TX);
  3. Pin 3 del modulo XBee (DIN, Data Out) con il pin 0 di Arduino (RX);
  4. Pin 10 del modulo XBee (GROUND) con uno dei pin GROUND  (GND) di Arduino.

La connessione Arduino – PC vi a USB è molto semplice e verrà data per scontata: in caso di dubbi consultate le pagine relative all’ installazione di Arduino sul sito ufficiale. Attenzione: dal momento che, come visto, è fondamentale che Arduino non influenzi in alcun modo le comunicazioni tra PC e XBee, sul chip di Arduino va caricato uno sketch vuoto come questo (in alternativa si può togliere con delicatezza il chip ATMega dalla scheda):

void setup(){
}
void loop(){
}

Anche in questo caso, per qualsiasi dubbio sul funzionamento di Arduino, consultate il solito sito. Una volta completati i collegamenti, basterà avviare X-CTU per iniziare la procedura di configurazione.

All’apetura di X-CTU va scelta la poorta a cui è collegato Arduino con il modulo che vogliamo configurare (per esempio COM4, nella figura sotto).

Per controllare che  sia tutto a posto si può utilizzare il bottone Test / Query: se compare una finestra contenente qualche informazione sul modulo e non vengono segnalati errori, si può andare avanti. Nel caso invece sia impossibile comunicare con il modulo XBee (viene segnalato qualcosa come “Unable to communicate”) ricontrollate tutti i cablaggi. Le cause di un errore di comunicazione possono essere molte, qui potete trovare un aiuto per capire cosa non funziona.

Se è tutto OK, si può procedere a caricare il firmware. Quale scegliere? Avremo bisogno sicuramente di un coordinatore, mentre gli altri nodi potranno essere sia router che end devices. Supponendo di utilizzare due soli moduli in tutto, configureremo il secondo come router.

La configurazione del firmware del modulo XBee si gestisce dal tab ‘Modem Configuration’. La prima cosa da fare è assicurarsi che i firmware gestiti dalla nostra versione di X-CTU siano aggiornati: cliccando su ‘Download new versions” si accede alle ultime versioni rilasciate da Digi. Una volta terminato l’agiornamento possiamo passare finalmente alla configurazione del primo modulo, che sarà il coordnatore. Clicchiamo sul bottone ‘Read’ in modo da recuperare le informazioni sul modulo di cui X-CTU ha bisogno per identificare i firmware compatibili. Le informazioni vengono visualizzate ed è ora possibile scegliere la configurazione che vogliamo dal menù a tendina ‘Function Set’.

Scegliamo ‘ZIGBEE COORDINATOR AT’ e clicchiamo su ‘Write’: il nodo è configurato. La stessa procedura può essere ripetuta con il secondo modulo XBee, scegliendo però come  Function Set ‘ ZIGBEE ROUTER AT”.

Ora i nodi sono configurati e pronti al primo test: nella prossima parte inizieranno a parlarsi tra loro!

Print Friendly
This entry was posted in Arduino, DIY, Hardware and tagged , , , , , , , , . Bookmark the permalink.

8 Responses to Arduino, ZigBee e le infinite possibilità (1)

  1. Pingback: Arduino, ZigBee e le infinite possibilità (3) | The Monday Morning Tech Newsletter

  2. Pingback: Arduino, ZigBee e le infinite possibilità (4) | The Monday Morning Tech Newsletter

  3. Pingback: Arduino, ZigBee e le infinite possibilità (5) | The Monday Morning Tech Newsletter

  4. Nicola says:

    Molto chiara la guida , con questi apparecchi ho solo un dubbio ovvero se emettono onde radio anche quando non inviano informazioni o se sono come le reti wireless che emettono un campo sempre è comunque anche quando non c’è scambio di informazioni …. Grazie

  5. ste says:

    Ciao scusa io ho scaricato adesso il sw di x ctu, quella che ho scaricato è la nuova versione e non riesco a configurare il modulo in coordinator perche non trovo il firmware tra quelli elencati, non so cosa fare… Puoi darmi una mano? grazie

  6. Stemby says:

    Segnalo dei piccoli refusi:
    * “Pin 3 del modulo XBee (DIN, Data Out)” → “Pin 3 del modulo XBee (DIN, Data In)”
    * “Arduino – PC vi a USB” → “Arduino – PC via USB”
    * “va scelta la poorta” → “va scelta la porta”

    Ottimo tutorial, molto chiaro.

    Peccato che X-CTU sia software proprietario…

  7. Mario says:

    Se ho ben capito hai usato Arduino per collegare xbee alla usb di un pc. La configurazione dell’xbee (es. settaggio del baud rate) l’hai fatta così senza ricorre ad un adattatore con cui collegare direttamente l’xbee alla usb del pc? Tipo questa http://www.robot-italy.com/it/xbee-usb-board.html

    • admin says:

      Sì, è collegata direttamente al PC attraverso Arduino, che fa le veci dell’adattatore. L’importante è che su Arduino ci sia uno sketch vuoto. Tieni presente che tutto quello che ho scritto risale a qualche anno fa, magari oggi le cose sono un po’ cambiate…

Rispondi a ste Annulla risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *