// Include the library for LCD with I2C interface
#include <LiquidCrystal_I2C.h>
// Include the library for the DHT sensor
#include <DHT.h>
// Initialize the LCD (I2C address: 0x27, dimensions: 16 columns and 2 rows)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Define the pin and sensor type for the DHT22
#define DHTPIN 2 // Digital pin connected to the DHT22 sensor
#define DHTTYPE DHT22 // Define sensor type as DHT22
DHT dht(DHTPIN, DHTTYPE); // Create a DHT object
// Define variables for storing sensor values
float humidity;
float temperature;
int buzzer = 12; // Buzzer connected to digital pin 12
// Setup runs once at startup
void setup() {
lcd.init(); // Initialize the LCD
lcd.backlight(); // Turn on LCD backlight
dht.begin(); // Start the DHT sensor
pinMode(buzzer, OUTPUT); // Set buzzer pin as output
Serial.begin(9600); // Initialize Serial Monitor
Serial.println("Temperature & Humidity Monitoring System Initialized");
// Optional indicator LEDs for status display
pinMode(9, OUTPUT); // Red LED
pinMode(10, OUTPUT); // Yellow LED
pinMode(11, OUTPUT); // Green LED
}
// Main loop runs continuously
void loop() {
delay(2000); // Sensor reading delay (2 seconds)
// Read humidity and temperature from DHT sensor
humidity = dht.readHumidity();
temperature = dht.readTemperature();
// Print readings to Serial Monitor
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
// Condition 1: High temperature and high humidity
if (humidity >= 70.0 && temperature >= 30.0) {
digitalWrite(9, HIGH); // Red LED ON
digitalWrite(10, LOW);
digitalWrite(11, LOW);
lcd.setCursor(0, 0);
lcd.print(" Too Warm! ");
lcd.setCursor(0, 1);
lcd.print(" Cool Down! ");
for (int i = 0; i < 2; i++) {
digitalWrite(buzzer, HIGH); tone(buzzer, 900, 100); delay(400);
digitalWrite(buzzer, LOW); tone(buzzer, 900, 100); delay(400);
}
}
// Condition 2: Normal temperature and humidity
else if (humidity < 70.0 && temperature < 30.0) {
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, HIGH); // Green LED ON
lcd.setCursor(0, 0);
lcd.print("Temp & Humidity ");
lcd.setCursor(0, 1);
lcd.print("are Normal ");
digitalWrite(buzzer, LOW);
}
// Condition 3: High temperature, normal humidity
else if (humidity < 70.0 && temperature >= 30.0) {
digitalWrite(9, LOW);
digitalWrite(10, HIGH); // Yellow LED ON
digitalWrite(11, LOW);
lcd.setCursor(0, 0);
lcd.print("Warning! ");
lcd.setCursor(0, 1);
lcd.print("Temp too High! ");
for (int i = 0; i < 1; i++) {
digitalWrite(buzzer, HIGH); tone(buzzer, 500, 400); delay(400);
digitalWrite(buzzer, LOW); tone(buzzer, 500, 400); delay(400);
}
}
// Condition 4: High humidity, normal temperature
else if (humidity >= 70.0 && temperature < 30.0) {
digitalWrite(9, LOW);
digitalWrite(10, HIGH); // Yellow LED ON
digitalWrite(11, LOW);
lcd.setCursor(0, 0);
lcd.print("Warning! ");
lcd.setCursor(0, 1);
lcd.print("Humidity High! ");
for (int i = 0; i < 1; i++) {
digitalWrite(buzzer, HIGH); tone(buzzer, 500, 400); delay(400);
digitalWrite(buzzer, LOW); tone(buzzer, 500, 400); delay(400);
}
}
}