#include <LiquidCrystal_I2C.h>
#define HC_TRIG_PIN 27
#define HC_ECHO_PIN 26
#define SWITCH_PIN 33
#define PIR_PIN 32
#define BUZZER_PIN 4
#define RELAY_PIN 16
#define LCD_SDA_PIN 21
#define LCD_SCL_PIN 22
#define LCD_ADDRESS 0x27
#define DOOR_MAX_RANGE 100
//KONFIGURASI LCD
#define LCD_COLUMN 16
#define LCD_ROW 2
LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLUMN, LCD_ROW);
int state;
int motion_state = 0;
int door_state = 0;
int motion_state_previous = LOW;
int motion_state_current = LOW;
float duration_us, distance_cm;
void setup() {
Serial.begin(115200);
//l
pinMode(HC_TRIG_PIN, OUTPUT);
pinMode(HC_ECHO_PIN, INPUT);
pinMode(SWITCH_PIN, INPUT);
pinMode(PIR_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(RELAY_PIN, OUTPUT);
lcd.init();
lcd.backlight();
// TAMPILKAN NAMA PADA LCD
lcd.setCursor(0, 0);
lcd.print("Nama :");
lcd.setCursor(0, 1);
lcd.print("NAMA ANDA");
delay(2000);
}
void loop() {
state = digitalRead(SWITCH_PIN);
if (state == 1) {
motion_state_previous = motion_state_current;
motion_state_current = digitalRead(PIR_PIN);
if (motion_state_previous == LOW && motion_state_current == HIGH) {
motion_state = 1;
} else if (motion_state_previous == HIGH && motion_state_current == LOW) {
motion_state = 0;
}
digitalWrite(HC_TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(HC_TRIG_PIN, LOW);
duration_us = pulseIn(HC_ECHO_PIN, HIGH);
distance_cm = 0.017 * duration_us;
if (distance_cm > DOOR_MAX_RANGE) {
door_state = 1;
} else {
door_state = 0;
}
if (motion_state == 1 && door_state == 0) {
digitalWrite(BUZZER_PIN, HIGH);
delay(50);
digitalWrite(BUZZER_PIN, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TERDETEKSI");
lcd.setCursor(0, 1);
lcd.print("Pergerakan");
//delay(2000);
} else if (motion_state == 0 && door_state == 1) {
digitalWrite(BUZZER_PIN, HIGH);
delay(50);
digitalWrite(BUZZER_PIN, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TERDETEKSI");
lcd.setCursor(0, 1);
lcd.print("Pintu Terbuka");
} else if (motion_state == 1 && door_state == 1) {
digitalWrite(BUZZER_PIN, HIGH);
delay(50);
digitalWrite(BUZZER_PIN, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TERDETEKSI");
lcd.setCursor(0, 1);
lcd.print("Gerak & Pintu Buka");
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("STATUS");
lcd.setCursor(0, 1);
lcd.print("Keamanan Aktif");
}
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("STATUS");
lcd.setCursor(0, 1);
lcd.print("Keamanan Mati");
}
delay(50);
}
Pendeteksi Pintu Terbuka
Pendeteksi Gerakan
HOME SECURITY SYSTEM
Tombol On/Off
Display Output
Buzzer Alarm
Relay Lampu