#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_Sensor.h> // Library Unified Sensor
#include <DHT.h>
#include <DHT_U.h>
// === Definisi Pin ===
#define DHT_SENSOR_PIN 4
#define FAN_PWM_PIN 19
#define LED_WARNING_PIN 2
// === Setup DHT dan LCD ===
#define DHT_SENSOR_TYPE DHT22
DHT_Unified dht(DHT_SENSOR_PIN, DHT_SENSOR_TYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
// === PWM Fan Settings ===
#define PWM_FREQ 5000
#define PWM_RESOLUTION 8
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
pinMode(LED_WARNING_PIN, OUTPUT);
// PWM setup untuk fan menggunakan ESP32
ledcAttach(FAN_PWM_PIN, PWM_FREQ, PWM_RESOLUTION);
ledcWrite(FAN_PWM_PIN, 0); // Fan off awal
// Inisialisasi DHT
dht.begin();
sensor_t sensor;
dht.temperature().getSensor(&sensor);
dht.humidity().getSensor(&sensor);
// Pesan awal LCD
lcd.setCursor(0, 0);
lcd.print("Mini Greenhouse");
lcd.setCursor(0, 1);
lcd.print("Inisialisasi...");
delay(2000);
lcd.clear();
}
void loop() {
sensors_event_t eventTemp, eventHum;
dht.temperature().getEvent(&eventTemp);
dht.humidity().getEvent(&eventHum);
if (isnan(eventTemp.temperature) || isnan(eventHum.relative_humidity)) {
Serial.println("Gagal baca sensor DHT22!");
return;
}
float temperature = eventTemp.temperature;
float humidity = eventHum.relative_humidity;
// Serial monitor
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.print(" °C, Kelembaban: ");
Serial.print(humidity);
Serial.println(" %");
// Tampilkan ke LCD
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(temperature, 1);
lcd.print((char)223); // simbol derajat
lcd.print("C ");
lcd.setCursor(0, 1);
lcd.print("Lembab: ");
lcd.print(humidity, 1);
lcd.print("% ");
// Kontrol Fan berdasarkan suhu
if (temperature < 25) {
ledcWrite(FAN_PWM_PIN, 0); // Fan mati
} else if (temperature <= 30) {
ledcWrite(FAN_PWM_PIN, 128); // Fan 50%
} else {
ledcWrite(FAN_PWM_PIN, 255); // Fan 100%
}
// LED peringatan suhu tinggi
digitalWrite(LED_WARNING_PIN, temperature > 35 ? HIGH : LOW);
delay(2000);
}