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 142
​Motore DC con controllo temperatura

🚀 Introduzione

Vuoi accendere automaticamente una ventola e regolarne la velocità quando la temperatura aumenta? 🌡️🌀

In questo progetto realizzerai un sistema di raffreddamento automatico utilizzando Arduino UNO, un sensore DHT22, un motore DC e il driver L298N.

Quando la temperatura è bassa, il motore rimane spento. Superata la soglia impostata, Arduino avvia gradualmente il motore e aumenta la velocità in proporzione alla temperatura.

Un pulsante permetterà inoltre di scegliere tra:
  • modalità automatica;
  • funzionamento manuale;
  • motore spento.
​
👉 Il progetto può essere utilizzato come base per ventole di raffreddamento, piccoli incubatori, centraline elettroniche e sistemi di ventilazione.

🎯 Cosa realizzerai
​

Con Arduino creerai un sistema che:
  • 🌡️ misura la temperatura con un DHT22;
  • 🌀 controlla un motore DC tramite L298N;
  • ⚙️ regola automaticamente la velocità;
  • 🚀 avvia e arresta il motore gradualmente;
  • 🎛️ permette il controllo manuale con un potenziometro;
  • 🔘 cambia modalità tramite un pulsante;
  • 📟 mostra temperatura, velocità e stato su LCD;
  • 🚨 segnala un errore del sensore;
  • 🛑 arresta il motore in caso di lettura non valida;
  • ✅ utilizza codice compatibile con Arduino UNO.

🧰 Materiale necessario
​
  • 1x Arduino UNO;
  • 1x motore DC a bassa tensione oppure ventola DC;
  • 1x modulo driver L298N;
  • 1x sensore DHT22;
  • 1x resistenza da 10 kΩ, se utilizzi il sensore senza modulo;
  • 1x potenziometro da 10 kΩ;
  • 1x display LCD 16×2 con interfaccia I2C;
  • 1x pulsante;
  • 1x alimentatore esterno adatto al motore;
  • cavetti jumper;
  • breadboard;
  • cavo USB.
​
Il pulsante utilizza la resistenza interna INPUT_PULLUP di Arduino e non richiede una resistenza esterna.

🛒 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 realizzare il progetto devi installare:
  • LiquidCrystal_I2C;
  • DHT sensor library;
  • Adafruit Unified Sensor.
La libreria Wire è già inclusa nell’Arduino IDE.
​
Per installare le librerie:
  1. apri Arduino IDE;
  2. vai su Sketch → Include Library → Manage Libraries;
  3. cerca LiquidCrystal I2C;
  4. installa una versione compatibile;
  5. cerca DHT sensor library;
  6. installa la libreria sviluppata da Adafruit;
  7. installa anche Adafruit Unified Sensor quando richiesto.

🔌 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, prova l’indirizzo 0x3F.

Sensore DHT22
Se utilizzi un modulo DHT22 già assemblato:
  • VCC → 5V;
  • GND → GND;
  • DATA → pin digitale 2.
Se utilizzi il sensore senza modulo:
  • pin 1 → 5V;
  • pin 2 DATA → pin digitale 2;
  • pin 3 → non collegato;
  • pin 4 → GND;
  • resistenza da 10 kΩ tra DATA e 5V.

Potenziometro
  • terminale laterale → 5V;
  • terminale laterale opposto → GND;
  • terminale centrale → A0.
Il potenziometro viene utilizzato nella modalità manuale.

Driver L298N
  • ENA → pin PWM 9;
  • IN1 → pin digitale 7;
  • IN2 → pin digitale 8;
  • OUT1 e OUT2 → motore DC;
  • GND → GND Arduino;
  • alimentazione motore → alimentatore esterno.
Rimuovi il ponticello ENA dal modulo L298N, perché Arduino deve controllare direttamente il pin tramite PWM.

Pulsante modalità
  • un terminale → pin digitale 3;
  • terminale opposto → GND.
Ogni pressione cambia la modalità:
  1. automatica;
  2. manuale;
  3. motore spento.
⚠️ Alimentazione del motore
​

Non alimentare il motore direttamente dal pin 5V di Arduino.
Utilizza un alimentatore esterno compatibile con la tensione e la corrente richieste dal motore.
​
Collega insieme:
  • GND dell’alimentatore;
  • GND del modulo L298N;
  • GND di Arduino.

👉 Senza una massa comune, il driver potrebbe non interpretare correttamente i segnali di Arduino.
Foto

💻 Codice Arduino
​

Il programma gestisce tre modalità.
​
Modalità automaticaLa velocità dipende dalla temperatura:
  • sotto 24 °C → motore spento;
  • tra 24 °C e 35 °C → velocità proporzionale;
  • sopra 35 °C → velocità massima.

Modalità manualeIl potenziometro controlla direttamente la potenza PWM.
Modalità spentoIl motore rimane fermo indipendentemente dalla temperatura.

    

⚙️ Come funziona
​

Arduino legge il sensore DHT22 ogni due secondi.
​
In modalità automatica, il valore della temperatura viene trasformato in un segnale PWM.

La funzione map() converte l’intervallo termico in un valore compreso tra il PWM minimo e il PWM massimo.

Per esempio:
pwmRichiesto = map(
temperaturaDecimi,
240,
350,
90,
255
​);

La temperatura viene moltiplicata per dieci per conservare una cifra decimale durante la conversione.

🌡️ Soglie della temperatura
​

Il codice utilizza tre valori principali:
  • soglia di accensione: 24 °C;
  • temperatura massima: 35 °C;
  • PWM minimo utile: 90.

Sotto la soglia di accensione, il motore rimane spento.

Quando la temperatura supera 24 °C, il motore parte con una potenza minima sufficiente a evitare che rimanga bloccato.
​
Aumentando la temperatura, aumenta anche la velocità.

🚀 Avvio graduale

Il programma non applica immediatamente il nuovo valore PWM.

La variabile pwmAttuale si avvicina progressivamente a pwmRichiesto.

Se il PWM richiesto passa da 0 a 200, Arduino aumenta la potenza a piccoli passi.
Lo stesso avviene durante lo spegnimento.
​
👉 Questa tecnica riduce gli scatti, il rumore meccanico e i picchi di corrente.

🎛️ Modalità manuale

In modalità manuale, il potenziometro controlla la velocità del motore.

Il valore analogico da 0 a 1023 viene convertito in un PWM da 0 a 255.
​
Una zona morta impedisce al motore di ricevere valori troppo bassi, insufficienti per avviare correttamente la rotazione.

🔘 Cambio modalità
​

Premendo il pulsante, Arduino passa ciclicamente tra:
  • AUTO;
  • MANUALE;
  • SPENTO.
Il display mostra sempre la modalità attualmente selezionata.
​
Il pulsante viene gestito con un controllo antirimbalzo basato su millis().

🚨 Errore del sensore
​

Se il DHT22 non restituisce un valore valido:
  • il motore viene arrestato;
  • il PWM richiesto viene portato a zero;
  • il display mostra ERRORE DHT;
  • Arduino prova nuovamente alla lettura successiva.
​
👉 Arrestare il motore è una scelta prudente per questo esempio didattico. In un vero sistema di raffreddamento critico potrebbe invece essere più sicuro portare la ventola alla massima velocità.

🧠 Perché è un progetto importante
​

Con questo progetto impari a:
  • controllare un motore DC con L298N;
  • leggere un sensore DHT22;
  • regolare un’uscita in base alla temperatura;
  • utilizzare il PWM;
  • creare modalità automatiche e manuali;
  • realizzare un avvio graduale;
  • gestire errori del sensore;
  • utilizzare un potenziometro;
  • aggiornare un display LCD;
  • sviluppare codice compatibile con Arduino UNO.

🔄 Varianti possibili
​

Vuoi migliorare il progetto?
  • 🌡️ sostituisci il DHT22 con un DS18B20;
  • 🔔 aggiungi un buzzer per temperatura elevata;
  • 🚨 accendi un LED rosso oltre una soglia;
  • 💾 salva la modalità nella EEPROM;
  • 🎛️ modifica le soglie tramite pulsanti;
  • ⚡ misura la corrente del motore;
  • 🔋 mostra la tensione di alimentazione;
  • 📊 invia temperatura e PWM al Serial Plotter;
  • 🔄 controlla una seconda ventola;
  • 🌀 utilizza una ventola brushless;
  • 📟 aggiungi un menu LCD;
  • 🛑 attiva un arresto di emergenza.

Foto
Foto

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