
Benvenuti in SilentNoMore, ecco il nostro progetto di elettronica e programmazione sviluppato su piattaforma Arduino. Il sistema è progettato per il monitoraggio in tempo reale dei parametri ambientali di temperatura e umidità, integrando un sistema di allarme acustico/visivo automatizzato e un controllo di gestione remoto tramite infrarossi. L’obiettivo principale di questo prototipo è simulare un sistema di sicurezza industriale o domestico (es. per serre automatizzate o sale server), capace di prevenire danni strutturali o hardware dovuti al surriscaldamento. Il circuito analizza costantemente l’ambiente e reagisce autonomamente al superamento di una soglia critica preimpostata nel codice.
Componenti Utilizzati



Microcontrollore Arduino Uno R3
Sensore di Temperatura e Umidità DHT11
Display LCD 16×2 (con modulo I2C)


Buzzer Piezoelettrico (Segnalazione acustica)
LED di Segnalazione Rosso (Segnalazione visiva)


Ricevitore IR e Telecomando (Controllo remoto)
Breadboard e cavetti jumper per i collegamenti
Logica di funzionamento e test pratici
Il sensore DHT11 invia costantemente i dati digitali ad Arduino. Nel momento in cui la temperatura supera la soglia di sicurezza impostata nel codice (pari a 26 °C), il microcontrollore attiva immediatamente una routine di emergenza: il LED rosso comincia a lampeggiare visibilmente e il buzzer piezoelettrico emette un segnale acustico intermittente. Sul display LCD compare lo stato di allarme. Nel video a fianco è possibile osservare il test di superamento della soglia.
Per ottimizzare i consumi energetici del sistema e permettere una gestione flessibile, ho implementato un ricevitore IR. Tramite la decodifica dei segnali esadecimali inviati dal telecomando, l’utente può interagire con il dispositivo a distanza. Come mostrato nel filmato, premendo il tasto [Es: ON/OFF] sul telecomando è possibile spegnere la retroilluminazione del display LCD o resettare lo stato del sistema senza dover agire fisicamente sulla scheda.
Sviluppo del Circuito e Cablaggio



Nelle immagini sopra viene mostrato il prototipo reale cablato su breadboard durante la fase di debug hardware. È possibile notare la disposizione dei componenti per evitare interferenze sul segnale analogico e l’interfacciamento del display LCD tramite bus di comunicazione per ridurre il numero di pin occupati sulla scheda Arduino.
Il Software (Codice di Utilizzo)
#include <LiquidCrystal.h>
#include <DHT.h>
#include <IRremote.h>
// Definizione Pin
#define DHTPIN 7
#define DHTTYPE DHT11
#define IR_PIN 9
#define BUZZER_PIN 8
#define LED_PIN 10
#define LDR_PIN A0
// Inizializzazione componenti
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
DHT dht(DHTPIN, DHTTYPE);
// Variabili di stato
int modalitaDisplay = 0; // 0: Temp/Umidità, 1: Luce
void setup() {
lcd.begin(16, 2);
dht.begin();
// Avvia il ricevitore IR
IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
lcd.print("Sistema Avviato");
delay(2000);
lcd.clear();
}
void loop() {
// 1. Lettura Sensori
float t = dht.readTemperature();
float h = dht.readHumidity();
int luce = analogRead(LDR_PIN);
// 2. Controllo Allarme (Soglia 30 gradi)
if (t > 30) {
digitalWrite(LED_PIN, HIGH);
tone(BUZZER_PIN, 1000); // Suona l'allarme
} else {
digitalWrite(LED_PIN, LOW);
noTone(BUZZER_PIN); // Spegne l'allarme
}
// 3. Gestione Telecomando IR
if (IrReceiver.decode()) {
int codiceTasto = IrReceiver.decodedIRData.command;
// TASTO ON (Codice 3) -> Vai alla schermata LUCE
if (codiceTasto == 0x3) {
modalitaDisplay = 1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Schermata:");
lcd.setCursor(0, 1);
lcd.print("Sensore LUCE");
delay(1000);
lcd.clear();
}
// TASTO OFF -> Vai alla schermata TEMP/UMIDITA
// ATTENZIONE: Se il tasto OFF non funziona, devi cambiare lo 0x2
// con il VERO codice del tuo tasto 2!
else if (codiceTasto == 0x2) {
modalitaDisplay = 0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Schermata:");
lcd.setCursor(0, 1);
lcd.print("TEMP & UMIDITA");
delay(1000);
lcd.clear();
}
IrReceiver.resume(); // Rimettiti in ascolto del prossimo tasto
}
// 4. Aggiornamento Display LCD
lcd.setCursor(0, 0);
if (modalitaDisplay == 0) {
// Schermata 0: Temperatura e Umidità
lcd.print("Temp: "); lcd.print(t); lcd.print("C ");
lcd.setCursor(0, 1);
lcd.print("Umid: "); lcd.print(h); lcd.print("% ");
} else {
// Schermata 1: Luce
lcd.print("Luce: "); lcd.print(luce); lcd.print(" ");
lcd.setCursor(0, 1);
// Ricorda: finché non colleghiamo la resistenza, 'luce' sarà sempre 0
if (luce < 300) {
lcd.print("Stato: NOTTE ");
} else {
lcd.print("Stato: GIORNO ");
}
}
delay(200); // Piccolo ritardo per stabilità
}“Sbagliare il codice significa vedere un LED che non lampeggia. Sbagliare i collegamenti significa sentire l’odore di bruciato. È così che si impara davvero.”
