#include <WiFi.h>
#include <Servo.h>
#include <Keypad.h>
Servo myservo; // Create servo object to control servo
const int servoPin = 18;
const int LED = 12;
const int buzzerPin = 13;
const int trigPin = 23; // Ultrasonic sensor trigger pin
const int echoPin = 22; // Ultrasonic sensor echo pin
// Define keypad keys and pins
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Four columns
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {34, 35, 36, 39}; // Row pin numbers
byte colPins[COLS] = {32, 33, 25, 26}; // Column pin numbers
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
long distance;
bool doorOpen = false;
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
myservo.attach(servoPin);
pinMode(LED, OUTPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.println("Door is closed");
}
void loop() {
// Check for keypad input
char key = keypad.getKey();
if (key != NO_KEY) {
if (key == '#') {
toggleDoor(); // Toggle door state if '#' is pressed
}
}
// Check distance using ultrasonic sensor
measureDistance();
// Check if door is open and activate buzzer and LED if someone is too close
if (doorOpen && distance <= 200) {
activateAlarm();
} else {
deactivateAlarm();
}
}
void toggleDoor() {
if (doorOpen) {
closeDoor();
} else {
openDoor();
}
}
void openDoor() {
Serial.println("Opening door");
for (int pos = 0; pos <= 180; pos += 1) {
myservo.write(pos);
delay(15);
}
doorOpen = true;
}
void closeDoor() {
Serial.println("Closing door");
for (int pos = 180; pos >= 0; pos -= 1) {
myservo.write(pos);
delay(15);
}
doorOpen = false;
}
void measureDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
distance = pulseIn(echoPin, HIGH) * 0.034 / 2; // Calculate distance in cm
}
void activateAlarm() {
digitalWrite(LED, HIGH); // Turn on LED
tone(buzzerPin, 1000); // Start buzzer sound
}
void deactivateAlarm() {
digitalWrite(LED, LOW); // Turn off LED
noTone(buzzerPin); // Stop buzzer sound
}