Obstacle Avoiding Robot Final
Obstacle Avoiding Robot Final
AVOIDING ROBOT
1.)Arduino Uno
HARDWARES 2.)Ultrasonic Range Finder Sensor – HC –
SR04
AND 3.)Motor Driver IC – L293D
SOFTWARES
4.)Servo Motor (Tower Pro SG90)
5.)Geared Motors x 2
COMPONENTS 6.)Robot Chassis
7.)Power Supply
REQUIRED 8.)Arduino IDE
9.)C++ Programming language.
Component Description
Arduino Uno
Arduino Uno is an ATmega 328p
Microcontroller based prototyping
board. It is an open source
electronic prototyping platform that
can be used with various sensors
and actuators.
Arduino Uno has 14 digital I/O pins
out of which 6 pins are used in this
project.
Component Description
HC – SR04
It is an Ultrasonic Range Finder Sensor.
It is a non-contact based distance
measurement system and can measure
distance of 2cm to 4m.
L293D
Component It is a motor driver which can provide
Description bi-
two motors.
directional drive current for
Servo Motor
The Tower Pro SG90 is a simple Servo
Motor which can rotate 90 degrees in each
direction (approximately 180 degrees
in total).
Arduino is the main processing unit of the robot. Out of the 14
available digital I/O pins, 7 pins are used in this project design.
Design of The ultrasonic sensor has 4 pins: Vcc, Trig, Echo and Gnd. Vcc
and Gnd are connected to the +5v and GND pins of the
Obstacle Arduino. Trig (Trigger) is connected to the 9th pin and Echo is
connected to 8th pin of the Arduino UNO respectively.
Design of First motor (consider this as the motor for left wheel) is
connected across the pins 3 and 6 of L293D. The second
Obstacle motor, which acts as the right wheel motor, is connected
to 11 and 14 pins of L293D.
Avoiding The 16th pin of L293D is Vcc1. This is connected to +5V.
Robot using The 8th pins is Vcc2. This is the motor supply voltage.
This can be connected anywhere between 4.7V and 36V.
In this project, pin 8 if L293D is connected to +5V supply.
Arduino
Motor Driver boards are available with on – board 5V
voltage regulator. A similar one is used in the project.
Before going to working of the project, it is important to
understand how the ultrasonic sensor works. The basic
principle behind the working of ultrasonic sensor is as
follows:
void setup() {
CODE
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<=25)
{moveStop();
delay(100);
moveBackward();
delay(200);
CODE
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()
CODE
{ 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(100);
int cm = sonar.ping_cm();
if(cm==0){
cm = 250; }
CODE
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) // slowly bring the speed up to
{ motor1.setSpeed(speedSet);
motor2.setSpeed(speedSet);
motor3.setSpeed(speedSet);
motor4.setSpeed(speedSet);
delay(5); }
} }
CODE
void moveBackward() {
goesForward=false;
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to
avoid loading down the batteries too quickly
{ 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);
CODE
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);
www.electronicshub.org
nevonprojects.com
http://www.instructables.com/id/Arduino-Ultimate-
REFERENCES Obstacle-Avoiding-Robot/
www.instructables.com
https://tech.endeepak.com/blog/2016/01/02/simple-
obstacle-avoiding-robot-using-arduino/
Conclusion: