#include <DHT.h>
#include <Servo.h>
#include <LiquidCrystal.h>
#define DHTPIN 4 // Pin for DHT11 sensor
#define DHTTYPE DHT22 // DHT11 sensor type
DHT dht(DHTPIN, DHTTYPE);
Servo servo; // Create servo object
int servoPin = 5; // Pin for servo motor
int openAngle = 90; // Angle to open window
int closeAngle = 0; // Angle to close window
int heaterPin = 7; // Pin for heater LED
int sprinklerPin = 6; // Pin for sprinkler LED
int lightPin = A1; // Pin for light sensor
int lightVal; // Variable to store light value
LiquidCrystal lcd(13,12,11,10,9,8); // Pins for LCD display
void setup() {
// Initialize serial communication and LCD display
Serial.begin(9600);
lcd.begin(16, 2);
// Attach servo motor to pin and set to closed position
servo.attach(servoPin);
servo.write(closeAngle);
// Set pins for LED output
pinMode(heaterPin, OUTPUT);
pinMode(sprinklerPin, OUTPUT);
// Start DHT11 sensor
dht.begin();
}
void loop() {
// Read temperature, humidity, and light levels
float temp = dht.readTemperature();
float humid = dht.readHumidity();
lightVal = analogRead(lightPin);
// If temperature is below 24C, turn on heater LED. If temperature is above 29C, open servo motor to let hot air out
if (temp < 24) {
digitalWrite(heaterPin, HIGH);
} else {
digitalWrite(heaterPin, LOW);
}
if (temp > 29) {
servo.write(openAngle);
} else {
servo.write(closeAngle);
}
// If humidity is below 50%, turn on sprinkler LED
if (humid < 50) {
digitalWrite(sprinklerPin, HIGH);
} else {
digitalWrite(sprinklerPin, LOW);
}
// Display temperature, humidity, and light level on LCD display
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temp);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Humid:");
lcd.print(humid);
lcd.print("%");
lcd.setCursor(9, 0);
lcd.print(" Li:");
lcd.print(lightVal);
delay(1000);
}