#include <ESP32Servo.h>
#include <DHT.h>
#include <WiFi.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 22
#define MQ_SENSOR_PIN 34
#define DHT_PIN 23
#define RELAY_PIN 26 // For TV & AC Control
#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);
pinMode(RELAY_PIN, OUTPUT);
doorServo.attach(SERVO_PIN);
doorServo.write(0); // Door starts closed
dht.begin();
Serial.println("System Initialized...");
}
void loop() {
int pirState = digitalRead(PIR_PIN);
int smokeLevel = analogRead(MQ_SENSOR_PIN);
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// ** Automatic Light & Fan Control**
digitalWrite(LED_PIN, pirState ? HIGH : LOW);
Serial.print("Motion Detected: ");
Serial.println(pirState ? "Yes" : "No");
// ** Automatic Door Opening with Ultrasonic**
digitalWrite(ULTRASONIC_TRIG, LOW);
delayMicroseconds(2);
digitalWrite(ULTRASONIC_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(ULTRASONIC_TRIG, LOW);
long duration = pulseIn(ULTRASONIC_ECHO, HIGH, 30000); // Timeout after 30ms
int distance = (duration > 0) ? (duration * 0.034 / 2) : 100; // Default to 100cm if timeout
Serial.print("Ultrasonic Distance: ");
Serial.print(distance);
Serial.println(" cm");
if (distance < 30) { // If object is close, open door
Serial.println("Opening Door...");
doorServo.write(90);
delay(2000);
Serial.println("Closing Door...");
doorServo.write(0);
}
// **Cloth Protection using Weather Monitoring**
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
if (humidity > 85) {
Serial.println("Rain Detected! Move Clothes Inside.");
}
// ** Smoke Detection & Alert**
Serial.print("Smoke Level: ");
Serial.println(smokeLevel);
if (smokeLevel > 400) {
digitalWrite(BUZZER_PIN, HIGH);
Serial.println("🔥 Smoke Detected! Alert Sent.");
} else {
digitalWrite(BUZZER_PIN, LOW);
}
Serial.println("----------------------");
delay(1000);
}