#define BLYNK_TEMPLATE_ID "TMPL6WiwVqrxQ"
#define BLYNK_TEMPLATE_NAME "Sesor Kebakaran dan Gas"
#define BLYNK_AUTH_TOKEN "•••• - J0Zc"
#include <BlynkSimpleEsp32.h>
#include "DHTesp.h"
#include <LiquidCrystal_I2C.h>
const int DHT_PIN = 15; // Pin untuk sensor DHT22
const int BUZZER =#include <DHTesp.h>
#include <LiquidCrystal_I2C.h>
const int DHT_PIN = 15; // Pin untuk sensor DHT22
const int BUZZER = 18; // Pin untuk buzzer
const int LED_MERAH = 5; // Pin untuk LED merah
DHTesp dhtSensor;
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD 16x2 dengan I2C address 0x27
void setup() {
Serial.begin(115200);
pinMode(BUZZER, OUTPUT); // Set pin buzzer sebagai output
pinMode(LED_MERAH, OUTPUT); // Set pin LED merah sebagai output
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); // Setup sensor DHT22
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Aktifkan backlight LCD
// Menampilkan pesan selamat datang selama 2 detik
lcd.setCursor(0, 0);
lcd.print("Fire Detection");
lcd.setCursor(0, 1);
lcd.print("Initializing...");
delay(2000);
lcd.clear();
}
void loop() {
// Ambil data suhu dan kelembaban dari sensor DHT22
TempAndHumidity data = dhtSensor.getTempAndHumidity();
// Cetak data suhu dan kelembaban ke Serial Monitor
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
// Tampilkan suhu dan kelembaban di LCD
lcd.setCursor(0, 0);
lcd.print("Temp: " + String(data.temperature, 2) + "C ");
lcd.setCursor(0, 1);
lcd.print("Hum: " + String(data.humidity, 1) + "% ");
// Logika pendeteksian kebakaran
bool isFire = data.temperature > 50 && data.humidity < 30; // Kebakaran terdeteksi
if (isFire) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("FIRE DETECTED!");
lcd.setCursor(0, 1);
lcd.print("Evacuate Now!");
digitalWrite(LED_MERAH, HIGH); // Nyalakan LED merah
tone(BUZZER, 500); // Nyalakan buzzer
} else {
digitalWrite(LED_MERAH, LOW); // Matikan LED merah
noTone(BUZZER); // Matikan buzzer
}
delay(2000); // Tunggu 2 detik sebelum pembaruan berikutnya
}
18; // Pin untuk buzzer
const int LED_MERAH = 5; // Pin untuk LED Merah
const int GAS_SENSOR = 34; // Pin untuk sensor gas (analog)
DHTesp dhtSensor;
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD 16x2 dengan I2C address 0x27
const int gasThreshold = 600; // Ambang batas untuk deteksi gas bocor
int gasLeakCount = 0; // Hitungan kebocoran gas berturut-turut
const int consistencyThreshold = 3; // Ambang batas konsistensi deteksi kebocoran gas
char auth[] = "BVqy7n5_b38VZ-Nbqwayg4UgHJHCJ0Zc"; // Auth Token Blynk
char ssid[] = "Wokwi-GUEST"; // Ganti dengan SSID WiFi Anda
char pass[] = ""; // Ganti dengan password WiFi Anda
void setup() {
Serial.begin(115200); // Mulai komunikasi serial
pinMode(BUZZER, OUTPUT); // Set pin buzzer sebagai output
pinMode(LED_MERAH, OUTPUT); // Set pin LED merah sebagai output
pinMode(GAS_SENSOR, INPUT); // Set pin sensor gas sebagai input
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); // Setup sensor DHT22
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Aktifkan backlight LCD
// Menampilkan pesan selamat datang selama 3 detik
displayMessage("Welcome to Fire", "and Gas Detection", 3000);
// Mulai koneksi Blynk
Blynk.begin(auth, ssid, pass);
}
void displayMessage(String line1, String line2, int duration) {
lcd.clear(); // Hapus layar LCD
lcd.setCursor(0, 0); // Set cursor ke baris pertama
lcd.print(line1); // Tampilkan baris pertama
lcd.setCursor(0, 1); // Set cursor ke baris kedua
lcd.print(line2); // Tampilkan baris kedua
delay(duration); // Tunggu selama durasi yang ditentukan
}
void loop() {
Blynk.run(); // Jalankan Blynk
// Ambil data suhu dan kelembaban dari sensor DHT22
TempAndHumidity data = dhtSensor.getTempAndHumidity();
int gasValue = analogRead(GAS_SENSOR); // Baca nilai sensor gas
// Cetak data suhu, kelembaban, dan gas ke Serial Monitor
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("Gas Value: " + String(gasValue));
Serial.println("---");
// Tampilkan suhu dan kelembaban di LCD
lcd.setCursor(0, 0);
lcd.print("Temp: " + String(data.temperature, 2) + "C ");
lcd.setCursor(10, 0);
lcd.print("H: " + String(data.humidity, 1) + "%");
// Kirim data ke Blynk
Blynk.virtualWrite(V0, data.temperature); // Kirim suhu ke Virtual Pin V0
Blynk.virtualWrite(V1, data.humidity); // Kirim kelembaban ke Virtual Pin V1
Blynk.virtualWrite(V2, gasValue); // Kirim nilai gas ke Virtual Pin V2
// Logika pendeteksian kebakaran dan gas bocor
bool isFire = data.temperature > 50 && data.humidity < 30; // Kebakaran terdeteksi
bool isGasLeak = gasValue > gasThreshold; // Gas bocor terdeteksi
// Hitung berapa kali kebocoran gas berturut-turut
if (isGasLeak) {
gasLeakCount++;
} else {
gasLeakCount = 0; // Reset hitungan jika tidak ada kebocoran gas
}
// Tampilkan peringatan jika ada bahaya (kebakaran atau gas bocor)
if (gasLeakCount >= consistencyThreshold && isFire) {
displayMessage("BAHAYA API &", "GAS BOCOR!!!", 2000);
digitalWrite(LED_MERAH, HIGH); // Nyalakan LED merah
tone(BUZZER, 500); // Nada buzzer untuk bahaya besar (kebakaran dan gas bocor)
Blynk.logEvent("fire_and_gas_leak", "Bahaya! Api dan gas bocor terdeteksi!"); // Kirim notifikasi ke Blynk
} else if (isFire) {
displayMessage("BAHAYA API!!!", "Segera Evakuasi", 2000);
digitalWrite(LED_MERAH, HIGH); // Nyalakan LED merah
tone(BUZZER, 300); // Nada buzzer untuk kebakaran
Blynk.logEvent("fire_detected", "Bahaya! Api terdeteksi!"); // Kirim notifikasi ke Blynk
} else if (gasLeakCount >= consistencyThreshold) {
displayMessage("BAHAYA GAS!!!", "Periksa Area", 2000);
digitalWrite(LED_MERAH, HIGH); // Nyalakan LED merah
tone(BUZZER, 200); // Nada buzzer untuk gas bocor
Blynk.logEvent("gas_leak_detected", "Bahaya! Gas bocor terdeteksi!"); // Kirim notifikasi ke Blynk
} else {
// Jika tidak ada bahaya, tampilkan pesan aman
displayMessage("AMAN", "Semua Normal", 2000);
digitalWrite(LED_MERAH, LOW); // Matikan LED merah
noTone(BUZZER); // Matikan buzzer
}
delay(2000); // Tunggu 2 detik sebelum pembaruan berikutnya
}