#include "DHT.h"
#define DHTPIN 15 // Pin data DHT22
#define DHTTYPE DHT22 // Jenis sensor
DHT dht(DHTPIN, DHTTYPE);
// LED Bar Graph untuk suhu
const int ledBar[] = {13, 12, 14, 27, 26, 25, 33, 32, 4, 16};
const int numLeds = sizeof(ledBar) / sizeof(ledBar[0]);
// LED kelembapan
const int ledGreen = 17; // Aman (45-60%)
const int ledYellow = 5; // Sedikit lembap (60-70%)
const int ledRed = 18; // Terlalu lembap (>70%)
// Simulasi kipas
const int fanLedPin = 21;
// Simulasi humidifier (baru)
const int humidifierPin = 19; // GPIO 22
// Simulasi humidifier (baru)
const int dehumidifierPin = 2; // GPIO 22
// Ambang batas suhu (dalam derajat Celsius)
const float tempThreshold = 30.0;
// Batas kelembapan berdasarkan ASHRAE
const float humidLow = 45.0;
const float humidHigh = 60.0;
const float humidMax = 70.0;
void setup() {
Serial.begin(115200);
dht.begin();
// Setup pin output untuk LED suhu
for (int i = 0; i < numLeds; i++) {
pinMode(ledBar[i], OUTPUT);
}
// Setup pin output untuk LED kelembapan, kipas, dan humidifier
pinMode(ledGreen, OUTPUT);
pinMode(ledYellow, OUTPUT);
pinMode(ledRed, OUTPUT);
pinMode(fanLedPin, OUTPUT);
pinMode(humidifierPin, OUTPUT);
pinMode(dehumidifierPin, OUTPUT);
}
void loop() {
float temp = dht.readTemperature();
float humid = dht.readHumidity();
if (isnan(temp) || isnan(humid)) {
Serial.println("Gagal membaca dari sensor DHT!");
return;
}
Serial.print("Suhu: ");
Serial.print(temp);
Serial.println(" *C");
Serial.print("Kelembapan: ");
Serial.print(humid);
Serial.println(" %");
// LED Bar untuk suhu (18°C sampai 35°C)
float ledCount = map(temp, 18, 35, 0, numLeds);
ledCount = constrain(ledCount, 0, numLeds);
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledBar[i], i < ledCount ? HIGH : LOW);
}
// Kontrol kipas berdasarkan suhu
if (temp > tempThreshold) {
digitalWrite(fanLedPin, HIGH);
Serial.println("KIPAS ON");
} else {
digitalWrite(fanLedPin, LOW);
Serial.println("KIPAS OFF");
}
// LED indikator kelembapan & kontrol dehumidifier/humidifier
if (humid > humidMax) {
// Terlalu lembap
digitalWrite(ledGreen, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledRed, HIGH);
digitalWrite(humidifierPin, LOW); // Humidifier dimatikan
digitalWrite(dehumidifierPin, HIGH);
Serial.println("DEHUMIDIFIER ON");
Serial.println("HUMIDIFIER OFF");
} else if (humid > humidHigh) {
// Mulai lembap
digitalWrite(ledGreen, LOW);
digitalWrite(ledYellow, HIGH);
digitalWrite(ledRed, LOW);
digitalWrite(humidifierPin, LOW); // Humidifier dimatikan
digitalWrite(dehumidifierPin, LOW);
Serial.println("DEHUMIDIFIER OFF");
Serial.println("HUMIDIFIER OFF");
} else if (humid >= humidLow) {
// Aman
digitalWrite(ledGreen, HIGH);
digitalWrite(ledYellow, LOW);
digitalWrite(ledRed, LOW);
digitalWrite(humidifierPin, LOW); // Humidifier dimatikan
digitalWrite(dehumidifierPin, LOW);
Serial.println("DEHUMIDIFIER OFF");
Serial.println("HUMIDIFIER OFF");
} else {
// Terlalu kering (kelembapan < 45%)
digitalWrite(ledGreen, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledRed, HIGH);
digitalWrite(humidifierPin, HIGH); // Humidifier dinyalakan
digitalWrite(dehumidifierPin, LOW);
Serial.println("DEHUMIDIFIER OFF");
Serial.println("HUMIDIFIER ON");
}
delay(2000); // Delay 2 detik
}
Kipas
Humidifier
Dehumidifier