//2021230037
//Muhammad Raqhib Hamdi
//Teknologi Informasi
//Universitas Darma Persada
//Kamis 16 Mei 2024
//Lab 7.4
#include <ESP32Servo.h>
// Pin Definitions
#define SERVO_PIN 12 // GPIO pin for servo
#define RELAY_PIN 15 // GPIO pin for relay
#define LED_PIN 4 // GPIO pin for LED
#define LIGHT_SENSOR_PIN 34 // GPIO pin for light sensor
// Threshold Values
#define LIGHT_THRESHOLD_OPEN 100
#define LIGHT_THRESHOLD_CLOSE 6700
#define NIGHT_LIGHT_THRESHOLD 100
Servo roofServo;
void setup() {
Serial.begin(9600);
// Attach Servo to Pin
roofServo.attach(SERVO_PIN);
// Set Pin Modes
pinMode(RELAY_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
// Read Light Sensor Value
int lightIntensity = analogRead(LIGHT_SENSOR_PIN);
// Control Roof
if (lightIntensity >= LIGHT_THRESHOLD_OPEN || lightIntensity < NIGHT_LIGHT_THRESHOLD) {
openRoof();
} else if (lightIntensity > LIGHT_THRESHOLD_CLOSE) {
closeRoof();
}
// Control UV Lamp and LED Lamp
if (lightIntensity >= LIGHT_THRESHOLD_OPEN && lightIntensity < NIGHT_LIGHT_THRESHOLD) {
digitalWrite(RELAY_PIN, LOW); // Turn off UV Lamp
digitalWrite(LED_PIN, HIGH); // Turn on LED Lamp
} else if (lightIntensity > LIGHT_THRESHOLD_CLOSE) {
digitalWrite(RELAY_PIN, HIGH); // Turn on UV Lamp
digitalWrite(LED_PIN, LOW); // Turn off LED Lamp
} else {
digitalWrite(RELAY_PIN, LOW); // Turn off UV Lamp
digitalWrite(LED_PIN, HIGH); // Turn on LED Lamp
}
// Print Light Intensity (for debugging)
Serial.print("Light Intensity: ");
Serial.println(lightIntensity);
// Delay for Stability
delay(1000);
}
void openRoof() {
// Move Servo to Open Position
roofServo.write(180); // Adjust angle as needed
}
void closeRoof() {
// Move Servo to Closed Position
roofServo.write(0); // Adjust angle as needed
}