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 141
​Controllo velocità motore avanzato

🚀 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.

🎯 Cosa realizzerai
​

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
​
  • 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
​

📚 Librerie necessarie
​

​Per utilizzare il display LCD devi installare:
  • LiquidCrystal_I2C.
La libreria Wire è già inclusa nell’Arduino IDE.
​
Il driver L298N e il controllo PWM non richiedono librerie aggiuntive.

🔌 Schema di collegamento
​

Display LCD 16×2 I2C
  • VCC → 5V;
  • GND → GND;
  • SDA → A4;
  • SCL → A5.
Nel codice viene utilizzato l’indirizzo I2C 0x27.
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.
Il potenziometro imposta la velocità del motore in modalità manuale.

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.
Rimuovi il ponticello presente sul pin ENA, perché il segnale PWM verrà generato da Arduino.

Pulsante DIREZIONE
  • un terminale → pin digitale 2;
  • terminale opposto → GND.
Il pulsante inverte la direzione del motore.

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

💻 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.

    

⚙️ Come funziona

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.

🔁 Modalità automatica
​

In modalità automatica, Arduino modifica progressivamente il valore PWM.

Il motore:
  1. parte lentamente;
  2. aumenta la velocità;
  3. raggiunge il valore massimo;
  4. rallenta gradualmente;
  5. 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.

🔄 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:
  1. registra la richiesta di inversione;
  2. riduce gradualmente il PWM fino a zero;
  3. cambia lo stato dei pin IN1 e IN2;
  4. riavvia gradualmente il motore.
​
Questa procedura rende il cambio di direzione più sicuro.

📟 Informazioni visualizzate
​

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

Foto
Foto

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