#include <DHT.h>
// Pin konfigurasi
#define DHTPIN 15 // DHT22 di pin GPIO15
#define DHTTYPE DHT22 // Tipe sensor DHT
#define FLAME_PIN 4 // Flame sensor di pin GPIO4
#define MQ2_PIN 34 // MQ-2 sensor analog di pin GPIO34
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(FLAME_PIN, INPUT);
}
float estimatePPM(int analogValue) {
// Kalibrasi sederhana berbasis eksperimen: cocok untuk simulasi Wokwi
// Nilai analog 843 ~ udara normal (0 ppm), >1000 mulai terdeteksi gas
float ppm = (analogValue < 850) ? 0 : (analogValue - 850) * 10;
return ppm;
}
void loop() {
delay(1000); // 1 detik antar pembacaan
float temp = dht.readTemperature();
float hum = dht.readHumidity();
int gasValue = analogRead(MQ2_PIN);
float ppm = estimatePPM(gasValue);
int flame = digitalRead(FLAME_PIN);
// Tampilkan suhu, kelembaban, gas, dan flame
Serial.print("Temp: ");
Serial.print(temp);
Serial.print(" C, Hum: ");
Serial.print(hum);
Serial.print(" %, Gas: ");
Serial.print(gasValue);
Serial.print(" (Est. ");
Serial.print(ppm);
Serial.print(" ppm) - ");
// Klasifikasi gas
if (ppm >= 5000) {
Serial.print("Kemungkinan CH4, ");
} else if (ppm >= 3000) {
Serial.print("Kemungkinan Asap, ");
} else if (ppm >= 2000) {
Serial.print("Kemungkinan LPG, ");
} else if (ppm >= 1000) {
Serial.print("Kemungkinan CO, ");
} else if (ppm > 0) {
Serial.print("Konsentrasi Rendah, ");
} else {
Serial.print("Udara Aman, ");
}
// Flame detection
Serial.print("Flame: ");
Serial.println(flame);
}