PROGETTI ARDUINO

  • HOME
  • 200 Progetti
  • Progetti e Tutorial
  • Reti
    • Impara le reti
    • internet fibra
    • wifi mesh
    • modem router
    • diagnostica reti
    • ethernet lan
    • sicurezza configurazione
  • Elettronica
  • Recensioni
  • Manuale
  • Contatti
  • HOME
  • 200 Progetti
  • Progetti e Tutorial
  • Reti
    • Impara le reti
    • internet fibra
    • wifi mesh
    • modem router
    • diagnostica reti
    • ethernet lan
    • sicurezza configurazione
  • Elettronica
  • Recensioni
  • Manuale
  • Contatti

Progetto 150
​Robot evita ostacoli avanzato

🚀 Introduzione

Vuoi costruire un robot capace di muoversi autonomamente e scegliere da solo la direzione migliore quando incontra un ostacolo? 🤖🚧

In questo progetto realizzerai un robot evita ostacoli avanzato utilizzando Arduino UNO, due motori DC, un driver L298N, un sensore a ultrasuoni HC-SR04 e un servomotore.

Il sensore a ultrasuoni sarà montato sul servo.

Quando il robot rileva un ostacolo davanti a sé:
  1. si ferma;
  2. arretra leggermente;
  3. guarda a sinistra;
  4. guarda a destra;
  5. confronta le distanze;
  6. ruota verso il lato più libero;
  7. riprende il movimento.
​
👉 Rispetto a un robot evita ostacoli base, questa versione non sceglie una direzione casuale ma analizza l’ambiente prima di muoversi.

🎯 Cosa realizzerai
​

Con Arduino creerai un robot che:
  • 🤖 si muove autonomamente;
  • 📏 misura la distanza dagli ostacoli;
  • 👀 orienta il sensore tramite servo;
  • ⬅️ controlla lo spazio disponibile a sinistra;
  • ➡️ controlla lo spazio disponibile a destra;
  • 🧠 sceglie la direzione più libera;
  • ⬇️ arretra quando l’ostacolo è troppo vicino;
  • 🔄 ruota sul posto;
  • 🔘 permette di avviare e fermare il robot;
  • ✅ utilizza codice compatibile con Arduino UNO.

🧰 Materiale necessario
​
  • 1x Arduino UNO;
  • 1x telaio robot a due ruote;
  • 2x motori DC con riduttore;
  • 2x ruote;
  • 1x ruota libera;
  • 1x modulo driver L298N;
  • 1x sensore a ultrasuoni HC-SR04;
  • 1x servomotore SG90 o compatibile;
  • 1x supporto per montare HC-SR04 sul servo;
  • 1x pulsante;
  • 1x LED di stato;
  • 1x resistenza da 220 Ω;
  • 1x portabatterie adatto ai motori;
  • 1x alimentazione esterna da 5V per il servo, consigliata;
  • cavetti jumper;
  • distanziali e viti;
  • cavo USB.
🛒 Non hai ancora i componenti?

Molti dei progetti presenti su progettiarduino.com utilizzano componenti elettronici di base come LED, resistenze, sensori e breadboard.
Se stai iniziando con Arduino, il modo più semplice è utilizzare un kit completo per principianti, che include quasi tutti i componenti necessari per realizzare molti dei progetti presenti sul sito.

👉 Kit Arduino consigliato:
ℹ️ Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
https://amzn.to/4b3dxjW

📘 Vuoi imparare Arduino passo dopo passo?
Se vuoi approfondire e realizzare progetti più completi, puoi dare un'occhiata anche ai miei libri dedicati ad Arduino.
All'interno troverai spiegazioni semplici, schemi chiari e molti progetti pratici pensati per chi parte da zero.

👉 Scopri i miei libri su Arduino:
ℹ️ Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
https://amzn.to/4rfzjXE
​

📚 Librerie necessarie
​

Il progetto utilizza la libreria:
  • Servo.
La libreria Servo è normalmente già inclusa nell’Arduino IDE.
​
Il sensore HC-SR04 viene gestito direttamente tramite pulseIn() e non richiede librerie esterne.

🔌 Schema di collegamento
​

Driver L298N – Motore sinistro
  • ENA → pin PWM 5;
  • IN1 → pin digitale 7;
  • IN2 → pin digitale 8;
  • OUT1 e OUT2 → motore sinistro.
Rimuovi il ponticello ENA.
​
Driver L298N – Motore destro
  • ENB → pin PWM 6;
  • IN3 → pin digitale 12;
  • IN4 → pin digitale 13;
  • OUT3 e OUT4 → motore destro.
Rimuovi anche il ponticello ENB.

Sensore HC-SR04
  • VCC → 5V;
  • GND → GND;
  • TRIG → pin digitale 3;
  • ECHO → pin digitale 4.

Servomotore
  • filo segnale → pin digitale 9;
  • filo rosso → alimentazione 5V;
  • filo marrone o nero → GND.
Il sensore HC-SR04 deve essere fissato sul supporto mobile del servo.

Pulsante AVVIO/STOP
  • un terminale → pin digitale 2;
  • terminale opposto → GND.
Il pulsante utilizza INPUT_PULLUP.

LED di stato
  • anodo → pin digitale 10 tramite resistenza da 220 Ω;
  • catodo → GND.
Il LED rimane acceso quando il robot è attivo.
⚠️ Alimentazione del robot

I motori e il servo non devono essere alimentati direttamente dai pin di Arduino.

Utilizza:
  • un pacco batterie adatto ai motori;
  • un’alimentazione stabile da 5V per il servo;
  • una massa comune tra tutti i circuiti.
​
Collega insieme:
  • GND della batteria motori;
  • GND del driver L298N;
  • GND dell’alimentazione servo;
  • GND di Arduino.
​
👉 Senza una massa comune, i segnali di controllo potrebbero non funzionare correttamente.
Foto

💻 Codice Arduino
​

Il programma utilizza una macchina a stati.
Gli stati principali sono:
  • robot fermo;
  • movimento avanti;
  • arresto ostacolo;
  • retromarcia;
  • scansione sinistra;
  • scansione destra;
  • scelta direzione;
  • rotazione.
Questa struttura evita lunghi delay() durante il movimento principale e rende il comportamento più facile da modificare.

    

⚙️ Come funziona
​

Quando il robot è attivo, il sensore HC-SR04 misura continuamente la distanza davanti.

Se la distanza è maggiore della soglia, il robot procede in avanti.

Se la distanza è inferiore alla soglia:
  • il robot si ferma;
  • arretra per un breve intervallo;
  • ruota il servo a sinistra;
  • misura la distanza;
  • ruota il servo a destra;
  • misura nuovamente;
  • torna al centro;
  • confronta i risultati.
​
Il robot gira verso il lato con più spazio disponibile.

📏 Distanza di sicurezza
​

La soglia principale è impostata a:
const int DISTANZA_OSTACOLO = 25;

Quando un oggetto si trova entro 25 cm, il robot avvia la manovra.
Puoi modificare la soglia in base a:
  • velocità del robot;
  • dimensioni del telaio;
  • precisione del sensore;
  • spazio disponibile.
​
👉 Un robot più veloce dovrebbe utilizzare una distanza maggiore.

👀 Scansione dell’ambiente
​

Il servo utilizza tre posizioni:
  • centro → 90°;
  • sinistra → 150°;
  • destra → 30°.
Quando il robot incontra un ostacolo, il sensore viene orientato prima a sinistra e poi a destra.
​
Il programma attende brevemente che il servo raggiunga la posizione prima di misurare.

🧠 Scelta della direzione
​

Dopo la scansione, Arduino confronta:
  • distanza sinistra;
  • distanza destra.

Se la distanza sinistra è maggiore, il robot gira a sinistra.

Se la distanza destra è maggiore, gira a destra.
​
Se entrambe sono molto ridotte, il robot esegue una rotazione più lunga per allontanarsi dalla zona chiusa.

⬇️ Retromarcia preventiva
​

Prima di eseguire la scansione, il robot arretra leggermente.

Questa manovra:
  • aumenta lo spazio davanti al sensore;
  • riduce il rischio di urtare l’ostacolo;
  • facilita la rotazione;
  • migliora le letture laterali.
​
La durata della retromarcia può essere modificata nel codice.

🔄 Rotazione sul posto
​

Per ruotare verso destra:
  • motore sinistro avanti;
  • motore destro indietro.

Per ruotare verso sinistra:
  • motore sinistro indietro;
  • motore destro avanti.

Il robot gira quindi quasi sul proprio asse.
​
La durata della rotazione determina l’angolo raggiunto.

🧊 Filtro delle misurazioni
​

Il sensore HC-SR04 può occasionalmente restituire valori errati.

Il programma esegue più misurazioni e utilizza la media delle letture valide.

Se non viene ricevuto alcun eco, il valore viene considerato molto distante.
​
Questo riduce le reazioni causate da singole misurazioni anomale.

🔘 Pulsante AVVIO/STOP
​

Premendo il pulsante:
  • robot fermo → avvio;
  • robot attivo → arresto immediato.
​
Quando il robot viene fermato:
  • i motori vengono disattivati;
  • il servo torna al centro;
  • il LED si spegne;
  • la procedura corrente viene annullata.

⚠️ Direzione dei motori
​

A causa del montaggio speculare, uno dei motori potrebbe girare nel verso opposto.

Il codice contiene:
const bool INVERTI_MOTORE_SINISTRO = false;
const bool INVERTI_MOTORE_DESTRO = true;


Se il robot gira invece di procedere diritto, modifica uno dei due valori.
​
Puoi anche invertire fisicamente i fili del motore interessato.

⚠️ Il robot continua a oscillare
​

Se il robot cambia continuamente direzione:
  • riduci la velocità;
  • aumenta la distanza di sicurezza;
  • aumenta il tempo di attesa del servo;
  • controlla che il sensore sia montato stabilmente;
  • evita superfici che assorbono gli ultrasuoni.

🧪 Prova iniziale
​

Prima di appoggiare il robot a terra:
  1. solleva le ruote;
  2. controlla avanti e indietro;
  3. verifica le rotazioni;
  4. controlla il movimento del servo;
  5. osserva la direzione del sensore;
  6. prova il pulsante STOP;
  7. esegui la prova in uno spazio libero.
​
Evita scale, bordi e oggetti fragili.

🧠 Perché è un progetto importante
​

Con questo progetto impari a:
  • realizzare un robot autonomo;
  • controllare due motori DC;
  • utilizzare il driver L298N;
  • muovere un sensore tramite servo;
  • misurare distanze con HC-SR04;
  • confrontare più direzioni;
  • creare una macchina a stati;
  • gestire manovre automatiche;
  • filtrare misurazioni instabili;
  • sviluppare codice compatibile con Arduino UNO.

🔄 Varianti possibili
​

Vuoi migliorare il progetto?
  • 📟 aggiungi un display LCD;
  • 🔔 collega un buzzer durante la retromarcia;
  • 💡 aggiungi LED di direzione;
  • 🛞 utilizza encoder sulle ruote;
  • 🔋 controlla la tensione della batteria;
  • ⚡ misura la corrente dei motori;
  • 🎛️ regola la velocità con un potenziometro;
  • 📊 invia le distanze al Serial Plotter;
  • 🧠 aggiungi una memoria delle direzioni;
  • 🗺️ registra una semplice mappa;
  • 📱 aggiungi una modalità Bluetooth;
  • 🚨 collega sensori anticaduta.

Foto
Foto

© ProgettiArduino.com 2026 - Fancello Salvatore
​ Layout, immagini e testi sono di esclusiva proprietà di www.progettiarduino.com 
Privacy Policy