#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include <ESP32Servo.h>
#define pin_PIR1 13
#define pin_LDR 32
#define pin_Buzzer 12
#define pin_LED 23
#define pin_Servo 14
Servo servo;
int status_PIR1 = LOW;
int nilai_PIR1 = 0;
int sudut = 0;
const float GAMMA = 0.7;
const float RL10 = 50;
// Fungsi aktifasi komponen Buzzer
void buzzer_Aktif(int val){
if (val == 1) {
// Buzzer berbunyi
tone(pin_Buzzer, 150);
} else if (val == 0){
// Buzzer mati
noTone(pin_Buzzer);
}
}
// Fungsi aktifasi Sensor PIR 1
void sensor_PIR1(){
// Baca data dari sensor PIR 1
nilai_PIR1 = digitalRead(pin_PIR1);
// Jika objek terdeteksi
if (nilai_PIR1 == HIGH) {
if (status_PIR1 == LOW) {
Serial.println("Sensor PIR Mendeteksi Gerakan");
buzzer_Aktif(1);
for (sudut = 0; sudut <= 180; sudut += 100) {
servo.write(sudut);
delay(30);
}
for (sudut = 180; sudut >= 0; sudut -= 100) {
servo.write(sudut);
delay(30);
}
status_PIR1 = HIGH;
}
// Jika objek tidak terdeteksi
} else {
if (status_PIR1 == HIGH) {
Serial.println("Sensor PIR Tidak Mendeteksi Gerakan");
buzzer_Aktif(0);
status_PIR1 = LOW;
}
}
}
// Fungsi aktifasi Sensor LDR
void sensor_LDR(){
int analogValue = analogRead(pin_LDR);
float voltage = analogValue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
lux = lux * 1000;
lcd.setCursor(0, 0);
lcd.print("Cahaya: ");
if (lux > 100) {
lcd.print("Terang");
digitalWrite(pin_LED, LOW);
}
else {
lcd.print("Gelap ");
digitalWrite(pin_LED, HIGH);
}
lcd.setCursor(0, 1);
lcd.print("Lux: ");
lcd.print(lux);
lcd.print(" ");
delay(100);
}
void setup() {
Serial.begin(115200);
// Konfigurasi PIN Output
pinMode(pin_Buzzer, OUTPUT);
pinMode(pin_LED, OUTPUT);
// Konfigurasi PIN Input
pinMode(pin_PIR1, INPUT);
pinMode(pin_LDR, INPUT);
// Konfigurasi LCD output
lcd.init();
lcd.backlight();
servo.attach(pin_Servo);
// Kondisi awal LED mati
digitalWrite(pin_LED, LOW);
}
void loop() {
sensor_PIR1();
sensor_LDR();
}