In this project, we will be introduced to Arduino, Motor Shield, Servo Motor, and Ultrasonic Sensor. Using these components, we will build an Obstacle Avoiding Car that can move autonomously, detect obstacles, and decide the safest path to continue. The project provides hands-on experience in robotics, sensor integration, and motor control, helping us understand the basics of autonomous navigation systems.
Written by:
Name : Al Hasan Ahmed Sharik
Dept: ME 1.2
SUB EXECUTIVE, RND
System Overview :
This project demonstrates an Arduino-based Obstacle Avoiding Car that can detect obstacles in its path and automatically change direction to avoid collisions. The system uses an ultrasonic sensor mounted on a servo motor to scan the surroundings and a motor driver shield to control two DC motors.
Setup and Operational Guide :
1 )Arduino Uno-
2) Arduino Motor Driver Shield
3) TT Gear Motor (2x)
4) Rubber Wheels(2x)
5) Servo Motor
6) Ultrasonic Sensor
7) 18650 Li-ion Battery
8) Battery Holder
9) Male and Female Jumper
10) DC Power Switch
11) Acrylic Sheet
#include <AFMotor.h>
#include <NewPing.h>
#include <Servo.h>
#define TRIG_PIN A0
#define ECHO_PIN A1
#define MAX_DISTANCE 200
#define MAX_SPEED 190
#define MAX_SPEED_OFFSET 20
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DCMotor motor1(1, MOTOR12_1KHZ);
AF_DCMotor motor2(2, MOTOR12_1KHZ);
AF_DCMotor motor3(3, MOTOR34_1KHZ);
AF_DCMotor motor4(4, MOTOR34_1KHZ);
Servo myservo;
boolean goesForward=false;
int distance = 100;
int speedSet = 0;
void setup() {
myservo.attach(10);
myservo.write(115);
delay(2000);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
}
void loop() {
int distanceR = 0;
int distanceL = 0;
delay(40);
if(distance<=15)
{
moveStop();
delay(100);
moveBackward();
delay(300);
moveStop();
delay(200);
distanceR = lookRight();
delay(200);
distanceL = lookLeft();
delay(200);
if(distanceR>=distanceL)
{
turnRight();
moveStop();
}else
{
turnLeft();
moveStop();
}
}else
{
moveForward();
}
distance = readPing();
}
int lookRight()
{
myservo.write(50);
delay(500);
int distance = readPing();
delay(100);
myservo.write(115);
return distance;
}
int lookLeft()
{
myservo.write(170);
delay(500);
int distance = readPing();
delay(100);
myservo.write(115);
return distance;
delay(100);
}
int readPing() {
delay(70);
int cm = sonar.ping_cm();
if(cm==0)
{
cm = 250;
}
return cm;
}
void moveStop() {
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void moveForward() {
if(!goesForward)
{
goesForward=true;
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2)
{
motor1.setSpeed(speedSet);
motor2.setSpeed(speedSet);
motor3.setSpeed(speedSet);
motor4.setSpeed(speedSet);
delay(5);
}
}
}
void moveBackward() {
goesForward=false;
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2)
{
motor1.setSpeed(speedSet);
motor2.setSpeed(speedSet);
motor3.setSpeed(speedSet);
motor4.setSpeed(speedSet);
delay(5);
}
}
void turnRight() {
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
delay(500);
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void turnLeft() {
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
delay(500);
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
How Does the System Work?
∙ The ultrasonic sensor continuously measures distance from obstacles.
∙ If an object is detected within 15 cm, the car will stop, move backward slightly, and then scan left and right.
∙ The servo motor rotates the sensor to check distances on both sides.
∙ The car turns towards the side with more free space.
∙ If no obstacle is detected, the car keeps moving forward.
Useful Tools :
∙ Arduino IDE (for programming)
∙ Jumper wires and breadboard (if prototyping)
∙ Multimeter (for debugging connections)
Summary :
This project demonstrates a simple yet effective Autonomous Obstacle Avoiding Car using Arduino. The ultrasonic sensor and servo motor help in scanning the surroundings, while the motor driver shield controls the wheels to move forward, backward, or turn left/right. It is an excellent beginner-friendly project for learning about robotics, automation, and sensor integration.