An Obstacle Avoiding Bot is an intelligent robot, which can automatically sense and overcome obstacles on its path.
Components :
L Shaped BO motor : https://bit.ly/3kgZihN
Ultrasonic Sensor HC-SR04 : https://bit.ly/3wkPtnW
Arduino UNO R3 : https://bit.ly/3qj5Q3h
MICRO SERVO 9G : https://bit.ly/3wv9ecr
BO DC motor Single Shaft : https://bit.ly/3kb63lq
4-Wheel Smart Robot : https://bit.ly/3qfHho6
Car Chassis Kit
BO Motor And Wheel Set : https://bit.ly/3CWT3XG
Battery Holder 18650 - 2 Cell : https://bit.ly/3wvZlve
18650 Battery Li-ion 3.7V : https://bit.ly/3o2Q3mE
Battery
Rocker Switch : https://bit.ly/3BSoVLU
Mix Jumper Wires 30 wire : https://bit.ly/3BZmYgU
Pack
All the Information is provided in the video below.
Circuit Diagram :
CODE :
//ARDUINO OBSTACLE AVOIDING Bot//
// Modified by ProfessorHulk
// 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/livetronic/Arduino-NewPing//
//Servo Library https://github.com/arduino-libraries/Servo.git //
// To Install the libraries go to sketch >> Include Library >> Add .ZIP File >> Select the Downloaded ZIP files From the Above links //
//Always remember to select Board ,"Arduino Uno",and port.
#include <AFMotor.h>
#include <NewPing.h>
#include <Servo.h>
#define TRIG_PIN A0
#define ECHO_PIN A1
#define MAX_DISTANCE 200
#define MAX_SPEED 180 // sets speed of DC motors
#define MAX_SPEED_OFFSET 20
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DCMotor M1(1, MOTOR12_1KHZ);
AF_DCMotor M2(2, MOTOR12_1KHZ);
AF_DCMotor M3(3, MOTOR34_1KHZ);
AF_DCMotor M4(4, MOTOR34_1KHZ);
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<=15)
{
moveStop();
delay(100);
moveBackward();
delay(300);
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(70);
int cm = sonar.ping_cm();
if(cm==0)
{
cm = 250;
}
return cm;
}
void moveStop() {
M1.run(RELEASE);
M2.run(RELEASE);
M3.run(RELEASE);
M4.run(RELEASE);
}
void moveForward() {
if(!goesForward)
{
goesForward=true;
M1.run(FORWARD);
M2.run(FORWARD);
M3.run(FORWARD);
M4.run(FORWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
{
M1.setSpeed(speedSet);
M2.setSpeed(speedSet);
M3.setSpeed(speedSet);
M4.setSpeed(speedSet);
delay(5);
}
}
}
void moveBackward() {
goesForward=false;
M1.run(BACKWARD);
M2.run(BACKWARD);
M3.run(BACKWARD);
M4.run(BACKWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
{
M1.setSpeed(speedSet);
M2.setSpeed(speedSet);
M3.setSpeed(speedSet);
M4.setSpeed(speedSet);
delay(5);
}
}
void turnRight() {
M1.run(FORWARD);
M2.run(FORWARD);
M3.run(BACKWARD);
M4.run(BACKWARD);
delay(500);
M1.run(FORWARD);
M2.run(FORWARD);
M3.run(FORWARD);
M4.run(FORWARD);
}
void turnLeft() {
M1.run(BACKWARD);
M2.run(BACKWARD);
M3.run(FORWARD);
M4.run(FORWARD);
delay(500);
M1.run(FORWARD);
M2.run(FORWARD);
M3.run(FORWARD);
M4.run(FORWARD);
}
Comments