#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#define TRIG_PIN 9
#define ECHO_PIN 10
#define SERVO_PIN 6
#define LED_CLOSED 4
#define LED_OPEN 7
#define BUZZER_PIN 5
Servo gateServo;
LiquidCrystal_I2C lcd(0x27, 16, 2);
long duration;
int distance;
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_CLOSED, OUTPUT);
pinMode(LED_OPEN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
gateServo.attach(SERVO_PIN);
gateServo.write(0);
digitalWrite(LED_CLOSED, HIGH);
digitalWrite(LED_OPEN, LOW);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("SMART GATE");
lcd.setCursor(0, 1);
lcd.print("WAITING...");
Serial.begin(9600);
}
void loop() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH, 30000);
distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.println(distance);
if (distance > 0 && distance < 20) {
gateServo.write(90);
digitalWrite(LED_OPEN, HIGH);
digitalWrite(LED_CLOSED, LOW);
tone(BUZZER_PIN, 1000);
lcd.setCursor(0, 0);
lcd.print("GATE STATUS ");
lcd.setCursor(0, 1);
lcd.print("OPEN ");
} else {
gateServo.write(0);
digitalWrite(LED_OPEN, LOW);
digitalWrite(LED_CLOSED, HIGH);
noTone(BUZZER_PIN);
lcd.setCursor(0, 0);
lcd.print("GATE STATUS ");
lcd.setCursor(0, 1);
lcd.print("CLOSED ");
}
delay(300);
}
Gates Open Under 20 cm
Click This Sensor & Change Distance