🧠 Introduzione
Dopo aver realizzato sistemi di monitoraggio, domotica e controllo via web, in questo progetto torniamo a un sistema completamente autonomo.
L’obiettivo è costruire un piccolo robot in grado di muoversi da solo ed evitare gli ostacoli utilizzando un sensore a ultrasuoni.
Il robot misura continuamente la distanza davanti a sé e decide automaticamente se andare avanti, fermarsi o cambiare direzione.
Questo tipo di comportamento è alla base di molti sistemi reali, come robot aspirapolvere, veicoli autonomi e sistemi di navigazione intelligente.
Questo progetto introduce anche un concetto molto importante: la logica decisionale automatica.
Dopo aver realizzato sistemi di monitoraggio, domotica e controllo via web, in questo progetto torniamo a un sistema completamente autonomo.
L’obiettivo è costruire un piccolo robot in grado di muoversi da solo ed evitare gli ostacoli utilizzando un sensore a ultrasuoni.
Il robot misura continuamente la distanza davanti a sé e decide automaticamente se andare avanti, fermarsi o cambiare direzione.
Questo tipo di comportamento è alla base di molti sistemi reali, come robot aspirapolvere, veicoli autonomi e sistemi di navigazione intelligente.
Questo progetto introduce anche un concetto molto importante: la logica decisionale automatica.
🧰 Materiale necessario
- Arduino UNO
- Sensore ultrasuoni HC-SR04
- Driver motori L298N
- 2 motori DC
- Telaio robot (opzionale ma consigliato)
- Batterie
- Cavi jumper
🛒 Componenti e risorse consigliate
👉 Kit Arduino consigliato: https://amzn.to/41fmFNK
💡 Con un solo kit puoi realizzare la maggior parte dei progetti presenti nel sito.
📚 I miei libri consigliati
👉 Arduino per tutti – Volume 1: https://amzn.to/4rGNxB9
👉 Arduino per tutti – Volume 2: https://amzn.to/4bkfaey
👉 Arduino per tutti – Volume 3: https://amzn.to/4bogjAg
👉 Kit Arduino consigliato: https://amzn.to/41fmFNK
💡 Con un solo kit puoi realizzare la maggior parte dei progetti presenti nel sito.
📚 I miei libri consigliati
👉 Arduino per tutti – Volume 1: https://amzn.to/4rGNxB9
👉 Arduino per tutti – Volume 2: https://amzn.to/4bkfaey
👉 Arduino per tutti – Volume 3: https://amzn.to/4bogjAg
🔌 Schema di collegamento
Sensore HC-SR04
Driver L298N
⚠️ Tutti i GND devono essere collegati insieme.
Sensore HC-SR04
- VCC → 5V Arduino
- GND → GND Arduino
- TRIG → Pin 9 Arduino
- ECHO → Pin 10 Arduino
Driver L298N
- IN1 → Pin 2 Arduino
- IN2 → Pin 3 Arduino
- IN3 → Pin 4 Arduino
- IN4 → Pin 5 Arduino
- OUT1 / OUT2 → Motore sinistro
- OUT3 / OUT4 → Motore destro
- 12V → Batteria
- GND → GND Arduino
⚠️ Tutti i GND devono essere collegati insieme.
📚 Librerie necessarie
Nessuna libreria esterna richiesta.
Nessuna libreria esterna richiesta.
💻 Codice Arduino
// ============================================
// Progetto 94 - Robot evita ostacoli
// Movimento automatico con ultrasuoni
// ============================================
int trigPin = 9;
int echoPin = 10;
// Pin motori
int in1 = 2;
int in2 = 3;
int in3 = 4;
int in4 = 5;
long durata;
int distanza;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Misura distanza
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
durata = pulseIn(echoPin, HIGH);
distanza = durata * 0.034 / 2;
Serial.println(distanza);
// Logica decisionale
if (distanza > 20) {
avanti();
} else {
ferma();
indietro();
delay(500);
gira();
delay(500);
}
delay(100);
}
// Movimento avanti
void avanti() {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
}
// Movimento indietro
void indietro() {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
}
// Stop motori
void ferma() {
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
// Rotazione
void gira() {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
}
// Progetto 94 - Robot evita ostacoli
// Movimento automatico con ultrasuoni
// ============================================
int trigPin = 9;
int echoPin = 10;
// Pin motori
int in1 = 2;
int in2 = 3;
int in3 = 4;
int in4 = 5;
long durata;
int distanza;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Misura distanza
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
durata = pulseIn(echoPin, HIGH);
distanza = durata * 0.034 / 2;
Serial.println(distanza);
// Logica decisionale
if (distanza > 20) {
avanti();
} else {
ferma();
indietro();
delay(500);
gira();
delay(500);
}
delay(100);
}
// Movimento avanti
void avanti() {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
}
// Movimento indietro
void indietro() {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
}
// Stop motori
void ferma() {
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
// Rotazione
void gira() {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
}
⚙️ Come funziona
Il sensore a ultrasuoni misura continuamente la distanza davanti al robot.
Se non ci sono ostacoli, il robot procede in avanti. Quando rileva un oggetto troppo vicino, si ferma, indietreggia e cambia direzione per evitare la collisione.
Questo comportamento crea un sistema autonomo capace di muoversi nell’ambiente senza intervento umano.
Il sensore a ultrasuoni misura continuamente la distanza davanti al robot.
Se non ci sono ostacoli, il robot procede in avanti. Quando rileva un oggetto troppo vicino, si ferma, indietreggia e cambia direzione per evitare la collisione.
Questo comportamento crea un sistema autonomo capace di muoversi nell’ambiente senza intervento umano.
🔁 Varianti possibili
- Servo per “guardare” a destra e sinistra
- Velocità variabile con PWM
- Sensori multipli
- Versione robot smart avanzato