16

ArduBot Simo: Arduino robot multi-funzione

Dopo quasi due mesi di lavoro ho terminato il mio progetto che vado ora a presentarvi.

 

 

Ho realizzato un robot rover a 2 ruote motrici programmato con Arduino e con una struttura in legno, plastica e qualche pezzo d’acciaio.

Ho dipinto il tutto con uno smalto blu zaffiro brillante.

Ho posizionato 2 interruttori laterali, uno per Arduino e uno per la Motor Shield.

Una volta acceso Arduino i due servomotori frontali posizionano il sensore Ultrasonic HC-SR04 frontalmente.

 

Robot completo

Robot completo

 

Il robot ha due modalità: una manuale e una automatica. Si passa da una all’altra e si pilota il robot tramite una applicazione Android “Arduino Bluetooth Controller” (si può scaricare gratuitamente dal Google Play) e utilizzando un modulo bluetooth HC-06 collegato ad Arduino.

L’applicazione in questione è molto versatile e si può adattare a molti progetti.

 

Inizialmente si deve connettere il bluetooth del dispositivo e collegarlo tramite l’applicazione ad Arduino.

 

Settiamo i vari comandi. Infine scegliamo come comandare il robot.

 

MODALITA’ MANUALE

La modalità manuale si può usare con un controller in stile playstation.

modalità manuale

modalità manuale

 

Oppure si può sfruttare l’accelerometro del dispositivo Android.

 

modalità manuale con accelerometro

modalità manuale con accelerometro

 

Nella modalità manuale gli ostacoli ovviamente non vengono rilevati e si usa il robot come un macchina radiocomandata. Inoltre ho aggiunto 5 led bianchi superbright che si accendono quando il livello della luce è basso.

Ciascun led si accende ogni 3 ms ma l’occhio umano non vede tale passaggio e quindi a causa della persistenza della visione sembrano accesi tutti e 5 contemporaneamente.

La luce è elevata e quindi si può dirigere il robot anche in una situazione di buio totale.

luci automatiche

luci automatiche

 

MODALITA’ AUTOMATICA

Alla modalità automatica si passa sempre tramite l’applicazione.

In questa modalità vengono sfruttati vari sensori per permettere al robot di muoversi autonomamente, rilevando ostacoli frontali, laterali e i bordi come scalini o un’area bianca e nera.

Attiviamo la modalità automatica dalla nostra applicazione Android.

modalità automatica attiva

modalità automatica attiva

 

In questa modalità ho aggiunto varie funzionalità. Innanzitutto i 3 sensori IR posizionati sotto il robot rilevano il pavimento e il robot può così navigare in sicurezza senza rischiare di casere da bordi, scale o uscire da aree bianco e nere.

IMG_20140918_210256

 

Il sensore Ultrasonic HC-SR04 controlla gli ostacoli frontali e quando essi sono a circa 30 cm il robot si ferma, grazie ai due servomotori si guarda intorno e decide da che parte girarsi.

Inizialmente a volte capitava che si bloccasse in un angolo e impiegasse parecchio tempo ad uscire da tale situazione. Ho pensato allora di non fare effettuare una rotazione di un tempo fisso ma casuale. Il robot quindi ruota per 200 ms più un tempo casuale compreso tra 0 e 500 ms così da rendere impossibile il problema dell’angolo.

IMG_20140918_210551

sensorie Ultrasonic HC-SR04

 

Ogni volta che viene rilevato un ostacolo si accende un led blu superbright posteriore posizionato su una struttura simile ad un lampioncino e, grazie al cappuccio in plastica opaca e spessa, la luce del led si propaga su tutta la superficie della plastica per dare una luce quasi uniforme.

DSC_0127 DSC_0126 IMG_20140918_210537

 

Un altro problema riscontrato riguarda la geometria del robot. La forma scelta per la sua costruzione gli impediva di effettuare rotazioni una volta che si era attaccato ad un muro parallelamente.

Ho pensato di risolvere il problema inserendo altri due sensori IR che controllassero la distanza dagli oggetti laterali e, una volta rilevato un ostacolo a meno di circa 5 cm, il motore opposto all’ostacolo rilevato comincia a decrementare la propria velocità fino a che l’ostacolo non viene più rilevato. In questo modo il robot si allontana dai muri e non rischia di attaccarcisi. Così come altri ostacoli.

 

sensore per ostacoli laterali

sensore per ostacoli laterali

 

DISPLAY

Sulla parte superiore del robot ho posizionato un display retroilluminato blu che mostra dati come temperatura, livello di luce e altro ad intervalli regolari.

IMG_20140918_210514 IMG_20140918_210508

 

 

I sensori per rilevare la temperatura e la luce sono sulla parte superiore del robot.

sensori per luce e temperatura

sensori per luce e temperatura

 

MODALITA’ TERMINALE

L’applicazione Android può anche essere utilizzata come terminale.

DSC_0135

 

VIDEO DIMOSTRATIVO, CODICE e CIRCUITO

Il codice dello sketch può essere scaricato cliccando qui sotto, nello stesso file troverete anche lo schema del circuito.

 

Qui sotto il video dimostrativo:

 

N.B. E’ necessaria la libreria da me modificata per le funzioni di base del motore. Si può scaricare da qui sotto.

Librerie AFMotor di Motor Shield Adafruit + RobotMotorFunction per le funzioni principali dei motori
13.2 KiB
1797 Downloads
Dettagli

 

 

 

IDEE DEI LETTORI

Hai realizzato un tuo progetto seguendo le idee/consigli/guide di questo mio ArduBot? Comunicamelo e sarà felice di condividere le tue foto o il tuo progetto.

Mario

Ecco il progetto del lettore Mario. Davvero interessante la sua versione di rover cingolato. Bel lavoro!

Il progetto del rover cingolato del lettore Mario

Il progetto del rover cingolato del lettore Mario

 

Una nota che devo a lui:

Se anche tu hai la motor shield e uno dei due motori non dovesse girare allora potresti provare a cambiare parte del codice delle librerie in:

 

AF_DCMotor motors[] = {

               AF_DCMotor(1, MOTOR34_2KHZ), // left is Motor #1

               AF_DCMotor(2, MOTOR34_1KHZ)  // right is Motor #2

};
Lui ha cambiato il valore in rosso, prima c’era 1KHZ. La scheda accetta 2KHZ,8,16, eccetera. Quindi prova anche tu se non funziona.

 

Share This:

Simone

Studente Data di nascita: 12/07/1990 - Parma, IT Hobbies: Informatica, acquariofilia, viaggi, tecnologia, aria aperta, sport, web.

16 Comments

  1. Bel progetto, complimenti.
    Simone per l’alimentazione cosa hai usato?
    Antonio

    • Grazie Antonio!
      Per l’alimentazione se non vado errato (è passato un po’ di tempo) ho usato una pila da 9V per alimemtare Arduino e 4 pile stilo per i motori.. Tornando indietro però alimenterei in modo diverso Arduino perché, con tutti quei sensori, la pila durava davvero poco

  2. Ciao Simone!!
    Bellisimo progetto, mi è piaciuto tanto e io sto realizzando un cingolato un po’ particolare… vorrei chiederti una cosa: se volessi avere il cingolato con sensori che semplicemente avvisino quando c’è un ostacolo ma che non gli facciano cambiare direzione, cosa dovrei tagliare del tuo sketch a dir poco perfetto? ^^
    Grazie

    • Ciao Edoardo!
      Grazie dei complimenti. Purtroppo è passato un po’ di tempo da quando ho terminato questo progetto e non saprei dirti al dettaglio cosa dover togliere (parlando di codice). In ogni caso ti posso consigliare di vedere questo articolo.
      Nell’articolo che ti ho linkato si vede come realizzare un robot con il solo controllo degli ostacolo + movimento per evitarli. Potresti partire da questo sketch quindi e togliere la parte relativa al cambio di direzione.

      • ok no problem, proverò a controllare lì… 🙂
        altra cosa, posso farlo con qualsiasi motore DC? Perchè necessiterei di qualche motore più grande rispetto ai soliti frullatori da macchinina radiocomandata haha

        • Be ci sono dei limiti. Devi vedere i limiti della motor shield che usi (se la usi), dovrai poi mettere delle batterie adeguate e, se la tensione applicata per i motori supera quella accettata da Arduino, dovrai alimentare separatamente motori e Arduino (le motor shield lo permettono facilmente ed è comunque una cosa consigliata, anche perchè i pin di Arduino non possono gestire troppa corrente)

  3. Ciao Simone,
    complimenti innanzitutto per il progetto.
    Vorrei chiederti aiuto con un problema che ho avuto lanciando il programma che hai scritto.

    ROBOT_SIMO_COMPLETO3:40: error: ‘A12’ was not declared in this scope
    const int inPin = A12;
    ^
    ROBOT_SIMO_COMPLETO3:41: error: ‘A15’ was not declared in this scope
    const int inLux = A15;
    ^
    exit status 1
    ‘A12’ was not declared in this scope

    Sai come risolvere questa situazione?
    grazie

  4. Ciao, come hai fatto per fare due modalità? Anche io avevo pensato a mettere la modalità radiocomandata e quella “automatica”

    • Ciao Lorenzo, per le due modalità ho fatto in questo modo:
      Sfruttando la app Android ho associato due comandi differenti al tasto “auto” e al tasto “manuale”. E ad ogni ciclo viene controllato il comando inviato. Questo avvia una o l’altra modalità. Una volta attiva una di esse, il robot interpreta correttamente altri comandi (in modalità manuale) per le varie direzioni

  5. ciao siamone, sto realizzando anche io questo robot uguale al tuo ma c’è un problema… quando carico il codice:Arduino:1.8.4 (Windows 8.1), Scheda:”Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)”

    C:\Users\Giorgio\AppData\Local\Temp\arduino_modified_sketch_527646\ROBOT_SIMO_COMPLETO3.ino:33:28: fatal error: robotConstants.h: No such file or directory

    #include

    ^

    compilation terminated.

    exit status 1
    Errore durante la compilazione per la scheda Arduino/Genuino Mega or Mega 2560.

    Questo report potrebbe essere più ricco di informazioni abilitando l’opzione
    “Mostra un output dettagliato durante la compilazione”
    in “File -> Impostazioni”

    • Ciao scusa il ritardo. Il problema mi sembra sia riconducibile al fatto che non hai importato tutti i file. Le librerie vanno messe nella cartella libraries. Mentre tutti i file .ino e .h vanno messi nella stessa cartella del progetto.
      Hai scaricato tutto il progetto? Il file che dici è disponibile. Soprattutto a vedere il percorso sembra che tu stia cercando di aprire il file direttamente dal file compresso. Dovresti scomprimere la cartella e copiare le librerie nella cartella libraries dell’IDE di Arduino

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *