#define BLYNK_TEMPLATE_ID "TMPL6HiBhugVn"
#define BLYNK_TEMPLATE_NAME "Asap Rokok"
#define BLYNK_AUTH_TOKEN "F8o-J3MbKZ_-KclHnUiywvMx5LnQBAGj"
char auth[] = "F8o-J3MbKZ_-KclHnUiywvMx5LnQBAGj";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
// Definisikan pin untuk photoresistor, LED, servo, dan tombol
#define PHOTO_PIN 34
#define LED_PIN 13
#define SERVO_PIN 14
#define SMOKE_SENSOR A0
#define BUTTON_PIN 15
// Inisialisasi LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Inisialisasi servo
Servo servo;
// Deklarasi variabel
int smokeValue = 0;
bool smokeDetected = false; // Menyimpan status asap sebelumnya
// Fungsi untuk mengirim nilai photoresistor ke Blynk
void sendSensorData() {
int photoValue = analogRead(PHOTO_PIN);
Blynk.virtualWrite(V0, photoValue);
}
// Fungsi untuk mengirim status asap ke Blynk
void sendSmokeStatus(bool smokeDetected) {
Blynk.virtualWrite(V1, smokeDetected ? 1 : 0);
}
void setup() {
Serial.begin(115200);
// Setup pin
pinMode(PHOTO_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(SMOKE_SENSOR, INPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP); // Tombol menggunakan pull-up resistor internal
// Attach servo
servo.attach(SERVO_PIN);
// Setup LCD
lcd.begin(16, 2);
lcd.backlight();
// Setup Blynk
Blynk.begin(auth, ssid, pass);
}
void loop() {
Blynk.run();
sendSensorData(); // Kirim data photoresistor ke Blynk
// Baca nilai sensor asap
smokeValue = analogRead(SMOKE_SENSOR);
// Cek apakah asap terdeteksi
if (smokeValue > 500) {
if (!smokeDetected) { // Jika sebelumnya tidak ada asap
digitalWrite(LED_PIN, HIGH); // Nyalakan LED
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Asap Terdeteksi");
servo.write(180); // Gerakkan servo ke posisi 180 derajat
sendSmokeStatus(true); // Kirim status asap ke Blynk
}
smokeDetected = true; // Set status asap menjadi terdeteksi
} else {
if (smokeDetected) { // Jika sebelumnya ada asap
digitalWrite(LED_PIN, LOW); // Matikan LED
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tidak Ada Asap");
servo.write(0); // Gerakkan servo ke posisi 0 derajat
sendSmokeStatus(false); // Kirim status tidak ada asap ke Blynk
}
smokeDetected = false; // Set status asap menjadi tidak terdeteksi
}
delay(1000);
}