XBee PWM con arduino

Oggi ti propongo un interessante esperimento che ho condotto in questi giorni con l’XBee PWM ossia la possibilità di inviare un segnale PWM da un arduino ad un’altro senza fili.

XBee PWM

Come spesso avrai letto dai miei progetti molti sono elementari e il loro scopo, come in questo caso, è di testare una funzionalità prima di estenderla a progetti più complessi.

Questo esperimento ti permette di inviare un segnale PWM da un Arduino a cui hai collegato un potenziometro da 10K ad un’altro arduino a cui è collegato un led e di regolare l’accensione del led in modo proporzionale.

Prima di dedicarmi a questo progetto ti invito a leggere due tutorial introduttivi il cui scopo è chiarirti come configurare i due moduli XBee e come trasmettere un segnale tra i due arduino-arduino.

Il materiale per l’XBee pwm

La lista dei materiali necessari a riprodurre il progetto:

  • n. 2 arduino uno ( o simile: mega, mini, leonardo, Yùn )
  • n. 2 adattaori arduino xbee
  • n. 2 xbee
  • n. 1 led da 5mm
  • n. 1 resistenza da 330ohm
  • n. 1 potenziometro 10Kohm
  • n. 2 pacchi batterie 5-12v

I collegamenti del progetto

Il potenziometro devi collegarlo al +5v e Gnd con i terminali esterni ed il polo centrale, ossia quello variabile, puoi collegarlo ad uno dei pin analogici da A0 ad A5, io l’ho collegato ad A0:

XBee PWM Analog zero

All’altro arduino devi collegare il led al pin Gnd ed al pin 9 ponendo la resistenza tra il pin 9 ed il pin positivo del led, ho scelto il pin 9 perché un pin di tipo PWM ed in grado di regolare da 0 a 255 il valore della tensione emessa:

XBee PWM collegamneto led

I collegamenti sono semplici per permetterti di concentrarti sul principio di funzionamento.

Gli sketch del XBee PWM

Gli sketch sono due:

il primo si occupa del Tx il cui compito è leggere il valore del potenziometro ( 0-1023 ) convertirlo in un valore accettato dal pwm ( 0-255 ) e trasmetterlo via seriale al XBee pwm;

il secondo si occupa dell’Rx ossia di ricevere il dato dall’XBee pwm e inviarlo al pin 9 perché controlli l’accensione del led in modo proporzionale.

Sketch TX

/*
 *
 *  Sketch di Trasmissione xBee potenziometro
 *
 * @autor Mauro Alfieri
 * @url: https://www.mauroalfieri.it
 * twitter: @mauroalfieri
 *
 */
 
int pinINPUT = A0;
int pot = 0;

 void setup() {
   Serial.begin(57600);
   pinMode( pinINPUT,INPUT );
 }
 
 void loop() {
  pot = map(analogRead( pinINPUT ),0,1023,0,255);
  Serial.write(pot);  
  delay(100);
}

ecco come funziona la trasmissione:

linea 11: definisci il pin a cui è collegato il ptenziometro, nel mio progetto A0;

linea 12: definisci il valore iniziale della variabile pot;

linea 15: imposta un canale di comunicazione seriale a 57000 baud;

linea 16: imposta la modalità del pin A0 a INPUT;

linea 20: il comando analogRead() legge dal pinINPUT il valore di posizione del potenziometro ed il comando map ne rimappa il valore da 0-1023 al range 0-255;

linea 21: il metodo write() della Serial invia il valore letto e convertito alla linea 20 attraverso il canale seriale, che al momento in cui avrai collegato l’XBee pwm sarà spedito attraverso il modulo XBee al ricevitore.

Sketch RX

/*
 *
 *  Sketch di Ricezione xBee potenziometro
 *
 * @autor Mauro Alfieri
 * @url: https://www.mauroalfieri.it
 * twitter: @mauroalfieri
 *
 */
 
int val;
int pinLed = 9;
 
void setup()  {
  Serial.begin(57600);
  Serial.println( "Serial Start" );
 
  pinMode( pinLed,OUTPUT );
  digitalWrite( pinLed,LOW );
 
}
 
void loop()  {
  if (Serial.available() > 0) {
    
    val = Serial.read();
    Serial.print( " Val: " );
    Serial.println( val );
        
    analogWrite(pinLed,val);  
  }
}

ecco come funziona la parte di ricezione:

linea 11: definisci una variabile di tipo integer ed impostala a 0, in questa variabile memorizzerai il valore ricevuto attraverso la comunicazione seriale;

linea 12: imposta la variabile a cui è collegato il led, il pin 9;

linea 15: apri un canale di comunicazione seriale a 57000 baud, considera che per consentire la comunicazione tra i moduli è necessario che antrambi comunichino alla medesima velocità;

linee 18-19: definisci la modalità OUTPUT per il pin 9 e imposta LOW il suo valore iniziale;

linea 24: la condizione riportata in questa linea verifica che ci sia una comunicazione seriale e fa in modo che le linee successive siano eseguite solo in presenza di un input seriale valido;

linea 26: leggi il valore presente nel registro Serial ed assegnalo alla variabile val;

linee 27-28: scrivi sul monitor seriale, utile per il debug, il valore ricevuto;

linea 30: imposta il valore del pin 9 a val ossia il valore ricevuto.

Il video

Il video dell’XBee pwm ti mostra come ho eseguito i collegamenti e la prima accensione del progetto oltre al suo funzionamento.

avrai notato che dopo l’accensione è necessario attendere qualche secondo perché i moduli si riconoscano, in quella fase nessuna comunicazione Xbee pwm può essere trasferita per cui se muovessi il potenziometro in quella fase non otterresti alcun risultato sul led.

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

Permanent link to this article: https://www.mauroalfieri.it/elettronica/xbee-pwm-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.