Ultima modifica il 10 Agosto 2026 by Adriano
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.
Indice
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.

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.

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.

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.




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
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 (100);
mySerial.begin(9600); // Reinizializza la seriale bluetooth 9600
delay (100);
//-------------------
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()>1) {
//Lettura valori
int BatteryValue = mySerial.parseInt();
int luce = mySerial.parseInt();
int temperatura = mySerial.parseInt();
int distanza = mySerial.parseInt();
int www = mySerial.parseInt();//valore non utilizzato
//Preparazione valori per stampa su display
//Tensione batteria Robot
float fBattVoltage = ((BatteryValue/10.0)-5);
iBattVoltage = (int)fBattVoltage; // Unita' valore della tensione
dBattVoltage = (fBattVoltage-iBattVoltage)*10; // Decimali valore della tensione
sprintf(tensione1,"%d.%d V",iBattVoltage,dBattVoltage);
Serial.print("Tensione batteria: ");
Serial.println(tensione1);
//Valore luminosita'
sprintf(fotocellula1,"%d",luce);
Serial.print("Valore Luce: ");
Serial.println(fotocellula1);
//Valore temperatura
float ftemperatura = (temperatura/10.0);
itemperatura = (int)ftemperatura; // Unita' valore della tensione
dtemperatura = (ftemperatura-itemperatura)*10; // Decimali valore della tensione
sprintf(temperatura1,"%d.%d C",itemperatura,dtemperatura);
Serial.print("Temperatura: ");
Serial.println(temperatura1);
//Valore distanza
// char distanzaStr[5]; //Asseganzione a char
sprintf(distanza1,"%d cm",distanza);
Serial.print("Distanza: ");
Serial.println(distanza1);
//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.








