Droid Rover: la macchina RC per Android

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 2x10;
  • 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 2x10 è 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!

Scarica subito una copia gratis
Tags:

5 Commenti

  1. Avatar photo slovati 14 Agosto 2013
  2. Avatar photo Istorn 14 Agosto 2013
  3. Avatar photo maitanmassimo 20 Settembre 2014
  4. Avatar photo AndreaeMatteo 10 Luglio 2015
  5. Avatar photo tattolilm 22 Febbraio 2020

Rispondi a slovati Annulla risposta

Seguici anche sul tuo Social Network preferito!

Send this to a friend