#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
DHT dht(2, DHT22);
float BETA = 3950;
const int irPin = 4;
const int ledPin = 12;
const int pirPin = 8;
const int relayPin1 = 7;
const int relayPin2 = 5;
const int relayPin3 = 6;
const int relayPin4 = 3;
LiquidCrystal_I2C lcd(0x27, 20, 4);
Servo servoMotor;
void setup() {
dht.begin();
Serial.begin(9600);
lcd.begin(20, 4);
lcd.backlight();
servoMotor.attach(A2);
pinMode(ledPin, OUTPUT);
pinMode(irPin, INPUT);
pinMode(relayPin1, OUTPUT);
pinMode(pirPin, INPUT);
pinMode(relayPin2, OUTPUT);
pinMode(relayPin3, OUTPUT);
pinMode(relayPin4, OUTPUT);
}
void loop() {
lcd.clear();
double humidity = dht.readHumidity();
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println("%");
if (humidity > 40) {
digitalWrite(relayPin2 , HIGH);
lcd.setCursor(0, 0);
lcd.print("It's too wet.");
servoMotor.write(0);
} else if (humidity < 40) {
digitalWrite(relayPin2 , LOW);
lcd.setCursor(0, 0);
lcd.print("It's dry and good.");
servoMotor.write(90);
}
int analogValue1 = analogRead(A0);
float celsius1 = 1 / (log(1 / (1023.0 / analogValue1 - 1)) / BETA + 1.0 / 298.15) - 273.15;
int analogValue2 = analogRead(A1);
float celsius2 = 1 / (log(1 / (1023.0 / analogValue2 - 1)) / BETA + 1.0 / 298.15) - 273.15;
Serial.print("Temperature outside: ");
Serial.print(celsius1);
Serial.println(" C");
Serial.print("Temperature inside: ");
Serial.print(celsius2);
Serial.println(" C");
if (celsius1 <= celsius2) {
lcd.setCursor(0, 1);
lcd.print("Too hot inside");
digitalWrite(relayPin3, HIGH);
} else {
lcd.setCursor(0, 1);
lcd.print("Weather fine now");
digitalWrite(relayPin3, LOW);
}
int irValue = digitalRead(irPin);
Serial.print("IR sensor Value: ");
Serial.println(irValue);
if (irValue == HIGH) {
digitalWrite(ledPin, HIGH);
lcd.setCursor(0, 2);
lcd.print("Fire detected!");
digitalWrite(relayPin4, HIGH);
} else {
digitalWrite(ledPin, LOW);
digitalWrite(relayPin4, LOW);
lcd.setCursor(0, 2);
lcd.print("No Fire detected");
}
int pirState = digitalRead(pirPin);
Serial.print("PIR sensor Value: ");
Serial.println(pirState);
if (pirState == HIGH) {
lcd.setCursor(0, 3);
lcd.print("Motion detected!");
digitalWrite(relayPin1, HIGH);
} else {
digitalWrite(relayPin1, LOW);
lcd.setCursor(0, 3);
lcd.print("No Motion detected");
}
delay(500);
}