L’Xbee servo è un progetto che puoi riprodurre facilmente se hai letto i miei ultimi esperimenti con gli XBee ed i segnali PWM.
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
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
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.
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
32 pings
Skip to comment form