// memanggil library motor servo
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// inialisasi servo
Servo servo1;
// inialisasi pin sensor
const int pinHujan = 2;
const int pinLdr = 3;
// inisialisai lapu dan buzzer
int merah = 8;
int kuning = 9;
int hijau = 10;
int bazer = 11;
//inisialisasi ultrasonic
const int TRIG_PIN = 6;// pin triger sensor ultrasonic di koneksikan ke pin 12 pada arduino
const int ECHO_PIN = 7;// pin echo sensor ultrasonic di koneksikan ke pin 11 pada arduino
// inialisasi pembacaan sensor
int hujan, cahaya;
// inialisasi derajat buka-tutup servo
int tutup = 110;
int buka = 10;
void setup()
{
// setting baud rate serial monitor
Serial.begin(9600);
lcd.begin(16,2);
// inialisasi pin servo
servo1.attach(5);
//inisialisasi lampu dan bazer
pinMode(merah, OUTPUT);
pinMode(kuning, OUTPUT);
pinMode(hijau, OUTPUT);
pinMode(bazer, OUTPUT);
// inialisasi status input/output pin
pinMode(pinHujan, INPUT);
pinMode(pinLdr, INPUT);
// ultra
pinMode(TRIG_PIN,OUTPUT);
pinMode(ECHO_PIN,INPUT);
}
void loop()
{
// pembacaan sensor
hujan = digitalRead(pinHujan);
cahaya = digitalRead(pinLdr);
// menulis pada serial monitor pembacaan sensor hujan dan cahaya
// hasil output data sensor bisa dilihat di serial monitor arduino
Serial.print(hujan);
Serial.print(" ");
Serial.println(cahaya);
Serial.println(" ");
//ultra
long duration, distanceCm;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN,HIGH);
distanceCm = duration / 58.8 ;
// sensor hujan akan bernilai = 0 saat ada air
// sensor cahaya akan bernilai = 1 saat gelap
// dan berlaku sebaliknya
// jika kondisi hujan dan mendung
if (hujan == 0 && cahaya == 1 && distanceCm>200 )
{
// servo menutup
servo1.write(tutup);
Serial.print("hujan mendung");
lcd.setCursor(0,0);
lcd.print("hujan mendung");
lcd.setCursor(0,1);
lcd.print("terbuka ");
digitalWrite(merah, HIGH);
digitalWrite(kuning, LOW);
digitalWrite(hijau, LOW);
digitalWrite(bazer, HIGH);
delay(1000);
digitalWrite(bazer, LOW);
}
else if (hujan == 0 && cahaya == 1 && distanceCm<200 )
{
// servo menutup
servo1.write(tutup);
Serial.print("hujan mendung");
lcd.setCursor(0,0);
lcd.print("hujan mendung");
lcd.setCursor(0,1);
lcd.print("tidak terbuka");
digitalWrite(hijau, HIGH);
digitalWrite(kuning, LOW);
digitalWrite(merah, LOW);
}
// jika kondisi hujan panas
else if (hujan == 0 && cahaya == 0 && distanceCm>200 )
{
// servo menutup
servo1.write(tutup);
Serial.print("hujan panas");
lcd.setCursor(0,0);
lcd.print("hujan panas");
lcd.setCursor(0,1);
lcd.print("terbuka ");
digitalWrite(merah, HIGH);
digitalWrite(kuning, LOW);
digitalWrite(hijau, LOW);
digitalWrite(bazer, HIGH);
delay(1000);
digitalWrite(bazer, LOW);
}
else if (hujan == 0 && cahaya == 0 && distanceCm<200 )
{
// servo menutup
servo1.write(tutup);
Serial.print("hujan panas");
lcd.setCursor(0,0);
lcd.print("hujan panas");
lcd.setCursor(0,1);
lcd.print("tidak terbuka");
digitalWrite(hijau, HIGH);
digitalWrite(kuning, LOW);
digitalWrite(merah, LOW);
}
// jika kondisi mendung
else if (hujan == 1 && cahaya == 1 && distanceCm>200 )
{
// servo menutup
servo1.write(tutup);
Serial.print("mendung");
lcd.setCursor(0,0);
lcd.print("mendung ");
lcd.setCursor(0,1);
lcd.print("terbuka ");
digitalWrite(kuning, HIGH);
digitalWrite(hijau, LOW);
digitalWrite(merah, LOW);
}
else if (hujan == 1 && cahaya == 1 && distanceCm<200 )
{
// servo menutup
servo1.write(tutup);
Serial.print("mendung");
lcd.setCursor(0,0);
lcd.print("mendung ");
lcd.setCursor(0,1);
lcd.print("tidak terbuka");
digitalWrite(hijau, HIGH);
digitalWrite(kuning, LOW);
digitalWrite(merah, LOW);
}
// jika kondisi tidak hujan dan tidak mendung
else if (hujan == 1 && cahaya == 0 && distanceCm>200 )
{
// servo membuka
servo1.write(buka);
Serial.print("cerah");
lcd.setCursor(0,0);
lcd.print("cerah ");
lcd.setCursor(0,1);
lcd.print("terbuka ");
digitalWrite(hijau, HIGH);
digitalWrite(kuning, LOW);
digitalWrite(merah, LOW);
}
else if (hujan == 1 && cahaya == 0 && distanceCm<200 )
{
// servo membuka
servo1.write(buka);
Serial.print("cerah");
lcd.setCursor(0,0);
lcd.print("cerah ");
lcd.setCursor(0,1);
lcd.print("tidak terbuka");
digitalWrite(kuning, HIGH);
digitalWrite(hijau, LOW);
digitalWrite(merah, LOW);
}
// delay jalannya program
delay(300);
}