#include <Servo.h>
Servo gateServo;
const int trigPin = 9;
const int echoPin = 8;
const int servoPin = 10;
long duration;
int distance;
// Gate positions
const int gateClosed = 0;
const int gateOpen = 90;
// Distance at which car is detected
const int detectionDistance = 15;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
gateServo.attach(servoPin);
// Start with gate closed
gateServo.write(gateClosed);
delay(1000);
}
void loop() {
// Send ultrasonic pulse
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Read echo
duration = pulseIn(echoPin, HIGH, 30000);
// Calculate distance in cm
distance = duration * 0.034 / 2;
Serial.print(“Distance: “);
Serial.print(distance);
Serial.println(” cm”);
// Car detected
if (distance > 0 && distance <= detectionDistance) {
Serial.println("Car Detected - Opening Gate");
// Open barrier
gateServo.write(gateOpen);
delay(3000);
// Wait until car moves away
while (true) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH, 30000);
distance = duration * 0.034 / 2;
Serial.print("Car distance: ");
Serial.println(distance);
// Car has moved away
if (distance == 0 || distance > detectionDistance) {
delay(1500);
break;
}
delay(200);
}
// Close gate
Serial.println("Car Passed - Closing Gate");
gateServo.write(gateClosed);
delay(1000);
}
delay(100);
}
