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 148
​Movimento automatico robot base

🚀 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:
  1. avanzamento;
  2. arresto;
  3. rotazione verso destra;
  4. nuovo avanzamento;
  5. rotazione verso sinistra;
  6. ritorno alla posizione iniziale;
  7. 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:
  • 🤖 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
​
  • 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
​

📚 Librerie necessarie
​

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
  • ENA → pin PWM 5;
  • IN1 → pin digitale 7;
  • IN2 → pin digitale 8;
  • OUT1 e OUT2 → motore sinistro.
Rimuovi il ponticello ENA dal modulo L298N.

Driver L298N – Motore destro
  • ENB → pin PWM 6;
  • IN3 → pin digitale 9;
  • IN4 → pin digitale 10;
  • OUT3 e OUT4 → motore destro.
Rimuovi anche il ponticello ENB.

Pulsante AVVIO/STOP
  • un terminale → pin digitale 2;
  • terminale opposto → GND.
Il pulsante utilizza la modalità INPUT_PULLUP.
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.
Il LED rimane acceso mentre il percorso automatico è in esecuzione.

⚠️ Alimentazione del 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.
Foto

💻 Codice Arduino
​

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.
Arduino passa automaticamente da uno stato al successivo quando termina il tempo previsto.

    

⚙️ Come funziona
​

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().

🔘 Pulsante AVVIO/STOP
​

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:
  • 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:
  • 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:
  • 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.

🧪 Prova iniziale
​

Prima di appoggiare il robot a terra:
  1. solleva le ruote;
  2. premi il pulsante;
  3. controlla la direzione dei due motori;
  4. verifica le rotazioni;
  5. prova l’arresto manuale;
  6. 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:
  • 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?
  • 🔁 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.

Foto
Foto

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