Droid Rover: la macchina RC per Android

droidrover

Durante il mio ultimo anno di ITIS da informatico, dovevo pensare a un progetto da presentare alla maturità, verso Novembre di quell'anno scoprii un fantastico toolkit che permette la comunicazione Bluetooth tra qualsiasi scheda Arduino e qualsiasi device Android. Il suo nome è Amarino. Quando lo scoprii mi resi conto della miriade infinita di cose che era possibile creare con così poco materiale! Recuperai i pezzi necessari, mi misi a montare il carro armato, cominciai a stilare e pensare al codice necessario e riuscii a creare un carro armato comandabile a distanza col mio cellulare Android!

Amarino è un toolkit poco conosciuto e completamente gratuito, disponibile presso il sito web ufficiale. In cosa consiste?

Scopriamolo!

Amarino è costituito da una libreria utilizzabile sull'ambiente di sviluppo Eclipse e sul nuovo ADT: Android Development Toolkit, necessario all'utilizzo delle funzioni per la trasmissione dei dati, la connessione tra Arduino e dispositivo Android via Bluetooth. Un'altra libreria da impiegare per gli stessi motivi con l'Arduino IDE e un'applicazione da installare sui nostri dispositivi Android che funge da remoto: permette la visione completa delle operazioni eseguite e dei dati trasmessi, dall'inizio alla fine della connessione.

Il Droid Rover, si compone di tre principali punti: programmazione Arduino e applicativo Android, montaggio del carro armato con i relativi componenti e studio dei segnali Bluetooth e PWM.

Il carro armato in sè consiste in uno chassis di metallo e 4 ruote motrici mosse da altrettanti motori comandati in corrente continua:

Il cuore del carro armato è un Arduino Duemilanove con ATMega 168 al quale è stato necessario collegare i seguenti componenti:

  • Sabertooth 2×10;
  • BlueSMiRF Silver;
  • Sensore di temperatura DS18B20;
  • Batteria da 9,6V per l'alimentazione dell'Arduino;
  • Batteria da 12V per l'alimentazione dei motori;

Il Sabertooth 2×10 è un modulo di potenza che consente il comando di motori in corrente continua fino a due coppie: è stato impiegato al fine di poter comandare le quattro ruote in coppia (come un vero carro armato) tramite i segnali PWM prelevati in uscita dall'Arduino:

Il modulo consente di operare in modi differenti tramite uno switch posto al di sopra di esso: nel mio caso in modalità indipendente. Poichè riceve dei segnali PWM da Arduino è necessario filtrarli, tramite due appositi filtri RC passa basso. I segnali vengono prelevati dal pin 5 e 6 dell'Arduino e passati tramite i due rispettivi filtri:

Proprio perchè sono due le coppie di motori, è stato necessario applicare il sistema per ciascuna delle due coppie: lo schema che potete vedere è sia per il pin 5 dell'Arduino e il pin S1 del Sabertooth, sia per il pin 6 e il pin S2. I due circuiti vengono chiusi sulla massa del'Arduino e sul pin 0V del modulo di potenza.

Le altre uscite del Sabertooth sono collegate nel seguente modo:

  • M2A ed M2B: collegate ai morsetti dei motori posti a destra;
  • B+ e B-: collegate alla batteria di alimentazione dei motori (12V: 3V per ciascun motore);
  • M1A ed M1B: collegate ai morsetti dei motori posti a sinistra;

Il sensore DS18B20 l'ho impiegato per avere una visione costante della temperatura del robot in caso di surriscaldamenti: l'Arduino invia ogni 250ms la temperatura rilevata dal sensore:

I collegamenti con Arduino sono stati eseguiti nel seguente modo: 

dove i tre pin indicati si riferiscono a quelli dell'Arduino stesso.

Arriviamo al modulo Bluetooth, il BlueSMiRF Silver:

In grado di stabilire una comunicazione fino a 30 metri circa, è l'interprete che permette la comunicazione tra Arduino e dispositivo Android, si costituisce di 6 principali pin collegati nel seguente modo al cervello del Droid Rover:

  • CTS-1: collegato all'RTS-0 del modulo stesso;
  • VCC: collegato al 3,3V dell'Arduino;
  • GND: collegato alla massa dell'Arduino;
  • TX: collegato all'RX dell'Arduino;
  • RX: collegato al TX dell'Arduino;

I segnali PWM sono riassunti da tre comandi presenti nel codice dell'Arduino:

  • analogWrite(64): fa sì che una coppia di ruote ruoti indietro;
  • analogWrite(127): fa sì che una coppia di ruote si fermi;
  • analogWrite(255): fa sì che una coppia di ruote ruoti in avanti;

Passiamo al codice. Il lato Arduino del codice si compone di tre principali funzioni:

  • meetAndroid.registerFunction(nome,etichetta);
  • meetAndroid.send(dato da spedire);
  • meetAndroid.Receive(dato da inviare);

La prima funzione, permette di creare delle funzioni con una relativa etichetta: in poche parole quando il dispositivo Android invia all'Arduino una specifica etichetta essa viene riconosciuta e verrà eseguita la relativa funzione con il suo nome (indicato nella meetAndroid.registerFunction) specifico: nel mio caso, ne ho create 4 al fine di gestire i movimenti del Droid Rover: procedere in avanti, sterzare a destra e a sinistra e arresto.

Le ultime due sono molto semplici: ogni volta che vengono eseguite, provvedono all'inivio e alla ricezione dei dati indicati come argomento delle funzioni stesse.

Il lato Android del codice si compone di differenti funzioni:

  • registerReceiver(arduinoReceiver, new IntentFilter(AmarinoIntent.ACTION_RECEIVED));
  • Amarino.disconnect(this, DEVICE_ADDRESS);
  • unregisterReceiver(arduinoReceiver);
  • Amarino.sendDataToArduino(this, DEVICE_ADDRESS, etichetta, 0);
  • intent.getStringExtra(AmarinoIntent.EXTRA_DATA);

La prima funzione permette la connessione alla scheda Arduino e la avvia in automatico. La seconda, acconsente alla ricezione dei dati inviati dalla scheda. La terza e la quarta eseguono la disconnessione dei due dispositivi mentre le ultime due servono ad inviare e ricevere i dati. Noterete un DEVICE_ADDRESS all'interno di queste funzioni: il BlueSMiRF Silver presenta un MAC ADDRESS col quale viene riconosciuto se eseguiamo la ricerca dei dispositivi Bluetooth col nostro dispositivo: è necessario affinchè venga eseguita la connessione. L'etichetta indicata nella penultima funzione è la stessa etichetta che si presenta nella funzione per il lato Arduino della programmazione. Per avere un'utilizzo ottimale del Droid Rover, ho programmato un'applicazione per dispositivi Android:

I tasti con le frecce e il tasto arresto servono per i movimenti del robot, mentre l'etichetta Temperatura fa sì che venga visualizzata la temperatura rilevata dal sensore ogni 250ms.

Il Droid Rover è possibile vederlo in azione al seguente link: 

comandato con un Galaxy Nexus.

Lascio in allegato i codici sorgenti del progetto (Arduino e Android) e il file .apk dell'applicazione che ho creato nel caso chiunque voglia prenderne spunto e cimentarsi in qualsiasi progetto analogo. Il Droid Rover ha conquistato la commissione d'esame per la sua complessità e fluidità nella risposta ai movimenti e nella trasmissione dei dati, tuttavia questo fantastico toolkit mi ha proprio appassionato e sono intenzionato a creare altri progetti su base Arduino che collaborino col robottino verde!

STAMPA     Tags:

3 Comments

  1. maitanmassimo 20 settembre 2014
  2. slovati slovati 14 agosto 2013
  3. Istorn 14 agosto 2013

Leave a Reply