Xbee Servo – controlla un servo remoto

L’Xbee servo è un progetto che puoi riprodurre facilmente se hai letto i miei ultimi esperimenti con gli XBee ed i segnali PWM.

Xbee Servo

Sicuramente accendere uno o più led in dissolvenza da remoto è utile se stai realizzando la tua centralina domotica di controllo luci, tuttavia i miei esperimenti sono anche orientati alla robotica ed un robot fa uso dei servo per attuare i movimenti.

Ecco ora sai in che direzione sono orientati questi test 🙂

Il progetto Xbee servo

Il progetto XBee servo sfrutta la comunicazione di moduli xbee per trasferire un segnale analogico 0-1023 prelevato da un potenziometro, per controllare un servo comando in gradi 0-179.

Il progetto è composto da due parti, come i precedenti, un trasmettitore composto da:

  • n.1 arduino uno o simile
  • n.1 adattatore xbee arduino
  • n.1 modulo xbee
  • n.1 potenziometro da 10k
  • n.1 pacco batterie da 5v o superiore

Xbee Servo trasmettitore

ed un ricevitore composto da:

  • n.1 arduino uno o simile
  • n.1 adattatore xbee arduino
  • n.1 modulo xbee
  • n.1 servomotore
  • n.1 pacco batterie da 5v

Xbee Servo ricevitore

Gli sketch del progetto

Essendo due le schede arduino coinvolte saranno due anche gli sketch, uno per il Tx ( trasmettitore ) ed uno per l’Rx ( ricevitore )

Sketch del trasmettitore xbee servo

/*
 *
 *  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);
}

avrai notato che lo sketch è identico a quello presentato per il controllo del led, in quanto non è necessario eseguire modifiche a questa parte del progetto.

Sketch del ricevitore xbee servo

Lo sketch che si occupa della ricezione del segnale dall’xbee servo e controlla il servocomando è concettualmente identico a quello presentato nell’articolo precedente anche se la sintassi è differente per consentire il controllo del servo:

/*
 *
 *  Sketch di Ricezione xBee potenziometro
 *
 * @autor Mauro Alfieri
 * @url: https://www.mauroalfieri.it
 * twitter: @mauroalfieri
 *
 */
#include <Servo.h>

int val = 0;
int grado = 90;
int pinServo = 9;
 
Servo myservo;

void setup()  {
  Serial.begin(57600);
  Serial.println( "Serial Start" );
 
  myservo.attach( pinServo );
  myservo.write( grado );
}
 
void loop()  {
  if (Serial.available() > 0) {
    
    val = Serial.read();
    Serial.print( "Val: " );
    Serial.print( val );
    grado = map(val, 0, 255, 0, 179);
    Serial.print( " Grado: " );
    Serial.println( grado );
        
    myservo.write(grado);
  }
}

ecco le differenze principali:

linea 10: includi la classe Servo.h inclusa nell’IDE arduino;

linea 13: ho aggiungi una variabile grado di tipo integer in cui memorizzerai il valore angolare da inviare al servo;

linea 16: definisci un’istanza dell’oggetto Servo che chiami myservo;

linee 22-23: utilizza il metodo attach dell’istanza Servo per impostare il pin a cui il servo è collegato e imposta il servo al grado 90°;

linea 29: leggi il valore (0-255) inviato via seriale dall’xbee servo Tx;

linea 32: assegna il grado mappando il valore 0-255 sul valore in gradi 0-179, per farlo utilizza la funzione map() più volte usata e descritta nei miei sketch con i servomotori;

linea 36: usa il metodo write() dell’istanta myservo per impartire al servo il valore in gradi a cui posizionarsi.

Xbee Servomotore

Il video

Ecco un brevissimo video che mostra come funziona il progetto e in cui evidenzio che i due componenti Tx ed Rx non hanno alcuna connessione tra loro:

Buona sperimentazione !!!

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

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