#include <Arduino.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
// Definisi pin
#define DHT_PIN 13 // Pin data sensor DHT22
#define MQ2_PIN 12 // Pin output analog sensor MQ-2
#define GREEN_LED 5 // Pin LED Hijau
#define RED_LED 23 // Pin LED Merah
#define BUZZER 2 // Pin Buzzer
// Setup sensor DHT
#define DHT_TYPE DHT22 // Tipe sensor DHT 22 (AM2302, AM2321)
DHT dht(DHT_PIN, DHT_TYPE);
// Setup LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD 0x27, 16 kolom dan 2 baris
// Batas ambang
#define TEMP_THRESHOLD 30.0 // Suhu maksimum yang diizinkan
#define HUMIDITY_THRESHOLD 70.0 // Kelembaban maksimum yang diizinkan
#define GAS_THRESHOLD 3500 // Nilai ambang gas MQ-2 (sesuaikan jika perlu)
// Variabel untuk menyimpan nilai sensor
float temperature = 0.0;
float humidity = 0.0;
int gasValue = 0;
void setup() {
Serial.begin(115200); // Inisialisasi komunikasi serial untuk debugging
// Inisialisasi sensor DHT
dht.begin();
// Inisialisasi LCD
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Nyalakan lampu latar LCD
// Set mode pin sebagai OUTPUT atau INPUT
pinMode(GREEN_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(BUZZER, OUTPUT);
pinMode(MQ2_PIN, INPUT); // MQ-2 adalah input analog
// Tampilkan pesan awal di LCD
lcd.print("Sanul Siap UJK...");
lcd.setCursor(0, 1);
lcd.print("KOMPETEN");
delay(2000); // Tunda 2 detik
lcd.clear(); // Hapus tampilan LCD
}
void loop() {
// Baca nilai dari sensor
temperature = dht.readTemperature(); // Baca suhu
humidity = dht.readHumidity(); // Baca kelembaban
gasValue = analogRead(MQ2_PIN); // Baca nilai analog dari sensor gas MQ-2
// Cetak nilai sensor ke monitor serial untuk debugging
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.print(" *C, Kelembaban: ");
Serial.print(humidity);
Serial.print(" %, Gas: ");
Serial.println(gasValue);
// --- Deteksi Gas/Asap (Prioritas Tertinggi) ---
// Jika nilai gas melebihi ambang batas
if (gasValue > GAS_THRESHOLD) {
// Gas/Asap terdeteksi
digitalWrite(GREEN_LED, LOW); // LED Hijau mati
digitalWrite(RED_LED, HIGH); // LED Merah menyala (solid)
tone(BUZZER, 1000); // Buzzer berbunyi terus menerus (nada 1000 Hz)
lcd.clear(); // Hapus LCD
lcd.print("Gas Terdeteksi!"); // Tampilkan pesan di baris pertama
lcd.setCursor(0, 1); // Pindah kursor ke baris kedua
lcd.print("Gas:"); // Tampilkan label "Gas:"
lcd.print(gasValue); // Tampilkan nilai pembacaan gas
} else {
// --- Kondisi Peringatan Suhu/Kelembaban ---
// Jika suhu di atas ambang batas ATAU kelembaban di atas ambang batas
if (temperature > TEMP_THRESHOLD || humidity > HUMIDITY_THRESHOLD) {
// Suhu atau Kelembaban di atas ambang batas
digitalWrite(GREEN_LED, LOW); // LED Hijau mati
digitalWrite(RED_LED, HIGH); // LED Merah menyala (akan berkedip karena delay)
lcd.clear(); // Hapus LCD
lcd.print("Suhu/Kelembaban"); // Tampilkan pesan di baris pertama
lcd.setCursor(0, 1); // Pindah kursor ke baris kedua
lcd.print("Tinggi!"); // Tampilkan pesan "Tinggi!"
noTone(BUZZER); // Pastikan buzzer mati sebelum memulai nada intermiten
// Buzzer berbunyi intermiten (0.5 detik ON, 0.5 detik OFF)
tone(BUZZER, 1000); // Buzzer ON
delay(500); // Tunda 0.5 detik
noTone(BUZZER); // Buzzer OFF
delay(500); // Tunda 0.5 detik
} else {
// --- Kondisi Normal ---
digitalWrite(GREEN_LED, HIGH); // LED Hijau menyala
digitalWrite(RED_LED, LOW); // LED Merah mati
noTone(BUZZER); // Buzzer mati
lcd.clear(); // Hapus LCD
lcd.print("Kondisi Normal"); // Tampilkan pesan "Kondisi Normal" di baris pertama
lcd.setCursor(0, 1); // Pindah kursor ke baris kedua
lcd.print("Suhu:"); // Tampilkan label "Suhu:"
lcd.print(temperature); // Tampilkan nilai suhu
lcd.print("C"); // Tampilkan satuan suhu
}
}
delay(2000); // Tunda 2 detik antara setiap pembacaan sensor dan pembaruan LCD
}