#define BLYNK_TEMPLATE_ID "TMPL6_38luyTM"
#define BLYNK_TEMPLATE_NAME "uas"
#define BLYNK_AUTH_TOKEN "WfPo75ZPqd5C67sftgI0Bs_uW83Az4f5"
#include <Wire.h>
#include <ESP32Servo.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <LiquidCrystal_I2C.h>
#define LDR_PIN 35
#define PIR_PIN 15
#define SERVO_PIN 13
#define LED_PIN 12
const float gama = 0.7;
const float rl10 = 50;
const float factor = 1.0; // Faktor skala untuk kalibrasi
Servo myservo; // Membuat objek servo untuk mengendalikan servo motor
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inisialisasi objek LCD
char auth[] = BLYNK_AUTH_TOKEN; // Token otentikasi Blynk
char ssid[] = "Wokwi-GUEST"; // nama hotspot yang digunakan
char pass[] = ""; // password hotspot yang digunakan
bool pirEnabled = true; // variabel untuk menyimpan status sensor PIR
bool ledState = false; // variabel untuk menyimpan status LED
unsigned long previousMillis = 0; // variabel untuk menyimpan waktu sebelumnya
const long interval = 500; // interval kedip LED (500 ms)
void setup() {
Serial.begin(115200);
// Setup pin untuk sensor PIR, servo, dan LED
pinMode(PIR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
myservo.attach(SERVO_PIN); // Menghubungkan servo motor ke pin
// Menghubungkan ke WiFi
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
Blynk.begin(auth, ssid, pass); // Memulai koneksi ke server Blynk
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Nilai LDR : ");
}
void loop() {
Blynk.run(); // Menjalankan Blynk
// Membaca nilai dari sensor LDR
int nilaiLDR = analogRead(LDR_PIN);
nilaiLDR = map(nilaiLDR, 4095, 0, 1024, 0); // Mengubah nilai pembacaan sensor LDR dari nilai ADC ESP32 ke skala Arduino
float voltase = nilaiLDR / 1024.0 * 5;
float resistansi = 2000 * voltase / (1 - voltase / 5);
float kecerahan = pow(rl10 * 1e3 * pow(10, gama) / resistansi, (1 / gama)) * factor; // Menambahkan faktor skala
Serial.print("Nilai LDR: ");
Serial.println(kecerahan);
// Mengirim nilai sensor LDR ke pin virtual V1 di Blynk
Blynk.virtualWrite(V1, kecerahan);
// Menampilkan nilai sensor LDR di LCD
lcd.setCursor(10, 0);
lcd.print(kecerahan);
lcd.print(" "); // Clear remaining digits
unsigned long currentMillis = millis();
// Mengontrol LED berdasarkan nilai LDR
if (kecerahan > 200) {
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
// Jika LED menyala, matikan LED; jika LED mati, nyalakan LED
ledState = !ledState;
digitalWrite(LED_PIN, ledState ? HIGH : LOW);
// Mengirim status LED ke Blynk
Blynk.virtualWrite(V2, ledState ? 1 : 0);
}
} else {
digitalWrite(LED_PIN, LOW); // Mematikan LED
Blynk.virtualWrite(V2, 0); // Mengirim status LED mati ke Blynk
ledState = false;
}
// Membaca nilai dari sensor PIR jika sensor PIR diaktifkan
int pirValue = 0;
if (pirEnabled) {
pirValue = digitalRead(PIR_PIN);
Serial.print("PIR Value: ");
Serial.println(pirValue);
// Mengirim nilai sensor PIR ke pin virtual V0 di Blynk
Blynk.virtualWrite(V0, pirValue);
}
// Mengendalikan servo motor berdasarkan deteksi gerakan
int servoAngle = 0;
if (pirValue == HIGH) {
servoAngle = 90; // Jika ada gerakan, set servo ke sudut 90 derajat
} else {
servoAngle = 0; // Jika tidak ada gerakan, set servo ke sudut 0 derajat
}
myservo.write(servoAngle);
// Menampilkan status koneksi WiFi
Serial.print("WiFi Status: ");
Serial.println(WiFi.status());
delay(100); // Tunda 100ms sebelum membaca data sensor lagi
}