// Nama : Rama Haddaf Syachriza
// NIM : 2021230002
// Kamis, 30-05-2024
#include <ESP32Servo.h>
#define SERVO_PIN 2
#define RELAY_PIN 26
#define HALOGEN_PIN 4
#define LDR_PIN 34
Servo servoMotor;
void setup() {
pinMode(RELAY_PIN, OUTPUT);
pinMode(HALOGEN_PIN, OUTPUT);
pinMode(LDR_PIN, INPUT);
servoMotor.attach(SERVO_PIN);
Serial.begin(9600); // Inisialisasi komunikasi serial
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() {
int lightIntensity = analogRead(LDR_PIN);
float lux = analogToLux(lightIntensity);
Serial.print("intensitas Cahaya (Lux): ");
Serial.println(lux);
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.");
}
delay(1000); // Jeda untuk stabilitas
}