#include <Servo.h>
int IR_SENSOR_PIN = 2;
int SERVO_PIN = 9;
int LED_PIN = 13;
Servo gateServo;
int CLOSED_ANGLE = 0;
int OPEN_ANGLE = 90;
const long OPEN_DURATION = 5000;
bool gateIsOpen = false;
unsigned long gateOpenStartTime = 0;
void setup() {
Serial.begin(9600);
pinMode(IR_SENSOR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
gateServo.attach(SERVO_PIN);
gateServo.write(CLOSED_ANGLE);
digitalWrite(LED_PIN, LOW);
Serial.println("Automatic Gate System Initialized.");
}
void loop() {
int irSensorValue = digitalRead(IR_SENSOR_PIN);
if (irSensorValue == LOW && !gateIsOpen) {
openGate();
}
if (gateIsOpen && (millis() - gateOpenStartTime >= OPEN_DURATION)) {
closeGate();
}
Serial.print("IR Sensor: ");
Serial.print(irSensorValue == LOW ? "Object Detected" : "Clear");
Serial.print(" | Gate Status: ");
Serial.println(gateIsOpen ? "Open" : "Closed");
delay(100);
}
void openGate() {
Serial.println("Object detected. Opening gate...");
gateServo.write(OPEN_ANGLE);
digitalWrite(LED_PIN, HIGH);
gateIsOpen = true;
gateOpenStartTime = millis();
}
void closeGate() {
Serial.println("Closing gate");
gateServo.write(CLOSED_ANGLE);
digitalWrite(LED_PIN, LOW);
gateIsOpen = false;
}