#include <LiquidCrystal.h>
#include <Servo.h>
// Define LCD pins
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
// Define Ultrasonic Sensor pins
const int trigPin = 9;
const int echoPin = 10;
// Define Servo pin
const int servoPin = 6;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
Servo servo;
void setup() {
lcd.begin(16, 2); // Initialize LCD
pinMode(trigPin, OUTPUT); // Set trigPin as OUTPUT
pinMode(echoPin, INPUT); // Set echoPin as INPUT
servo.attach(servoPin); // Attach servo to pin
Serial.begin(9600); // Initialize serial communication
lcd.setCursor(0, 0);
lcd.print("Initializing device");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Device started");
lcd.setCursor(0, 1);
lcd.print("successfully");
delay(2000);
}
void loop() {
// Clear LCD
lcd.clear();
// Calculate distance using Ultrasonic Sensor
float distance = calculateDistance();
// Display distance on LCD
lcd.setCursor(0, 0);
lcd.print("Distance: ");
lcd.print(distance);
lcd.print(" cm");
// Display distance on Serial Monitor
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Check threshold distance
if (distance <= 50) {
// Open door
servo.write(90);
lcd.setCursor(0, 1);
lcd.print("Door Open");
Serial.println("Door Open");
} else {
// Close door
servo.write(0);
lcd.setCursor(0, 1);
lcd.print("Door Closed");
Serial.println("Door Closed");
}
delay(1000); // Update distance every 1 second
}
float calculateDistance() {
// Send ultrasonic pulse
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Measure echo time
long echoTime = pulseIn(echoPin, HIGH);
// Calculate distance
float distance = echoTime * 0.034 / 2;
return distance;
}