#include <DHT.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Konfigurasi pin
#define DHTPIN 15 // Pin untuk sensor DHT11
#define DHTTYPE DHT22 // Tipe sensor DHT11
#define POT_PIN 34 // Pin analog untuk potensiometer (pengganti MQ-135)
#define RELAY_PIN 26 // Pin untuk relay kipas
#define BUZZER_PIN 25 // Pin untuk buzzer
#define RED_LED 14 // Pin untuk LED merah
#define GREEN_LED 12 // Pin untuk LED hijau
#define BLUE_LED 27 // Pin untuk LED kuning
// Konfigurasi OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Inisialisasi sensor DHT
DHT dht(DHTPIN, DHTTYPE);
// Threshold level untuk kualitas udara
float safeThreshold = 400; // Udara aman
float warningThreshold = 800; // Udara tidak aman
float dangerThreshold = 1200; // Udara berbahaya
void setup() {
Serial.begin(115200);
// Inisialisasi pin output
pinMode(RELAY_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
// Inisialisasi sensor DHT11
dht.begin();
// Inisialisasi OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("OLED tidak ditemukan, cek koneksi!"));
while (true);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
// Set semua output awal
digitalWrite(RELAY_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(RED_LED, LOW);
digitalWrite(GREEN_LED, LOW);
digitalWrite(BLUE_LED, LOW);
}
void loop() {
// Membaca nilai dari potensiometer
int potValue = analogRead(POT_PIN);
float airQuality = map(potValue, 0, 4095, 0, 2000); // Konversi nilai potensiometer ke kisaran 0 - 2000
// Membaca suhu dan kelembaban dari sensor DHT11
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Menampilkan data di Serial Monitor
Serial.print("Air Quality (PPM): ");
Serial.println(airQuality);
Serial.print("Temperature (°C): ");
Serial.println(temperature);
Serial.print("Humidity (%): ");
Serial.println(humidity);
// Tampilkan data pada OLED
display.clearDisplay();
display.setCursor(0, 0);
display.print("Air Quality: ");
display.print(airQuality);
display.println(" PPM");
display.print("Temp: ");
display.print(temperature);
display.println(" C");
display.print("Humidity: ");
display.print(humidity);
display.println(" %");
// Cek kualitas udara dan nyalakan LED/buzzer/relay sesuai kondisi
if (airQuality <= safeThreshold) {
// Udara aman - LED hijau menyala
digitalWrite(GREEN_LED, HIGH);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(RED_LED, LOW);
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(RELAY_PIN, LOW);
display.print("Status: Aman");
}
else if (airQuality <= warningThreshold) {
// Udara kurang aman - LED kuning menyala
digitalWrite(GREEN_LED, LOW);
digitalWrite(YELLOW_LED, HIGH);
digitalWrite(RED_LED, LOW);
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(RELAY_PIN, LOW);
display.print("Status: Peringatan");
}
else if (airQuality > warningThreshold && airQuality <= dangerThreshold) {
// Udara berbahaya - LED merah menyala dan buzzer berbunyi
digitalWrite(GREEN_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(RED_LED, HIGH);
digitalWrite(BUZZER_PIN, HIGH);
digitalWrite(RELAY_PIN, HIGH); // Mengaktifkan kipas/ventilasi
display.print("Status: Bahaya!");
}
display.display(); // Tampilkan di layar OLED
delay(2000); // Delay untuk membaca ulang sensor
}