🚀 Introduzione
Vuoi controllare in modo preciso e sicuro la velocità di un motore DC con Arduino? ⚙️🎛️
In questo progetto realizzerai un controllo avanzato per motore DC utilizzando Arduino UNO, un driver L298N, un potenziometro e un display LCD.
Ruotando il potenziometro potrai regolare la velocità del motore. Due pulsanti permetteranno di invertire il senso di rotazione e selezionare la modalità di funzionamento.
Il programma utilizzerà inoltre un avvio graduale, evitando che il motore passi improvvisamente da fermo alla massima potenza.
👉 Il progetto non misura i giri reali del motore, ma controlla la potenza tramite un segnale PWM regolabile.
Vuoi controllare in modo preciso e sicuro la velocità di un motore DC con Arduino? ⚙️🎛️
In questo progetto realizzerai un controllo avanzato per motore DC utilizzando Arduino UNO, un driver L298N, un potenziometro e un display LCD.
Ruotando il potenziometro potrai regolare la velocità del motore. Due pulsanti permetteranno di invertire il senso di rotazione e selezionare la modalità di funzionamento.
Il programma utilizzerà inoltre un avvio graduale, evitando che il motore passi improvvisamente da fermo alla massima potenza.
👉 Il progetto non misura i giri reali del motore, ma controlla la potenza tramite un segnale PWM regolabile.
🎯 Cosa realizzerai
Con Arduino creerai un sistema che:
Con Arduino creerai un sistema che:
- ⚙️ controlla un motore DC tramite L298N;
- 🎛️ regola la velocità con un potenziometro;
- 🔄 permette di invertire la direzione;
- 🚀 utilizza un avvio graduale;
- 🛑 arresta il motore prima di invertire il movimento;
- 📟 mostra velocità e direzione su display LCD;
- 🔘 seleziona la modalità manuale o automatica;
- 📈 aumenta e diminuisce automaticamente la velocità;
- 🚫 elimina i piccoli movimenti vicino allo zero;
- ✅ utilizza codice compatibile con Arduino UNO.
🧰 Materiale necessario
I pulsanti utilizzano le resistenze interne INPUT_PULLUP di Arduino, quindi non richiedono resistenze esterne.
- 1x Arduino UNO;
- 1x motore DC a bassa tensione;
- 1x modulo driver L298N;
- 1x potenziometro da 10 kΩ;
- 1x display LCD 16×2 con interfaccia I2C;
- 2x pulsanti;
- 1x alimentatore esterno adatto al motore;
- cavetti jumper;
- breadboard;
- cavo USB.
I pulsanti utilizzano le resistenze interne INPUT_PULLUP di Arduino, quindi non richiedono resistenze esterne.
🛒 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 utilizzare il display LCD devi installare:
Il driver L298N e il controllo PWM non richiedono librerie aggiuntive.
Per utilizzare il display LCD devi installare:
- LiquidCrystal_I2C.
Il driver L298N e il controllo PWM non richiedono librerie aggiuntive.
🔌 Schema di collegamento
Display LCD 16×2 I2C
Se il display non mostra nulla, il tuo modulo potrebbe utilizzare l’indirizzo 0x3F.
Potenziometro
Driver L298N
Pulsante DIREZIONE
Pulsante MODALITÀ
Il pulsante permette di scegliere tra:
Display LCD 16×2 I2C
- VCC → 5V;
- GND → GND;
- SDA → A4;
- SCL → A5.
Se il display non mostra nulla, il tuo modulo potrebbe utilizzare l’indirizzo 0x3F.
Potenziometro
- terminale laterale → 5V;
- terminale laterale opposto → GND;
- terminale centrale → A0.
Driver L298N
- ENA → pin PWM 9;
- IN1 → pin digitale 7;
- IN2 → pin digitale 8;
- OUT1 e OUT2 → terminali del motore;
- GND → GND Arduino;
- ingresso alimentazione motore → alimentatore esterno.
Pulsante DIREZIONE
- un terminale → pin digitale 2;
- terminale opposto → GND.
Pulsante MODALITÀ
- un terminale → pin digitale 3;
- terminale opposto → GND.
Il pulsante permette di scegliere tra:
- modalità manuale;
- modalità automatica.
⚠️ Alimentazione del motore
Il motore non deve essere alimentato direttamente dal pin 5V di Arduino.
Utilizza un alimentatore esterno compatibile con:
Collega insieme:
👉 La massa comune è necessaria per permettere al driver di interpretare correttamente i segnali provenienti da Arduino.
Il motore non deve essere alimentato direttamente dal pin 5V di Arduino.
Utilizza un alimentatore esterno compatibile con:
- tensione del motore;
- corrente richiesta;
- limiti del driver L298N.
Collega insieme:
- GND dell’alimentatore;
- GND del modulo L298N;
- GND di Arduino.
👉 La massa comune è necessaria per permettere al driver di interpretare correttamente i segnali provenienti da Arduino.
💻 Codice Arduino
In modalità manuale, il potenziometro imposta la velocità del motore.
Il valore analogico compreso tra 0 e 1023 viene convertito in un valore PWM tra 0 e 255.
In modalità automatica, Arduino aumenta e diminuisce gradualmente la velocità creando un ciclo continuo.
Il pulsante DIREZIONE arresta prima il motore e successivamente inverte il senso di rotazione.
In modalità manuale, il potenziometro imposta la velocità del motore.
Il valore analogico compreso tra 0 e 1023 viene convertito in un valore PWM tra 0 e 255.
In modalità automatica, Arduino aumenta e diminuisce gradualmente la velocità creando un ciclo continuo.
Il pulsante DIREZIONE arresta prima il motore e successivamente inverte il senso di rotazione.
⚙️ Come funziona
Arduino utilizza tre pin per controllare il driver L298N:
Il segnale PWM viene inviato al pin ENA.
Un valore PWM pari a:
👉 Il valore PWM indica la potenza applicata, non il numero esatto di giri al minuto.
Arduino utilizza tre pin per controllare il driver L298N:
- ENA regola la velocità;
- IN1 imposta la prima direzione;
- IN2 imposta la direzione opposta.
Il segnale PWM viene inviato al pin ENA.
Un valore PWM pari a:
- 0 arresta il motore;
- 128 fornisce circa metà potenza;
- 255 fornisce la massima potenza disponibile.
👉 Il valore PWM indica la potenza applicata, non il numero esatto di giri al minuto.
🎛️ Modalità manuale
In modalità manuale, la velocità viene controllata dal potenziometro.
Il programma applica una zona morta alle letture più basse.
Quando il potenziometro si trova vicino allo zero, il motore rimane completamente fermo.
Questa soluzione evita piccoli movimenti causati da oscillazioni del segnale analogico.
In modalità manuale, la velocità viene controllata dal potenziometro.
Il programma applica una zona morta alle letture più basse.
Quando il potenziometro si trova vicino allo zero, il motore rimane completamente fermo.
Questa soluzione evita piccoli movimenti causati da oscillazioni del segnale analogico.
🔁 Modalità automatica
In modalità automatica, Arduino modifica progressivamente il valore PWM.
Il motore:
Il programma utilizza millis() e non blocca Arduino con lunghi delay().
In modalità automatica, Arduino modifica progressivamente il valore PWM.
Il motore:
- parte lentamente;
- aumenta la velocità;
- raggiunge il valore massimo;
- rallenta gradualmente;
- ripete il ciclo.
Il programma utilizza millis() e non blocca Arduino con lunghi delay().
🚀 Avvio graduale
Il PWM applicato al motore non passa immediatamente al valore richiesto.
La variabile del PWM reale si avvicina gradualmente al valore desiderato.
Per esempio, se il PWM attuale è 50 e quello richiesto è 200, il programma lo aumenta a piccoli passi.
👉 L’avvio graduale riduce gli scatti meccanici e i picchi di corrente iniziali.
Il PWM applicato al motore non passa immediatamente al valore richiesto.
La variabile del PWM reale si avvicina gradualmente al valore desiderato.
Per esempio, se il PWM attuale è 50 e quello richiesto è 200, il programma lo aumenta a piccoli passi.
👉 L’avvio graduale riduce gli scatti meccanici e i picchi di corrente iniziali.
🔄 Inversione sicura della direzione
Invertire improvvisamente la polarità mentre il motore gira velocemente può sottoporre driver e meccanica a uno sforzo elevato.
Per questo il programma:
Questa procedura rende il cambio di direzione più sicuro.
Invertire improvvisamente la polarità mentre il motore gira velocemente può sottoporre driver e meccanica a uno sforzo elevato.
Per questo il programma:
- registra la richiesta di inversione;
- riduce gradualmente il PWM fino a zero;
- cambia lo stato dei pin IN1 e IN2;
- riavvia gradualmente il motore.
Questa procedura rende il cambio di direzione più sicuro.
📟 Informazioni visualizzate
Il display LCD mostra:
Esempio:
MANUALE VEL:65%
DIR:AVANTI P:166
Il valore P rappresenta il PWM effettivamente applicato al motore.
Il display LCD mostra:
- modalità manuale o automatica;
- percentuale di velocità;
- direzione avanti o indietro;
- stato di inversione.
Esempio:
MANUALE VEL:65%
DIR:AVANTI P:166
Il valore P rappresenta il PWM effettivamente applicato al motore.
⚠️ Il PWM non misura gli RPM
Senza un sensore collegato all’albero del motore, Arduino non conosce la velocità reale.
La stessa impostazione PWM può produrre velocità differenti in base a:
Il progetto controlla quindi la potenza fornita al motore, non gli RPM reali.
Senza un sensore collegato all’albero del motore, Arduino non conosce la velocità reale.
La stessa impostazione PWM può produrre velocità differenti in base a:
- tensione di alimentazione;
- carico applicato;
- tipo di motore;
- attrito;
- efficienza del driver;
- stato della batteria.
Il progetto controlla quindi la potenza fornita al motore, non gli RPM reali.
🧠 Perché è un progetto importante
Con questo progetto impari a:
👉 Queste tecniche sono utili per robot, ventole, piccoli nastri trasportatori e sistemi motorizzati.
Con questo progetto impari a:
- pilotare un motore DC con L298N;
- utilizzare un’uscita PWM;
- controllare la velocità tramite potenziometro;
- invertire la direzione;
- creare un avvio graduale;
- realizzare un’inversione sicura;
- utilizzare modalità manuali e automatiche;
- gestire pulsanti con INPUT_PULLUP;
- utilizzare millis() senza bloccare Arduino;
- mostrare dati su display LCD.
👉 Queste tecniche sono utili per robot, ventole, piccoli nastri trasportatori e sistemi motorizzati.
🔄 Varianti possibili
Vuoi migliorare il progetto?
Vuoi migliorare il progetto?
- 🛑 aggiungi un pulsante STOP dedicato;
- 🌡️ controlla la temperatura del motore;
- ⚡ misura la corrente con ACS712;
- 💾 salva modalità e velocità nella EEPROM;
- 🎛️ sostituisci il potenziometro con un encoder;
- 🔔 aggiungi un buzzer durante l’inversione;
- 📊 invia il valore PWM al Serial Plotter;
- 🤖 utilizza il sistema in un robot;
- 🌀 controlla una ventola;
- 🔘 aggiungi velocità preimpostate;
- 📟 crea un menu LCD;
- 🔋 aggiungi un indicatore della batteria.