#include <LiquidCrystal.h>
#include <Servo.h>
// Pin definitions
#define PIR_PIN 2
#define RELAY_PIN 8
#define SERVO_PIN 9
// Initialize LCD (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 7);
// Initialize Servo
Servo doorServo;
// Variables
bool motionDetected = false;
bool systemArmed = true;
int servoLockPos = 0; // Locked position
int servoUnlockPos = 90; // Unlocked position
void setup() {
// Initialize serial communication
Serial.begin(9600);
// Initialize pins
pinMode(PIR_PIN, INPUT);
pinMode(RELAY_PIN, OUTPUT);
// Initialize servo
doorServo.attach(SERVO_PIN);
doorServo.write(servoLockPos); // Start in locked position
// Initialize LCD
lcd.begin(16, 2);
lcd.print("Security System");
lcd.setCursor(0, 1);
lcd.print("Armed & Ready");
// Initialize relay (OFF)
digitalWrite(RELAY_PIN, LOW);
Serial.println("Smart Security System Initialized");
Serial.println("System Status: ARMED");
delay(2000);
lcd.clear();
}
void loop() {
// Read PIR sensor
motionDetected = digitalRead(PIR_PIN);
if (motionDetected && systemArmed) {
// Motion detected - trigger security response
Serial.println("ALERT: Motion Detected!");
// Display alert on LCD
lcd.clear();
lcd.print("MOTION DETECTED!");
lcd.setCursor(0, 1);
lcd.print("Security Alert");
// Activate alarm via relay
digitalWrite(RELAY_PIN, HIGH);
Serial.println("Alarm Activated");
// Unlock door (servo response)
doorServo.write(servoUnlockPos);
Serial.println("Door Unlocked");
// Keep alarm on for 3 seconds
delay(3000);
// Turn off alarm
digitalWrite(RELAY_PIN, LOW);
Serial.println("Alarm Deactivated");
// Lock door again
doorServo.write(servoLockPos);
Serial.println("Door Locked");
// Update LCD
lcd.clear();
lcd.print("System Reset");
lcd.setCursor(0, 1);
lcd.print("Monitoring...");
// Wait before next detection
delay(5000);
} else {
// No motion - normal monitoring
lcd.clear();
lcd.print("Security System");
lcd.setCursor(0, 1);
lcd.print("Monitoring...");
// Ensure door is locked
doorServo.write(servoLockPos);
}
delay(1000); // Check every second
}