In this article, we going to explain how to make an obstacle-avoiding robot car. you can make this using the Arduino Uno board so easily. Let's get started. If you interested in Arduino Uno projects, refer to my previous articles.



Arduino Uno Obstacle Avoiding Robot Car
Arduino Uno Obstacle Avoiding Robot Car


  • In this robot car, the ultrasonic sensor acts as an obstacle detector so that the robot car change the traveling path automatically.

  • First, you need these components to build this robot car. 

Apparatus

1.Arduino Uno board

Arduino Uno board
Arduino Uno board


2.Ultrasonic sensor (hc-sr04)



Ultrasonic sensor (hc-sr04)
Ultrasonic sensor (hc-sr04)


3. Motor driver (L298N)



Motor driver (L298N)
Motor driver (L298N)


4.Servo motor (Gear SG90 9g)





5.Jumper cables

Jumper cables
Jumper cables


6.Dot board


Dot board
Dot board





7.four phone battery



four phone battery
phone battery


8.Toy car wheel with gear



CONNECTION DIAGRAM



connection diagram
connection diagram



Arduino code

#include<Servo.h>
Servo name;

//m1
int enA = 10;
int in1 = 12;
int in2 = 8;
//m2
int enB = 5;
int in3 = 7;
int in4 = 6;
char val;

#define t 11 //trig-white
#define e 13 //echo-black
long duration, cm ;

void setup() {

  Serial.begin(9600);
   name.attach(9);
   name.write(90);
  delay(300);
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
   pinMode(t, OUTPUT );
  pinMode(e, INPUT );
  digitalWrite(t, LOW);
  delayMicroseconds(5);
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(4, INPUT);


 
}


void mpower(int motor, int rotation, int spd) {
  int pwm;
  int pA;
  int pB;
  if (motor == 1) {
    pwm = enA;
    pA = in1;
    pB = in2;
  }
  else if (motor == 2) {
    pwm = enB;
    pA = in3;
    pB = in4;
  }
  else {
    return;
  }
  if (rotation == 0) {
    digitalWrite(pA, LOW);
    digitalWrite(pB, LOW);
  }
  else if (rotation == 1) {
    digitalWrite(pA, HIGH);
    digitalWrite(pB, LOW);
  }
  else if (rotation == -1) {
    digitalWrite(pA, LOW);
    digitalWrite(pB, HIGH);
  }
  analogWrite(pwm, spd);
}

int speedval = 0; //speed of car(max 40)
int maxspeed = 40;
int normalspeed = 127;//less than 125(255/2)
int min_dis = 15;

int mode = 0;
//0-run
//1-scan
//2-rotate

int f_max = 0;
int f_max_ang = 0;


void loop() {
  
    cm = getDistance();
  if (mode == 0) {
    if (cm > min_dis || cm == 0 ) {
      speedval++;
      if (speedval > maxspeed) {
        speedval = maxspeed;
      }
   mpower(2, -1, 255);
      mpower(1, 1, 255);
      delay(100);
    }
    else {
      mpower(1, -1, 255);
      mpower(2, 1, 255);
      delay(speedval * 6);
      speedval = 0;
      if (cm > 1 || speedval == 5) {
        mode = 1;
      }

    }
    Serial.print("CM");
    Serial.print(cm);
    Serial.print(",Speed-");
    Serial.print(speedval);
    Serial.print(",Mode-");
    Serial.print(mode);
    Serial.println();

  }
  else if (mode == 1) {
    f_max = 0;
    name.write(0);
    delay(200);

    for (int a = 0; a <= 180; a += 10) {
      name.write(a);
      delay(20);
      cm = getDistance();
     


        if (cm > f_max) {
          f_max = cm;
          f_max_ang = a;

        }
        
        Serial.print(",D=");
        Serial.print(cm);
      
    }
    Serial.print("f_max_ang=");
        Serial.print(f_max_ang);
    Serial.print("MAX:");
    Serial.println(f_max);
    
    name.write(90);
    delay(200);
    mode = 2;
  }
  else if (mode == 2) {
   
    if (f_max_ang < 90) {
      Serial.println("Rotatiog LEFT");
      mpower(1, -1, 255);
      mpower(2, -1, 255);

      delay(f_max_ang * 10);


    }
    else {
      Serial.println("Rotatiog RIGH");
      mpower(1, 1, 255);
      mpower(2, 1, 255);

      delay((f_max_ang-90) * 10);

    }

    mpower(1, 0, 0);
    mpower(2, 0, 0);

    mode = 0;



  }
  mpower(1, 0, 0);
  mpower(2, 0, 0);
  //mpower(1, 1, 50);
  //mpower(2, -1, 100);
  
  
}


long getDistance() {
  digitalWrite(t, HIGH);
  delayMicroseconds(10);
  digitalWrite(t, LOW);
  duration = pulseIn(e, HIGH, 100000);
  return (duration / 2) / 29.1;
}


you can watch the completed project from here

don't forget to subscribe to our channel

If you have any issue regarding this project, You can directly contact us or you can comment on the project video