Costruire un robot con Arduino, Raspberry
Pi o ESP32
Guida pratica in PDF per realizzare un piccolo rover 2WD: materiali, cablaggio, codice base,
varianti e sicurezza.
Obiettivo: costruire un robot a due ruote capace di muoversi avanti, indietro, girare e, in una seconda fase,
evitare ostacoli con un sensore a ultrasuoni.
Scelta consigliata per iniziare: Arduino UNO o Nano. E piu semplice, costa meno, si accende subito e gestisce
bene motori e sensori. Raspberry Pi e migliore se vuoi telecamera, Wi-Fi, Python, visione artificiale o AI, ma
richiede piu attenzione nell alimentazione.
1. Quale scheda scegliere
Scheda Quando conviene Pro Contro
Arduino UNO/Nano Primo robot, sensori, motori Semplice, economico, tanti Poco adatto a video/AI
DC, line follower tutorial, avvio immediato
Raspberry Pi Robot con camera, streaming, Computer completo, Wi-Fi, Piu costoso, alimentazione piu
controllo da telefono, Python USB, Linux delicata; non collegare motori
direttamente ai GPIO
ESP32 Robot economico con Piccolo, potente, wireless, Meno immediato di Arduino per
Wi-Fi/Bluetooth integrato costa poco principianti assoluti
2. Progetto consigliato: rover 2WD base
Il robot piu semplice e affidabile e un rover 2WD: due motori laterali, due ruote motrici e una ruota folle/caster
davanti o dietro. Sterza variando la velocita o il verso dei due motori: entrambi avanti = avanza; motore
sinistro avanti e destro indietro = ruota su se stesso.
Materiali minimi
Componente Quantita Note
Arduino UNO/Nano oppure Raspberry 1 Arduino consigliato per la prima build
Pi/ESP32
Chassis 2WD 1 In plastica, acrilico, legno sottile o stampa 3D
Motori DC con riduttore + ruote 2 Tipicamente 3-6 V o 6-12 V
Driver motori L298N o TB6612FNG 1 TB6612FNG e piu efficiente; L298N e piu comune
Portabatterie 1 4xAA/6xAA o pacco Li-ion con regolatore
Cavi jumper Dupont 1 set Maschio-femmina e maschio-maschio
Interruttore 1 Consigliato tra batterie e driver
Sensore ultrasuoni HC-SR04 1 opzionale Per evitare ostacoli
Power bank 1 opzionale Utile per Raspberry Pi
3. Regole di sicurezza elettrica
Non alimentare i motori direttamente dalla scheda: i motori assorbono picchi di corrente che possono
danneggiare Arduino, ESP32 o Raspberry Pi. Usa sempre un driver motori. Sul Raspberry Pi, in particolare, i
Guida robot Arduino/Raspberry Pi - uso didattico Pagina 1
GPIO sono pin logici e non devono pilotare direttamente carichi come motori.
Tutte le masse devono essere in comune: GND della scheda, GND del driver motori e negativo delle batterie
devono essere collegati tra loro. Senza massa comune, i segnali di controllo possono diventare instabili.
Controlla la tensione del driver e dei motori. Se i motori sono da 6 V, non alimentarli a 12 V salvo che tu sappia
esattamente cosa stai facendo. Inserisci un interruttore generale e scollega le batterie quando modifichi i
collegamenti.
4. Versione Arduino - cablaggio semplice con L298N
Collegamenti
Arduino L298N Funzione
D5 ENA Velocita motore A PWM
D7 IN1 Direzione motore A
D8 IN2 Direzione motore A
D6 ENB Velocita motore B PWM
D9 IN3 Direzione motore B
D10 IN4 Direzione motore B
GND GND Massa comune
Batteria + +12V / VMOT Alimentazione motori, in base al tuo modulo
Motore sinistro OUT1-OUT2 Uscita motore A
Motore destro OUT3-OUT4 Uscita motore B
Nota: su molti moduli L298N il pin +5V puo essere ingresso o uscita a seconda del jumper 5V-EN. Leggi la
serigrafia del tuo modulo. Per iniziare, alimenta Arduino separatamente via USB e usa la batteria solo per i
motori, mantenendo GND comune.
Codice Arduino base
// Rover 2WD con Arduino + L298N
const int ENA = 5;
const int IN1 = 7;
const int IN2 = 8;
const int ENB = 6;
const int IN3 = 9;
const int IN4 = 10;
void setup() {
pinMode(ENA, OUTPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT);
pinMode(ENB, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT);
}
void motorA(int speed) { // speed da -255 a 255
if (speed >= 0) { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); }
else { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); speed = -speed; }
analogWrite(ENA, constrain(speed, 0, 255));
}
void motorB(int speed) {
if (speed >= 0) { digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); }
else { digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); speed = -speed; }
analogWrite(ENB, constrain(speed, 0, 255));
}
void stopMotors() { motorA(0); motorB(0); }
void loop() {
motorA(180); motorB(180); // avanti
delay(1500);
stopMotors(); delay(400);
Guida robot Arduino/Raspberry Pi - uso didattico Pagina 2
motorA(-170); motorB(170); // gira su se stesso
delay(700);
stopMotors(); delay(400);
motorA(-160); motorB(-160); // indietro
delay(1000);
stopMotors(); delay(1000);
}
5. Aggiungere il sensore ultrasuoni HC-SR04
Il sensore HC-SR04 misura la distanza inviando un impulso acustico e leggendo il tempo di ritorno. Con
Arduino e semplice: TRIG a un pin digitale, ECHO a un altro pin digitale. Con Raspberry Pi serve attenzione
perche ECHO lavora spesso a 5 V mentre i GPIO del Pi sono a 3,3 V: usa un partitore resistivo o un
adattatore di livello.
HC-SR04 Arduino Nota
VCC 5V Alimentazione sensore
GND GND Massa comune
TRIG D12 Invio impulso
ECHO D11 Lettura impulso
Codice Arduino con evitamento ostacoli
const int TRIG = 12;
const int ECHO = 11;
const int ENA = 5, IN1 = 7, IN2 = 8;
const int ENB = 6, IN3 = 9, IN4 = 10;
long distanzaCm() {
digitalWrite(TRIG, LOW); delayMicroseconds(2);
digitalWrite(TRIG, HIGH); delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long durata = pulseIn(ECHO, HIGH, 25000);
if (durata == 0) return 999;
return durata / 58;
}
void motorA(int s) {
if (s >= 0) {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
} else {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
s = -s;
}
analogWrite(ENA, constrain(s, 0, 255));
}
void motorB(int s) {
if (s >= 0) {
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
} else {
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
s = -s;
}
analogWrite(ENB, constrain(s, 0, 255));
}
void stopMotors() {
motorA(0);
motorB(0);
}
void setup(){
pinMode(TRIG, OUTPUT); pinMode(ECHO, INPUT);
Guida robot Arduino/Raspberry Pi - uso didattico Pagina 3
pinMode(ENA,OUTPUT); pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT);
pinMode(ENB,OUTPUT); pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT);
}
void loop(){
long d = distanzaCm();
if (d > 20) { motorA(170); motorB(170); }
else {
stopMotors(); delay(200);
motorA(-160); motorB(-160); delay(400);
motorA(-170); motorB(170); delay(550);
}
}
6. Versione Raspberry Pi - quando conviene
Raspberry Pi conviene se vuoi programmare in Python, usare una camera, fare streaming video, controllo via
browser, riconoscimento immagini o piccoli modelli AI. Per un robot puramente meccanico e di movimento,
Arduino e spesso piu robusto e semplice.
Schema logico Raspberry Pi
Il Raspberry Pi invia segnali logici al driver motori; il driver alimenta i motori con una batteria separata. Il Pi
puo essere alimentato da power bank USB-C. Non usare il pin 5V del Pi per alimentare direttamente motori
DC.
Raspberry Pi GPIO Driver motori Funzione
GPIO 17 IN1 Direzione motore A
GPIO 27 IN2 Direzione motore A
GPIO 22 IN3 Direzione motore B
GPIO 23 IN4 Direzione motore B
GND GND Massa comune
Batteria motori VMOT/+12V Potenza per motori
Codice Python base con gpiozero
# Raspberry Pi + driver motori: esempio concettuale con gpiozero
# Installa/usa Raspberry Pi OS. Esegui: python3 [Link]
from gpiozero import Robot
from time import sleep
robot = Robot(left=(17, 27), right=(22, 23))
[Link](speed=0.6)
sleep(1.5)
[Link]()
sleep(0.5)
[Link](speed=0.6)
sleep(0.7)
[Link]()
sleep(0.5)
[Link](speed=0.5)
sleep(1.0)
[Link]()
7. Versione ESP32 - economica e wireless
ESP32 e una buona via di mezzo: costa poco, ha Wi-Fi e Bluetooth integrati e puo comandare un driver
motori. E ottimo se vuoi controllare il robot da telefono tramite una piccola pagina web locale. Per un primo
robot assoluto, pero, Arduino rimane piu facile; per un robot con video, meglio Raspberry Pi.
Guida robot Arduino/Raspberry Pi - uso didattico Pagina 4
8. Montaggio meccanico passo passo
1) Fissa i due motoriduttori ai lati del telaio. 2) Monta le ruote sui motori. 3) Aggiungi la ruota folle davanti o
dietro. 4) Posiziona il portabatterie in basso e centrale per abbassare il baricentro. 5) Fissa
Arduino/Raspberry/ESP32 con distanziali o biadesivo forte. 6) Fissa il driver motori vicino ai motori per tenere
corti i cavi di potenza. 7) Collega prima i motori al driver, poi alimentazione, infine segnali. 8) Carica un codice
di prova lento, senza sensori, e verifica il verso delle ruote.
9. Problemi comuni
Problema Causa probabile Soluzione
Il robot non si muove Manca alimentazione motori o GND Controlla batteria, interruttore, GND tra scheda e
comune driver
Una ruota gira al contrario Cavi motore invertiti Inverti OUT1/OUT2 o cambia HIGH/LOW nel
codice
Arduino si riavvia Motori assorbono troppo dalla stessa Alimenta motori separatamente e mantieni GND
alimentazione comune
Raspberry Pi si spegne Power bank insufficiente o calo tensione Usa alimentatore/power bank adeguato e separa
motori
Sensore ultrasuoni legge Eco instabile, superfici assorbenti o Prova distanza maggiore, cavi corti, partitore su
male tensione errata Raspberry Pi
10. Evoluzioni possibili
Dopo il primo movimento puoi aggiungere: controllo Bluetooth/Wi-Fi, sensore di linea IR, sensore ultrasuoni
su servomotore, camera Raspberry Pi, telaio stampato in 3D, encoder sulle ruote, batteria ricaricabile con
modulo di protezione, pulsante di emergenza, buzzer e LED di stato.
11. Fonti utili e manuali online
Questa guida e pensata come traccia pratica. Per i dettagli elettrici del tuo modello specifico controlla sempre
il datasheet o la documentazione ufficiale della scheda e del driver motori.
Fonti consigliate: documentazione Arduino per il controllo dei motori con Motor Shield Rev3; documentazione
Raspberry Pi su GPIO e GPIO Zero; progetto ufficiale Raspberry Pi “Build a robot buggy”; Raspberry Pi
Official Magazine per guide PDF gratuite su Arduino e progetti robotici.
Link utili: [Link] - [Link] - [Link] -
[Link]
Conclusione
Per partire spendendo poco e imparando davvero, costruisci prima la versione Arduino 2WD con
L298N/TB6612FNG e codice base. Quando il movimento e stabile, aggiungi il sensore ultrasuoni. Solo dopo
passa a Raspberry Pi se vuoi telecamera, controllo remoto o funzioni intelligenti.
Guida robot Arduino/Raspberry Pi - uso didattico Pagina 5