#include <ESP32Servo.h>
#include <DHT.h>
// **Define Pins**
#define PIR_PIN 4
#define ULTRASONIC_TRIG 5
#define ULTRASONIC_ECHO 18
#define LED_PIN 19
#define BUZZER_PIN 21
#define SERVO_PIN 14
#define MQ_SENSOR_PIN 34
#define DHT_PIN 23
#define DHTTYPE DHT22
Servo doorServo;
DHT dht(DHT_PIN, DHTTYPE);
void setup() {
Serial.begin(115200);
pinMode(PIR_PIN, INPUT);
pinMode(ULTRASONIC_TRIG, OUTPUT);
pinMode(ULTRASONIC_ECHO, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
doorServo.attach(SERVO_PIN);
doorServo.write(0); // Door starts closed
dht.begin();
}
void loop() {
int pirState = digitalRead(PIR_PIN);
int smokeLevel = analogRead(MQ_SENSOR_PIN);
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// ** Automatic Light Control**
digitalWrite(LED_PIN, pirState ? HIGH : LOW);
Serial.print("PIR Sensor State: "); Serial.println(pirState);
// ** Ultrasonic Sensor - Door Opening**
digitalWrite(ULTRASONIC_TRIG, LOW);
delayMicroseconds(2);
digitalWrite(ULTRASONIC_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(ULTRASONIC_TRIG, LOW);
long duration = pulseIn(ULTRASONIC_ECHO, HIGH, 30000);
int distance = (duration > 0) ? (duration * 0.034 / 2) : 100;
Serial.print("Ultrasonic Distance: "); Serial.print(distance); Serial.println(" cm");
if (distance < 30) {
Serial.println("Object Detected! Opening Door...");
doorServo.write(90);
delay(2000);
doorServo.write(0);
}
// **Cloth Protection**
Serial.print("Humidity: "); Serial.print(humidity); Serial.println("%");
if (humidity > 85) {
Serial.println("Rain Detected! Move Clothes Inside.");
}
// ** Smoke Detection **
Serial.print("Smoke Level: "); Serial.println(smokeLevel);
if (smokeLevel > 400) {
digitalWrite(BUZZER_PIN, HIGH);
Serial.println("Smoke Detected! Alert!");
} else {
digitalWrite(BUZZER_PIN, LOW);
}
delay(1000);
}