//Amaliah Ramadanti
// 213510320
#include <LiquidCrystal_I2C.h> // memasukkan library LiquidCrystal_I2C (Library LCD)
#define ECHO_PIN 6 // pin sensor ultrasonik untuk membaca echo
#define TRIG_PIN 7 // pin sensor ultrasonik untuk mengirimkan sinyal
#define buzzer 4 // pin buzzer untuk menghasilkan suara
#define ledmerah 13 // pin LED merah untuk kondisi bahaya
#define ledkuning 12 // pin LED kuning untuk kondisi siaga
#define ledhijau 11 // pin LED hijau untuk kondisi aman
LiquidCrystal_I2C lcd(0x27,20,4); // mengatur LCD I2C dengan alamat 0x27, dengan ukuran 20 kolom dan 4 baris
void setup() { //digunakan untuk melakukan konfigurasi pin, menginisialisasi library,
//dan melakukan pengaturan awal untuk memastikan bahwa board Arduino siap menjalankan program yang ditulis
pinMode(ledmerah, OUTPUT); // mengatur pin LED merah sebagai output
pinMode(ledkuning, OUTPUT); // mengatur pin LED kuning sebagai output
pinMode(ledhijau, OUTPUT); // mengatur pin LED hijau sebagai output
pinMode(TRIG_PIN, OUTPUT); // mengatur pin TRIG_PIN sebagai output
pinMode(ECHO_PIN, INPUT); // mengatur pin ECHO_PIN sebagai input
pinMode(buzzer, OUTPUT); // mengatur pin buzzer sebagai output
Serial.begin(9600); // memulai komunikasi serial dengan baudrate 9600 antara pc dengan arduino
//yang nantinya serial ini kita gunakan untuk membaca hasil pengukuran sensor ultrasonik
lcd.init(); // menginisialisasi LCD
lcd.backlight(); // menghidupkan backlight LCD
digitalWrite(ledmerah, HIGH); // menghidupkan LED merah
digitalWrite(ledkuning, HIGH); // menghidupkan LED kuning
digitalWrite(ledhijau, HIGH); // menghidupkan LED hijau
tone(4,300,500); // menghasilkan suara pada buzzer dengan frekuensi 300Hz dan durasi 500ms 0,5 detik
lcd.setCursor(0,0); // mengatur posisi kursor di LCD di kolom 0 dan baris 0
lcd.print("Detektor Banjir"); // menampilkan teks "Detektor Banjir" di LCD
lcd.setCursor(5,1); // mengatur posisi kursor di LCD di kolom 5 dan baris 1
delay(3000); // delay selama 3 detik
digitalWrite(ledmerah, LOW); // mematikan LED merah
digitalWrite(ledkuning, LOW); // mematikan LED kuning
digitalWrite(ledhijau, LOW); // mematikan LED hijau
digitalWrite(buzzer, LOW); // mematikan Buzzer
lcd.clear(); // membersihkan tampilan LCD
}
// Fungsi untuk mengukur kedalaman menggunakan sensor ultrasonik
float kedalaman(){
digitalWrite(TRIG_PIN, LOW); // Mengirim sinyal LOW ke pin TRIG untuk memulai pengukuran
delayMicroseconds(2); // Memberi jeda selama 2 mikrodetik
digitalWrite(TRIG_PIN, HIGH); // Mengirim sinyal HIGH ke pin TRIG selama 10 mikrodetik
delayMicroseconds(10); // Memberi jeda selama 10 mikrodetik
digitalWrite(TRIG_PIN, LOW); // Mengirim sinyal LOW ke pin TRIG untuk menghentikan pengukuran
int durasi = pulseIn(ECHO_PIN, HIGH); // Membaca durasi sinyal ultrasonik yang dipantulkan kembali
return 400-durasi*0.034/2; // Menghitung kedalaman dan mengembalikan nilai dalam satuan cm
}
//faro
// Program akan terus berjalan dalam loop
void loop() { // bagian dari program Arduino yang dieksekusi secara terus-menerus setelah program dijalankan
//pada fungsi void setup(). Setelah selesai dieksekusi, program akan kembali ke awal dan kembali mengeksekusi fungsi void loop() secara terus-menerus.
// Status bahaya jika kedalaman melebihi 350 cm
float kdlm = kedalaman(); // memanggil fungsi
if(kdlm > 350) // Jika kondisi benar, maka lampu merah akan menyala
{
digitalWrite(ledmerah, HIGH); // Nyalakan lampu merah
digitalWrite(ledkuning, LOW); // matikan lampu kuning
digitalWrite(ledhijau, LOW); // matikan lampu hujau
lcd.clear(); // Membersihkan layar LCD
lcd.setCursor(0,0); // Menetapkan posisi kursor pada baris 0 kolom 0
lcd.print("Kdlmn :"); // Menampilkan pesan "Kdlmn :"
lcd.setCursor(7,0); // Menetapkan posisi kursor pada baris 0 kolom 7
lcd.print(kdlm); // Menampilkan nilai kedalaman
lcd.setCursor(14,0); // Menetapkan posisi kursor pada baris 0 kolom 14
lcd.print("cm"); // Menampilkan satuan cm
lcd.setCursor(0,1); // Menetapkan posisi kursor pada baris 1 kolom 0
lcd.print("Satus :"); // Menampilkan pesan "Satus :"
lcd.setCursor(9,1); // Menetapkan posisi kursor pada baris 1 kolom 9
lcd.print("Bahaya"); // Menampilkan pesan "Bahaya"
tone(4,1000,1000); // Memutar suara pada pin 4 dengan frekuensi 1000 Hz selama 1000 ms
delay(1000); // Memberi jeda selama 1000ms atau 1 detik
lcd.clear(); // Membersihkan layar LCD
delay(100); // tunggu selama 100 ms
}
else{
// Lampu Kuning (Siaga)
if(kdlm >= 300 && kdlm < 350) // Jika jarak lebih dari sama dengan 250 cm dan kurang dari 350 cm
{
digitalWrite(ledmerah, LOW); // Matikan lampu merah
digitalWrite(ledkuning, HIGH); // Nyalakan lampu kuning
digitalWrite(ledhijau, LOW); // Matikan lampu hijau
lcd.clear(); // Bersihkan tampilan LCD
lcd.setCursor(0,0); // Set kursor LCD pada baris 0 kolom 0
lcd.print("Kdlmn :"); // Tampilkan teks "Kdlmn :" pada LCD
lcd.setCursor(7,0); // Set kursor pada kolom 7 baris 0
lcd.print(kdlm); // Tampilkan nilai variabel kdlm pada LCD
lcd.setCursor(14,0); // Set kursor pada kolom 14 baris 0
lcd.print("cm"); // Tampilkan teks "cm" pada LCD
lcd.setCursor(0,1); // Set kursor pada baris 1 kolom 0
lcd.print("Satus :"); // Tampilkan teks "Satus :" pada LCD
lcd.setCursor(9,1); // Set kursor pada kolom 9 baris 1
lcd.print("Siaga"); // Tampilkan teks "Siaga" pada LCD
tone(4,100,100); // Memutar suara pada pin 4 dengan frekuensi 100 Hz selama 100 ms
delay(1000); // Memberi jeda selama 1000ms atau 1 detik
lcd.clear(); // Bersihkan tampilan LCD
delay(100); // Tunggu selama 100ms
}
else{
// Lampu Hijau (Aman)
digitalWrite(ledmerah, LOW); // Matikan lampu merah
digitalWrite(ledkuning, LOW); // Matikan lampu kuning
digitalWrite(ledhijau, HIGH); // Nyalakan lampu hijau
lcd.clear(); // Bersihkan tampilan LCD
lcd.setCursor(0,0); // Set kursor LCD pada baris 0 kolom 0
lcd.print("Kdlmn :"); // Tampilkan teks "Kdlmn :" pada LCD
lcd.setCursor(7,0); // Set kursor pada kolom 7 baris 0
lcd.print(kdlm); // Tampilkan nilai variabel kdlm pada LCD
lcd.setCursor(14,0); // Set kursor pada kolom 14 baris 0
lcd.print("cm"); // Tampilkan teks "cm" pada LCD
lcd.setCursor(0,1); // Set kursor pada baris 1 kolom 0
lcd.print("Satus :"); // Tampilkan teks "Satus :" pada LCD
lcd.setCursor(9,1); // Set kursor pada kolom 9 baris 1
lcd.print("Aman"); // Tampilkan teks "Aman" pada LCD
digitalWrite(buzzer, LOW); // Matikan buzzer
delay(1000); // Tunggu selama 1000ms
lcd.clear(); // Bersihkan tampilan LCD
delay(100); // Tunggu selama 100ms
}
}
}