#define BLYNK_TEMPLATE_ID "TMPL6nzgj7KGP"
#define BLYNK_TEMPLATE_NAME "Automatic Curtain"
#define BLYNK_AUTH_TOKEN "-OJ0LNxpmyoZItnE0GNQ3Ee9kyeTOusv"
#include <ESP32Servo.h>
#include <BlynkSimpleEsp32.h>
#define LED 18 // Pin LED
#define LDR_PIN 35 // Pin sensor LDR
#define HUJAN_PIN 34 // Pin sensor hujan
#define SERVO_PIN 25 // Pin servo motor
// Token Blynk dan WiFi
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Variabel dan objek
Servo gorden1; // Servo motor untuk gorden
bool gorden_terbuka = false; // Status gorden terbuka
bool gorden_tertutup = true; // Status gorden tertutup
bool sensor_aktif = false; // Status sensor aktif
int ldr = 0; // Variabel untuk nilai sensor LDR
int hujan = 0; // Variabel untuk nilai sensor hujan
BlynkTimer timer; // Timer Blynk
// Fungsi yang dipanggil saat tombol di aplikasi Blynk berubah
BLYNK_WRITE(V0) {
int sensorValue = param.asInt(); // Membaca nilai dari tombol
if (sensorValue == 1) { // Jika tombol ditekan (sensor diaktifkan)
digitalWrite(LED, HIGH);
Serial.println("SENSOR AKTIF");
sensor_aktif = true;
} else { // Jika tombol tidak ditekan (sensor dinonaktifkan)
digitalWrite(LED, LOW);
Serial.println("SENSOR NONAKTIF");
sensor_aktif = false;
}
}
// Fungsi untuk membaca sensor dan mengontrol gorden
void kontrolGorden() {
// Membaca nilai sensor
ldr = map(analogRead(LDR_PIN), 0, 4096, 100, 0); // Pemetaan nilai LDR
hujan = map(analogRead(HUJAN_PIN), 0, 4096, 0, 100); // Pemetaan nilai hujan
Serial.print("LDR: ");
Serial.print(ldr);
Serial.print(" | Hujan: ");
Serial.println(hujan);
if (sensor_aktif) { // Jika sensor aktif
if (ldr < 30 || hujan > 40) { // Kondisi untuk menutup gorden
if (!gorden_tertutup) { // Jika gorden belum tertutup
gorden1.write(180); // Tutup gorden
Serial.println("Gorden Tertutup");
gorden_terbuka = false;
gorden_tertutup = true;
digitalWrite(LED, LOW); // Matikan LED
}
} else { // Kondisi untuk membuka gorden
if (!gorden_terbuka) { // Jika gorden belum terbuka
gorden1.write(0); // Buka gorden
Serial.println("Gorden Terbuka");
gorden_terbuka = true;
gorden_tertutup = false;
digitalWrite(LED, HIGH); // Nyalakan LED
}
}
}
}
void setup() {
// Inisialisasi Serial Monitor
Serial.begin(115200);
// Inisialisasi pin
pinMode(LED, OUTPUT);
pinMode(LDR_PIN, INPUT);
pinMode(HUJAN_PIN, INPUT);
// Inisialisasi servo
gorden1.attach(SERVO_PIN);
gorden1.write(180); // Gorden mulai dalam keadaan tertutup
// Hubungkan ke Blynk
Blynk.begin(auth, ssid, pass);
// Atur timer untuk membaca sensor setiap 1 detik
timer.setInterval(1000L, kontrolGorden);
}
void loop() {
Blynk.run(); // Jalankan fungsi Blynk
timer.run(); // Jalankan fungsi timer
}