#define BLYNK_TEMPLATE_ID "TMPL6vRKUgpyR"
#define BLYNK_TEMPLATE_NAME "blynkesp32"
#define BLYNK_AUTH_TOKEN "qKlyuaipxyoD9-j8QNBweoJ4j8SOk8Cs"
#include <Wire.h>
#include <Arduino.h>
#include <DHT.h> // Library DHT
#include <WiFi.h> // Library WiFi untuk ESP32
#include <BlynkSimpleEsp32.h> // Library Blynk untuk ESP32
// Konfigurasi Blynk
char auth[] = BLYNK_AUTH_TOKEN; // Ganti dengan Auth Token dari Blynk
char ssid[] = "Wokwi-GUEST"; // Ganti dengan SSID WiFi
char pass[] = ""; // Ganti dengan Password WiFi
// Pin dan konfigurasi sensor
#define PPM_PIN 34 // Pin analog untuk sensor MQ-135
#define BUZZER_PIN 4
#define DHT_PIN 13 // Pin untuk DHT22
#define DHT_TYPE DHT22 // Tipe sensor DHT
#define THRESHOLD 150 // Batas PPM untuk mengaktifkan buzzer
#define RED_LED_PIN 26
#define GREEN_LED_PIN 27
DHT dht(DHT_PIN, DHT_TYPE); // Membuat objek DHT
float faktor_kalibrasi = 100.0; // Kalibrasi sesuai kebutuhan
void setup() {
Wire.begin(23, 22);
Serial.begin(115200);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(RED_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
dht.begin(); // Inisialisasi sensor DHT
Blynk.begin(auth, ssid, pass); // Menghubungkan ke Blynk
}
void loop() {
Blynk.run(); // Menjalankan fungsi Blynk
// Membaca suhu dan kelembapan dari DHT22
float humidity = dht.readHumidity();
float temperature = dht.readTemperature(); // Dalam Celsius
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Gagal membaca sensor DHT!");
return;
}
// Membaca nilai PPM dari MQ-135
int ppmValue = analogRead(PPM_PIN); // Membaca nilai analog sensor
float voltage = (ppmValue / 4095.0) * 3.3; // Mengkonversi nilai ke voltase
float mappedppmValue = voltage * faktor_kalibrasi; // Mengkalibrasi nilai PPM
Serial.print("PPM: ");
Serial.println(mappedppmValue);
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
// Mengirim data ke Blynk
Blynk.virtualWrite(V0, temperature); // Kirim suhu ke virtual pin V0
Blynk.virtualWrite(V1, humidity); // Kirim kelembapan ke virtual pin V1
Blynk.virtualWrite(V2, mappedppmValue); // Kirim PPM ke virtual pin V2
// Logika untuk mengontrol buzzer berdasarkan nilai PPM
if (mappedppmValue >= THRESHOLD) {
digitalWrite(BUZZER_PIN, 200); // Nyalakan buzzer
} else {
digitalWrite(BUZZER_PIN, ); // Matikan buzzer
}
// Logika untuk mengontrol LED berdasarkan suhu
if (temperature > 30) {
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(GREEN_LED_PIN, LOW);
} else {
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, HIGH);
}
delay(2000); // Penundaan untuk menghindari serial output yang berlebihan
}