🧠 Introduzione
Dopo aver realizzato diversi progetti di monitoraggio ambientale, in questo progetto facciamo un passo in avanti costruendo un sistema completo di controllo della temperatura.
L’obiettivo non è più soltanto leggere un valore, ma gestire attivamente l’ambiente attraverso un sistema intelligente capace di attivare automaticamente dispositivi di raffreddamento o riscaldamento.
Utilizzeremo il sensore DHT11 per rilevare la temperatura e un display LCD per visualizzare i dati in tempo reale. In base alle soglie impostate, Arduino attiverà una ventola oppure un sistema di riscaldamento.
A differenza dei progetti più semplici, qui introduciamo anche il concetto di isteresi, fondamentale nei sistemi reali per evitare accensioni e spegnimenti continui dei dispositivi.
Questo progetto rappresenta una base concreta per applicazioni come:
Dopo aver realizzato diversi progetti di monitoraggio ambientale, in questo progetto facciamo un passo in avanti costruendo un sistema completo di controllo della temperatura.
L’obiettivo non è più soltanto leggere un valore, ma gestire attivamente l’ambiente attraverso un sistema intelligente capace di attivare automaticamente dispositivi di raffreddamento o riscaldamento.
Utilizzeremo il sensore DHT11 per rilevare la temperatura e un display LCD per visualizzare i dati in tempo reale. In base alle soglie impostate, Arduino attiverà una ventola oppure un sistema di riscaldamento.
A differenza dei progetti più semplici, qui introduciamo anche il concetto di isteresi, fondamentale nei sistemi reali per evitare accensioni e spegnimenti continui dei dispositivi.
Questo progetto rappresenta una base concreta per applicazioni come:
- controllo climatico domestico
- gestione ambientale di serre
- sistemi di raffreddamento elettronico
- automazione intelligente
🧰 Materiale necessario
- Arduino UNO
- Sensore DHT11
- Display LCD 16x2 con I2C
- Modulo relè (o LED per simulazione)
- Breadboard
- Cavi jumper
🛒 Componenti e risorse consigliate
👉 Kit Arduino consigliato: https://amzn.to/41fmFNK
💡 Con un solo kit puoi realizzare la maggior parte dei progetti presenti nel sito.
📚 I miei libri consigliati
👉 Arduino per tutti – Volume 1: https://amzn.to/4rGNxB9
👉 Arduino per tutti – Volume 2: https://amzn.to/4bkfaey
👉 Arduino per tutti – Volume 3: https://amzn.to/4bogjAg
👉 Kit Arduino consigliato: https://amzn.to/41fmFNK
💡 Con un solo kit puoi realizzare la maggior parte dei progetti presenti nel sito.
📚 I miei libri consigliati
👉 Arduino per tutti – Volume 1: https://amzn.to/4rGNxB9
👉 Arduino per tutti – Volume 2: https://amzn.to/4bkfaey
👉 Arduino per tutti – Volume 3: https://amzn.to/4bogjAg
🔌 Schema di collegamento
Sensore DHT11
Display LCD (I2C)
Attuatori
⚠️ Tutti i GND devono essere collegati insieme.
Sensore DHT11
- VCC → 5V Arduino
- GND → GND Arduino
- DATA → Pin 2 Arduino
Display LCD (I2C)
- VCC → 5V Arduino
- GND → GND Arduino
- SDA → Pin A4 Arduino
- SCL → Pin A5 Arduino
Attuatori
- Ventola / relè raffreddamento → Pin 7
- Riscaldamento / relè → Pin 8
⚠️ Tutti i GND devono essere collegati insieme.
📚 Librerie necessarie
- DHT.h
- LiquidCrystal_I2C
💻 Codice Arduino
// ============================================
// Progetto 97 - Controllo temperatura avanzato
// Raffreddamento + riscaldamento + isteresi
// ============================================
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Inizializzazione display LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Configurazione sensore DHT11
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// Attuatori
int ventola = 7;
int riscaldamento = 8;
// Soglie temperatura
float tempMax = 28;
float tempMin = 20;
void setup() {
lcd.init(); // Avvia display
lcd.backlight(); // Attiva retroilluminazione
dht.begin(); // Avvia sensore
pinMode(ventola, OUTPUT);
pinMode(riscaldamento, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Lettura temperatura
float temperatura = dht.readTemperature();
// Controllo errore sensore
if (isnan(temperatura)) {
lcd.clear();
lcd.print("Errore sensore");
return;
}
// Visualizzazione su LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperatura);
lcd.print(" C");
// Logica di controllo con isteresi
if (temperatura > tempMax) {
// Attiva raffreddamento
digitalWrite(ventola, HIGH);
digitalWrite(riscaldamento, LOW);
lcd.setCursor(0, 1);
lcd.print("Raffreddamento");
}
else if (temperatura < tempMin) {
// Attiva riscaldamento
digitalWrite(ventola, LOW);
digitalWrite(riscaldamento, HIGH);
lcd.setCursor(0, 1);
lcd.print("Riscaldamento");
}
else {
// Zona stabile
digitalWrite(ventola, LOW);
digitalWrite(riscaldamento, LOW);
lcd.setCursor(0, 1);
lcd.print("Temperatura OK");
}
delay(2000); // aggiornamento ogni 2 secondi
}
// Progetto 97 - Controllo temperatura avanzato
// Raffreddamento + riscaldamento + isteresi
// ============================================
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Inizializzazione display LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Configurazione sensore DHT11
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// Attuatori
int ventola = 7;
int riscaldamento = 8;
// Soglie temperatura
float tempMax = 28;
float tempMin = 20;
void setup() {
lcd.init(); // Avvia display
lcd.backlight(); // Attiva retroilluminazione
dht.begin(); // Avvia sensore
pinMode(ventola, OUTPUT);
pinMode(riscaldamento, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Lettura temperatura
float temperatura = dht.readTemperature();
// Controllo errore sensore
if (isnan(temperatura)) {
lcd.clear();
lcd.print("Errore sensore");
return;
}
// Visualizzazione su LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperatura);
lcd.print(" C");
// Logica di controllo con isteresi
if (temperatura > tempMax) {
// Attiva raffreddamento
digitalWrite(ventola, HIGH);
digitalWrite(riscaldamento, LOW);
lcd.setCursor(0, 1);
lcd.print("Raffreddamento");
}
else if (temperatura < tempMin) {
// Attiva riscaldamento
digitalWrite(ventola, LOW);
digitalWrite(riscaldamento, HIGH);
lcd.setCursor(0, 1);
lcd.print("Riscaldamento");
}
else {
// Zona stabile
digitalWrite(ventola, LOW);
digitalWrite(riscaldamento, LOW);
lcd.setCursor(0, 1);
lcd.print("Temperatura OK");
}
delay(2000); // aggiornamento ogni 2 secondi
}
⚙️ Come funziona
Arduino legge continuamente la temperatura dal sensore DHT11 e la visualizza sul display LCD.
Se la temperatura supera la soglia massima, viene attivato il sistema di raffreddamento. Se invece scende sotto la soglia minima, viene attivato il riscaldamento.
Tra le due soglie, il sistema rimane stabile e non attiva nessun dispositivo. Questo comportamento evita continui cicli di accensione e spegnimento, rendendo il sistema più efficiente e realistico.
Arduino legge continuamente la temperatura dal sensore DHT11 e la visualizza sul display LCD.
Se la temperatura supera la soglia massima, viene attivato il sistema di raffreddamento. Se invece scende sotto la soglia minima, viene attivato il riscaldamento.
Tra le due soglie, il sistema rimane stabile e non attiva nessun dispositivo. Questo comportamento evita continui cicli di accensione e spegnimento, rendendo il sistema più efficiente e realistico.
🔁 Varianti possibili
- Sensore DHT22 (più preciso)
- Controllo anche dell’umidità
- Aggiunta buzzer di allarme
- Sistema completamente automatico domotico