baltmaker
Published © CC BY-NC-SA

Obstacle Avoiding Robot

This obstacle avoiding robot a.k.a. NT1 avoids obstacles in its way by using the ultrasonic ranging sensor HC-SR04.

BeginnerFull instructions provided2,918
Obstacle Avoiding Robot

Things used in this project

Hardware components

Arduino UNO
Arduino UNO
×1
L298N Motor Drive
×1
SG90 Micro Servo Motor
×1
DC motors with Wheels
×2
HC-SR04 Ultrasonic Sensor
×1
Mini breadboard
×1
9V Batteries
×2
9V Battery Clip Connector
×1
9V Battery Clip to Arduino Connector
×1
F to F Jumpers and M to M Jumpers
×1
Universal Wheel
×1

Story

Read more

Schematics

Fritzing Diagram

NT1_BED_STL

Code

NT1_ArduinoCode

Arduino
#include <Servo.h>          //Include the servo motor library 
#include <NewPing.h>        //This library needs to be downloaded and included so that we can use the HC-SR04 sensor
//L298N (Motor driver)control pins
const int LeftMotorFwd = 7;
const int LeftMotorBwd = 6;
const int RightMotorFwd = 4;
const int RightMotorBwd = 5;
//ultrasonic sensor pins
#define trig_pin A1 //analog input 1
#define echo_pin A2 //analog input 2
#define maximum_distance 200
boolean goesFwd = false;
int distance = 100;
NewPing sonar(trig_pin, echo_pin, maximum_distance); //sensor function
Servo servo_motor; //our servo name
void setup(){
  pinMode(RightMotorFwd, OUTPUT);
  pinMode(LeftMotorFwd, OUTPUT);
  pinMode(LeftMotorBwd, OUTPUT);
  pinMode(RightMotorBwd, 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(RightMotorFwd, LOW);
  digitalWrite(LeftMotorFwd, LOW);
  digitalWrite(RightMotorBwd, LOW);
  digitalWrite(LeftMotorBwd, LOW);
}
void moveForward(){
  if(!goesForward){
    goesForward=true;
    digitalWrite(LeftMotorFwd, HIGH);
    digitalWrite(RightMotorFwd, HIGH);
    digitalWrite(LeftMotorBwd, LOW);
    digitalWrite(RightMotorBwd, LOW); 
  }
}
void moveBackward(){
  goesForward=false;
  digitalWrite(LeftMotorBwd, HIGH);
  digitalWrite(RightMotorBwd, HIGH);
  digitalWrite(LeftMotorFwd, LOW);
  digitalWrite(RightMotorFwd, LOW);
}
void turnRight(){
  digitalWrite(LeftMotorFwd, HIGH);
  digitalWrite(RightMotorBwd, HIGH);
  digitalWrite(LeftMotorBwd, LOW);
  digitalWrite(RightMotorFwd, LOW);
  delay(500);
  digitalWrite(LeftMotorFwd, HIGH);
  digitalWrite(RightMotorFwd, HIGH);
  digitalWrite(LeftMotorBwd, LOW);
  digitalWrite(RightMotorBwd, LOW);
}
void turnLeft(){
  digitalWrite(LeftMotorBwd, HIGH);
  digitalWrite(RightMotorFwd, HIGH);
  digitalWrite(LeftMotorFwd, LOW);
  digitalWrite(RightMotorBwd, LOW);
  delay(500);
  digitalWrite(LeftMotorFwd, HIGH);
  digitalWrite(RightMotorFwd, HIGH);
  digitalWrite(LeftMotorBwd, LOW);
  digitalWrite(RightMotorBwd, LOW);
}

Credits

baltmaker
0 projects • 0 followers

Comments