🧠 Introduzione
Nel progetto precedente abbiamo realizzato un robot in grado di evitare ostacoli muovendosi in modo automatico. Tuttavia, il sistema prendeva decisioni basate solo su ciò che si trovava direttamente davanti a sé.
In questo progetto facciamo un grande passo avanti: il robot diventa più intelligente grazie all’utilizzo di un servo motore che permette al sensore a ultrasuoni di ruotare e analizzare l’ambiente circostante.
Il robot sarà quindi in grado di “guardare” a destra e a sinistra prima di decidere dove andare, scegliendo la direzione con più spazio libero. Questo comportamento è molto più simile a quello dei robot reali e introduce una logica decisionale più avanzata.
Questo tipo di sistema è utilizzato in robot autonomi, veicoli intelligenti e sistemi di navigazione robotica.
Nel progetto precedente abbiamo realizzato un robot in grado di evitare ostacoli muovendosi in modo automatico. Tuttavia, il sistema prendeva decisioni basate solo su ciò che si trovava direttamente davanti a sé.
In questo progetto facciamo un grande passo avanti: il robot diventa più intelligente grazie all’utilizzo di un servo motore che permette al sensore a ultrasuoni di ruotare e analizzare l’ambiente circostante.
Il robot sarà quindi in grado di “guardare” a destra e a sinistra prima di decidere dove andare, scegliendo la direzione con più spazio libero. Questo comportamento è molto più simile a quello dei robot reali e introduce una logica decisionale più avanzata.
Questo tipo di sistema è utilizzato in robot autonomi, veicoli intelligenti e sistemi di navigazione robotica.
🧰 Materiale necessario
- Arduino UNO
- Sensore ultrasuoni HC-SR04
- Servo motore SG90
- Driver motori L298N
- 2 motori DC
- Telaio robot (opzionale)
- 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
Servo motore
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
Servo motore
- Rosso → 5V Arduino
- Marrone → GND Arduino
- Arancione → Pin 6 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
- Alimentazione esterna → Batterie
⚠️ Tutti i GND devono essere collegati insieme.
📚 Librerie necessarie
- Servo.h (già inclusa nell’IDE Arduino)
💻 Codice Arduino
// ============================================
// Progetto 95 - Robot radar intelligente
// Evita ostacoli guardando a destra e sinistra
// ============================================
#include <Servo.h>
Servo servo;
int trigPin = 9;
int echoPin = 10;
// 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);
servo.attach(6); // collegamento servo
Serial.begin(9600);
}
// Funzione misura distanza
int misuraDistanza() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long durata = pulseIn(echoPin, HIGH);
return durata * 0.034 / 2;
}
void loop() {
servo.write(90); // guarda avanti
delay(300);
int front = misuraDistanza();
if (front > 20) {
avanti();
} else {
ferma();
// guarda a destra
servo.write(0);
delay(400);
int destra = misuraDistanza();
// guarda a sinistra
servo.write(180);
delay(400);
int sinistra = misuraDistanza();
// ritorna al centro
servo.write(90);
delay(300);
// decide dove andare
if (destra > sinistra) {
giraDestra();
} else {
giraSinistra();
}
delay(500);
}
}
// Movimento avanti
void avanti() {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
}
// Stop
void ferma() {
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
// Rotazione destra
void giraDestra() {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
}
// Rotazione sinistra
void giraSinistra() {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
}
// Progetto 95 - Robot radar intelligente
// Evita ostacoli guardando a destra e sinistra
// ============================================
#include <Servo.h>
Servo servo;
int trigPin = 9;
int echoPin = 10;
// 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);
servo.attach(6); // collegamento servo
Serial.begin(9600);
}
// Funzione misura distanza
int misuraDistanza() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long durata = pulseIn(echoPin, HIGH);
return durata * 0.034 / 2;
}
void loop() {
servo.write(90); // guarda avanti
delay(300);
int front = misuraDistanza();
if (front > 20) {
avanti();
} else {
ferma();
// guarda a destra
servo.write(0);
delay(400);
int destra = misuraDistanza();
// guarda a sinistra
servo.write(180);
delay(400);
int sinistra = misuraDistanza();
// ritorna al centro
servo.write(90);
delay(300);
// decide dove andare
if (destra > sinistra) {
giraDestra();
} else {
giraSinistra();
}
delay(500);
}
}
// Movimento avanti
void avanti() {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
}
// Stop
void ferma() {
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
// Rotazione destra
void giraDestra() {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
}
// Rotazione sinistra
void giraSinistra() {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
}
⚙️ Come funziona
Il servo motore ruota il sensore a ultrasuoni permettendo al robot di analizzare più direzioni.
Quando trova un ostacolo davanti, il robot misura la distanza a destra e a sinistra e sceglie automaticamente la direzione con più spazio.
Questo comportamento rende il robot molto più intelligente rispetto a un sistema base.
Il servo motore ruota il sensore a ultrasuoni permettendo al robot di analizzare più direzioni.
Quando trova un ostacolo davanti, il robot misura la distanza a destra e a sinistra e sceglie automaticamente la direzione con più spazio.
Questo comportamento rende il robot molto più intelligente rispetto a un sistema base.
🔁 Varianti possibili
- Servo più preciso
- Display con distanza
- LED direzionali
- Robot completamente autonomo avanzato