Tutorial xbee arduino-arduino

Il titolo è riferito alla possibilità di far comunicare due schede arduino attraverso moduli xbee da cui: xbee arduino-arduino. xbee arduino arduino Al primo arduino è affidato il compito di trasmettere il segnale proveniente da 6 pulsanti all’altro a cui colleghi tre led. Uno dei due arduino sarà quindi il trasmettitore, indicato come Tx, ed è quello a cui sono collegati i pulsanti. Il secondo arduino è quello che riceve il segnale, indicato come Rx, a cui sono collegati i led. Come sai ogni modulo xbee può sia trasmettere sia ricevere per cui usarli in questo modo è riduttivo, in un prossimo progetto potresti provare a rendere entrambi gli arduino sia Tx che Rx.

Materiale per il tutoria xbee arduino-arduino

E’ quasi tutto doppio:

  • n.2 arduino ( uno o similari )
  • n.2 adattatori xbee-arduino
  • n.2 moduli xbee
  • n.2 breadboard
  • n.2 batterie per alimentare arduino ( 7-12v )
  • n.3 led
  • n.6 pulsanti
  • n.6 resistenze da 330ohm
  • cavetti per breadboard

Se non sai come configurare i moduli xbee puoi leggere questo articolo. Se vuoi comprendere il funzionamento della comunicazione seriale utilizzata dai moduli arduino con un progetto più semplice puoi leggere questo.

Montaggio del progetto

Dividi il montaggio in due parti: quella dell’arduino Tx e quella dell’Rx

Montaggio del Tx

La parte Tx del progetto la puoi assemblare utilizzando

  • un arduino
  • un adattatore xbee-arduino
  • un modulo xbee
  • una breadboard
  • 6 pulsanti
  • 6 resistenze.

Lo schema è quello descritto in questo articolo con l’aggiunta di una sesta resistenza e del 6° pulsante in fondo: xbee arduino-arduino collegamento pulsanti per ogni pulsante ho aggiunto all’immagine una lettera il cui significato ti sarà chiaro quando leggerai lo sketch. Tutti i pulsanti collegati a matrice sono connessi al pin A0 di arduino che leggerai per individuare il pulsante premuto.

Montaggio dell’Rx

L’arduino Rx è cotstituito da:

  • un arduino
  • un adattatore xbee-arduino
  • un modulo xbee
  • una breadboard
  • tre led da 5mm.

Non ho usato una resistenza per i led, anche se sarebbe corretto farlo, in quanto il mio progetto è solo un esperimento e non accendendo i led a lungo non rischi di brciarli, se vuoi prolungare l’accensione dei led nel tuo progetto ti consiglio di utilizzare una resistenza da almeno 200ohm o superiore. I tre led hanno il catodo ( Gnd ) collegato al polo negativo del circuito ed il polo positivo di ciascun led è collegato rispettivamente ad uno dei pin 9,10,11 di arduino. La figura seguente chiarisce i collegamenti da eseguire: xbee arduino collegamento led

Sketch del Tx

Gli sketch sono due, uno per ciascun arduino, quello relativo alla parte di trasmissione xbee-arduino-arduino è:

/*
 *
 *  Sketch di Trasmissione xBee
 *
 * @autor Mauro Alfieri
 * @url: https://www.mauroalfieri.it
 * twitter: @mauroalfieri
 *
 */

int A[] =  {0,20};
int B[] =  {505,525};
int C[] =  {680,700};
int D[] =  {765,785};
int E[] =  {810,830};
int F[] =  {850,870};

int pinINPUT = A0;

 void setup() {
   Serial.begin(57600);
   Serial.println( "Serial Start" );

   pinMode( pinINPUT,INPUT );
 }

 void loop() {
  int button = analogRead( pinINPUT );

  if ( A[0] <= button && button <= A[1] )  { Serial.print("A"); }
  if ( B[0] <= button && button <= B[1] )  { Serial.print("B"); }
  if ( C[0] <= button && button <= C[1] )  { Serial.print("C"); }
  if ( D[0] <= button && button <= D[1] )  { Serial.print("D"); }
  if ( E[0] <= button && button <= E[1] )  { Serial.print("E"); }
  if ( F[0] <= button && button <= F[1] )  { Serial.print("F"); }

  delay( 100 );
}

leggendolo linea per linea: linee 11-16: definisci 6 array chiamati con le lettere dalla A alla F di 2 elemnti ciascuno, il primo elemnto indica il valore minimo rilevato alla pressione del corrispondente tasto, il secondo indica il valore massimo. In pratica alla pressione del pulsante contrassegnato con la lettera A potresti leggere un valore sul pin A0 che varia tra 0 e 20 per cui eseguendo un ragionamento contrario se leggi un valore compreso tra 0 e 20 vuol dire che hai premuto il pulsante A; linea 18: definisci una variabile chiamata pinINPUT il cui valore corrisponde al pin a cui hai collegato i pulsanti; linee 21-22: imposta la comunicazione seriale su 57600 baud e scrivi “Serial Start”; linea 24: imposta la modalità di uso del pinINPUT a INPUT; linea 28: ad ogni ciclo di loop() imposta la variabile button come il valore analogico letto su pinINPUT; linee 30-35: controlla che il valore button sia incluso in uno degli intervalli definiti dagli array A-F, quando il valore del pulsante è nel range di un array invia al canale seriale la corrispondente lettera; In questo sketch ti limiti solo a riconoscere quale pulsante è stato premuto e a trasferirne il valore sul un ipotetico monitor seriale. Se togli il modulo xbee ed il suo adattatore e colleghi arduino al computer vedrai sul monitor seriale le letter A,B,C..F in funzione del pulsante che premi. Quando il modulo xbee è collegato questi valori vengono dirottati al modulo che li comunica al suo modulo ricevente.

Sketch dell’Rx

lo sketch relativo all’arduino predisposto a ricevere è:

/*
 *
 *  Sketch di Ricezione xBee
 *
 * @autor Mauro Alfieri
 * @url: https://www.mauroalfieri.it
 * twitter: @mauroalfieri
 *
 */

// Accensione Led
char ledAa = 'A';
char ledBa = 'B';
char ledCa = 'C';

// Spegnimento Led
char ledAs = 'D';
char ledBs = 'E';
char ledCs = 'F';

int pinLedA =  9;
int pinLedB = 10;
int pinLedC = 11;

byte rcvd;

void setup()  {
  Serial.begin(57600);
  Serial.println( "Serial Start" );

  pinMode( pinLedA,OUTPUT );
  pinMode( pinLedB,OUTPUT );
  pinMode( pinLedC,OUTPUT );

  digitalWrite( pinLedA,LOW );
  digitalWrite( pinLedB,LOW );
  digitalWrite( pinLedC,LOW );

}

void loop()  {
  if (Serial.available()) {
    rcvd = Serial.read();

    if (rcvd == ledAa) digitalWrite( pinLedA,HIGH );
    if (rcvd == ledBa) digitalWrite( pinLedB,HIGH );
    if (rcvd == ledCa) digitalWrite( pinLedC,HIGH );
    if (rcvd == ledAs) digitalWrite( pinLedA,LOW );
    if (rcvd == ledBs) digitalWrite( pinLedB,LOW );
    if (rcvd == ledCs) digitalWrite( pinLedC,LOW );

  }
}

leggendo anche in questo caso linea per linea: linee 12-14: definisci 3 variabili di tipo char a ciascuna delle quali assegni un valore da A a C, ti serviranno per riconoscere il valore inviato del modulo xbee; linee 17-19: definisci altre tre variabili simili a quelle delle linee 12-14 a cui assegni i valori da D ad F; linee 21-23: definisci tre variabili a cui assegni il valore del pin corrispondente ad uno dei led; linea 25: definisci una variabile di tipo byte in cui memorizzerai il valore proveniente dalla seriale; linee 28-29: imposta un canale di comunicazione seriale a 57600 baud; linee 31-37: per ciascun pin a cui è connesso un led definisci la modalità di funzionamento come OUTPUT e imposta a LOW il suo valore iniziale; linea 42: all’interno della funzione loop() controlla che il canale seriale sia attivo con il metodo available() dell’oggetto Serial; linea 43: leggi il valore inviato sul canale seriale mediante il metodo read() ed imposta tale valore nella variabile rcvd; linea 45: confronta il valore memorizzato nella variabile rcvd con il valore della variabile ledAa se i due valori sono identici, quindi dal canale seriale hai ricevuto “A” ( senza virgolette ) allora porta al valore ∫ il pinLedA; linee 46-50: esegui i confronti anche per gli altri valori memorizzati nelle variabili ledXy, dove X è B,C…F e y può essere a o s.

Il video dell’xbee arduino-arduino

ecco come funziona il tuo progetto una volta ultimato:

Buona sperimentazione a distanza !!!

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/tutorial-xbee-arduino-arduino.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.