Rover5 Leonardo WiRC: pilota il tuo rover con l’iPad/iPhone e Android

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.

Rover5 leonardo wirc

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
Ho chiesto al sito robot-domestici.it da cui ho acquistato questo materiale di realizzare un kit pronto che puoi acquistare  con tutto il materiale già confezionato e pronto per il montaggio.

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:

Rover 5 leonardo wirc collegamenti

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
Se hai letto gli articoli:
hai già chiaro come collegare il WiRC ad Arduino Leonardo e el alimentazioni.
I 9v per alimentare il Rover5 Leonardo WiRC puoi prelevarli dal pacco batterie del Rover5 che hai posizionato sotto la base plastica:
Rover 5 - Dagu
inoltre l’impostazione dei jumper sulla motor shield fe è la medesima utilizzata per il Rover5 Leonardo, senza la WiRC:
Rover 5 leonardo wirc

Il montaggio del Rover5 Leonardo WiRC

per aiutarti nell’assemblaggio ho realizzato un video:
Come hai potuto vedere l’assemblaggio di tutto il Rover5 Leonardo WiRC è fattibile in meno di 10 minuti.

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.

robotica 2012

Makers_Italy

Buon divertimento !!!

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

Permanent link to this article: https://www.mauroalfieri.it/elettronica/rover5-leonardo-wirc-ipad-iphone-android.html

47 pings

Skip to comment form

  1. […] 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 […]

  2. […] 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 […]

  3. […] hai letto il progetto Rover5 Leonardo WiRC ricorderai che la scheda WIRC realizza appunto una connessione di tipo AdHoc con il dispositivo di […]

  4. […] 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 […]

  5. […] ha già utilizzato questa piattaforma in abbinamento al controllo remoto WiRC ma io vorrei realizzare la mia versione utilizzando una connessione bluetooth e applicazioni […]

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.