#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPIN 2 // Pin untuk sensor DHT22
#define DHTTYPE DHT22 // Tipe sensor DHT
#define LED_RED 4 // Pin LED merah
#define LED_GREEN 5 // Pin LED hijau
#define BUZZER 6 // Pin buzzer
#define FAN 3 // Pin cooling fan
#define BUTTON_ON 8 // Push button ON
#define BUTTON_OFF 7 // Push button OFF
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Pastikan alamat I2C sudah benar
bool fan_manual = false; // Status manual kontrol kipas
void setup() {
pinMode(LED_RED, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(BUZZER, OUTPUT);
pinMode(FAN, OUTPUT);
pinMode(BUTTON_ON, INPUT_PULLUP);
pinMode(BUTTON_OFF, INPUT_PULLUP);
lcd.begin(16, 2); // Menetapkan ukuran LCD (16x2)
lcd.backlight(); // Menyalakan lampu latar LCD
dht.begin(); // Mulai sensor DHT
// Default state
digitalWrite(LED_RED, LOW);
digitalWrite(LED_GREEN, HIGH);
digitalWrite(BUZZER, LOW);
digitalWrite(FAN, LOW);
}
void loop() {
// Baca suhu dan kelembaban dari DHT22
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Tampilkan data pada LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print((char)223); // Simbol derajat
lcd.print("C ");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(humidity);
lcd.print("%");
// Periksa apakah sensor valid
if (isnan(temperature) || isnan(humidity)) {
lcd.clear();
lcd.print("Sensor Error!");
return;
}
// Cek tombol ON untuk kontrol manual kipas
if (digitalRead(BUTTON_ON) == LOW) {
fan_manual = true; // Aktifkan kipas manual
delay(200); // Tambahkan delay untuk menghindari bouncing tombol
}
// Cek tombol OFF untuk kontrol manual kipas
if (digitalRead(BUTTON_OFF) == LOW) {
fan_manual = false; // Matikan kipas manual
delay(200); // Tambahkan delay untuk menghindari bouncing tombol
}
// Kendali kipas, LED, dan buzzer
if (temperature > 34.0 || humidity > 60.0) {
// Suhu atau kelembaban melebihi ambang batas
digitalWrite(LED_RED, HIGH);
digitalWrite(LED_GREEN, LOW);
digitalWrite(BUZZER, HIGH);
digitalWrite(FAN, HIGH); // Kipas menyala
} else {
// Suhu dan kelembaban normal
digitalWrite(LED_RED, LOW);
digitalWrite(BUZZER, LOW);
digitalWrite(LED_GREEN, HIGH);
digitalWrite(FAN, HIGH);
// Kontrol kipas dalam mode manual atau otomatis
if (fan_manual) {
digitalWrite(FAN, HIGH); // Kipas manual menyala
} else {
digitalWrite(FAN, LOW); // Kipas otomatis dimatikan
digitalWrite(LED_GREEN, HIGH); // LED hijau menyala
}
}
delay(500); // Delay untuk pembacaan berikutnya
}