//2021230037
//Muhammad Raqhib Hamdi
//Teknologi Informasi
//Universitas Darma Persada
//Kamis 30 Mei 2024
#include <ESP32Servo.h>
#include <DHT.h>
#define SERVO_PIN 2
#define RELAY_PIN 26
#define HALOGEN_PIN 4
#define LDR_PIN 34
#define DHT_PIN 15
#define DHT_TYPE DHT22
#define HEATER_PIN 12
#define FAN_PIN 13
#define BLOWER_PIN 14
#define VALVE_PIN 27
Servo servoMotor;
DHT dht(DHT_PIN, DHT_TYPE);
void setup() {
pinMode(RELAY_PIN, OUTPUT);
pinMode(HALOGEN_PIN, OUTPUT);
pinMode(LDR_PIN, INPUT);
pinMode(HEATER_PIN, OUTPUT);
pinMode(FAN_PIN, OUTPUT);
pinMode(BLOWER_PIN, OUTPUT);
pinMode(VALVE_PIN, OUTPUT);
servoMotor.attach(SERVO_PIN);
Serial.begin(9600); // Inisialisasi komunikasi serial
dht.begin();
Serial.println("Greenhouse Control System Initialized");
}
// Fungsi untuk mengkonversi nilai bacaan analog LDR menjadi lux
float analogToLux(int analogValue) {
// Konversi nilai analog ke nilai tegangan (voltase)
float voltage = analogValue * (3.3 / 4095.0); // 3.3V adalah tegangan referensi dan 4095 adalah maksimum nilai ADC
// Konversi tegangan ke lux menggunakan invers dari rumus yang sesuai
float lux = 10000 / voltage; // Misalnya, menggunakan invers dari rumus yang digunakan sebelumnya
return lux; // Kembalikan nilai dalam satuan lux
}
void loop() {
// Baca nilai LDR dan konversi ke lux
int lightIntensity = analogRead(LDR_PIN);
float lux = analogToLux(lightIntensity);
Serial.print("Intensitas Cahaya (Lux): ");
Serial.println(lux);
// Baca nilai temperatur dan kelembaban dari sensor DHT22
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Cek apakah 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("Temperatur: ");
Serial.print(temperature);
Serial.println(" *C");
// Kontrol atap dan lampu berdasarkan intensitas cahaya
if (lux >= 3170 && lux <= 6700) {
// Buka atap
servoMotor.write(0);
// Matikan lampu UV
digitalWrite(RELAY_PIN, LOW);
// Matikan lampu halogen
digitalWrite(HALOGEN_PIN, LOW);
Serial.println("Roof Dibuka. UV Lampu Mati. Halogen Lampu Mati.");
} else if (lux > 6700) {
// Tutup atap
servoMotor.write(90);
// Nyalakan lampu UV
digitalWrite(RELAY_PIN, HIGH);
// Matikan lampu halogen
digitalWrite(HALOGEN_PIN, LOW);
Serial.println("Roof Ditutup. UV Lampu Menyala. Halogen Lampu Mati.");
} else {
// Buka atap
servoMotor.write(0);
// Matikan lampu UV
digitalWrite(RELAY_PIN, LOW);
// Nyalakan lampu halogen
digitalWrite(HALOGEN_PIN, HIGH);
Serial.println("Roof Dibuka. UV Lampu off. Halogen Lampu Menyala.");
}
// Kontrol kelembaban
if (humidity > 90) {
// Blower ON, Valve OFF
digitalWrite(BLOWER_PIN, HIGH);
digitalWrite(VALVE_PIN, LOW);
Serial.println("Kelembaban > 90. Blower ON. Valve OFF.");
} else if (humidity >= 80 && humidity <= 90) {
// Blower OFF, Valve OFF
digitalWrite(BLOWER_PIN, LOW);
digitalWrite(VALVE_PIN, LOW);
Serial.println("Kelembaban 80-90. Blower OFF. Valve OFF.");
} else {
// Blower OFF, Valve ON
digitalWrite(BLOWER_PIN, LOW);
digitalWrite(VALVE_PIN, HIGH);
Serial.println("Kelembaban < 80. Blower OFF. Valve ON.");
}
// Kontrol temperatur
if (temperature > 27) {
// Heater OFF, Fan ON
digitalWrite(HEATER_PIN, LOW);
digitalWrite(FAN_PIN, HIGH);
Serial.println("Temperatur > 27. Heater OFF. Fan ON.");
} else if (temperature >= 21 && temperature <= 27) {
// Heater OFF, Fan OFF
digitalWrite(HEATER_PIN, LOW);
digitalWrite(FAN_PIN, LOW);
Serial.println("Temperatur 21-27. Heater OFF. Fan OFF.");
} else {
// Heater ON, Fan OFF
digitalWrite(HEATER_PIN, HIGH);
digitalWrite(FAN_PIN, LOW);
Serial.println("Temperatur < 21. Heater ON. Fan OFF.");
}
delay(1000); // Jeda untuk stabilitas
}