#include <Wire.h> // Memasukkan pustaka Wire untuk komunikasi I2C
#include <LiquidCrystal_I2C.h> // Memasukkan pustaka LCD I2C
// Deklarasi Variabel
const int ledMerahPin = 2; // Deklarasi pin untuk LED merah
const int ledKuningPin = 3; // Deklarasi pin untuk LED kuning
const int ledHijauPin = 4; // Deklarasi pin untuk LED hijau
const int buzzerPin = 5; // Deklarasi pin untuk buzzer
const int trigPin = 6; // Deklarasi pin untuk trig ultrasonic sensor
const int echoPin = 7; // Deklarasi pin untuk echo ultrasonic sensor
const int pirPin = 8; // Deklarasi pin untuk PIR sensor
LiquidCrystal_I2C lcd(0x27, 16, 2); // Buat dan inisialisasi objek LCD dengan alamat I2C 0x27, 16 kolom dan 2 baris
// Fungsi setup() dijalankan sekali saat memulai
void setup() {
// Kode untuk menginisialisasi perangkat keras dan konfigurasi awal
pinMode(ledMerahPin, OUTPUT); // Menetapkan ledMerahPin sebagai output
pinMode(ledKuningPin, OUTPUT); // Menetapkan ledKuningPin sebagai output
pinMode(ledHijauPin, OUTPUT); // Menetapkan ledHijauPin sebagai output
pinMode(buzzerPin, OUTPUT); // Menetapkan buzzerPin sebagai output
pinMode(trigPin, OUTPUT); // Menetapkan trigPin sebagai output
pinMode(echoPin, INPUT); // Menetapkan echoPin sebagai input
pinMode(pirPin, INPUT); // Menetapkan pirPin sebagai input
// Menginisialisasi tampilan LCD dengan 16 kolom dan 2 baris
lcd.begin(16, 2);
lcd.print("Sistem Pendeteksi"); // Menampilkan teks "Sistem Pendeteksi" pada baris pertama
lcd.setCursor(0, 1); // Mengatur kursor ke baris kedua
lcd.print("Hama dan Pengganggu"); // Menampilkan teks "HAMA" pada baris kedua
delay(1000); // Menunggu selama 1 detik
lcd.clear(); // Membersihkan tampilan LCD
}
// Fungsi loop() dijalankan berulang kali selama program berjalan
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW); // Menetapkan trigPin ke level LOW
delayMicroseconds(2); // Menunggu selama 2 mikrodetik
digitalWrite(trigPin, HIGH); // Menetapkan trigPin ke level HIGH
delayMicroseconds(10); // Menunggu selama 10 mikrodetik
digitalWrite(trigPin, LOW); // Menetapkan trigPin ke level LOW
duration = pulseIn(echoPin, HIGH); // Mengukur durasi pulsa echoPin yang HIGH
distance = duration * 0.034 / 2; // Menghitung jarak berdasarkan durasi
int pirValue = digitalRead(pirPin); // Membaca nilai dari PIR sensor
// Kondisi jika PIR sensor mendeteksi gerakan
if (pirValue == HIGH) {
lcd.setCursor(0, 0); // Mengatur kursor ke baris pertama
lcd.print("Status: Serangan Hama/Pencuri "); // Menampilkan teks "Status: Serangan Hama" pada baris pertama
digitalWrite(ledMerahPin, HIGH); // Nyalakan LED merah
digitalWrite(ledKuningPin, HIGH); // Matikan LED kuning
digitalWrite(ledHijauPin, LOW); // Matikan LED hijau
tone(buzzerPin, 1000); // Buzzer berbunyi dengan frekuensi 1000 Hz
} else {
noTone(buzzerPin); // Matikan buzzer
}
// Kondisi jika jarak Kurang Dari 1 m
if (distance < 1.0) {
lcd.setCursor(0, 0); // Mengatur kursor ke baris pertama
lcd.print("Status: Bahaya!"); // Menampilkan teks "Status: Bahaya!" pada baris pertama
digitalWrite(ledMerahPin, HIGH); // Nyalakan LED merah
digitalWrite(ledKuningPin, LOW); // Matikan LED kuning
digitalWrite(ledHijauPin, LOW); // Matikan LED hijau
tone(buzzerPin, 1000); // Buzzer berbunyi dengan frekuensi 1000 Hz
} else if (distance >= 2.0 && distance <= 3.0) { // Kondisi jika jarak antara 2 m dan 3 m
lcd.setCursor(0, 0); // Mengatur kursor ke baris pertama
lcd.print("Status: Siaga"); // Menampilkan teks "Status: Siaga" pada baris pertama
digitalWrite(ledMerahPin, LOW); // Matikan LED merah
digitalWrite(ledKuningPin, HIGH); // Nyalakan LED kuning
digitalWrite(ledHijauPin, LOW); // Matikan LED hijau
slowBuzzer(); // Memanggil fungsi slowBuzzer
} else { // Kondisi jika jarak Lebih Dari 3 Meter
lcd.setCursor(0, 0); // Mengatur kursor ke baris pertama
lcd.print("Status: Waspada"); // Menampilkan teks "Status: Waspada" pada baris pertama
digitalWrite(ledMerahPin, LOW); // Matikan LED merah
digitalWrite(ledKuningPin, LOW); // Matikan LED kuning
digitalWrite(ledHijauPin, HIGH); // Nyalakan LED hijau
noTone(buzzerPin); // Matikan buzzer
}
lcd.setCursor(0, 1); // Mengatur kursor ke baris kedua
lcd.print("Jarak: "); // Menampilkan teks "Jarak: " pada baris kedua
lcd.print(distance/100.0); // Menampilkan jarak yang telah dihitung
lcd.print(" Meter"); // Menampilkan teks " meter" setelah jarak
delay(1000); // Menunggu selama 1 detik
lcd.clear(); // Membersihkan tampilan LCD
}
// Fungsi yang digunakan untuk membuat buzzer berbunyi dengan kecepatan lambat
void slowBuzzer() {
for (int i = 0; i < 3; i++) { // Loop for yang akan mengulangi kode di dalamnya tiga kali
tone(buzzerPin, 500); // Membuat buzzer berbunyi dengan frekuensi 500 Hz
delay(500); // Menunggu selama 500 milidetik
noTone(buzzerPin); // Matikan buzzer
delay(1000); // Menunggu selama 1 detik
}
}