#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// =========================
// KONFIGURASI DHT22
// =========================
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// =========================
// KONFIGURASI LCD
// =========================
// Alamat I2C LCD biasanya 0x27
LiquidCrystal_I2C lcd(0x27, 16, 2);
// =========================
// PIN KOMPONEN
// =========================
int ledMerah = 10;
int ledKuning = 9;
int buzzer = 8;
// =========================
// BATAS KONDISI
// =========================
float batasSuhu = 30.0;
float batasHumidity = 70.0;
void setup() {
// LED dan buzzer
pinMode(ledMerah, OUTPUT);
pinMode(ledKuning, OUTPUT);
pinMode(buzzer, OUTPUT);
// Serial Monitor
Serial.begin(9600);
// Mulai DHT22
dht.begin();
// Mulai LCD
lcd.init();
lcd.backlight();
// Tampilan awal
lcd.setCursor(0, 0);
lcd.print("Monitoring");
lcd.setCursor(0, 1);
lcd.print("Suhu & Humidity");
delay(2000);
lcd.clear();
Serial.println("==============================");
Serial.println(" MONITORING SUHU & HUMIDITY");
Serial.println("==============================");
}
void loop() {
// =========================
// BACA SENSOR
// =========================
float suhu = dht.readTemperature();
float humidity = dht.readHumidity();
// =========================
// CEK SENSOR
// =========================
if (isnan(suhu) || isnan(humidity)) {
Serial.println("Gagal membaca DHT22!");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor Error!");
lcd.setCursor(0, 1);
lcd.print("Cek DHT22");
digitalWrite(ledMerah, LOW);
digitalWrite(ledKuning, LOW);
noTone(buzzer);
delay(2000);
return;
}
// =========================
// TAMPILKAN PADA LCD
// =========================
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(suhu, 1);
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Hum : ");
lcd.print(humidity, 1);
lcd.print("%");
// =========================
// SERIAL MONITOR
// =========================
Serial.print("Suhu : ");
Serial.print(suhu);
Serial.println(" C");
Serial.print("Humidity : ");
Serial.print(humidity);
Serial.println(" %");
// =========================
// LOGIKA KONDISI
// =========================
if (suhu > batasSuhu || humidity > batasHumidity) {
// =========================
// KONDISI BAHAYA
// =========================
digitalWrite(ledMerah, HIGH);
digitalWrite(ledKuning, LOW);
// Buzzer 1000 Hz
tone(buzzer, 1000);
Serial.println("STATUS: BAHAYA!");
}
else {
// =========================
// KONDISI NORMAL
// =========================
digitalWrite(ledMerah, LOW);
digitalWrite(ledKuning, HIGH);
// Buzzer mati
noTone(buzzer);
Serial.println("STATUS: NORMAL");
}
Serial.println("------------------------------");
// DHT22 membutuhkan jeda pembacaan
delay(2000);
}