#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Pin Definitions
#define DHTPIN 4
#define DHTTYPE DHT22
#define RED_LED 18
#define BLUE_LED 17
#define BUZZER 27
// Initialize DHT sensor
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
pinMode(RED_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
pinMode(BUZZER, OUTPUT);
lcd.init()
lcd.backlight();
dht.begin();
}
void loop() {
float temp = dht.readTemperature(); // Get temperature (Celsius)
float hum = dht.readHumidity(); // Get humidity
if (isnan(temp) || isnan(hum)) {
Serial.println("Failed to read from DHT22 sensor!");
return;
}
// Print values to Serial Monitor
Serial.print("Temperature: ");
Serial.print(temp);
Serial.print("°C Humidity: ");
Serial.print(hum);
Serial.println("%");
// Display on LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temp);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(hum);
lcd.print("%");
// LED and LCD Message Conditions
if (temp > 30) {
lcd.setCursor(0, 1);
lcd.print("Hot! Turn on Fan");
digitalWrite(RED_LED, HIGH);
digitalWrite(BLUE_LED, LOW);
}
else if (temp < 20) {
lcd.setCursor(0, 1);
lcd.print("Cold! Turn on Heater");
digitalWrite(RED_LED, LOW);
digitalWrite(BLUE_LED, HIGH);
}
else {
lcd.setCursor(0, 1);
lcd.print("Temperature Normal");
digitalWrite(RED_LED, LOW);
digitalWrite(BLUE_LED, LOW);
}
// Buzzer Alert if temp > 40°C
if (temp > 40) {
tone(BUZZER, 1000);
} else {
noTone(BUZZER);
}
delay(2000); // Update every 2 seconds
}