LittleBOT – Stazione di controllo del robot

 

In precedenti articoli abbiamo descritto il robot Little BOT, con le sue caratteristiche. La prima versione del robot prevedeva il controllo tramite dei componenti montati sulla scheda di controllo rappresentata dalla ESPLORA. La stazione di controllo di Little BOT è formata dai seguenti componenti:

  • Scheda Arduino esplora con display TFT

  • Batteria Li-ion

  • Scheda caricabatteria/alimentazione con Batteria Li-ion

  • Cavi di collegamento

  • Modulo Bluetooth BlueSMiRF Silver

La diffusione degli smartphone ha portato alla possibilità di utilizzare quest’ultimo come dispositivo di comando. Vediamo come.

Funzioni della stazione di controllo

La stazione di controllo permette di comandare il robot e di mostrare i dati della telemetria forniti dai sensori posti sul robot.

Tramite la pressione dei tasti e l’azionamento del Joystick presenti sulla scheda Esplora è possibile:

  • Muovere il Servo frontale a destra, sinistra o cento
  • Muovere il robot nelle 4 direzioni
  • Richiedere la trasmissione telemetria.
  • Emissione di un Beep dal buzzer;
  • Accensione/spegnimento faro;
  • Accensione/spegnimento LED sul Modulo Arduino Nano.

Sul display sono mostrati i valori:

  • Tensione della batteria;
  • Temperatura tramite il Sensore LM35;
  • Distanza di un oggetto con sensore GP2D120X;
  • Valore della luminosità da fotoresistenza;

La stazione è alimentata tramite una batteria ricaricabile, mentre il dialogo con il robot è effettuato tramite un modulo bluetooth.

Arduino Esplora

La scheda utilizzata nella stazione di controllo del robot Little Bot è basata sulla scheda Arduino Esplora, con le seguenti caratteristiche:

  • Processore ATMEGA32U4 con bus a 8 bit prodotto dalla Atmel con architettura di tipo RISC, Velocità di clock 16 MHz, memoria Flash da 32 KB di cui 4 KB utilizzati dal bootloader, memoria EEPROM da 1KB, 20 porte Digital pin I / O, 12 Canali di ingresso analogici, 7 canali PWM, tensione di funzionamento 5V, 1 porta USB Full speed
  • Un joystick analogico a due assi (X e Y) con pulsante centrale
  • 4 pulsanti disposti a rombo
  • Un potenziometro lineare a cursore
  • Un microfono per rilevare il rumore ambientale.
  • Un sensore di luce per la misurazione dell’intensità luminosa
  • Un sensore per la misurazione della temperatura ambiente
  • Un accelerometro triassiale (X, Y e Z)
  • Un buzzer per produrre suoni
  • Un led luminoso a LED tipo RGB con elementi Rosso Verde e Blu.
  • 2 Ingressi per collegare i moduli sensore della serie Tinkerkit.
  • 2 uscite per collegare i moduli attuatori della serie Tinkerkit.
  • Un connettore per l’inserimento del display TFT a colori, dotato di uno slot per scheda SD
  • Per sfruttare le caratteristiche della scheda Arduino Esplora occorrerà dotarla del suo display LCD TFT.

 

Caratteristiche del display

Le caratteristiche principali del display sono:

  • lo schermo che misura 40x44mm circa e la presenza di uno slot micro-SD nella parte posteriore (non utilizzata nella presente applicazione) che è di tipo TFT (Thin Film Transistor).
  • La tecnologia TFT è  applicata ai display a cristalli liquidi (LCD) o OLED che vengono in questo modo, identificati come display a matrice attiva.

 

Il display TFT utilizzato è di tipo retroilluminato e misura 1,77″ di diagonale, con risoluzione di 160 x 128 pixel, per 262K colori. La gestione avviene tramite un’interfaccia SPI. I dati possono essere memorizzati all’interno della memoria RAM on-chip. La retroilluminazione del display è dimmerabile.

little BOT stazione controllo

homotix

Batteria Li-ion

La batteria di tipo Li-ion potrà essere di qualunque modello, per esempio quella commercializzato dalla Seeedstudio, (codice POW103C1P ) si tratta di una batteria da 3,7V 2000 mA.

little BOT stazione controllo

Scheda caricabatteria/alimentazione

Per caricare la batteria della stazione di controllo di Little Bot e fornire l’alimentazione alla scheda Arduino Esplora viene utilizzata una scheda Lipo Rider Pro ( prodotta dalla Seeed Studio ditta con sede a Shenzhen, China, creatrice di molti prodotti elettronici).
Ecco alcune caratteristiche della scheda:

  • Corrente massima del carico 1A;
  • Uscita stabile di 5V dalla presa USB indipendentemente dalla fonte;
  • Algoritmi di ricarica batteria integrati in chip di controllo;
  • Possibilità di carica della batteria tramite USB o pannello solare;
  • Indicazioni tramite led della carica della batteria o del suo completamento;
  • Indicazione tramite 4 led verdi dello stato di carica residua della batteria.

 

Come si può vedere nella foto sulla scheda sono identificabili tre sezioni tra loro dipendenti:

  • Power Supply;
  • Step-Up (Boost) Converter;
  • Battery Monitor.

 

Più alcuni connettori, un pulsante e un interruttore a levetta.

little BOT stazione controllo

Cavo di collegamento

Per la realizzazione del cavo di collegamento occorrono i seguenti componenti:

  • 2 connettori tipo MOLEX – 22-01-1032- Femmina 3 pin (Codice RS 687-7897);
  • 6 Terminali a crimpare, Femmina ,stagnato per cavo 22-28awg
  • 1 Pin strip femmina 6×1
  • 1 presa USB tipo A volante a saldare completa di guscio in plastica
  • Cavi di collegamento
  • Del tubo termo restringente

Con l’aiuto delle foto non dovrebbe essere difficile realizzare i collegamenti; per quanto riguarda la presa USB, il cavo rosso andrà saldato al pin 1 e il cavo nero al pin 4.

Per il collegamento del modulo bluetooth, il cavo giallo RX andrà inserito nel pin centrale del connettore collegato a OUT A, mentre il cavo bianco TX, andrà inserito nel pin centrale del connettore collegato a OUT B.

little BOT stazione controllo

Modulo Bluetooth BlueSMiRF Silver

Il modulo BlueSMiRF Silver è un modem wireless Bluetooth prodotto dalla SparkFun, basato sull’integrato BlueSMiRF-42 RN prodotto dalla ROVING Networks acquisita recentemente dalla Micochip.

Specifiche tecniche:

  • Approvazione FCC Classe 2 Bluetooth Modem Radio
  • Piccole dimensioni- 51.5×15.8×5.6mm
  • Collegamento molto robusto sia in integrità che come distanza di trasmissione (18m)
  • Hardy frequency hopping scheme – opera in ambienti RF come il Wi-Fi, 802.11g, e Zigbee
  • Connessione crittografata
  • Frequenza: 2.4 ~ 2,524 GHz
  • Tensione di funzionamento: 3.3V-6V
  • Comunicazione seriale: 2400-115200 bps
  • Temperatura di funzionamento: -40 ~ +70 C
  • Antenna integrata

Per ulteriori informazioni vedere l’apposita pagina

Dettagli del montaggio della scheda di controllo

little BOT stazione controllo

little BOT stazione controllo

little BOT stazione controllo

little BOT stazione controllo

Il codice utilizzato

Segue il codice caricato nella memoria della scheda Esplora

// caricamento librerie 
#include <SoftwareSerial.h>
#include <SPI.h>
#include <Esplora.h>
#include <TFT.h>

//Definizione variabile di servizio
int iBattVoltage = 0;
int dBattVoltage = 0;
char tensione1 [10];
int itemperatura = 0;
int dtemperatura = 0;
char temperatura1 [10];
char fotocellula1[10];
char distanza1[10];
boolean buttonStates[8];

SoftwareSerial mySerial(11, 3); // Definizione RX, TX per collegamento
// Modulo bluetooth 
/* 
 Questa matrice contiene i nomi dei pulsanti che sono letti. 
 Più tardi, nello sketch, questi nomi saranno usati con 
 il metodo Esplora.readButton (x), dove x è uno di questi pulsanti. 
 */

const byte buttons[] = {
  JOYSTICK_DOWN, // Indietro
  JOYSTICK_LEFT, // Sinistra
  JOYSTICK_UP,   // Avanti
  JOYSTICK_RIGHT,// Destra 
  SWITCH_RIGHT,  // Servo destra
  SWITCH_LEFT,   // Servo sinistra
  SWITCH_UP,     // Accende faro
  SWITCH_DOWN,   // Suono
};
/* 
 Questo array dice qaule carattere inviare a seconda 
 del tasto premuto.
 */
const char keystrokes[] = {
  '2', // Indietro
  '4', // Sinistra
  '8', // Avanti
  '6', // Destra
  'i', // Servo DX
  'p', // Servo Sx
  'k', // Gestione faro
  'q'  // Bip
};

// Impostazione del programma
void setup() {
  Serial.begin(115200);
  //Imposta il modulo BlueSMiRF SILVER come MASTER
  //e setta il numera MAC del ricevente slave
  mySerial.begin(115200);
  mySerial.print("$");
  mySerial.print("$");
  mySerial.print("$");
  delay(100);
  mySerial.println("SM,1");  
  delay(100);
  //inserire il codice MAC del modulo Slave
  mySerial.println("C,000666644021");
  delay(100);
  mySerial.println("U,9600,N");  // Cambia temporaneamente il baudrate a 9600, no parity
  mySerial.println("---"); //Uscita command mode
  delay (300);
  mySerial.begin(9600);  // Reinizializza la seriale bluetooth 9600
  delay (300);
  //------------------- 
  Esplora.tone(500, 150);
  mySerial.setTimeout(200);
  EsploraTFT.begin();
  EsploraTFT.background(0,0,0); //sfondo nero
  EsploraTFT.setTextSize(2);
  EsploraTFT.stroke(0,255,0); //colore del testo verde
  EsploraTFT.text("Comando Robot",0,0);
  EsploraTFT.stroke(255,0,0); //colore del testo rosso
  EsploraTFT.text("LittleBot",25,25);
  EsploraTFT.setTextSize(1);
  EsploraTFT.stroke(255,255,255); //colore del testo bianco
  EsploraTFT.text("By adrirobot - ver. 1.0",10,45);
  EsploraTFT.stroke(0,255,255); //colore del testo cyano
  EsploraTFT.text("JOYSTICK  -Direzione",0,80);
  EsploraTFT.text("SWITCH 1  -Accensione faro",0,90);
  EsploraTFT.text("SWITCH 2-4-SX-DX Servo",0,100);
  EsploraTFT.text("SWITCH 3  -Emissione suono",0,110);
  Esplora.tone(500, 150);
  delay (2000); //pausa per mostrare i comandi
  EsploraTFT.stroke(0,0,0);
  EsploraTFT.fill(0,0,0);
  EsploraTFT.rect(0,80, 200, 7); //Cancellazione valore
  EsploraTFT.rect(0,90, 200, 7);
  EsploraTFT.rect(0,100, 200, 7);
  EsploraTFT.rect(0,110, 200, 7);
  EsploraTFT.setTextSize(2);
  EsploraTFT.stroke(0,255,255); //colore del testo ciano
  EsploraTFT.text("Telemetria",20,60);   
  EsploraTFT.setTextSize(1);
  EsploraTFT.stroke(0,255,0); //colore del testo verde
  EsploraTFT.text("Batteria    :",0,90);
  EsploraTFT.text("Luminosita' :",0,100);
  EsploraTFT.text("Temperatura :",0,110);
  EsploraTFT.text("Distanza    :",0,120);
  Esplora.tone(800, 300);
}
/*
 Dopo che il setup () è finito, questo codice viene eseguito in modo continuo. 
 Qui controlliamo costantemente lo stato dei pulsanti e del Joystik.
 */
void loop() // LOOP di lettura tasti e invio carattere
{ 
  // Lettura pulsanti:
  for (byte thisButton=0; thisButton<8; thisButton++) {
    boolean lastState = buttonStates[thisButton];
    boolean newState = Esplora.readButton(buttons[thisButton]);
    if (lastState != newState) { // Il tasto è cambiato!
      /* 
  La biblioteca Keyboard consente di di riconoscere "pressione" e "rilascio"
  dei tasti come due azioni distinte. Queste azioni possono essere 
  legati ai pulsanti che stiamo azionando.
       */
      if (newState == PRESSED) {
        mySerial.print(keystrokes[thisButton]);
      }
      else if (newState == RELEASED) {
        mySerial.print("0") ;
      }
    }
    // Memorizza il nuovo stato del pulsante, in modo da poter percepire successivamente la differenza
    buttonStates[thisButton] = newState;
    telemetria (); //stampa telemetria su display
  }
  delay(50); //Leggera attesa tra un controllo e l'altro. 
}

void telemetria ()        
{
  while (mySerial.available()) {
    //Lettura valori
    int BatteryValue = mySerial.parseInt();
    Serial.print("Tensione batteria letta: ");
    Serial.println(BatteryValue);

    int luce = mySerial.parseInt(); 
    Serial.print("Luce: ");
    Serial.println(luce);

    int temperatura = mySerial.parseInt(); 
    Serial.print("Temperatura: ");
    Serial.println(temperatura);

    int distanza = mySerial.parseInt(); 
    Serial.print("Distanza: ");
    Serial.println(distanza);

    int ddd = mySerial.parseInt(); 
    //Preparazione valori per stampa su display
    //Tensione batteria Robot
    float fBattVoltage = (BatteryValue/10.0);
    iBattVoltage = (int)fBattVoltage; // Unita' valore della tensione
    dBattVoltage = (fBattVoltage-iBattVoltage)*10; // Decimali valore della tensione
    sprintf(tensione1,"%d.%dV",iBattVoltage,dBattVoltage);
    //Valore luminosita'
    sprintf(fotocellula1,"%d",luce);
    //Valore temperatura
    float ftemperatura = ((temperatura/10.0)-5);
    itemperatura = (int)ftemperatura; // Unita' valore della tensione
    dtemperatura = (ftemperatura-itemperatura)*10; // Decimali valore della tensione
    sprintf(temperatura1,"%d.%d C",itemperatura,dtemperatura);
    //Valore distanza
    //  char distanzaStr[5]; //Asseganzione a char
    sprintf(distanza1,"%d cm",distanza);
    //Stampa valori su display
    EsploraTFT.stroke(0,0,0);//colore nero
    EsploraTFT.fill(0,0,0);
    EsploraTFT.rect(100,90, 40, 7); //Cancellazione valore
    EsploraTFT.rect(100,100, 40, 7);
    EsploraTFT.rect(100,110, 40, 7);
    EsploraTFT.rect(100,120, 40, 7);
    EsploraTFT.stroke(255,255,0); //colore del testo giallo
    EsploraTFT.text(tensione1, 100, 90); 
    EsploraTFT.text(fotocellula1, 100, 100);  
    EsploraTFT.text(temperatura1,100,110);
    EsploraTFT.text(distanza1,100,120);
    Esplora.tone(800, 150); // Dati completati
  }
}

Articolo pubblicato su Elettronica Open Source

La stazione di controllo descritta in questo articolo è stata oggetto di un articolo più completo pubblicato sul Blog Elettronica Open Source con cui ho collaborato e scritto molti articoli.

Filmato illustrativo

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.