#include <DHT.h>
#include <Servo.h>
#define DHTPIN 2 // Pin untuk DHT22
#define DHTTYPE DHT22 // Tipe sensor DHT
#define POMPA_PIN 12 // Pin untuk LED Merah sebagai indikator Pompa
#define LED_INDICATOR 4 // Pin untuk LED Biru sebagai indikator sistem aktif
#define BUTTON_PIN 3 // Pin untuk tombol
#define SERVO_PIN A1 // Pin untuk servo
DHT dht(DHTPIN, DHTTYPE);
Servo servo;
bool systemActive = false;
void setup() {
Serial.begin(9600);
dht.begin();
pinMode(POMPA_PIN, OUTPUT);
pinMode(LED_INDICATOR, OUTPUT);
pinMode(BUTTON_PIN, INPUT);
servo.attach(SERVO_PIN);
// Inisialisasi posisi awal
digitalWrite(POMPA_PIN, LOW); // Pompa off
digitalWrite(LED_INDICATOR, LOW); // Sistem tidak aktif
servo.write(0); // Servo di posisi awal
Serial.println("Sistem Belum Menyala");
Serial.println("Silahkan tekan tombol untuk mengaktifkan");
}
void loop() {
// Membaca tombol
if (digitalRead(BUTTON_PIN) == HIGH && !systemActive) {
Serial.println("Sistem aktif");
systemActive = true;
digitalWrite(LED_INDICATOR, HIGH); // Mengaktifkan indikator sistem
delay(300); // Debounce untuk tombol
}
if (systemActive) {
// Membaca suhu dan kelembaban dari DHT22
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Cek jika pembacaan berhasil
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Gagal membaca dari sensor DHT!");
return;
}
Serial.print("Kelembaban: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.println(" *C");
// Logika sistem otomatis berdasarkan kelembapan
if (humidity < 90) {
// Mengaktifkan Pompa dan mengatur posisi servo sesuai kelembapan
digitalWrite(POMPA_PIN, HIGH); // Pompa aktif
int servoAngle = map(humidity, 0, 90, 0, 90); // Mapping kelembapan ke sudut servo
servo.write(servoAngle); // Atur servo
} if (humidity > 90) {
// Menonaktifkan Pompa dan mengatur servo ke posisi 90 derajat
digitalWrite(POMPA_PIN, LOW); // Pompa mati
servo.write(90); // Servo di posisi tutup penuh (90 derajat)
}
} else {
// Jika sistem belum aktif, pastikan semua komponen dalam keadaan mati
digitalWrite(POMPA_PIN, LOW); // Pompa mati
servo.write(0); // Servo di posisi awal
}
delay(1000); // Interval pembacaan sensor
}