#include <DHT.h>
#include <ESP32Servo.h>
// -------------------- Pin Definitions --------------------
#define DHTPIN 14
#define DHTTYPE DHT22
#define PIR_PIN 27
#define LDR_PIN 34
#define SERVO_PIN 25
#define RED_LED 26
#define BLUE_LED 33
#define PINK_LED 32
#define BUZZER 23
#define DOORBELL_BTN 18
#define SECURITY_BTN 19
// -------------------- Objects --------------------
DHT dht(DHTPIN, DHTTYPE);
Servo doorServo;
bool securityMode = false;
void setup() {
Serial.begin(115200);
// Initialize sensors and actuators
dht.begin();
doorServo.attach(SERVO_PIN);
pinMode(PIR_PIN, INPUT);
pinMode(LDR_PIN, INPUT);
pinMode(RED_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
pinMode(PINK_LED, OUTPUT);
pinMode(BUZZER, OUTPUT);
pinMode(DOORBELL_BTN, INPUT_PULLUP);
pinMode(SECURITY_BTN, INPUT_PULLUP);
doorServo.write(0); // keep door closed initially
}
void loop() {
// ----------- Read Sensors -----------
float temp = dht.readTemperature();
int ldrValue = digitalRead(LDR_PIN); // HIGH = bright, LOW = dark
bool motion = digitalRead(PIR_PIN);
bool doorbellPressed = (digitalRead(DOORBELL_BTN) == LOW);
bool securityPressed = (digitalRead(SECURITY_BTN) == LOW);
// ----------- 1. Temperature-based Fan Control -----------
if (!isnan(temp)) {
if (temp > 30) {
digitalWrite(BLUE_LED, HIGH); // Fan ON (blue LED)
tone(BUZZER, 1000, 2000); // Buzz for 2 sec
Serial.println("Temperature high! Fan ON.");
} else {
digitalWrite(BLUE_LED, LOW); // Fan OFF
}
}
// ----------- 2. Automatic Lighting -----------
if (ldrValue == LOW) { // dark
digitalWrite(BLUE_LED, HIGH);
Serial.println("Dark detected, light ON.");
} else {
digitalWrite(BLUE_LED, LOW);
}
// ----------- 3. Intruder Alert -----------
if (motion && securityMode) {
digitalWrite(RED_LED, HIGH);
tone(BUZZER, 1500, 1000);
Serial.println("Intruder detected! Security alert!");
delay(500);
digitalWrite(RED_LED, LOW);
}
// ----------- 4. Smart Door Control -----------
if (doorbellPressed) {
Serial.println("Doorbell pressed! Opening door...");
doorServo.write(90); // open
digitalWrite(PINK_LED, HIGH); // welcome light
delay(1000);
digitalWrite(PINK_LED, LOW);
doorServo.write(0); // close
}
// ----------- 5. Security Mode Toggle -----------
if (securityPressed) {
securityMode = !securityMode;
Serial.println(securityMode ? "Security Mode ON" : "Security Mode OFF");
delay(500); // debounce
}
delay(100);
}