#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
Servo myservo;
#define triggerPin 12
#define echoPin 13
#define ledPin 2
#define buzzerPin 10
#define buttonPin 7
#define SERVO_PIN 5
const int thresholdDistance = 20;
bool alarmOn = true;
void setup() {
lcd.begin(16, 2);
lcd.backlight();
myservo.attach(SERVO_PIN);
myservo.write(90);
pinMode(triggerPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
unsigned long duration = pulseIn(echoPin, HIGH);
int distance = duration * 0.0343 / 2;
lcd.setCursor(0, 0);
lcd.print("Distance: ");
lcd.print(distance);
lcd.print(" cm");
if (alarmOn) {
if (distance < thresholdDistance) {
lcd.setCursor(0, 1);
lcd.print("Intruder Alert!");
digitalWrite(ledPin, HIGH);
tone(buzzerPin, 3000);
myservo.write(0);
} else {
lcd.setCursor(0, 1);
lcd.print("Safe! ");
digitalWrite(ledPin, LOW);
noTone(buzzerPin);
myservo.write(100);
}
} else {
lcd.setCursor(0, 1);
lcd.print("Alarm OFF");
digitalWrite(ledPin, LOW);
noTone(buzzerPin);
myservo.write(90);
}
if (digitalRead(buttonPin) == LOW) {
delay(200);
alarmOn = !alarmOn;
lcd.clear();
lcd.print(alarmOn ? "Alarm ON" : "Alarm OFF");
delay(100);
}
delay(100);
}