🚀 Introduzione
Dopo aver sperimentato bracci robotici, sistemi Pick and Place e piattaforme rotanti, è il momento di costruire un piccolo veicolo capace di muoversi automaticamente lungo un percorso prestabilito. 🤖🛒
In questo progetto realizzerai un carrello automatizzato semplice utilizzando Arduino UNO, due motori DC e un modulo driver L298N.
Il carrello verrà controllato tramite un pulsante di avvio. Una volta attivato, eseguirà automaticamente una sequenza composta da:
Un LED verde segnalerà il movimento, mentre un LED rosso indicherà che il carrello è fermo.
Il progetto simula, in modo semplificato, il funzionamento dei piccoli mezzi automatici utilizzati nei magazzini, nelle linee produttive e nei sistemi di trasporto interno.
👉 Il percorso viene controllato tramite tempi programmati. Nel progetto successivo aggiungeremo sensori che renderanno il movimento più autonomo e preciso.
Dopo aver sperimentato bracci robotici, sistemi Pick and Place e piattaforme rotanti, è il momento di costruire un piccolo veicolo capace di muoversi automaticamente lungo un percorso prestabilito. 🤖🛒
In questo progetto realizzerai un carrello automatizzato semplice utilizzando Arduino UNO, due motori DC e un modulo driver L298N.
Il carrello verrà controllato tramite un pulsante di avvio. Una volta attivato, eseguirà automaticamente una sequenza composta da:
- partenza;
- movimento in avanti;
- arresto temporaneo;
- retromarcia;
- ritorno alla posizione iniziale;
- arresto definitivo.
Un LED verde segnalerà il movimento, mentre un LED rosso indicherà che il carrello è fermo.
Il progetto simula, in modo semplificato, il funzionamento dei piccoli mezzi automatici utilizzati nei magazzini, nelle linee produttive e nei sistemi di trasporto interno.
👉 Il percorso viene controllato tramite tempi programmati. Nel progetto successivo aggiungeremo sensori che renderanno il movimento più autonomo e preciso.
🎯 Cosa realizzerai
Con Arduino costruirai un carrello che:
Con Arduino costruirai un carrello che:
- 🛒 si muove automaticamente;
- ⚙️ utilizza due motori DC;
- ▶️ avvia una sequenza tramite pulsante;
- ⏩ procede in avanti per un tempo programmato;
- ⏸️ si ferma temporaneamente;
- ⏪ torna indietro;
- 🛑 si arresta al termine della sequenza;
- 💡 segnala lo stato tramite due LED;
- 🔘 ignora nuove pressioni mentre la sequenza è attiva;
- 🎚️ permette di regolare la velocità tramite PWM;
- 🔄 controlla separatamente i due motori;
- ✅ utilizza codice compatibile con Arduino UNO.
🧰 Materiale necessario
È consigliabile utilizzare un telaio leggero e due motori dello stesso modello, possibilmente 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 LED rosso;
- 2x resistenze da 220 Ω;
- 1x portabatterie adatto ai motori;
- batterie compatibili con il driver e i motori;
- 1x interruttore generale, consigliato;
- cavetti jumper;
- viti e distanziali;
- cavo USB.
È consigliabile utilizzare un telaio leggero e due motori dello stesso modello, possibilmente 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
Il progetto non richiede librerie esterne.
Il driver L298N viene controllato direttamente tramite:
Il codice può quindi essere compilato direttamente con Arduino IDE senza installare componenti aggiuntivi.
Il progetto non richiede librerie esterne.
Il driver L298N viene controllato direttamente tramite:
- uscite digitali per stabilire la direzione;
- uscite PWM per regolare la velocità dei motori;
- funzione analogWrite() per generare il segnale PWM;
- funzione millis() per gestire le diverse fasi della sequenza.
Il codice può quindi essere compilato direttamente con Arduino IDE senza installare componenti aggiuntivi.
🔌 Schema di collegamento
Driver L298N – Motore sinistro
Driver L298N – Motore destro
Pulsante START
Non è quindi necessaria una resistenza esterna di pull-up o pull-down.
LED verde – Carrello in movimento
LED rosso – Carrello fermo
Alimentazione del driver L298N
Driver L298N – Motore sinistro
- ENA → pin PWM 5;
- IN1 → pin digitale 8;
- IN2 → pin digitale 9;
- OUT1 e OUT2 → terminali del motore sinistro.
Driver L298N – Motore destro
- ENB → pin PWM 6;
- IN3 → pin digitale 10;
- IN4 → pin digitale 11;
- OUT3 e OUT4 → terminali del motore destro.
Pulsante START
- un terminale → pin digitale 2;
- terminale opposto → GND.
Non è quindi necessaria una resistenza esterna di pull-up o pull-down.
LED verde – Carrello in movimento
- anodo → pin digitale 3 tramite resistenza da 220 Ω;
- catodo → GND.
LED rosso – Carrello fermo
- anodo → pin digitale 4 tramite resistenza da 220 Ω;
- catodo → GND.
Alimentazione del driver L298N
- morsetto 12V o VIN → positivo del pacco batterie;
- morsetto GND → negativo del pacco batterie;
- GND del driver → GND di Arduino.
⚠️ Alimentazione
I motori DC non devono essere alimentati direttamente dai pin di Arduino.
Durante l’avvio e quando il carrello incontra resistenza, i motori possono assorbire una corrente elevata.
Un collegamento scorretto può causare:
Utilizza un pacco batterie adatto alla tensione nominale dei motori.
Per i comuni motoriduttori da 6V può essere utilizzato, ad esempio, un portabatterie con quattro pile AA, tenendo conto della caduta di tensione introdotta dal driver L298N.
Collega sempre insieme:
👉 La massa comune è necessaria affinché i segnali provenienti da Arduino vengano interpretati correttamente dal driver.
Non collegare il positivo della batteria dei motori direttamente al pin 5V di Arduino.
Durante le prime prove utilizza preferibilmente due alimentazioni separate:
Le due alimentazioni devono condividere solamente il collegamento GND.
I motori DC non devono essere alimentati direttamente dai pin di Arduino.
Durante l’avvio e quando il carrello incontra resistenza, i motori possono assorbire una corrente elevata.
Un collegamento scorretto può causare:
- riavvii della scheda;
- perdita del controllo;
- movimenti irregolari;
- surriscaldamento di Arduino;
- danneggiamento dei pin;
- arresto improvviso dei motori.
Utilizza un pacco batterie adatto alla tensione nominale dei motori.
Per i comuni motoriduttori da 6V può essere utilizzato, ad esempio, un portabatterie con quattro pile AA, tenendo conto della caduta di tensione introdotta dal driver L298N.
Collega sempre insieme:
- GND del pacco batterie;
- GND del modulo L298N;
- GND di Arduino.
👉 La massa comune è necessaria affinché i segnali provenienti da Arduino vengano interpretati correttamente dal driver.
Non collegare il positivo della batteria dei motori direttamente al pin 5V di Arduino.
Durante le prime prove utilizza preferibilmente due alimentazioni separate:
- USB o alimentatore regolato per Arduino;
- pacco batterie dedicato ai motori.
Le due alimentazioni devono condividere solamente il collegamento GND.
💻 Codice Arduino
Il programma utilizzerà una macchina a stati per controllare:
La sequenza sarà gestita con millis(), evitando lunghi delay() nel ciclo principale.
Il programma utilizzerà una macchina a stati per controllare:
- attesa del comando;
- movimento in avanti;
- pausa;
- movimento indietro;
- arresto finale;
- LED di stato;
- antirimbalzo del pulsante.
La sequenza sarà gestita con millis(), evitando lunghi delay() nel ciclo principale.
⚙️ Come funziona
Quando Arduino viene acceso, il carrello rimane fermo.
In questa condizione:
Quando il pulsante viene premuto, Arduino avvia la sequenza automatica.
Prima fase: movimento in avanti
Il driver L298N imposta entrambi i motori nella direzione di avanzamento.
Arduino applica un segnale PWM ai pin ENA ed ENB, regolando così la velocità.
Il LED rosso si spegne e il LED verde si accende.
Il carrello procede in avanti per il tempo stabilito nel programma.
Seconda fase: pausa
Terminato il movimento in avanti, Arduino arresta entrambi i motori.
Il carrello rimane fermo per un breve intervallo.
Questa pausa simula il tempo necessario per:
Terza fase: retromarcia
Dopo la pausa, Arduino inverte la direzione dei motori.
Il carrello torna indietro per lo stesso intervallo utilizzato durante l’avanzamento.
Su una superficie ideale dovrebbe quindi avvicinarsi al punto di partenza.
Quarta fase: arresto finale
Al termine della retromarcia:
Per avviare una nuova sequenza è necessario premere nuovamente il pulsante.
Quando Arduino viene acceso, il carrello rimane fermo.
In questa condizione:
- i motori sono disattivati;
- il LED rosso è acceso;
- il LED verde è spento;
- il sistema attende la pressione del pulsante START.
Quando il pulsante viene premuto, Arduino avvia la sequenza automatica.
Prima fase: movimento in avanti
Il driver L298N imposta entrambi i motori nella direzione di avanzamento.
Arduino applica un segnale PWM ai pin ENA ed ENB, regolando così la velocità.
Il LED rosso si spegne e il LED verde si accende.
Il carrello procede in avanti per il tempo stabilito nel programma.
Seconda fase: pausa
Terminato il movimento in avanti, Arduino arresta entrambi i motori.
Il carrello rimane fermo per un breve intervallo.
Questa pausa simula il tempo necessario per:
- caricare un oggetto;
- scaricare del materiale;
- attendere un operatore;
- eseguire una lavorazione.
Terza fase: retromarcia
Dopo la pausa, Arduino inverte la direzione dei motori.
Il carrello torna indietro per lo stesso intervallo utilizzato durante l’avanzamento.
Su una superficie ideale dovrebbe quindi avvicinarsi al punto di partenza.
Quarta fase: arresto finale
Al termine della retromarcia:
- i motori vengono fermati;
- il LED verde si spegne;
- il LED rosso si accende;
- il sistema ritorna in attesa.
Per avviare una nuova sequenza è necessario premere nuovamente il pulsante.
🎚️ Regolazione della velocità
La velocità dei motori viene regolata tramite PWM.
Il valore può essere compreso tra:
Per una prima prova è consigliabile utilizzare una velocità moderata, ad esempio:
const byte VELOCITA_MOTORE = 170;
Una velocità troppo elevata può provocare:
Una velocità troppo bassa potrebbe invece non essere sufficiente per avviare i motori.
La velocità dei motori viene regolata tramite PWM.
Il valore può essere compreso tra:
- 0 → motore fermo;
- 255 → potenza PWM massima.
Per una prima prova è consigliabile utilizzare una velocità moderata, ad esempio:
const byte VELOCITA_MOTORE = 170;
Una velocità troppo elevata può provocare:
- slittamento delle ruote;
- perdita della direzione;
- arresto poco preciso;
- caduta di eventuali oggetti trasportati;
- assorbimento maggiore;
- instabilità del telaio.
Una velocità troppo bassa potrebbe invece non essere sufficiente per avviare i motori.
⚖️ Correzione della traiettoria
Due motori dello stesso modello non ruotano necessariamente alla stessa velocità.
Se il carrello devia verso sinistra, il motore destro potrebbe essere più veloce.
Puoi correggere il problema riducendo leggermente il PWM del motore più rapido.
Ad esempio:
const byte VELOCITA_SINISTRA = 175;
const byte VELOCITA_DESTRA = 165;
La regolazione deve essere eseguita sperimentalmente, perché dipende da:
Due motori dello stesso modello non ruotano necessariamente alla stessa velocità.
Se il carrello devia verso sinistra, il motore destro potrebbe essere più veloce.
Puoi correggere il problema riducendo leggermente il PWM del motore più rapido.
Ad esempio:
const byte VELOCITA_SINISTRA = 175;
const byte VELOCITA_DESTRA = 165;
La regolazione deve essere eseguita sperimentalmente, perché dipende da:
- motori;
- ruote;
- attrito;
- peso;
- tensione della batteria;
- montaggio del telaio.
⚠️ Errori comuni
Il carrello non si muove
Controlla:
Il carrello gira su sé stesso
Uno dei motori sta ruotando nella direzione sbagliata.
Puoi:
Il carrello devia lateralmente
Le cause più comuni sono:
Arduino si riavvia quando partono i motori
I motori stanno causando un calo di tensione o disturbi elettrici.
Controlla che:
Una pressione avvia più sequenze
Il pulsante potrebbe generare rimbalzi meccanici.
Il codice deve rilevare una sola pressione valida e attendere il rilascio prima di accettare un nuovo comando.
Durante la sequenza le ulteriori pressioni vengono ignorate.
Il carrello non torna esattamente al punto iniziale
Il controllo basato sul tempo non è perfettamente preciso.
L’errore può dipendere da:
Il driver L298N diventa molto caldo
Un leggero riscaldamento è normale.
Se il modulo diventa eccessivamente caldo:
Il carrello non si muove
Controlla:
- alimentazione dei motori;
- stato delle batterie;
- collegamenti del driver;
- ponticelli ENA ed ENB;
- pin indicati nel codice;
- collegamento della massa comune;
- serraggio dei morsetti;
- corretto funzionamento del pulsante.
Il carrello gira su sé stesso
Uno dei motori sta ruotando nella direzione sbagliata.
Puoi:
- invertire i due fili del motore interessato;
- modificare la logica dei pin IN;
- verificare il montaggio speculare dei motori.
Il carrello devia lateralmente
Le cause più comuni sono:
- differenza di velocità tra i motori;
- ruote montate male;
- telaio non allineato;
- peso distribuito in modo irregolare;
- ruota libera bloccata;
- superficie inclinata.
Arduino si riavvia quando partono i motori
I motori stanno causando un calo di tensione o disturbi elettrici.
Controlla che:
- i motori abbiano un’alimentazione dedicata;
- Arduino non venga alimentato dal ramo instabile dei motori;
- tutte le masse siano collegate;
- le batterie siano adeguate;
- il driver non sia sovraccarico.
Una pressione avvia più sequenze
Il pulsante potrebbe generare rimbalzi meccanici.
Il codice deve rilevare una sola pressione valida e attendere il rilascio prima di accettare un nuovo comando.
Durante la sequenza le ulteriori pressioni vengono ignorate.
Il carrello non torna esattamente al punto iniziale
Il controllo basato sul tempo non è perfettamente preciso.
L’errore può dipendere da:
- slittamento;
- differenza tra i motori;
- batteria meno carica;
- ostacoli;
- attrito;
- diversa accelerazione in avanti e indietro.
- encoder sulle ruote;
- sensori di posizione;
- finecorsa;
- marcatori sul percorso.
Il driver L298N diventa molto caldo
Un leggero riscaldamento è normale.
Se il modulo diventa eccessivamente caldo:
- interrompi l’alimentazione;
- controlla che i motori non siano bloccati;
- verifica la corrente assorbita;
- riduci il carico;
- controlla la tensione;
- verifica il corretto collegamento delle uscite.
🔄 Varianti possibili
Vuoi migliorare il progetto?
Vuoi migliorare il progetto?
- 📏 aggiungi un sensore a ultrasuoni;
- ⬛ utilizza sensori infrarossi per seguire una linea;
- 🛑 aggiungi due finecorsa alle estremità del percorso;
- 🚨 installa un pulsante di emergenza;
- 🔔 aggiungi un buzzer durante la retromarcia;
- 💡 utilizza indicatori di direzione;
- 🎛️ regola la velocità con un potenziometro;
- 📟 visualizza lo stato su un display LCD;
- 🔋 controlla la tensione della batteria;
- 🛞 aggiungi encoder alle ruote;
- 📦 installa un sensore di presenza del carico;
- 🕹️ aggiungi una modalità manuale;
- 📱 controlla il carrello tramite Bluetooth;
- 🌐 aggiungi un controllo Wi-Fi;
- 🏭 crea più fermate lungo il percorso;
- 🔄 realizza un ciclo automatico continuo;
- 🧲 aggiungi un sistema per caricare e scaricare oggetti;
- 🚚 trasforma il progetto in un piccolo AGV didattico.