#include <Servo.h>
#define TRIG_PIN 2 // Ultrasonic Trigger pin
#define ECHO_PIN 3 // Ultrasonic Echo pin
Servo steeringServo;
// Steering angles
#define LEFT_ANGLE 30
#define CENTER_ANGLE 90
#define RIGHT_ANGLE 150
long duration;
int distance;
// Function to measure distance in cm
int getDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH, 30000); // timeout added for safety
distance = duration * 0.034 / 2; // convert to cm
return distance;
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
steeringServo.attach(9); // Servo signal connected to D9
steeringServo.write(CENTER_ANGLE);
Serial.begin(9600);
}
void loop() {
distance = getDistance();
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// -------- OBSTACLE AVOIDANCE CONTROL --------
if (distance > 0 && distance <= 91) { // ≤ 3 ft
steeringServo.write(LEFT_ANGLE);
Serial.println("Obstacle within 3ft → Steering LEFT");
}
else if (distance > 91 && distance <= 152) { // ≤ 5 ft
steeringServo.write(RIGHT_ANGLE);
Serial.println("Obstacle within 5ft → Steering RIGHT");
}
else if (distance > 152) { // > 5 ft
steeringServo.write(CENTER_ANGLE);
Serial.println("Path clear → STOP (CENTER)");
}
delay(200);
}