//NUR PATIMAH
// 203510682
//7F
#include <LiquidCrystal_I2C.h>
//menerima sinyal ultrasonik yang dipantulkan
#define ECHO_PIN 2
//mengirimkan sinyal ultrasonik.
#define TRIG_PIN 3
//mengendalikan buzzer
#define buzzer 4
//mengendalikan LED merah
#define ledmerah 13
//mengendalikan LED kuning
#define ledkuning 12
//mengendalikan LED hijau
#define ledhijau 11
// mengendalikan LCD yang terhubung melalui I2C
LiquidCrystal_I2C lcd(0x27,20,4);
void setup() {
pinMode(ledmerah, OUTPUT);
pinMode(ledkuning, OUTPUT);
pinMode(ledhijau, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(buzzer, OUTPUT);
Serial.begin(9600);
lcd.init();
lcd.backlight();
digitalWrite(ledmerah, HIGH);
digitalWrite(ledkuning, HIGH);
digitalWrite(ledhijau, HIGH);
tone(4,300,500);
lcd.setCursor(0,0);
lcd.print("Detektor Banjir");
lcd.setCursor(5,1);
lcd.print("oleh");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Nur Patimah ");
lcd.setCursor(0,1);
lcd.print("UIR");
delay(3000);
digitalWrite(ledmerah, LOW);
digitalWrite(ledkuning, LOW);
digitalWrite(ledhijau, LOW);
digitalWrite(buzzer, LOW);
lcd.clear();
}
//menggunakan sensor ultrasonik untuk mengukur kedalaman air
//dan mengembalikan nilai kedalaman dalam sentimeter
float kedalaman(){
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int durasi = pulseIn(ECHO_PIN, HIGH);
return 400-durasi*0.034/2;
}
void loop() {
//Jika kedalaman air tinggi (> 370 cm),
//maka status "Bahaya" ditampilkan dengan LED merah menyala
//dan buzzer berbunyi.
float kdlm = kedalaman();
if(kdlm > 370)
{
digitalWrite(ledmerah, HIGH);
digitalWrite(ledkuning, LOW);
digitalWrite(ledhijau, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Kdlmn :");
lcd.setCursor(7,0);
lcd.print(kdlm);
lcd.setCursor(14,0);
lcd.print("cm");
lcd.setCursor(0,1);
lcd.print("Satus :");
lcd.setCursor(9,1);
lcd.print("Bahaya");
tone(4,800,1000);
delay(1000);
lcd.clear();
delay(100);
}
//Jika kedalaman air sedang (320-370 cm),
//maka status "Siaga" ditampilkan dengan LED kuning menyala.
else{
if(kdlm >= 320 && kdlm < 370)
{
digitalWrite(ledmerah, LOW);
digitalWrite(ledkuning, HIGH);
digitalWrite(ledhijau, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Kdlmn :");
lcd.setCursor(7,0);
lcd.print(kdlm);
lcd.setCursor(14,0);
lcd.print("cm");
lcd.setCursor(0,1);
lcd.print("Satus :");
lcd.setCursor(9,1);
lcd.print("Siaga");
//digitalWrite(buzzer, LOW);
delay(1000);
lcd.clear();
delay(100);
}
//Jika kedalaman air rendah dan aman (< 320 cm),
//maka status "Aman" ditampilkan dengan LED hijau menyala.
else{
digitalWrite(ledmerah, LOW);
digitalWrite(ledkuning, LOW);
digitalWrite(ledhijau, HIGH);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Kdlmn :");
lcd.setCursor(7,0);
lcd.print(kdlm);
lcd.setCursor(14,0);
lcd.print("cm");
lcd.setCursor(0,1);
lcd.print("Satus :");
lcd.setCursor(9,1);
lcd.print("Aman");
//digitalWrite(buzzer, LOW);
delay(1000);
lcd.clear();
delay(100);
}
}
}