#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6qJlkEE1u"
#define BLYNK_TEMPLATE_NAME "FIREBASE DETEC"
#define BLYNK_AUTH_TOKEN "3XLoL2IgOqRFmG0jMPNVF49WBEl6Jz09"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
// Pin dan Variabel
int led = 16;
int ldrpin = 34;
float resistance; // Variabel resistance
float voltage; // Variabel voltage
int lampStatus = 0; // Variabel untuk status lampu (0 = off, 50 = 50% on, 100 = on)
LiquidCrystal_I2C lcd(0x27, 20, 4);
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
// PWM Settings for LED
int ledBrightness = 0; // Brightness value (0-255)
void setup() {
// Inisialisasi pin
pinMode(ldrpin, INPUT);
pinMode(led, OUTPUT); // Pastikan LED diatur sebagai OUTPUT
Serial.begin(9600);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.setCursor(7, 0);
lcd.print("RAIHAN");
lcd.setCursor(2, 1);
lcd.print("RAMANDHA SAPUTRA");
lcd.setCursor(4, 3);
lcd.print("41422110039");
delay(300);
lcd.clear();
// Inisialisasi Wi-Fi dan Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
// Timer untuk mengirim data secara periodik
timer.setInterval(1000L, sendData);
}
void loop() {
Blynk.run();
timer.run();
}
void sendData() {
// Konstanta LDR
const float GAMMA = 0.7;
const float RL10 = 50;
int analogValue = analogRead(ldrpin);
Serial.println(analogValue);
// Hitung tegangan dan resistansi
voltage = analogValue * (3.3 / 4095.0); // ADC ESP32 menggunakan skala 3.3V
resistance = 2000 * voltage / (1 - voltage / 3.3); // Sesuaikan rumus dengan yang benar
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA)); // Hitung Lux dari resistansi
//{// Hitung tegangan
//voltage = analogValue * (3.3 / 4096);
// Hitung resistansi jika Anda memiliki resistansi referensi (R0)
//resistance = R0 * voltage / V0;
// Contoh jika R0 = 2000 ohm dan V0 = 3.3V
//resistance = 2000 * voltage / 3.3;
// Hitung lux jika Anda memiliki kurva karakteristik yang spesifik
// Contoh sederhana: jika kurva karakteristik menunjukkan bahwa lux = k * (1 / resistance)^gamma
// Di mana k dan gamma adalah konstanta yang ditentukan dari kurva karakteristik sensor
//float lux = pow(k * pow(10, GAMMA) / resistance, (1 / GAMMA));
//}
// Menampilkan status di LCD
lcd.setCursor(4, 0);
lcd.print("STATUS LAMPU");
// Variabel untuk status teks (On/Off)
String textStatus;
// Kondisi lampu menyala 50%
if (analogValue >= 928 && analogValue < 3092) {
ledBrightness = 128; // 50% brightness
analogWrite(led, ledBrightness); // Atur kecerahan LED
lcd.setCursor(4, 2);
lcd.print("Cahaya Redup");
lcd.setCursor(1, 3);
lcd.print("Lampu menyala: 50%");
lampStatus = 50;
textStatus = "On"; // Status teks untuk lampu 50% menyala
}
// Kondisi lampu menyala 100%
else if (analogValue >= 3092) {
ledBrightness = 255; // 100% brightness
analogWrite(led, ledBrightness); // Atur kecerahan LED
lcd.setCursor(4, 2);
lcd.print("Cahaya Gelap");
lcd.setCursor(2, 3);
lcd.print("Lampu menyala:100%");
lampStatus = 100;
textStatus = "On"; // Status teks untuk lampu 100% menyala
}
// Kondisi lampu mati
else {
ledBrightness = 0; // Lampu mati
analogWrite(led, ledBrightness); // Matikan LED
lcd.setCursor(4, 2);
lcd.print("Cahaya Terang");
lcd.setCursor(5, 3);
lcd.print("Lampu Mati");
lampStatus = 0;
textStatus = "Off"; // Status teks untuk lampu mati
}
// Kirim data ke Blynk
Blynk.virtualWrite(V0, analogValue); // Nilai analog sensor
Blynk.virtualWrite(V1, lux); // Nilai lux
Blynk.virtualWrite(V4, lampStatus); // Status lampu (0, 50, 100)
// Kirim status lampu sebagai teks ke Blynk (On/Off)
Blynk.virtualWrite(V3, textStatus); // Status teks (On atau Off)
}