#include <Servo.h>
Servo garasiServo;
// Definisi Pin Komponen
const int ldrPin = A0; // Sensor LDR
const int ledPin = 13; // LED Lampu Teras
const int pirPin = 2; // Sensor PIR
const int servoPin = 3; // Motor Servo Pintu Garasi
const int buzzerPin = 5; // Buzzer Alarm
const int echoPin = 9; // Ultrasonic Echo
const int trigPin = 10; // Ultrasonic Trig
// Ambang batas nilai LDR (Nilai < 500 diasumsikan Gelap/Malam)
const int ldrThreshold = 500;
void setup() {
garasiServo.attach(servoPin);
pinMode(ledPin, OUTPUT);
pinMode(pirPin, INPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT);
garasiServo.write(0); // Garasi awal tertutup
}
void loop() {
// A. Pembacaan Sensor LDR (Cahaya Lingkungan)
int ldrVal = analogRead(ldrPin);
bool isGelap = (ldrVal < ldrThreshold);
// Lampu Teras otomatis ON saat gelap, OFF saat terang
if (isGelap) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
// B. Sensor Ultrasonik + Servo (Pintu Garasi Otomatis)
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
int distance = duration * 0.034 / 2; // Menghitung jarak dalam cm
// Jika mobil mendekat pada jarak < 10 cm, garasi terbuka 90 derajat
if (distance < 10 && distance > 0) {
garasiServo.write(90);
} else {
garasiServo.write(0);
}
// C. Sensor PIR + Buzzer (Keamanan Malam Hari)
int pirVal = digitalRead(pirPin);
// Buzzer berbunyi HANYA jika PIR mendeteksi pergerakan PADA MALAM HARI
if (isGelap && pirVal == HIGH) {
tone(buzzerPin, 1000); // Alarm berbunyi dengan nada 1000 Hz
} else {
noTone(buzzerPin); // Alarm mati
}
delay(100);
}