0
0
AutocadHow-ToBeginner · 4 min read

Arduino Project for Obstacle Avoiding Robot: Code and Guide

An obstacle avoiding robot with Arduino uses a 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.
arduino
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.

arduino
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);
}
Output
Distance: 30 cm Distance: 28 cm Distance: 15 cm Distance: 15 cm Distance: 25 cm ...
⚠️

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.

arduino
/* 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.

Key Takeaways

Use an ultrasonic sensor to measure distance and control motors based on that data.
Set all sensor and motor pins correctly with pinMode before using them.
Test sensor readings with Serial Monitor to ensure accurate distance detection.
Avoid long delays to keep the robot responsive to obstacles.
Calibrate motor turning times to ensure smooth obstacle avoidance.