#define BLYNK_TEMPLATE_ID "TMPL6JMd7fXdm"
#define BLYNK_TEMPLATE_NAME "Gas sensor"
#define BLYNK_AUTH_TOKEN "zKGVbFzwqy0OD8UtVWmHALpxvK1DbN9s"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#define MQ135_PIN 34 // Pin analog untuk sensor MQ135
#define POT_PIN 32 // Pin untuk potensiometer
#define BUZZER_PIN 26 // Pin untuk buzzer
#define GREEN_LED_PIN 25 // GPIO25 untuk LED hijau
#define RED_LED_PIN 27 // GPIO27 untuk LED merah
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inisialisasi LCD 16x2 dengan alamat I2C 0x27
// Koneksi WiFi
char auth[] = BLYNK_AUTH_TOKEN; // Blynk Auth Token
char ssid[] = "Harald"; // Nama WiFi Anda
char pass[] = "12345678q"; // Password WiFi Anda
bool alarmSent = false; // Variabel untuk memastikan notifikasi tidak dikirim berulang-ulang
void setup() {
pinMode(BUZZER_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(RED_LED_PIN, OUTPUT);
Serial.begin(115200); // Mulai komunikasi serial
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Nyalakan backlight LCD
lcd.setCursor(0, 0); // Atur kursor di baris pertama
lcd.print("MQ135 Sensor"); // Tampilkan pesan awal di LCD
delay(5000); // Tunda 5 detik
lcd.clear(); // Bersihkan tampilan LCD
// Hubungkan ke WiFi dan Blynk
Serial.print("Connecting to WiFi...");
Blynk.begin(auth, ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" Connected to WiFi!");
}
void loop() {
Blynk.run(); // Menjalankan fungsi Blynk
int sensorValue = analogRead(MQ135_PIN); // Baca nilai dari sensor MQ135
Serial.print("Sensor Value: ");
Serial.println(sensorValue);
// Tampilkan nilai sensor pada LCD
lcd.setCursor(0, 0);
lcd.print("Sensor Value:");
lcd.setCursor(0, 1);
lcd.print(" "); // Bersihkan baris kedua terlebih dahulu
lcd.setCursor(0, 1);
lcd.print(sensorValue); // Tampilkan nilai sensor
// Kirim nilai sensor ke Blynk (Virtual Pin V0)
Blynk.virtualWrite(V0, sensorValue);
// Kontrol buzzer dan LED berdasarkan nilai sensor
if (sensorValue > 1700 && !alarmSent) { // Ambang batas nilai sensor
digitalWrite(BUZZER_PIN, HIGH); // Nyalakan buzzer
lcd.setCursor(10, 1); // Atur kursor di kolom ke-10, baris kedua
lcd.print("Alarm!"); // Tampilkan "Alarm!" di LCD jika buzzer menyala
// Kirim notifikasi menggunakan logEvent
Blynk.logEvent("Pendeteksi_GAS", "Gas Detected! Alarm is ON!");
digitalWrite(GREEN_LED_PIN, LOW); // Matikan LED hijau
// Nyalakan LED merah berkedip
digitalWrite(RED_LED_PIN, HIGH);
delay(250);
digitalWrite(RED_LED_PIN, LOW);
delay(250);
alarmSent = true; // Pastikan alarm tidak dikirim berulang kali
} else if (sensorValue <= 1700) {
digitalWrite(BUZZER_PIN, LOW); // Matikan buzzer
lcd.setCursor(10, 1); // Atur kursor di kolom ke-10, baris kedua
lcd.print("Safe "); // Tampilkan "Safe" di LCD jika buzzer mati
digitalWrite(RED_LED_PIN, LOW); // Matikan LED merah
digitalWrite(GREEN_LED_PIN, HIGH); // Nyalakan LED hijau
alarmSent = false; // Reset status alarm untuk mengirim ulang jika diperlukan
}
delay(500); // Delay untuk memperlambat pembacaan
}