#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
#define LDR_PIN 17
#define LIGHT_PIN 26
#define TRIG_PIN 14
#define ECHO_PIN 12
#define SERVO_PIN 35 // Replace with the GPIO pin connected to the servo
LiquidCrystal_I2C lcd(0x27, 20, 4);
Servo myServo; // Create a servo object
void setup() {
Serial.begin(115200);
// Day Night mode
pinMode(LDR_PIN, INPUT);
pinMode(LIGHT_PIN, OUTPUT);
// Ultrasonic Sensor
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
lcd.init();
lcd.backlight();
digitalWrite(LIGHT_PIN, LOW);
myServo.attach(SERVO_PIN); // Attach the servo to the specified pin
}
void loop() {
// Trigger the ultrasonic sensor
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Read the duration of the echo pulse
long duration = pulseIn(ECHO_PIN, HIGH);
// Calculate the distance in centimeters
int distance = duration * 0.034 / 2;
Serial.println(distance);
if(distance < 40){
myServo.write(100); // Set servo position based on angle (0 to 180)
delay(15);
}else{
myServo.write(0); // Set servo position based on angle (0 to 180)
delay(15);
}
lcd.setCursor(2, 0);
if (digitalRead(LDR_PIN) == LOW) {
lcd.print(" Evening Time! ");
lcd.print(" Bulb ON ");
digitalWrite(LIGHT_PIN, HIGH);
} else {
lcd.print(" Day Time! ");
lcd.print(" Bulb OFF ");
digitalWrite(LIGHT_PIN, LOW);
}
delay(100);
}