#include <DHT.h>
#include <LiquidCrystal_I2C.h>
// Konfigurasi pin
#define PINDHT 12 // Pin GPIO untuk sensor DHT22
#define FAN 8 // Pin GPIO untuk relay/blower
//inisialisasi jenis lcd
#define kolom 16
#define baris 2
LiquidCrystal_I2C lcd(0x27, kolom, baris);
// Batas suhu untuk kipas
const float BATAS_BAWAH = 28.0; // batas bawah
const float BATAS_ATAS = 35.0; // batas atas
float lastTemperatur = 0.0;
float lastHumidity = 0.0;
DHT sens(PINDHT, DHT22);
void setup() {
Serial.begin(115200); // Untuk debugging
lcd.init();
lcd.backlight();
sens.begin(); // Inisialisasi sensor DHT22
pinMode(FAN, OUTPUT);
digitalWrite(FAN, LOW); // Pastikan kipas mati saat memulai
lcd.setCursor(1, 0);
lcd.print("Sistem Kontrol");
lcd.setCursor(1, 1);
lcd.print("Kipas Otomatis");
delay(2000);
lcd.clear();
}
void loop() {
// Membaca suhu dan kelembapan dari sensor
float temperatur = sens.readTemperature();
float humidity = sens.readHumidity();
//mengecek apakah data dari sensor valid
if (isnan(temperatur) || isnan(humidity)) {
lcd.setCursor(1, 0);
lcd.print("Sensor Error");
delay(2000); // Tunggu sebelum mencoba membaca lagi
return;
}
if (temperatur != lastTemperatur || humidity != lastHumidity) {
// Tampilkan data suhu dan kelembapan ke lcd
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temperatur, 1);
lcd.print((char)223);
lcd.print("C ");
lcd.setCursor(0, 1);
lcd.print("H:");
lcd.print(humidity);
lcd.println("% ");
// Logika kontrol kipas
if (temperatur < BATAS_BAWAH) {
digitalWrite(FAN, LOW); // Matikan kipas
lcd.setCursor(10, 0);
lcd.print(" KIPAS");
lcd.setCursor(10, 1);
lcd.print(" MATI ");
} else if (temperatur >= BATAS_ATAS) {
digitalWrite(FAN, HIGH); // Nyalakan kipas
lcd.setCursor(10, 0);
lcd.print(" KIPAS");
lcd.setCursor(10, 1);
lcd.print(" NYALA");
}
lastTemperatur = temperatur;
lastHumidity = humidity;
}
// Tunggu 2 detik sebelum membaca lagi
delay(2000);
}