Rover 5 BT: sketch e test

Rover 5 bluetooth

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.

Rover 5 bluetooth

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.

Rover 5 bluetooth

In rete si trovano diverse guide alla piedinatura delle USB tra cui questa di usbpinout.net

mini-usb-b-pinout

Dove il pin 1 è il positivo (+5v) e il pin 5 il negativo.

ATTENZIONE: questo tipo di connessione, se errato, rischia di bruciare il vostro router. Fate tutti i controlli del caso, doppi e tripli, verificando la correttezza dei collegamenti con un tester e confrontando i risultati con un cavo funzionante e sicuro prima di collegare il vostro.

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.

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/informatica/rover-5-bluethoot-sketch-e-test.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.