#include <Arduino.h>
#include <ESP32Servo.h>
// Pin definitions
const int trigPin = 5;
const int echoPin = 18;
const int servoPin = 4;
// Constants
const int openPosition = 90;
const int closedPosition = 0;
const int detectionDistance = 15;
const int lockDelay = 5000;
// Objects
Servo doorServo;
// Function to get distance from ultrasonic sensor
long getDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
long distance = duration * 0.034 / 2; // Calculate distance in cm
return distance;
}
void setup() {
Serial.begin(115200);
// Initialize pins
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Initialize servo
doorServo.attach(servoPin);
doorServo.write(closedPosition); // Start with door locked
Serial.println("Smart Door Lock System Initialized");
}
void loop() {
long distance = getDistance();
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
if (distance > 0 && distance <= detectionDistance) {
// Object detected within range, unlock the door
Serial.println("Object detected, unlocking door.");
doorServo.write(openPosition);
delay(lockDelay); // Keep door open for specified delay
// Check distance again after delay
distance = getDistance();
if (distance > detectionDistance || distance == 0) {
Serial.println("No object detected, locking door.");
doorServo.write(closedPosition); // Lock the door
}
} else {
// No object within range, ensure the door is locked
doorServo.write(closedPosition);
}
delay(500); // Short delay for stability
}