#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <Servo.h>
#define DHTPIN 2 // Pin untuk sensor DHT22
#define DHTTYPE DHT22 // Menggunakan sensor DHT22
#define LED_PIN 13 // Pin untuk LED
#define BUZZER_PIN 12 // Pin untuk buzzer
#define SERVO_PIN 9 // Pin untuk servo
DHT dht(DHTPIN, DHTTYPE); // Inisialisasi sensor DHT22
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inisialisasi LCD I2C 16x2
Servo myServo; // Inisialisasi servo motor
void setup() {
pinMode(LED_PIN, OUTPUT); // Set pin LED sebagai output
pinMode(BUZZER_PIN, OUTPUT); // Set pin buzzer sebagai output
lcd.begin(); // Inisialisasi LCD
lcd.backlight(); // Aktifkan lampu latar LCD
dht.begin(); // Mulai sensor DHT
myServo.attach(SERVO_PIN); // Hubungkan servo ke pin 9
myServo.write(0); // Servo pada posisi 0 derajat (tutup)
lcd.setCursor(0, 0);
lcd.print("Pelembab Udara");
delay(2000); // Tampilkan pesan awal
lcd.clear();
}
void loop() {
// Membaca suhu dan kelembapan dari sensor DHT
float suhu = dht.readTemperature();
float kelembapan = dht.readHumidity();
if (isnan(suhu) || isnan(kelembapan)) {
lcd.setCursor(0, 0);
lcd.print("Sensor error");
return;
}
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(suhu);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Lembab: ");
lcd.print(kelembapan);
lcd.print(" %");
if (suhu < 20 && kelembapan < 20) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("product by niza");
digitalWrite(LED_PIN, LOW); // LED mati
digitalWrite(BUZZER_PIN, LOW); // Buzzer mati
myServo.write(0); // Servo dalam posisi 0 derajat (tutup)
}
else if (suhu >= 20 && suhu <= 35 && kelembapan >= 20 && kelembapan <= 35) {
digitalWrite(LED_PIN, HIGH); // LED menyala terang
digitalWrite(BUZZER_PIN, LOW); // Buzzer mati
lcd.setCursor(0, 0);
lcd.print("Udara Lembab");
myServo.write(90); // Servo dalam posisi 90 derajat (setengah terbuka)
}
else if (suhu > 35 && kelembapan > 35) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Udara Kering");
tone(BUZZER_PIN, 1000); // Buzzer bunyi
digitalWrite(LED_PIN, HIGH); // LED berkedip
delay(500);
digitalWrite(LED_PIN, LOW); // LED mati
delay(500);
noTone(BUZZER_PIN); // Matikan suara buzzer
myServo.write(180); // Servo pada posisi 180 derajat (terbuka penuh)
}
delay(2000); // Baca sensor setiap 2 detik
}