/*
Smart Temperature Alarm System (2-LED Version)
Bachelor Project - Informatik
Author: [Your Name]
Date: March 2026
Hardware: DHT22 + LCD + Buzzer + 2 LEDs (Green/Red)
*/
#include <DHT.h>
#include <LiquidCrystal.h>
// Pin definitions (EXACTLY your wiring)
#define DHT_PIN 2 // DHT22 → Arduino Pin 2
#define DHT_TYPE DHT22
#define BUZZER_PIN 8 // Buzzer pin
#define LED_GREEN 4 // Green LED (Normal temp)
#define LED_RED 5 // Red LED (Hot temp)
// Temperature thresholds (°C)
const float TEMP_NORMAL_HIGH = 28.0; // Above = HOT
const float TEMP_ALARM = 30.0; // Buzzer alarm
// Initialize components
DHT dht(DHT_PIN, DHT_TYPE);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
Serial.begin(9600);
Serial.println("=== Smart Temperature Alarm (2-LED) ===");
// Configure pins
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_RED, OUTPUT);
// Initialize DHT22
dht.begin();
// Initialize LCD
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Temp Alarm 2-LED");
lcd.setCursor(0, 1);
lcd.print("Initializing...");
delay(2000);
lcd.clear();
}
void loop() {
// Read sensors
float temp = dht.readTemperature();
float hum = dht.readHumidity();
// Error handling
if (isnan(temp) || isnan(hum)) {
Serial.println("ERROR: DHT22 reading failed");
lcd.clear();
lcd.print("SENSOR ERROR!");
delay(2000);
return;
}
// Serial output (for professor demo)
Serial.print("T: "); Serial.print(temp, 1);
Serial.print("°C H: "); Serial.print(hum, 1); Serial.println("%");
// Update display and LEDs
updateDisplay(temp, hum);
updateLEDs(temp);
checkAlarm(temp);
delay(2000); // DHT22 sampling interval
}
/**
* LCD Display Update
*/
void updateDisplay(float temp, float hum) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: "); lcd.print(temp, 1); lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Humidity: "); lcd.print(hum, 1); lcd.print("%");
}
/**
* 2-LED Status Control
*/
void updateLEDs(float temp) {
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_RED, LOW);
if (temp <= TEMP_NORMAL_HIGH) {
digitalWrite(LED_GREEN, HIGH); // Normal temperature
} else {
digitalWrite(LED_RED, HIGH); // Hot temperature
}
}
/**
* Buzzer Alarm (>30°C)
*/
void checkAlarm(float temp) {
if (temp >= TEMP_ALARM) {
digitalWrite(BUZZER_PIN, HIGH);
Serial.println("*** ALARM: Critical Temperature! ***");
delay(500);
digitalWrite(BUZZER_PIN, LOW);
delay(1000);
} else {
digitalWrite(BUZZER_PIN, LOW);
}
}