#define BLYNK_TEMPLATE_ID "TMPL6GL4PNLv_"
#define BLYNK_TEMPLATE_NAME "PBH Kelompok 4"
#define BLYNK_AUTH_TOKEN "hyNWts3PFzg6dOl0E4t1U_pILskmVUa9"
#include <BlynkSimpleEsp32.h>
// LCD
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Buzzer
int buzzer = 5;
// Sensor Gas
// int Gas_analog = 4;
int Gas_digital = 2;
int threshold = 200;
// DHT
#include "DHT.h"
#define DHTPIN 23
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// HC SR04
#define ECHO_PIN 17
#define TRIG_PIN 16
// PIR
#define pirPin 34
int gerakanPir;
// Relay dan Push Button
int lampuHalaman = 13;
int pbLampuHalaman = 35;
int pbStateLampuHalaman = false;
int lampuRuangan = 27;
int pbLampuRuangan = 33;
int pbStateLampuRuangan = false;
int lampuKamar = 0;
int pbLampuKamar = 18;
int pbStateLampuKamar = false;
int lampuDapur = 26;
int pbLampuDapur = 32;
int pbStateLampuDapur = false;
int stopKontak = 25;
int pbStopKontak = 15;
int pbStateStopKontak = false;
void setup() {
char ssid[] = "Wokwi-GUEST";
char password[] = "";
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, password);
Serial.begin(115200);
pinMode(buzzer, OUTPUT);
pinMode(Gas_digital, INPUT);
lcd.init();
lcd.backlight();
dht.begin();
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(pirPin, INPUT);
pinMode(lampuHalaman, OUTPUT);
pinMode(pbLampuHalaman, INPUT);
pinMode(lampuRuangan, OUTPUT);
pinMode(pbLampuRuangan, INPUT);
pinMode(lampuKamar, OUTPUT);
pinMode(pbLampuKamar, INPUT);
pinMode(lampuDapur, OUTPUT);
pinMode(pbLampuDapur, INPUT);
pinMode(stopKontak, OUTPUT);
pinMode(pbStopKontak, INPUT);
}
void loop() {
int gassensorDigital = digitalRead(Gas_digital);
gerakanPir = digitalRead(pirPin);
digitalWrite(buzzer, LOW);
Blynk.run();
if(gassensorDigital == 0 && gerakanPir == 1){
lcd.setCursor(0, 0);
lcd.print("ADA KEBOCORAN GAS!");
lcd.setCursor(0, 1);
lcd.print("ADA ORANG!");
digitalWrite(buzzer, HIGH);
}
else if(gassensorDigital == 1 && gerakanPir == 0){
lcd.setCursor(0, 0);
lcd.print("Keadaan Aman");
}
else if(gassensorDigital == 1 && gerakanPir == 1){
lcd.setCursor(0, 0);
lcd.print("ADA ORANG!");
digitalWrite(buzzer, HIGH);
}
else if(gassensorDigital == 0 && gerakanPir == 0){
lcd.setCursor(0, 0);
lcd.print("ADA KEBOCORAN GAS!");
digitalWrite(buzzer, HIGH);
}
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
float distance = readDistanceCM();
pbStateLampuHalaman = digitalRead(pbLampuHalaman);
pbStateLampuRuangan = digitalRead(pbLampuRuangan);
pbStateLampuKamar = digitalRead(pbLampuKamar);
pbStateLampuDapur = digitalRead(pbLampuDapur);
pbStateStopKontak = digitalRead(pbStopKontak);
if(pbStateLampuHalaman == HIGH){
digitalWrite(lampuHalaman, HIGH);
Blynk.virtualWrite(V1, "Lampu Halaman Menyala");
}
else{
digitalWrite(lampuHalaman, LOW);
Blynk.virtualWrite(V1, "Lampu Halaman Mati");
}
if(pbStateLampuRuangan == HIGH){
digitalWrite(lampuRuangan, HIGH);
Blynk.virtualWrite(V2, "Lampu Ruangan Menyala");
}
else{
digitalWrite(lampuRuangan, LOW);
Blynk.virtualWrite(V2, "Lampu Ruangan Mati");
}
if(pbStateLampuKamar == HIGH){
digitalWrite(lampuKamar, HIGH);
Blynk.virtualWrite(V3, "Lampu Kamar Menyala");
}
else{
digitalWrite(lampuKamar, LOW);
Blynk.virtualWrite(V3, "Lampu Kamar Mati");
}
if(pbStateLampuDapur == HIGH){
digitalWrite(lampuDapur, HIGH);
Blynk.virtualWrite(V4, "Lampu Dapur Menyala");
}
else{
digitalWrite(lampuDapur, LOW);
Blynk.virtualWrite(V4, "Lampu Dapur Mati");
}
if(pbStateStopKontak == HIGH){
digitalWrite(stopKontak, HIGH);
Blynk.virtualWrite(V5, "Stop Kontak Aktif");
}
else{
digitalWrite(stopKontak, LOW);
Blynk.virtualWrite(V5, "Stop Kontak Tidak Aktif");
}
lcd.setCursor(0, 2);
lcd.print("Suhu : ");
lcd.print(temperature);
lcd.print("C");
lcd.setCursor(0, 3);
lcd.print("Kelembapan : ");
lcd.print(humidity);
lcd.print("%");
if(distance < 20){
lcd.setCursor(0, 1);
lcd.print("Air Habis");
digitalWrite(buzzer, HIGH);
}
else if(distance >= 20 && distance < 70){
lcd.setCursor(0, 1);
lcd.print("Air Kurang");
}
else if(distance >= 70 && distance < 350){
lcd.setCursor(0, 1);
lcd.print("Air Cukup");
}
else{
lcd.setCursor(0, 1);
lcd.print("Air Penuh");
}
delay(1000);
lcd.clear();
}
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}