#define SERVO_PIN 2 // Pin connected to servo motor
#define IR_SENSOR_PIN 4 // Pin connected to IR sensor
#define RELAY_PIN 5 // Pin connected to relay module
#define LED_PIN 13 // Pin connected to LED
#define SERVO_FREQ 50 // Servo frequency in Hz
#define SERVO_MIN_DUTY 2 // Minimum duty cycle for servo (in percentage)
#define SERVO_MAX_DUTY 12 // Maximum duty cycle for servo (in percentage)
int irSensorState = LOW;
bool doorOpen = false;
void setup() {
pinMode(SERVO_PIN, OUTPUT);
pinMode(IR_SENSOR_PIN, INPUT);
pinMode(RELAY_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
irSensorState = digitalRead(IR_SENSOR_PIN);
if (irSensorState == HIGH) {
if (!doorOpen) {
openDoor();
}
} else {
if (doorOpen) {
closeDoor();
}
}
}
void openDoor() {
for (int dutyCycle = SERVO_MIN_DUTY; dutyCycle <= SERVO_MAX_DUTY; dutyCycle++) {
ledcWrite(0, dutyCycle); // Rotate servo to open the door
delay(15); // Adjust delay as per your servo's speed
}
digitalWrite(RELAY_PIN, HIGH); // Activate relay to control door mechanism
digitalWrite(LED_PIN, HIGH); // Turn on LED to indicate door opening
doorOpen = true;
}
void closeDoor() {
for (int dutyCycle = SERVO_MAX_DUTY; dutyCycle >= SERVO_MIN_DUTY; dutyCycle--) {
ledcWrite(0, dutyCycle); // Rotate servo to close the door
delay(15); // Adjust delay as per your servo's speed
}
digitalWrite(RELAY_PIN, LOW); // Deactivate relay
digitalWrite(LED_PIN, LOW); // Turn off LED
doorOpen = false;
}