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
Post a Comment