🚀 Introduzione
Vuoi fare in modo che un robot esegua automaticamente un percorso senza essere guidato da joystick o telecomandi? 🤖🛞
In questo progetto realizzerai un robot a due ruote capace di seguire una sequenza di movimenti programmata utilizzando Arduino UNO e un driver L298N.
Premendo un pulsante, il robot inizierà un percorso composto da diverse fasi:
Un LED mostrerà quando il percorso è in esecuzione.
👉 Il progetto introduce la programmazione autonoma di un robot e prepara la base per sistemi con sensori, evitamento ostacoli e navigazione automatica.
Vuoi fare in modo che un robot esegua automaticamente un percorso senza essere guidato da joystick o telecomandi? 🤖🛞
In questo progetto realizzerai un robot a due ruote capace di seguire una sequenza di movimenti programmata utilizzando Arduino UNO e un driver L298N.
Premendo un pulsante, il robot inizierà un percorso composto da diverse fasi:
- avanzamento;
- arresto;
- rotazione verso destra;
- nuovo avanzamento;
- rotazione verso sinistra;
- ritorno alla posizione iniziale;
- arresto finale.
Un LED mostrerà quando il percorso è in esecuzione.
👉 Il progetto introduce la programmazione autonoma di un robot e prepara la base per sistemi con sensori, evitamento ostacoli e navigazione automatica.
🎯 Cosa realizzerai
Con Arduino creerai un robot che:
Con Arduino creerai un robot che:
- 🤖 si muove senza controllo manuale;
- ⬆️ procede in avanti;
- ⬇️ esegue una retromarcia;
- ↪️ ruota verso destra;
- ↩️ ruota verso sinistra;
- ⏸️ inserisce pause tra i movimenti;
- 🔘 avvia il percorso tramite pulsante;
- 🛑 può essere fermato durante l’esecuzione;
- 💡 segnala lo stato tramite LED;
- ✅ utilizza codice compatibile con Arduino UNO.
🧰 Materiale necessario
Per ottenere movimenti più regolari sono consigliati due motori dello stesso modello e con lo stesso rapporto di riduzione.
- 1x Arduino UNO;
- 1x telaio robot a due ruote;
- 2x motori DC con riduttore;
- 2x ruote;
- 1x ruota libera;
- 1x modulo driver L298N;
- 1x pulsante;
- 1x LED verde;
- 1x resistenza da 220 Ω;
- 1x portabatterie adatto ai motori;
- cavetti jumper;
- distanziali e viti;
- cavo USB.
Per ottenere movimenti più regolari sono consigliati due motori dello stesso modello e con lo stesso rapporto di riduzione.
🛒 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
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
Per questo progetto non sono necessarie librerie esterne.
Arduino utilizza direttamente:
Il codice può essere compilato con una normale installazione dell’Arduino IDE.
Per questo progetto non sono necessarie librerie esterne.
Arduino utilizza direttamente:
- pinMode();
- digitalRead();
- digitalWrite();
- analogWrite();
- millis().
Il codice può essere compilato con una normale installazione dell’Arduino IDE.
🔌 Schema di collegamento
Driver L298N – Motore sinistro
Driver L298N – Motore destro
Pulsante AVVIO/STOP
La prima pressione avvia il percorso.
Una nuova pressione durante il movimento arresta immediatamente il robot.
LED di stato
Driver L298N – Motore sinistro
- ENA → pin PWM 5;
- IN1 → pin digitale 7;
- IN2 → pin digitale 8;
- OUT1 e OUT2 → motore sinistro.
Driver L298N – Motore destro
- ENB → pin PWM 6;
- IN3 → pin digitale 9;
- IN4 → pin digitale 10;
- OUT3 e OUT4 → motore destro.
Pulsante AVVIO/STOP
- un terminale → pin digitale 2;
- terminale opposto → GND.
La prima pressione avvia il percorso.
Una nuova pressione durante il movimento arresta immediatamente il robot.
LED di stato
- anodo → pin digitale 4 tramite resistenza da 220 Ω;
- catodo → GND.
⚠️ Alimentazione del robot
I motori non devono essere alimentati direttamente dai pin di Arduino.
Utilizza un pacco batterie compatibile con:
Collega insieme:
👉 Durante le prime prove tieni le ruote sollevate dal terreno, così potrai verificare le direzioni senza far partire improvvisamente il robot.
I motori non devono essere alimentati direttamente dai pin di Arduino.
Utilizza un pacco batterie compatibile con:
- tensione nominale dei motori;
- corrente richiesta;
- limiti del driver L298N.
Collega insieme:
- GND del pacco batterie;
- GND del modulo L298N;
- GND di Arduino.
👉 Durante le prime prove tieni le ruote sollevate dal terreno, così potrai verificare le direzioni senza far partire improvvisamente il robot.
💻 Codice Arduino
Il programma utilizza una macchina a stati.
Ogni stato rappresenta una fase del percorso:
Il programma utilizza una macchina a stati.
Ogni stato rappresenta una fase del percorso:
- attesa;
- avanti 1;
- pausa 1;
- rotazione destra;
- avanti 2;
- pausa 2;
- rotazione sinistra;
- retromarcia;
- arresto finale.
⚙️ Come funziona
Quando il robot è fermo, Arduino attende la pressione del pulsante.
Alla pressione:
Quando il tempo della fase termina, Arduino cambia stato e applica un nuovo comando ai motori.
Non vengono utilizzati lunghi delay() nel ciclo principale.
Il pulsante rimane quindi sempre attivo e può arrestare il robot in qualsiasi momento.
Quando il robot è fermo, Arduino attende la pressione del pulsante.
Alla pressione:
- il LED si accende;
- il robot entra nella prima fase;
- parte il conteggio del tempo.
Quando il tempo della fase termina, Arduino cambia stato e applica un nuovo comando ai motori.
Non vengono utilizzati lunghi delay() nel ciclo principale.
Il pulsante rimane quindi sempre attivo e può arrestare il robot in qualsiasi momento.
🧠 Macchina a stati
Il programma utilizza un’enumerazione:
enum StatoRobot {
ROBOT_FERMO,
AVANTI_1,
PAUSA_1,
ROTAZIONE_DESTRA,
AVANTI_2,
PAUSA_2,
ROTAZIONE_SINISTRA,
RETROMARCIA,
FINE_PERCORSO
};
La variabile statoAttuale indica quale movimento deve essere eseguito.
Questa tecnica è più ordinata rispetto a una lunga sequenza di delay().
Il programma utilizza un’enumerazione:
enum StatoRobot {
ROBOT_FERMO,
AVANTI_1,
PAUSA_1,
ROTAZIONE_DESTRA,
AVANTI_2,
PAUSA_2,
ROTAZIONE_SINISTRA,
RETROMARCIA,
FINE_PERCORSO
};
La variabile statoAttuale indica quale movimento deve essere eseguito.
Questa tecnica è più ordinata rispetto a una lunga sequenza di delay().
🔘 Pulsante AVVIO/STOP
Quando il robot è fermo, il pulsante avvia il percorso dall’inizio.
Se viene premuto durante il movimento:
Una nuova pressione farà ripartire il percorso dalla prima fase.
Quando il robot è fermo, il pulsante avvia il percorso dall’inizio.
Se viene premuto durante il movimento:
- entrambi i motori vengono fermati;
- il LED si spegne;
- il percorso viene annullato;
- Arduino torna in attesa.
Una nuova pressione farà ripartire il percorso dalla prima fase.
💡 LED di stato
Il LED verde mostra lo stato generale:
Puoi sostituirlo con un LED RGB o aggiungere altri LED per indicare la direzione corrente.
Il LED verde mostra lo stato generale:
- spento → robot fermo;
- acceso → percorso in esecuzione.
Puoi sostituirlo con un LED RGB o aggiungere altri LED per indicare la direzione corrente.
⏱️ Regolazione del percorso
Le durate delle fasi vengono definite all’inizio del codice.
Per esempio:
const unsigned long TEMPO_AVANTI_1 = 2500;
const unsigned long TEMPO_ROTazione = 750;
I valori sono espressi in millisecondi.
Per modificare il percorso puoi:
Le durate delle fasi vengono definite all’inizio del codice.
Per esempio:
const unsigned long TEMPO_AVANTI_1 = 2500;
const unsigned long TEMPO_ROTazione = 750;
I valori sono espressi in millisecondi.
Per modificare il percorso puoi:
- aumentare il tempo per percorrere più strada;
- diminuire il tempo per un movimento più breve;
- regolare la durata delle rotazioni;
- aggiungere nuove fasi.
⚠️ Il percorso non è perfettamente preciso
Il progetto non utilizza encoder sulle ruote.
Arduino controlla quindi soltanto:
La distanza reale può cambiare in base a:
👉 Il percorso è indicativo e deve essere calibrato sul robot utilizzato.
Il progetto non utilizza encoder sulle ruote.
Arduino controlla quindi soltanto:
- direzione dei motori;
- potenza PWM;
- durata del movimento.
La distanza reale può cambiare in base a:
- livello della batteria;
- attrito;
- superficie;
- peso del robot;
- differenze tra i motori;
- slittamento delle ruote.
👉 Il percorso è indicativo e deve essere calibrato sul robot utilizzato.
🔄 Correzione dei motori
Due motori dello stesso modello potrebbero girare a velocità leggermente differenti.
Se il robot devia durante l’avanzamento, puoi modificare:
const byte VELOCITA_MOTORE_SINISTRO = 170;
const byte VELOCITA_MOTORE_DESTRO = 165;
Riduci leggermente il valore del motore più veloce finché il robot procede in modo abbastanza rettilineo.
Due motori dello stesso modello potrebbero girare a velocità leggermente differenti.
Se il robot devia durante l’avanzamento, puoi modificare:
const byte VELOCITA_MOTORE_SINISTRO = 170;
const byte VELOCITA_MOTORE_DESTRO = 165;
Riduci leggermente il valore del motore più veloce finché il robot procede in modo abbastanza rettilineo.
🧪 Prova iniziale
Prima di appoggiare il robot a terra:
Assicurati che non siano presenti ostacoli o scale nelle vicinanze.
Prima di appoggiare il robot a terra:
- solleva le ruote;
- premi il pulsante;
- controlla la direzione dei due motori;
- verifica le rotazioni;
- prova l’arresto manuale;
- appoggia il robot su una superficie libera.
Assicurati che non siano presenti ostacoli o scale nelle vicinanze.
🧠 Perché è un progetto importante
Con questo progetto impari a:
Con questo progetto impari a:
- controllare due motori DC;
- utilizzare un driver L298N;
- programmare una sequenza automatica;
- creare una macchina a stati;
- gestire movimenti temporizzati;
- evitare lunghi delay();
- inserire pause di sicurezza;
- interrompere un percorso;
- correggere differenze tra i motori;
- sviluppare codice compatibile con Arduino UNO.
🔄 Varianti possibili
Vuoi migliorare il progetto?
Vuoi migliorare il progetto?
- 🔁 modifica il percorso programmato;
- 🔘 aggiungi più pulsanti per scegliere percorsi diversi;
- 💾 salva una sequenza nella EEPROM;
- 🔔 aggiungi un buzzer durante la retromarcia;
- 💡 aggiungi indicatori di direzione;
- 🚧 collega un sensore a ultrasuoni;
- 🛞 aggiungi encoder alle ruote;
- 📟 mostra la fase su un display LCD;
- 🎛️ regola la velocità con un potenziometro;
- 🔋 aggiungi un controllo della batteria;
- 📱 avvia il percorso tramite Bluetooth;
- 🤖 trasforma il robot in un modello autonomo.