🚀 Introduzione
Dopo aver realizzato un carrello automatizzato controllato tramite tempi programmati, possiamo renderlo molto più preciso aggiungendo dei sensori capaci di riconoscere le diverse fermate del percorso.
In questo progetto costruirai un sistema di trasporto automatico con due stazioni, utilizzando Arduino UNO, due motori DC, un driver L298N e due sensori a infrarossi.
Il carrello partirà dalla stazione iniziale e procederà fino a quando il sensore anteriore rileverà il punto di arrivo.
Una volta raggiunta la seconda stazione:
Rispetto al progetto precedente, la distanza non viene più determinata soltanto dal tempo di funzionamento dei motori.
I sensori permettono di riconoscere realmente le due estremità del percorso, rendendo il sistema più affidabile anche quando:
👉 Il progetto simula il funzionamento di un piccolo sistema di trasporto industriale automatico tra due postazioni.
Dopo aver realizzato un carrello automatizzato controllato tramite tempi programmati, possiamo renderlo molto più preciso aggiungendo dei sensori capaci di riconoscere le diverse fermate del percorso.
In questo progetto costruirai un sistema di trasporto automatico con due stazioni, utilizzando Arduino UNO, due motori DC, un driver L298N e due sensori a infrarossi.
Il carrello partirà dalla stazione iniziale e procederà fino a quando il sensore anteriore rileverà il punto di arrivo.
Una volta raggiunta la seconda stazione:
- il carrello si fermerà;
- resterà in attesa per un tempo prestabilito;
- invertirà automaticamente la direzione;
- tornerà verso la stazione di partenza;
- si arresterà quando il secondo sensore rileverà il riferimento iniziale.
Rispetto al progetto precedente, la distanza non viene più determinata soltanto dal tempo di funzionamento dei motori.
I sensori permettono di riconoscere realmente le due estremità del percorso, rendendo il sistema più affidabile anche quando:
- le batterie si scaricano;
- il carrello trasporta un peso diverso;
- le ruote slittano;
- i motori non ruotano alla stessa velocità.
👉 Il progetto simula il funzionamento di un piccolo sistema di trasporto industriale automatico tra due postazioni.
🎯 Cosa realizzerai
Con Arduino costruirai un sistema capace di:
Con Arduino costruirai un sistema capace di:
- 🛒 trasportare automaticamente piccoli oggetti;
- ⚙️ controllare due motori DC;
- 📍 riconoscere due stazioni tramite sensori;
- ▶️ avviare il ciclo con un pulsante;
- ⏩ muoversi verso la stazione di arrivo;
- ⏸️ fermarsi automaticamente;
- ⏪ tornare alla stazione di partenza;
- 💡 indicare la direzione tramite LED;
- 🔔 segnalare l’arrivo con un buzzer;
- 🛑 interrompere il movimento in caso di tempo massimo superato;
- 🧠 gestire il ciclo tramite una macchina a stati;
- ✅ utilizzare un codice compatibile con Arduino UNO.
🧰 Materiale necessario
I sensori possono essere montati:
In alternativa, è possibile utilizzare due finecorsa meccanici montati alle estremità del telaio.
- 1x Arduino UNO;
- 1x telaio robot a due ruote;
- 2x motori DC con riduttore;
- 2x ruote;
- 1x ruota libera;
- 1x modulo driver L298N;
- 2x sensori a infrarossi digitali;
- 2x riferimenti o ostacoli per indicare le stazioni;
- 1x pulsante START;
- 1x LED verde;
- 1x LED giallo;
- 1x LED rosso;
- 3x resistenze da 220 Ω;
- 1x buzzer attivo da 5V;
- 1x portabatterie adatto ai motori;
- 1x interruttore generale, consigliato;
- breadboard;
- cavetti jumper;
- viti e distanziali;
- cavo USB.
I sensori possono essere montati:
- uno nella parte anteriore del carrello;
- uno nella parte posteriore.
In alternativa, è possibile utilizzare due finecorsa meccanici montati alle estremità del telaio.
🛒 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.
Arduino controllerà direttamente:
La sequenza verrà gestita utilizzando:
Il programma potrà quindi essere compilato direttamente con Arduino IDE.
Il progetto non richiede librerie esterne.
Arduino controllerà direttamente:
- il driver L298N;
- i sensori digitali;
- i LED;
- il buzzer;
- il pulsante START.
La sequenza verrà gestita utilizzando:
- digitalRead();
- digitalWrite();
- analogWrite();
- millis().
Il programma potrà quindi essere compilato direttamente con Arduino IDE.
🔌 Schema di collegamento
Driver L298N – Motore sinistro
Driver L298N – Motore destro
Sensore della stazione di arrivo
Sensore della stazione di partenza
Pulsante START
LED verde – Movimento in avanti
LED giallo – Pausa alla stazione
LED rosso – Arresto o errore
Buzzer attivo
Per buzzer più potenti utilizza un transistor di pilotaggio.
Driver L298N – Motore sinistro
- ENA → pin PWM 5;
- IN1 → pin digitale 8;
- IN2 → pin digitale 9;
- OUT1 e OUT2 → motore sinistro.
Driver L298N – Motore destro
- ENB → pin PWM 6;
- IN3 → pin digitale 10;
- IN4 → pin digitale 11;
- OUT3 e OUT4 → motore destro.
Sensore della stazione di arrivo
- VCC → 5V;
- GND → GND;
- OUT → pin digitale 12.
Sensore della stazione di partenza
- VCC → 5V;
- GND → GND;
- OUT → pin digitale 13.
Pulsante START
- un terminale → pin digitale 2;
- terminale opposto → GND.
LED verde – Movimento in avanti
- anodo → pin digitale 3 tramite resistenza da 220 Ω;
- catodo → GND.
LED giallo – Pausa alla stazione
- anodo → pin digitale 4 tramite resistenza da 220 Ω;
- catodo → GND.
LED rosso – Arresto o errore
- anodo → pin analogico A0, utilizzato come uscita digitale, tramite resistenza da 220 Ω;
- catodo → GND.
Buzzer attivo
- terminale positivo → pin analogico A1, utilizzato come uscita digitale;
- terminale negativo → GND.
Per buzzer più potenti utilizza un transistor di pilotaggio.
⚠️ Alimentazione
I motori DC devono essere alimentati tramite il driver L298N e non direttamente dai pin di Arduino.
Utilizza:
Collega insieme:
Durante le prime prove è consigliabile alimentare:
I due circuiti devono condividere il collegamento GND.
Se i sensori producono letture instabili durante l’avvio dei motori, puoi aggiungere:
I motori DC devono essere alimentati tramite il driver L298N e non direttamente dai pin di Arduino.
Utilizza:
- un pacco batterie adatto ai motori;
- un’alimentazione stabile per Arduino;
- una massa comune tra tutti i componenti.
Collega insieme:
- GND di Arduino;
- GND del driver L298N;
- negativo del pacco batterie;
- GND dei sensori;
- GND dei LED;
- GND del buzzer.
Durante le prime prove è consigliabile alimentare:
- Arduino tramite USB;
- i motori tramite un pacco batterie separato.
I due circuiti devono condividere il collegamento GND.
Se i sensori producono letture instabili durante l’avvio dei motori, puoi aggiungere:
- un condensatore da 100 nF sui terminali di ogni motore;
- un condensatore elettrolitico vicino al driver;
- cavetti più corti;
- un’alimentazione separata e filtrata per i sensori.
💻 Codice Arduino
Il programma gestirà:
Il programma gestirà:
- attesa del pulsante START;
- movimento verso la stazione di arrivo;
- rilevamento del sensore anteriore;
- pausa automatica;
- segnalazione acustica;
- inversione dei motori;
- ritorno verso la stazione iniziale;
- rilevamento del sensore posteriore;
- arresto finale;
- tempo massimo di sicurezza;
- LED di stato.
⚙️ Come funziona
All’accensione, Arduino mantiene il carrello fermo.
Il LED rosso indica che il sistema è in attesa.
Quando viene premuto il pulsante START, Arduino avvia il ciclo automatico.
Movimento verso la stazione di arrivoI due motori vengono comandati in avanti.
Durante questa fase:
Il carrello prosegue finché il sensore rileva il riferimento collocato presso la stazione di arrivo.
Il riferimento può essere:
Arresto alla stazione
Quando il sensore anteriore viene attivato:
Questa pausa può simulare:
Ritorno alla stazione iniziale
Terminata la pausa, Arduino inverte il verso di rotazione dei motori.
Durante la retromarcia il carrello controlla continuamente il sensore posteriore.
Quando il sensore rileva il riferimento della stazione iniziale:
All’accensione, Arduino mantiene il carrello fermo.
Il LED rosso indica che il sistema è in attesa.
Quando viene premuto il pulsante START, Arduino avvia il ciclo automatico.
Movimento verso la stazione di arrivoI due motori vengono comandati in avanti.
Durante questa fase:
- il LED verde rimane acceso;
- il LED giallo è spento;
- il LED rosso è spento;
- Arduino controlla continuamente il sensore anteriore.
Il carrello prosegue finché il sensore rileva il riferimento collocato presso la stazione di arrivo.
Il riferimento può essere:
- una parete;
- un pannello;
- un piccolo ostacolo;
- una superficie riflettente;
- una bandierina fissata al percorso.
Arresto alla stazione
Quando il sensore anteriore viene attivato:
- Arduino ferma immediatamente i motori;
- il LED verde si spegne;
- il LED giallo si accende;
- il buzzer emette un breve segnale.
Questa pausa può simulare:
- il carico di un oggetto;
- lo scarico di materiale;
- una lavorazione;
- il controllo da parte di un operatore.
Ritorno alla stazione iniziale
Terminata la pausa, Arduino inverte il verso di rotazione dei motori.
Durante la retromarcia il carrello controlla continuamente il sensore posteriore.
Quando il sensore rileva il riferimento della stazione iniziale:
- i motori vengono fermati;
- il buzzer emette un secondo segnale;
- il LED rosso si accende;
- il sistema torna in attesa.
🎚️ Regolazione della sensibilità
Molti sensori a infrarossi dispongono di un piccolo trimmer.
Ruotando il trimmer puoi modificare la distanza o la sensibilità di rilevamento.
Per effettuare la regolazione:
Evita una sensibilità eccessiva, perché il sensore potrebbe rilevare oggetti esterni al percorso.
Molti sensori a infrarossi dispongono di un piccolo trimmer.
Ruotando il trimmer puoi modificare la distanza o la sensibilità di rilevamento.
Per effettuare la regolazione:
- alimenta il sensore;
- posiziona il riferimento alla distanza desiderata;
- ruota lentamente il trimmer;
- osserva il LED presente sul modulo;
- trova il punto in cui l’uscita cambia stato;
- ripeti la prova più volte.
Evita una sensibilità eccessiva, perché il sensore potrebbe rilevare oggetti esterni al percorso.
💡 Suggerimenti pratici
- Prova ogni sensore separatamente prima di montarlo.
- Regola la sensibilità con i motori spenti.
- Monta i sensori in modo stabile.
- Evita che le ruote o il telaio entrino nel campo di rilevamento.
- Utilizza riferimenti larghi e ben visibili.
- Posiziona il sensore anteriore al centro del carrello.
- Posiziona il sensore posteriore alla stessa altezza.
- Mantieni i cavi lontani dai motori.
- Esegui le prime prove con velocità ridotta.
- Verifica il funzionamento del tempo massimo.
- Utilizza una superficie piana.
- Installa un interruttore generale facilmente raggiungibile.
- Fissa il carico al centro del telaio.
- Regola separatamente la velocità dei due motori.
- Lascia spazio sufficiente per la frenata.
- Evita scale, bordi e oggetti fragili.
⚖️ Correzione della traiettoria
Se il carrello devia durante il movimento, imposta velocità diverse per i due motori.
Ad esempio:
const byte VELOCITA_SINISTRA = 175;
const byte VELOCITA_DESTRA = 165;
Riduci il valore del motore che gira più velocemente.
La regolazione deve essere eseguita sperimentalmente.
Se il carrello devia durante il movimento, imposta velocità diverse per i due motori.
Ad esempio:
const byte VELOCITA_SINISTRA = 175;
const byte VELOCITA_DESTRA = 165;
Riduci il valore del motore che gira più velocemente.
La regolazione deve essere eseguita sperimentalmente.
⚠️ Errori comuni
Il carrello non parte
Controlla:
Il carrello non si ferma alla stazione
Le possibili cause sono:
Il sensore rileva continuamente un ostacolo
Controlla che non stia rilevando:
Il sistema entra subito in errore
Verifica:
Il carrello gira su sé stesso
Uno dei motori ruota nel verso sbagliato.
Inverti i fili del motore interessato oppure modifica la logica nel codice.
Arduino si riavvia
I motori stanno provocando un abbassamento della tensione o disturbi elettrici.
Utilizza alimentazioni separate, mantenendo la massa comune.
Il buzzer non suona
Controlla:
Il carrello supera il riferimento
Riduci:
Il carrello non parte
Controlla:
- pulsante START;
- alimentazione;
- massa comune;
- collegamenti del driver;
- stato delle batterie;
- ponticelli ENA ed ENB;
- pin definiti nel programma.
Il carrello non si ferma alla stazione
Le possibili cause sono:
- sensore troppo lontano;
- sensibilità regolata male;
- riferimento troppo piccolo;
- logica digitale invertita;
- collegamento OUT errato;
- sensore disturbato dalla luce;
- velocità troppo elevata.
Il sensore rileva continuamente un ostacolo
Controlla che non stia rilevando:
- il telaio;
- una ruota;
- un cavo;
- il pavimento;
- un supporto vicino.
Il sistema entra subito in errore
Verifica:
- tempo massimo impostato;
- stato iniziale dei sensori;
- logica HIGH o LOW;
- collegamenti;
- posizione del carrello.
Il carrello gira su sé stesso
Uno dei motori ruota nel verso sbagliato.
Inverti i fili del motore interessato oppure modifica la logica nel codice.
Arduino si riavvia
I motori stanno provocando un abbassamento della tensione o disturbi elettrici.
Utilizza alimentazioni separate, mantenendo la massa comune.
Il buzzer non suona
Controlla:
- polarità;
- tipo di buzzer;
- pin utilizzato;
- massa comune.
Il carrello supera il riferimento
Riduci:
- velocità;
- peso;
- distanza tra sensore e ostacolo.
🔄 Varianti possibili
Vuoi migliorare il progetto?
Vuoi migliorare il progetto?
- 🛑 sostituisci i sensori IR con finecorsa;
- 📏 utilizza sensori a ultrasuoni;
- 🛞 aggiungi encoder alle ruote;
- ⬛ crea un percorso segui-linea;
- 📦 aggiungi un sensore per verificare il carico;
- ⚖️ integra una cella di carico;
- 🔔 utilizza segnali acustici differenti;
- 📟 mostra lo stato su un display LCD;
- 🔋 controlla la tensione della batteria;
- 🚨 aggiungi un pulsante di emergenza;
- 🎛️ regola la velocità con un potenziometro;
- 🏭 aggiungi più stazioni;
- 🔢 visualizza il numero di cicli completati;
- 💾 salva il conteggio nella EEPROM;
- 📱 controlla il sistema tramite Bluetooth;
- 🌐 invia lo stato tramite Wi-Fi;
- 🧲 aggiungi un meccanismo di carico automatico;
- 🔄 crea un ciclo continuo;
- 🚚 trasforma il progetto in un piccolo AGV.