Tutorial #15 – WiFi Robot
Materiale utilizzato – Arduino UNO – WiFi Shield – due motorini servo continui – 2 ruote – 2 interruttori – 2 pacchi batterie – smartphone.
In fondo al tutorial alcuni siti internet dove acquistare il materiale.
Per vedere tutti i tutorial: www.marcopucci.it/arduino/
Segui la pagina Tutorial Arduino su Facebook
N.B: Clicca qui per scaricare il file .zip con tutti gli sketch utilizzati per realizzare il robot WiFi
In questo tutorial realizziamo un robot comandato tramite una pagina internet. Davanti al robot è posizionato uno smartphone con una connessione dati. Lo smartphone viene utilizzato per due motivi: il primo è quello di fornire alla scheda Arduino la connessione a internet per poter gestire i suoi movimenti. Il secondo è quello di utilizzarlo come videocamera per
vedere i suoi spostamenti aprendo l’app gratuita di Skype per effettuare una video chiamata a un secondo account. In questo modo il robot è gestibile da qualsiasi postazione a distanza (basta che sia presente il segnale dati internet del cellulare).
Schema funzionamento
ATTENZIONE: prima di continuare dovete leggere il tutorial n.14 Sistema di Telepresenza
Nel tutorial precedente abbiamo visto come gestire un motorino servo 180° tramite una pagina internet. E’ necessario leggerlo per poter capire alcune parti di codice che in questo tutorial non saranno spiegate. L’unica differenza sta nella gestione dei servo motori continui (che non abbiamo ancora visto) e nella costruzione pratica della struttura del robot.
Costruiamo il robot
La costruzione del robot è sicuramente la parte più difficile del progetto. Non esiste un unico metodo per realizzarlo, la fantasia e l’ingegneria possono essere fuse insieme per dare vita a robot unici e di qualsiasi forma. In questo caso costruiamo un robot con due ruote. Di fondamentale importanza è la posizione dei motorini che deve essere speculare al millimetro altrimenti rischiamo che una ruota, storta di qualche grado, non faccia andare dritto il robot.
Potete acquistare le basi per robot su internet oppure costruirvi da soli con legno, plexiglass o qualsiasi altro materiale la vostra base.
Nel mio caso ho tagliato una base di legno quadrata e ho sistemato i due motorini ai lati, come nella figura qui sotto.
I due motorini posizionati ai lati della base.
Una volta sistemati i due servo dobbiamo trovare due ruote. Anche qui la scelta può andare dall’acquisto web allo smontare il giocattolo preferito dei vostri figli o all’uso di coperchi di barattoli, cerchi di legno, ecc…
In questi casi Brico e i negozi cinesi sono ottimi posti dove trovare il materiale necessario.
Inserite una piccola ruota sotto la base del robot per bilanciare il peso. Le ruote vanno ovviamente fissate ai due motorini con delle viti.
A questo punto dovete posizionare all’inizio della base di legno qualcosa per agganciare il vostro smartphone (potete utilizzare qualsiasi strumento come elastici, fili, ecc… io ho utilizzato un porta smartphone per auto con le sue ventose).
Dietro il poggia smartphone va inserito Arduino con la sua Shield WiFi e due pacchi batteria (uno per alimentare Arduino e l’altro per alimentare i due motorini).
Schema elettrico
Qui sotto lo schema elettrico del circuito che dovete realizzare. I due motorini servo si collegano esattamente come i servo 180°. La novità in questo caso sono i due interruttori per alimentare la scheda Arduino e i due motorini.
Utilizziamo due alimentazioni diverse perchè altrimenti non riusciamo ad accendere Arduino e a muovere le ruote con una sola batteria da 9V. In questo modo possiamo gestire meglio il robot.
Il primo interruttore per la batteria da 9V e molto semplice da realizzare. Acquistiamo in un negozio di elettronica (o su internet) un pacco batteria per pile da 9V. Tagliamo il filo rosso e saldiamo un’estremità all’interruttore. Dal secondo piedino dell’interruttore saldiamo l’altra metà del filo precedentemente tagliata.
Se spostiamo la levetta dell’interruttore la nostra scheda Arduino deve accendersi.
Il secondo pacco batterie (da 4 pile stilo) deve essere collegato in questo modo: il filo nero deve essere saldato con i due cavi neri dei servo motore.
Il filo rosso delle batterie con il primo piedino dell’interruttore. I due fili rossi dei servo motori devono essere saldati insieme nel secondo piedino dell’interruttore. In questo modo quando spostiamo la levetta alimentiamo tutti e due i motorini.
Infine con due fili colleghiamo il terzo ingresso dei motorini (di solito di coloro arancione) con il segnale pin3 e pin6 (per controllare la direzione dei due motori gestendola da Arduino).
Informatica
Prima di collegare Ardunio a internet vediamo come funziona il codice per far muovere i due servo motori continui (360°).
Prendiamo come riferimento la pagina del sito di Arduino:
http://arduino.cc/en/Reference/ServoWriteMicroseconds
Qui viene spiegato che tramite il comando servo.writeMicroseconds() possiamo controllare la direzione e la velocità di un servo motore continuo.
Inserendo un valore uguale a mille all’interno del comando
servo.writeMicroseconds(1000) il servo si muoverà in senso antiorario. Con il comando
servo.writeMicroseconds(2000) si muoverà in senso orario, mentre con
servo.writeMicroseconds(1500) il motore si bloccherà.
Questi valori vanno bene per i motorini standard. Non è detto che valgano per tutti i modelli (alcuni possono variare tra 700 e 2300). In questo secondo caso dovete fare delle prove fino a quando i vostri motori andranno avanti, dietro e resteranno fermi.
Apritelo sketch precedentemente scaricato _0_gestione_servo_360.ino per fare alcune di queste prove.
Uplodate il codice e verificate se i due motori rispettano il movimento assegnato (avanti, fermo, dietro, destra e sinistra). In caso contrario provate a cambiare i numeri nel codice
myservo1.writeMicroseconds();
#include <Servo.h>
Servo myservo1;
Servo myservo2;
void setup ()
{
myservo1.attach (3);
myservo2.attach (6);
}
void loop () {
avanti();
delay(5000);
Richiamo la funzione avanti();
aspetto 5 secondi
fermo();
delay(5000);
Richiamo la funzione fermo();
….
dietro();
delay(5000);
destra():
delay(5000);
sinistra()
delay(5000);
}
void avanti(){
myservo1.writeMicroseconds (2500);
myservo2.writeMicroseconds (100);
}
Il motorino di destra va avanti
Il motorino di sinistra va avanti
I due valori sono 2500 e 100 (i due valori opposti) perchè i motorini sono montati in maniera speculare.
void dietro(){
myservo1.writeMicroseconds (100);
myservo2.writeMicroseconds (2500);
}
Nella funzione dietro i due motorini hanno i valori invertiti
void fermo(){
myservo1.writeMicroseconds (1480);
myservo2.writeMicroseconds (1450);
}
La funzione fermo() ha un valore che nel mio caso è uguale a 1480 o 1450 (questo valore dipende dai motorini utilizzati)
void sinistra(){
myservo1.writeMicroseconds (2500);
myservo2.writeMicroseconds (2500);
}
Nella funzione sinistra() i due motorini devono andare uno avanti e l’altro dietro. In questo modo il robot effettuerà una curva.
void destra(){
myservo1.writeMicroseconds (100);
myservo2.writeMicroseconds (100);
}
Una volta testato il corretto funzionamento delle due ruote siamo pronti per collegare la nostra scheda Arduino a internet e gestire i motori tramite una pagina web.
Aprite il file _1__WifiWebClientRepeating_PHP_IF.ino
La spiegazione completa di questo codice è presente nel tutorial precedente. Clicca qui per leggerlo.
#include <TextFinder.h>
#include <SPI.h>
#include <WiFi.h>
#include <Servo.h>
Servo myservo1;
Servo myservo2;
char ssid[] = “xxx”;
char pass[] = “xxx”;
Inserite la user e la password della connessione di rete generata dal vostro smartphone.
int keyIndex = 0;
int status = WL_IDLE_STATUS;
WiFiClient client;
TextFinder finder(client);
char server[] =
“http://www.arduinowifi.altervista.org”;
Indirizzo del sito creato con altervista
unsigned long lastConnectionTime = 0;
boolean lastConnected = false;
const unsigned long postingInterval = 1*1000;
void setup() {
Serial.begin(9600);
while (!Serial) {
;
}
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println(“WiFi shield not present”);
while(true);
}
while ( status != WL_CONNECTED) {
Serial.print(“Attempting to connect to SSID: “);
Serial.println(ssid);
status = WiFi.begin(ssid, pass);
delay(7000);
}
myservo1.attach(3);
myservo2.attach(6);
}
void loop() {
while (client.available()) {
char c = client.read();
Serial.write(c);
}
if (!client.connected() && lastConnected) {
Serial.println();
Serial.println(“disconnecting.”);
client.stop();
}
if(!client.connected() && (millis() – lastConnectionTime > postingInterval)) {
httpRequest();
Serial.println(“dato presente sul sito”);
finder.find(“OK>”);
float value = finder.getFloat();
Serial.println(value);
Controllo del dato presente sul sito
if (value==1){
avanti();
delay(5000);
}
Se il valore del dato è uguale a 1 allora il robot va avanti
else if (value==4){
dietro();
}
In basso lo schema della pagina web e i numeri generati sul sito sito altervista.org
else if (value==5){
fermo();
}
else if (value==2){
destra();
delay(500);
fermo();
delay(3000);
}
else if (value==3){
sinistra();
delay(500);
fermo();
delay(3000);
}
else if (value==6){
destra();
delay(300);
fermo();
delay(3000);
}
else if (value==7){
sinistra();
delay(300);
fermo();
delay(3000);
}
else{
fermo();
}
…….
Pagina web
Il sito per gestire Arduino viene creato su altervista.org (aprite il tutorial precedente per vedere come fare, è identico a quello già realizzato per il Sistema di Telepresenza).
L’unica differenza è nella grafica e in due nuovi bottoni. Nella cartella .zip scaricata all’inizio, trovate le due pagine da caricare nel vostro spazio web (robot_wifi.php e data_robot_wifi.txt) e tutte le immagini che potete modificare a vostro piacere (anche queste devono essere caricate nel vostro spazio).
Nell’immagine a sinistra la pagina web caricata sul mio spazio web
http://www.arduinowifi.altervista.org/robot_wifi.php
I numeri a fianco indicano il numero che verrà scritto sulla pagina data_robot_wifi.txt e che Arduino controllerà.
Nel mio caso la pagina è a questo link:
http://www.arduinowifi.altervista.org/data_robot_wifi.txt
Provate a cliccare su un bottone e poi aggiornate la seconda pagina. Il numero dopo la scritta OK> deve cambiare.
Uplodate i due file e le immagini nel vostro spazio web e ripetete la prova, se i numeri cambiano siete pronti per comandare il vostro robot a distanza.
Schema dei movimenti:
OK>1< – Il robot va avanti finchè non premiamo un altro bottone (questo cambio di movimento può
variare tra 1 o 3 secondi a seconda della connessione internet). Allenatevi a muovere il robot e fermarlo prima che vada a sbattere contro un muro!
OK>2< – sinistra per mezzo secondo (poi si ferma per tre secondi e continua a muoversi a sinistra…) qui
potete modificare i tempi di curva e pausa come volete.
OK>3< – destra per mezzo secondo (poi si ferma per tre secondi e continua a muoversi a destra…)
OK>4< – dietro
OK>5< – fermo
OK>6< – piccola curva a destra
OK>7< – piccola curva a sinistra
HotSpot
Create la connessione dati con il vostro smartphone (tutorial precedente).
A questo punto, una volta che la WiFi Shield si connetete a internet il robot, inizierà a muoversi.
In questo modo possiamo gestire il robot (o qualsiasi altra creazione elettronica vi venga in mente) a distanza. Dato che il robot è dotato di una propria connessione WiFi (quella del cellulare) può trovarsi anche dall’altra parte del mondo.
Ma come faccio a vedere dove sta andando?
Per risolvere questo problema ho pensato di utilizzare lo smartphone e far partire una video chiamata con Skype.
Installate Skype sul vostro pc (windows o mac) o sul vostro tablet (windows, android o apple) e registratevi.
Per effettuare una videochiamata abbiamo bisogno di due utenti. Create un secondo account su Skype e chiamatelo con il vostro primo account. In questo modo dallo schermo del nostro pc possiamo comandare il robot e vedere dove sta andando.
Buon divertimento!!!
P.S: attenzione il gioco può creare dipendenza!
Una volta realizzata il vostro Robot Wi-Fi, potete inviarmi le immagini o il video alla mail: puccimarco76@yahoo.it. Il materiale verrà pubblicato con i vostri contatti sul mio sito web e sulla pagina Facebook “Tutorial Arduino”.
Acquisti online
Di seguito alcuni link dove potete acquistare i vari componenti per realizzare WiFi robot.
WiFi shield – http://store.arduino.cc/product/A000058 – Consiglio di acquistare la Shield ufficiale di Arduino
per evitare problemi che ho riscontrato con altre Shield di marche differenti.
Motorini servo continui – http://store.arduino.cc/product/T010051 o in qualsiasi negozio di modellismo (ricordarsi di prendere quelli continui e non i 180°.
Ruote e base del robot – Negozi di modellismo, Brico, negozi cinesi, giocattoli del nipotino.
Ti è piaciuto il tutorial? Se ti va offrimi un caffè… [paypal-donation]
I tutorial sono liberamente scaricabili e condivisibili sotto l’etichetta Creative Commons (non è possibile commercializzarli e modificarli)
Scarica il Pdf del tutorial di Arduino “Robot WiFi”