Arduino Project for Obstacle Avoiding Robot: Code and Guide
ultrasonic sensor to detect objects and controls motors to avoid collisions. The Arduino reads distance data and decides when to move forward or turn to avoid obstacles automatically.Syntax
The basic syntax involves reading sensor data and controlling motors using Arduino functions.
pinMode(pin, mode): Sets a pin as input or output.digitalWrite(pin, value): Sets a digital pin HIGH or LOW to control motors.digitalRead(pin): Reads digital input from sensors.pulseIn(pin, value): Measures the duration of a pulse, used for ultrasonic sensor distance.delay(ms): Pauses the program for a given time in milliseconds.
const int trigPin = 9; const int echoPin = 10; void setup() { pinMode(trigPin, OUTPUT); // Trigger pin for ultrasonic sensor pinMode(echoPin, INPUT); // Echo pin for ultrasonic sensor } long readDistance() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin, HIGH); long distance = duration * 0.034 / 2; // Convert to cm return distance; } void loop() { long dist = readDistance(); // Use dist to control motors }
Example
This example shows a simple obstacle avoiding robot code using an ultrasonic sensor and two motors controlled by an Arduino. The robot moves forward until it detects an obstacle closer than 20 cm, then it stops and turns right to avoid it.
const int trigPin = 9; const int echoPin = 10; const int motorLeftForward = 3; const int motorLeftBackward = 4; const int motorRightForward = 5; const int motorRightBackward = 6; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(motorLeftForward, OUTPUT); pinMode(motorLeftBackward, OUTPUT); pinMode(motorRightForward, OUTPUT); pinMode(motorRightBackward, OUTPUT); Serial.begin(9600); } long readDistance() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin, HIGH); long distance = duration * 0.034 / 2; return distance; } void moveForward() { digitalWrite(motorLeftForward, HIGH); digitalWrite(motorLeftBackward, LOW); digitalWrite(motorRightForward, HIGH); digitalWrite(motorRightBackward, LOW); } void stopMotors() { digitalWrite(motorLeftForward, LOW); digitalWrite(motorLeftBackward, LOW); digitalWrite(motorRightForward, LOW); digitalWrite(motorRightBackward, LOW); } void turnRight() { digitalWrite(motorLeftForward, HIGH); digitalWrite(motorLeftBackward, LOW); digitalWrite(motorRightForward, LOW); digitalWrite(motorRightBackward, HIGH); } void loop() { long distance = readDistance(); Serial.print("Distance: "); Serial.print(distance); Serial.println(" cm"); if (distance > 20 || distance == 0) { moveForward(); } else { stopMotors(); delay(500); turnRight(); delay(600); } delay(100); }
Common Pitfalls
Common mistakes when building an obstacle avoiding robot include:
- Incorrect wiring of the ultrasonic sensor pins causing no distance readings.
- Not setting motor pins as outputs, so motors don't respond.
- Using
delay()too long, making the robot unresponsive. - Ignoring zero or invalid distance readings from the sensor.
- Not calibrating the turning time, causing the robot to turn too much or too little.
Always test sensor readings with Serial.print() and verify motor directions before running the full program.
/* Wrong: Not setting motor pins as OUTPUT */ void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); // Missing pinMode for motor pins } /* Right: Set motor pins as OUTPUT */ void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(motorLeftForward, OUTPUT); pinMode(motorLeftBackward, OUTPUT); pinMode(motorRightForward, OUTPUT); pinMode(motorRightBackward, OUTPUT); }
Quick Reference
Ultrasonic Sensor Pins: trigPin sends a pulse, echoPin listens for the echo.
Motor Control: Use two pins per motor for forward and backward control.
Distance Calculation: Distance (cm) = (pulse duration in microseconds) × 0.034 / 2.
Movement Logic: Move forward if distance > threshold, else stop and turn.