In questi giorni ho realizzato una versione del Rover5 con l’aggiunta del WiRC, di Arduino Leonardo e contollato dall’iPad che ho battezzato: Rover5 Leonardo WiRC, pilotata mediante l’applicazione gratuita fornita dalla Dension.
Puoi utilizzare il tuo smatphone per controllare il Rover5 Leonardo WiRC in quanto l’app della densione è rilasciata sia per i dispositivi della mela sia per android.
Passa subito alla realizzazione partendo in ordine dalla lista dei componenti necessari, i collegamenti da effettuare e lo sketch da caricare sull’Arduino Leonardo per impartire al rover i comandi che ti occorrono per guidarlo ed infine i video dimostrativi della potenza del tuo prossimo Rover5.
Il materiale per costruire il Rover5 Leonardo WiRC
Per iniziare la costruzione del tuo Rover5 Leonardo WiRC hai bisogno dei seguenti componenti:
- n.1 Arduino Leonardo
- n.1 Rover5 del tipo 2WD o 4WD ( io ho utilizzato quest’ultimo )
- n.1 motor shield fe
- n.1 WiRC della Dension con Webcam e WiFi
- n.1 basetta tipo quella del Robot Beginner o una base in plexyglass
- n.1 o 2 sensori Sharp GP2D120X ( non utilizzati in questa versione )
- n.1 breadboard piccola per i soli collegamenti dell’alimentazione
- qualche cavetto per breadboard per le connessioni di alimentazione e segnali dal WiRC ad Arduino Leonardo
- n.1 pacco batterie da 4 stilo ( 6v ) necessarie come seconda alimentazione del WiRC
I collgamenti da eseguire
Non ci sono molti collegamenti da eseguire, la maggior parte riguardano l’alimentazione da fornire al WiRC alla Motor Shield Fe ed ai sensori:
fai attenzione al tipo di alimentazione in quanto abbiamo 3 alimentazioni separate sul Rover5 Leonardo WiRC:
- 6v dalla 4 pile tipo AA che vanno diretti sul WiRC connessi al positivo ( + ) e negativo ( – o Gnd ) dei canali servo
- 9v forniti dal pacco batterie del WiRC per alimentare: Arduino, Motor Shield e WiRC
- 5v prelevati dal regolatore interno di Arduino per alimentare i sensori SHARP GP2D120X


Il montaggio del Rover5 Leonardo WiRC
Lo sketch per Arduino Leonardo
Lo scopo dello sketch è interpretare il segnale proveniente dal WiRC e trasformarlo in due segnali di tipo PWM e DIR ( direzione ) da impartire alla motor shield fe per spostare il Rover5 Leonardo WiRC:
#define PWMA 6 #define PWMB 9 #define DIRA 7 #define DIRB 8 #define INPA 4 #define INPB 12 #define motoreA 0 #define motoreB 0 int pwmMIN = 0; int pwmMAX = 255; int velA = 0; int velB = 0; unsigned long durationX; unsigned long durationY; void setup() { pinMode( INPA,INPUT ); pinMode( INPB,INPUT ); pinMode( PWMA,OUTPUT); pinMode( PWMB,OUTPUT); pinMode( DIRA,OUTPUT); pinMode( DIRB,OUTPUT); analogWrite( PWMA,velA ); analogWrite( PWMB,velB ); } void loop() { durationX = pulseIn(INPA, HIGH); durationY = pulseIn(INPB, HIGH); if ( durationX > 790 && durationX < 1400 ) { avantiA( durationX ); } if ( durationX > 1500 && durationX < 2200 ) { indietroA( durationX ); } if ( durationY > 790 && durationY < 1400 ) { avantiB( durationY ); } if ( durationY > 1500 && durationY < 2200 ) { indietroB( durationY ); } if ( durationX > 1400 && durationX < 1500 ) { altA(); } if ( durationY > 1400 && durationY < 1500 ) { altB(); } } void avantiA(int pwm) { velA = map( pwm,1400,790,0,200 ); digitalWrite( DIRA,HIGH ); analogWrite( PWMA,velA ); } void avantiB(int pwm) { velB = map( pwm,1400,790,0,200 ); digitalWrite( DIRB,LOW ); analogWrite( PWMB,velB ); } void indietroA(int pwm) { velA = map( pwm,1500,2200,0,200 ); digitalWrite( DIRA,LOW ); analogWrite( PWMA,velA ); } void indietroB(int pwm) { velB = map( pwm,1500,2200,0,200 ); digitalWrite( DIRB,HIGH ); analogWrite( PWMB,velB ); } void altA() { analogWrite( PWMA,0 ); } void altB() { analogWrite( PWMB,0 ); }
La scelta della versione Leonardo di arduino è stata dettata dalla maggiore velocità di risposta al segnale proveniente dal WiRC, se vuoi approfondire questa aspetto puoi leggere Tutorial: WiRC e Arduino Leonardo.
Prima di passare al dettaglio delle parti importanti dello sketch voglio fare una premessa: in questo sketch ho deciso di utilizzare i quattro motori connessi tra loro due per lato e di guidare il Rover5 come un carroarmato a due leve dove la leva destra sposta i cingoli a destra e la leva sinistra i cingoli a sinistra.
In questo modo utilizzo 2 canali del WiRC in modo del tutto separato, quando sposto la leva del joystick destro in avanti i cingoli posti a destra ruotano in avanti, se inverto la posizione della leva essi si spostano indietro.
Ho stabilito che i segnali PWM fossero collegati ai pin 6 e 9 di arduino ( linee 01 e 02 ) mentre la direzione viene impartita dai pin 7 ed 8 ( linee 03 e 04 ); infine i segnali in input provenienti dal WiRC li leggo sui pin 4 e 12 ( linee 05 e 06 )
le linee 11-12 definisci il segnale PWM massimo e minimo che vuoi sia impartito ai motori, potresi decidere che al massimo i motori debbano ricevre un PWM di 100 e non di 255 che rappresenta il valore massomo di PWM erogabile;
linee 29-30: imposta la velocità di partenza del rover, ossia al setup dello sketch i due motori devono essere entrambi fermi;
linee 35-36: leggi i segnali provenienti dal WiRC per ciascun canale, ricorda che il valore letto è quello dell’intervallo di impulso erogato dal WiRC ed ha un valore che passa da 790 a 2200 con una posizione centrale con impulso di 1490/1500 millesimi di secondo;
linee 37-49: se il valore di durata ( X o Y ) dell’impulso è compreso tra 790 e 1400 il rispettivo cingolo deve muoversi in avavnti, se il valore è compreso tra 1500 e 2200 deve muoversi indietro, così che per valori compresi tra 1400 e 1500 il rover5 sia fermo ( linee 51-56 );
Le funzioni Avanti A e B sono identiche sia per concetto che scrittura del codice a meno dei pin a cui fanno riferimento: A sposta i cingoli posizionati a destra e B quelli di sisnistra, inoltre se dopo aver assemblato il rover5 il movimento che ottieni spostando in avanti i cursori sul tup iPad non corrispondono al desiderato non devi far altro che invertire il segnale sul canale direttamente dalle impostazioni del canale, o in alternativa invertire + e – del motore sulla motor shield fe.
linee 60-65: definisci la funzione avanti in cui la velocità e ricavata dal valore della variabile pwm che riporta il valore dell’impulso rilevato sul canale corrispondente, un valore compreso tra 1400 e 790 viene rimappato tra 0 e 200, puoi utilizzare le variavili pwmMIN e pwmMAX definite alle linee 11 e 12. Definito il valore di PWM da impartire ai motori lo fai attraverso la linea 64 con il comando analogWrite al pin corrispondente e la direzione puoi stabilirla con il comando digitalWrite della linea 63.
La funzione indietro è simile a quella appena vista, differisce solo per la direzione che è inversa e per la rimappatura del dato che è rimappata tra 1500 e 2200.
Il video dimostrativo
Ecco il video del rover in azione:
Ecco quello che puoi vedere attraverso la telecamera:
Il Rover5 Leonardo sarà uno dei robot che porterò alla fiera: Robotica 2012 e successivamente a MakersItaly dal 7 al 11 novembre 2012, se vorrai vederlo in azione vieni a trovarmi.
Buon divertimento !!!
Prima di inserire un commento, per favore, leggi il regolamento
47 pings
Skip to comment form
[…] vedere in funzione il neo nato Leo-Wi Rover5 che per l’occasione eseguirà delle evoluzioni nuove a cui ho lavorato in occasione di questa […]
[…] del suo eco è pulseIn( pin,STATO ) di cui ho già trattato nell’articolo dedicato a Leo-Wi Rover5 in grado di misurare il tempo trascorso tra un impulso ed il successivo presente sul […]
[…] hai letto il progetto Rover5 Leonardo WiRC ricorderai che la scheda WIRC realizza appunto una connessione di tipo AdHoc con il dispositivo di […]
[…] particolare questa key wifi è la medesima inclusa nel Wirc usato per il progetto Leo-Wi Rover 5 per cui ho approfittato della sua presenza per connetterla alla raspberry […]
[…] ha già utilizzato questa piattaforma in abbinamento al controllo remoto WiRC ma io vorrei realizzare la mia versione utilizzando una connessione bluetooth e applicazioni […]