// Inisialisasi pin trigger dan echo sensor ultrasonik
const int trigPin = 11; // Pin trigger terhubung ke pin 11 Arduino
const int echoPin = 10; // Pin echo terhubung ke pin 10 Arduino
const int relayPin = 3;
const int pirPin = 2;
const int ledPinUltrasonic = 4; // LED yang terhubung ke sensor Ultrasonik
const int ledPinPIR = 5; // LED yang terhubung ke sensor PIR
// Variabel untuk menyimpan status gerakan terakhir
bool gerakanTerakhir = false;
void setup() {
// Inisialisasi komunikasi serial untuk debugging
Serial.begin(9600);
// Set pin trigger sebagai output
pinMode(trigPin, OUTPUT);
// Set pin echo sebagai input
pinMode(echoPin, INPUT);
// Set pin relay sebagai output
pinMode(relayPin, OUTPUT);
// Set pin sensor PIR sebagai input
pinMode(pirPin, INPUT);
// Set pin LED sebagai output
pinMode(ledPinUltrasonic, OUTPUT);
pinMode(ledPinPIR, OUTPUT);
// Mengatur status awal relay dan LED (LOW)
digitalWrite(relayPin, LOW);
digitalWrite(ledPinUltrasonic, LOW);
digitalWrite(ledPinPIR, LOW);
}
void loop() {
// Membaca jarak dari sensor ultrasonik
long jarak = bacaJarak();
// Membaca status sensor PIR
int pirStatus = digitalRead(pirPin);
// Jika sensor PIR mendeteksi gerakan (orang masuk)
if (pirStatus == HIGH) {
Serial.println("gerakan terdeteksi");
digitalWrite(ledPinPIR, HIGH);
digitalWrite(relayPin, HIGH);
delay(10000); // Aktifkan relay selama 10 detik
} else {
Serial.println("gerakan tidak terdeteksi");
digitalWrite(ledPinPIR, LOW); // LED mati
digitalWrite(relayPin, LOW); // Matikan relay
}
// Jika jarak lebih dari 40cm dan tidak ada gerakan terdeteksi sebelumnya
if (jarak > 40 && !gerakanTerakhir) {
Serial.println("Objek jauh dari closet!!");
digitalWrite(ledPinUltrasonic, HIGH); // Nyalakan LED
delay(8000); // Tunda 8 detik
Serial.println("Objek didekat closet!! ");
digitalWrite(ledPinUltrasonic, LOW); // Matikan LED
gerakanTerakhir = true; // Set status gerakan terakhir menjadi true
}
// Jika jarak kurang dari atau sama dengan 40cm
else if (jarak <= 40) {
gerakanTerakhir = false; // Set status gerakan terakhir menjadi false
}
// Tunda sejenak sebelum loop berikutnya
delay(500);
}
// Fungsi untuk membaca jarak dari sensor ultrasonik
long bacaJarak() {
// Mengirimkan pulsa ultrasonik
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Menerima waktu yang dibutuhkan untuk pulsa kembali
long durasi = pulseIn(echoPin, HIGH);
// Mengonversi waktu menjadi jarak (cm)
long jarak = durasi * 0.034 / 2;
return jarak;
}