#define BLYNK_TEMPLATE_ID "TMPL6k2Ij1rN4"
#define BLYNK_TEMPLATE_NAME "UAS IOT 1"
#define BLYNK_AUTH_TOKEN "eAK2n1uS0mfo-qQbwMIlwDoWMgWP-zAr"
#define DHTPIN 4 // Pin tempat sensor DHT22 terhubung
#define DHTTYPE DHT22 // Jenis sensor DHT22
#define RELAY_PUMP_PIN 13 // Pin untuk mengontrol relay pompa
#define RELAY_UV_PIN 5 // Pin untuk mengontrol relay lampu UV
#define LDR_PIN 36 // Pin tempat sensor LDR terhubung
#define BUTTON_PUMP_PIN 27 // Pin tombol tekan untuk pompa
#define BUTTON_UV_PIN 26 // Pin tombol tekan untuk lampu UV
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <BlynkSimpleEsp32.h> // Sesuaikan dengan modul ESP yang Anda gunakan
char auth[] = BLYNK_AUTH_TOKEN;
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 20, 4); // Alamat I2C: 0x27, Kolom: 20, Baris: 4
int pumpState = LOW; // Awalnya, relay pompa mati
int uvState = LOW; // Awalnya, relay lampu UV mati
void setup() {
Serial.begin(9600);
Blynk.begin(auth, "Wokwi-GUEST", ""); // Gantilah dengan SSID dan password WiFi Anda
dht.begin();
pinMode(RELAY_PUMP_PIN, OUTPUT);
pinMode(RELAY_UV_PIN, OUTPUT);
pinMode(LDR_PIN, INPUT);
pinMode(BUTTON_PUMP_PIN, INPUT_PULLUP);
pinMode(BUTTON_UV_PIN, INPUT_PULLUP);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Monitoring Kondisi");
lcd.setCursor(0, 1);
lcd.print("Pompa dan Lampu UV");
delay(2000);
lcd.clear();
}
void loop() {
Blynk.run();
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
int ldrValue = analogRead(LDR_PIN);
// Baca status tombol tekan
int pumpButtonState = digitalRead(BUTTON_PUMP_PIN);
int uvButtonState = digitalRead(BUTTON_UV_PIN);
// Periksa suhu untuk mengontrol relay pompa
if (temperature > 35 || pumpButtonState == LOW) {
digitalWrite(RELAY_PUMP_PIN, HIGH); // Nyalakan relay pompa jika suhu > 35 atau tombol ditekan
pumpState = HIGH;
} else {
digitalWrite(RELAY_PUMP_PIN, LOW); // Matikan relay pompa jika suhu <= 35 dan tombol tidak ditekan
pumpState = LOW;
}
// Periksa nilai cahaya dari sensor LDR untuk mengontrol relay lampu UV
if (ldrValue > 500 || uvButtonState == LOW) {
digitalWrite(RELAY_UV_PIN, HIGH); // Nyalakan relay lampu UV jika cahaya kurang dari 500 atau tombol ditekan
uvState = HIGH;
} else {
digitalWrite(RELAY_UV_PIN, LOW); // Matikan relay lampu UV jika cahaya >= 500 dan tombol tidak ditekan
uvState = LOW;
}
// Update tampilan LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C ");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(humidity);
lcd.print(" % ");
// Tampilkan status pompa di LCD
lcd.setCursor(0, 2);
lcd.print("Pompa: ");
if (pumpState == HIGH) {
lcd.print("Menyala");
} else {
lcd.print("Tidak Menyala");
}
// Tampilkan status lampu UV di LCD
lcd.setCursor(0, 3);
lcd.print("UV: ");
if (uvState == HIGH) {
lcd.print("Aktif");
} else {
lcd.print("Tidak Aktif");
}
// Kirim data ke Blynk
Blynk.virtualWrite(V0, temperature);
Blynk.virtualWrite(V1, humidity);
Blynk.virtualWrite(V2, ldrValue);
Blynk.virtualWrite(V3, pumpState);
Blynk.virtualWrite(V4, uvState);
delay(1000);
}