Obstacle Avoiding Robot

obstacle avoiding robot

Description
    An Obstacle avoiding robot is a fully autonomous robot that can be able to avoid any obstacle which it faces when it moves. When it met an obstacle while it moving forward, it stops automatically and makes a step back. Then it looks to both right and left if there is no obstacle in front of that it moves in that way. This process will be continued. I think this project is very helpful to you. Okay, guys now we can do this.

Components Required

 1. Arduino UNO  1
 2. L298N Motor Driver Module   1
 3. Ultrasonic Sensor(HC-SR04)   1
 4. Servomotor    1
 5. Gear Motors   4
 6. Wheels   4
 7. Jumper Wires    1
 8. Acrylic sheet   1
 9. Li-ion 18650 battery  4
10. Li-ion 18650 battery holder  1
11.  DC Power Switch   1

Circuit Diagram



Program

#include <Servo.h>          //Servo motor library. This is standard library 
#include <NewPing.h>    //Ultrasonic sensor function library. You must install this library                                             
  
//our L298N control pins 
const int LeftMotorForward = 7; 
const int LeftMotorBackward = 6; 
const int RightMotorForward = 4; 
const int RightMotorBackward = 5; 
const int enA =11; 
const int enB =9; 
  
//sensor pins 
#define trig_pin A4 //analog input 1 
#define echo_pin A5 //analog input 2 
  
#define maximum_distance 200 
boolean goesForward = false; 
int distance = 100; 
  
NewPing sonar(trig_pinecho_pinmaximum_distance); //sensor function 
Servo servo_motor; //our servo name 
  
  
void setup(){ 
  
  pinMode(RightMotorForward, OUTPUT); 
  pinMode(LeftMotorForward, OUTPUT); 
  pinMode(LeftMotorBackward, OUTPUT); 
  pinMode(RightMotorBackward, OUTPUT); 
  pinMode(11, OUTPUT); 
  pinMode(9, OUTPUT); 
   
  servo_motor.attach(10); //our servo pin 
  
  servo_motor.write(115); 
  delay(2000); 
  distance = readPing(); 
  delay(100); 
  distance = readPing(); 
  delay(100); 
  distance = readPing(); 
  delay(100); 
  distance = readPing(); 
  delay(100); 
} 
  
void loop(){ 
  
  int distanceRight = 0; 
  int distanceLeft = 0; 
  delay(50); 
  
  if (distance <= 20){ 
    moveStop(); 
    delay(300); 
    moveBackward(); 
    delay(400); 
    moveStop(); 
    delay(300); 
    distanceRight = lookRight(); 
    delay(300); 
    distanceLeft = lookLeft(); 
    delay(300); 
  
    if (distance >= distanceLeft){ 
      turnRight(); 
      moveStop(); 
    } 
    else{ 
      turnLeft(); 
      moveStop(); 
    } 
  } 
  else{ 
    moveForward();  
  } 
    distance = readPing(); 
} 
  
int lookRight(){   
  servo_motor.write(50); 
  delay(500); 
  int distance = readPing(); 
  delay(100); 
  servo_motor.write(115); 
  return distance; 
} 
  
int lookLeft(){ 
  servo_motor.write(170); 
  delay(500); 
  int distance = readPing(); 
  delay(100); 
  servo_motor.write(115); 
  return distance; 
  delay(100); 
} 
  
int readPing(){ 
  delay(70); 
  int cm = sonar.ping_cm(); 
  if (cm==0){ 
    cm=250; 
  } 
  return cm; 
} 
  
void moveStop(){ 
   
  digitalWrite(RightMotorForward, LOW); 
  digitalWrite(LeftMotorForward, LOW); 
  digitalWrite(RightMotorBackward, LOW); 
  digitalWrite(LeftMotorBackward, LOW); 
} 
  
void moveForward(){ 
  
  if(!goesForward){ 
  
    goesForward=true; 
     
    digitalWrite(LeftMotorForward, HIGH); 
    analogWrite(11,200); 
    digitalWrite(RightMotorForward, HIGH); 
    analogWrite(9,200); 
   
    digitalWrite(LeftMotorBackward, LOW); 
    digitalWrite(RightMotorBackward, LOW);  
  } 
} 
  
void moveBackward(){ 
  
  goesForward=false; 
  
  digitalWrite(LeftMotorBackward, HIGH); 
  analogWrite(11,200); 
  digitalWrite(RightMotorBackward, HIGH); 
  analogWrite(9,200); 
  digitalWrite(LeftMotorForward, LOW); 
  digitalWrite(RightMotorForward, LOW); 
   
} 
  
void turnRight(){ 
  
  digitalWrite(LeftMotorForward, HIGH); 
  analogWrite(11,200); 
  digitalWrite(RightMotorBackward, HIGH); 
  analogWrite(9,200); 
   
  digitalWrite(LeftMotorBackward, LOW); 
  digitalWrite(RightMotorForward, LOW); 
   
  delay(500); 
   
  digitalWrite(LeftMotorForward, HIGH); 
  analogWrite(11,200); 
  digitalWrite(RightMotorForward, HIGH); 
  analogWrite(9,200); 
   
  digitalWrite(LeftMotorBackward, LOW); 
  digitalWrite(RightMotorBackward, LOW); 
  
   
   
} 
  
void turnLeft(){ 
  
  digitalWrite(LeftMotorBackward, HIGH); 
  analogWrite(11,200); 
  digitalWrite(RightMotorForward, HIGH); 
  analogWrite(9,200); 
  digitalWrite(LeftMotorForward, LOW); 
  digitalWrite(RightMotorBackward, LOW); 
  
  delay(500); 
   
  digitalWrite(LeftMotorForward, HIGH); 
  analogWrite(11,200); 
  digitalWrite(RightMotorForward, HIGH); 
  analogWrite(9,200); 
   
  digitalWrite(LeftMotorBackward, LOW); 
  digitalWrite(RightMotorBackward, LOW); 
}