Nei post precedenti vi ho presentato il primo assemblaggio e il programma di controllo C# del Rover 5 Bluetooth e oggi finalmente vedremo lo sketch Arduino e il test all’aperto.
Il codice per Arduino in realtà è molto semplice in quanto non ho montato sensori o servi quindi il programma non deve fare altro che leggere la porta seriale del socket bluetooth e comandare i motori.
I comandi del Rover 5 bluetooth
Per semplificare la comunicazione ho previsto 8 comandi per il movimento e 2 per un eventuale servo.
Ogni carattere ricevuto sulla seriale corrisponde ad un comando dove veloce corrisponde alla massima velocità dei motori, normale (circa meta del massimo) e lento (il minimo per garantire mobilità al rover):
- G – Avanti veloce
- F – Avanti normale
- f – Avanti lento
- N – Indietro veloce
- B – Avanti normale
- b – Avanti lento
- K – Sinistra veloce
- L – Sinistra normale
- l – Sinistra lento
- E – Destra veloce
- R – Destra normale
- r – Destra lento
- U – Servo su
- D – Servo giù
In origine avevo previsto di utilizzare una piccola webcam facilmente montabile su una squadretta per servi ma si è rivelata incompatibile con lo streaming e quindi ho utilizzato una classica Logitech C170 che però richiede qualche studio per essere mossa in verticale. Sarebbe utile anche una lente aggiuntiva grandangolare per migliorare la visibilità o un posizionamento diverso più in alto e arretrato ma mi sembra che risulti troppo esposta. Il video onboard è stato realizzato con GoPro (per fortuna) e senza il router montato. Nelle foto potete vedere la disposizione dei componenti.
Un paio di note a proposito dei vari fissaggi. Tutte le viti e colonnine sono provviste di ranelle in quanto il lexan utilizzato è relativamente delicato quindi tende a creparsi. Il vantaggio è che è facilmente tagliabile con il metodo del vetro. Basta incidere la forma desiderata e con un po’ di attenzione si riesce a rompere lungo queste linee proprio come il vetro. Angoli e spigoli vanno quindi rifiniti per ovvi motivi di sicurezza, sia vostra che dei cavi.
Il router è invece fissato con velcro 3M Dual Lock che si trova in strisce o pretagliato come quello dei telepass.
L’alimentazione del Rover 5 bluetooth
L’assemblaggio attuale prevede 2 batterie separate per arduino e router. Per quest’ultimo ho scelto una batteria 9V alloggiata in un portabatterie modificato con un regolatore di tensione, un 7805, e un cavo Mini USB B realizzato collegando solo i poli dell’alimentazione.
In rete si trovano diverse guide alla piedinatura delle USB tra cui questa di usbpinout.net
Dove il pin 1 è il positivo (+5v) e il pin 5 il negativo.
Lo sketch Arduino
Vediamo ora il programma Arduino:
// M2 int E_DX=5; int M_DX=4; // M1 int E_SX=6; int M_SX=7; #define VELOCITA_ALTA 255 #define VELOCITA_NORMALE 130 #define VELOCITA_BASSA 100 int val; void setup() { pinMode(M_DX,OUTPUT); pinMode(M_SX,OUTPUT); fermo(); Serial1.begin(9600); } void loop() { val=Serial1.read(); if(val!=-1) switch(val) { case 'S': default: fermo(); break; case 'G': avanti(VELOCITA_ALTA); break; case 'N': indietro(VELOCITA_ALTA); break; case 'K': sinistra(VELOCITA_ALTA); break; case 'E': destra(VELOCITA_ALTA); break; case 'F': avanti(VELOCITA_NORMALE); break; case 'f': avanti(VELOCITA_BASSA); break; case 'B': indietro(VELOCITA_NORMALE); break; case 'b': indietro(VELOCITA_BASSA); break; case 'L': sinistra(VELOCITA_NORMALE); break; case 'l': sinistra(VELOCITA_BASSA); break; case 'R': destra(VELOCITA_NORMALE); break; case 'r': destra(VELOCITA_BASSA); break; case 'U': // Camera Su break; case 'D': // Camera Giu break; } } void fermo() { analogWrite(E_DX,0); analogWrite(E_SX,0); } void avanti(int velocita) { digitalWrite(M_DX,HIGH); digitalWrite(M_SX,HIGH); analogWrite(E_DX,velocita); analogWrite(E_SX,velocita); } void indietro(int velocita) { digitalWrite(M_DX,LOW); digitalWrite(M_SX,LOW); analogWrite(E_DX,velocita); analogWrite(E_SX,velocita); } void destra(int velocita) { digitalWrite(M_DX,HIGH); digitalWrite(M_SX,LOW); analogWrite(E_DX,velocita); analogWrite(E_SX,velocita); } void sinistra(int velocita) { digitalWrite(M_DX,LOW); digitalWrite(M_SX,HIGH); analogWrite(E_DX,velocita); analogWrite(E_SX,velocita); }
Nelle prime righe troviamo le definizioni delle variabili per i pin utilizzati dal motor shield e le costanti per definire le 3 velocità dei motori.
Nel setup abbiamo l’inizializzazione dei pin M_DX e M_SX utilizzati per comunicare allo shield la direzione dei motori.
Subito dopo viene chiamata la funzione fermo() che, come dice il nome, imposta a zero la velocità del rover.
Alla riga 21 c’è l’inizializzazione della seriale 1, dedicata al socket xbee. Il baudrate deve essere quello settato sul modulo, nel mio caso è 9600 di default.
Nel loop non viene fatto altro che leggere e interpretare il valore di questa seriale.
L’istruzione switch permette di elencare i valori possibili di una variabile evitando di utilizzare if nidificate che renderebbero complicato e “brutto” il codice.
Dalla riga 93 troviamo la definizione delle funzioni per impostare la direzione dove il valore HIGH o LOW sui pin M indentifica la direzione e i valori da 0 a 255 sui pin E la velocità.
Questo, per il momento, è tutto. Nel prossimo post vi illustrerò la procedura per comandare questo Rover da un device Android.
5 commenti
Vai al modulo dei commenti
Ciao Mauro, complimenti davvero per gli ottimi articoli sempre molto interessanti!
Conosco da circa 2 anni la piattaforma Arduino e davvero mi ha aperto un mondo davanti!
Con Arduino ho implementato una stazione meteo che puoi vedere sul mio sito segnalato, e il monitoraggio dell’ impianto fotovoltaico di casa. Passo tutti i dati ad un database mysql e a dei grafici in tempo reale. In futuro grazie principalmente ai tuoi articoli proverò a realizzare un mezzo cingolato come descritto benissimo in queste pagine.
Grazie ancora
A presto!
Luca Serafini
ankamacha staff
http://ankamacha.altervista.org/index.html
Autore
Ciao Luca,
se ti va di postare tutto il progetto in una serie di articoli con le spiegazioni di sketch pagine web e tabelle MySql il blog è a disposizione e sono certo che tanti appassionati come te e me ne sarebbero felici.
Ciao Mauro, certo ottima idea! Appena troverò un pò di tempo scriverò con grande piacere una guida passo passo per la realizzazione di una stazione meteo simile alla mia. E’ anche un utile modo per fare ordine tra i miei tanti appunti sparsi ovunque!
Ciao a presto e continua cosi vai forte!
Luca
http://ankamacha.altervista.org/index.html
Ciao Mauro, vorrei sapere come funziona la webcam…
Come l’hai collegata e dove visualizzo le immagini ?
Grazie
Autore
Ciao Maurizio,
hai già letto gli altri articoli dedicati al Rover 5 BT?
Bruno l’ha descritto negli articoli precedenti in modo dettagliato.