self driving car using arduino

Self driving car using Arduino.



              Self driving robot is an intelligent device which can automatically sense the obstacle in front of it and avoid them by turning itself in another direction. This design allows the robot to navigate in an unknown environment by avoiding collisions, which is a primary requirement for any autonomous mobile robot. The application of obstacle Avoiding robot is not limited and it is used in most of the military organization now which help carry out many risky jobs that can not be done by any soldiers.

             This project we are going to use Arduino microcontroller, Ultrasonic sensor, Servo motor, gear motor, wheel, motor driver and battery. Here an Arduino id used to control the robot and an Ultrasonic sensor is used to sense the obstacle in the path and calculate the distance between the robot and obstacle and change the direction to continue moving.


Component required.

1.      Arduino Uno.
2.      HC-SR04 Ultrasonic Sensor.
3.      Adafruit motor shield.
4.      Servo motor SG90.
5.      ON/OFF Switch.
6.      Battery connector.
7.      Jumper wire.
8.      BO Motor with Wheels.

If you have any doubt or any problems please comment on youtube, I can solve your problems

Arduino Programing.


// Before uploading the code you have to install the necessary library//
//AFMotor Library https://learn.adafruit.com/adafruit-motor-shield/library-install //
//NewPing Library https://github.com/eliteio/Arduino_New_Ping.git //
//Servo Library https://github.com/arduino-libraries/Servo.git //


#include <AFMotor.h> 
#include <NewPing.h>
#include <Servo.h>

#define TRIG_PIN A0
#define ECHO_PIN A1
#define MAX_DISTANCE 100
#define MAX_SPEED 100                  // sets speed of DC  motors
#define MAX_SPEED_OFFSET 20



NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);

AF_DCMotor motor1(1, MOTOR12_64KHZ);
AF_DCMotor motor2(2, MOTOR12_64KHZ);
AF_DCMotor motor3(3, MOTOR34_64KHZ);
AF_DCMotor motor4(4, MOTOR34_64KHZ);
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<=25)

 {

  moveStop();
  delay(100);
  moveBackward();
  delay(200);
  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(100);
  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) // 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 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);   

  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);
}

Comments

Popular posts from this blog

How to make talking Voltmeter at home

how to make taking distance measurement device using Arduino and ultrasonic sensor

How to make voltmeter using Arduino