🚀 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:
👉 Il progetto può essere utilizzato come base per ventole di raffreddamento, piccoli incubatori, centraline elettroniche e sistemi di ventilazione.
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:
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
Il pulsante utilizza la resistenza interna INPUT_PULLUP di Arduino e non richiede una resistenza esterna.
- 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
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:
Per installare le librerie:
Per realizzare il progetto devi installare:
- LiquidCrystal_I2C;
- DHT sensor library;
- Adafruit Unified Sensor.
Per installare le librerie:
- apri Arduino IDE;
- vai su Sketch → Include Library → Manage Libraries;
- cerca LiquidCrystal I2C;
- installa una versione compatibile;
- cerca DHT sensor library;
- installa la libreria sviluppata da Adafruit;
- installa anche Adafruit Unified Sensor quando richiesto.
🔌 Schema di collegamento
Display LCD 16×2 I2C
Se il display non mostra nulla, prova l’indirizzo 0x3F.
Sensore DHT22
Se utilizzi un modulo DHT22 già assemblato:
Potenziometro
Driver L298N
Pulsante modalità
Display LCD 16×2 I2C
- VCC → 5V;
- GND → GND;
- SDA → A4;
- SCL → A5.
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.
- 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.
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.
Pulsante modalità
- un terminale → pin digitale 3;
- terminale opposto → GND.
- automatica;
- manuale;
- 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:
👉 Senza una massa comune, il driver potrebbe non interpretare correttamente i segnali di Arduino.
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.
💻 Codice Arduino
Il programma gestisce tre modalità.
Modalità automaticaLa velocità dipende dalla temperatura:
Modalità manualeIl potenziometro controlla direttamente la potenza PWM.
Modalità spentoIl motore rimane fermo indipendentemente dalla temperatura.
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.
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:
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à.
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.
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.
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:
Il pulsante viene gestito con un controllo antirimbalzo basato su millis().
Premendo il pulsante, Arduino passa ciclicamente tra:
- AUTO;
- MANUALE;
- SPENTO.
Il pulsante viene gestito con un controllo antirimbalzo basato su millis().
🚨 Errore del sensore
Se il DHT22 non restituisce un valore valido:
👉 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à.
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:
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?
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.