Simple obstacle avoiding robot using Arduino
Fun way to learn arduino
Image Credit: http://slideplayer.com/slide/9744477
Obstacle avoiding human
Obstacle avoiding Robot
HC-SR04 Ultrasonic Sensor
Motors + Wheels
L239D Motor Driver
Arduino
Comparing Human to Robot
Human | Robot |
---|---|
Eyes | Distance sensor |
Nuerons | Wires |
Brain | Arduino |
Leg | Motor Driver + Motors + Wheels |
Connecting the Sensor
Reading Sensor
#include <NewPing.h>
#define PING_PIN 12
#define PING_MAX_DISTANCE 200
NewPing sonar(PING_PIN, PING_PIN, PING_MAX_DISTANCE);
void setup() {
Serial.begin(9600);
}
void loop() {
delay(500);
unsigned int distanceInCms = sonar.ping() / US_ROUNDTRIP_CM;
Serial.println("Distance: " + String(distanceInCms) + "cm");
}
Connecting the Motors
Operating Motors
int motor_left[] = {2, 3};
int motor_right[] = {7, 8};
void setup() {
for(int i = 0; i < 2; i++){
pinMode(motor_left[i], OUTPUT);
pinMode(motor_right[i], OUTPUT);
}
}
void loop() {
delay(50);
drive_forward();
}
void drive_forward() {
digitalWrite(motor_left[0], HIGH);
digitalWrite(motor_left[1], LOW);
digitalWrite(motor_right[0], HIGH);
digitalWrite(motor_right[1], LOW);
}
void drive_backward() {
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], HIGH);
digitalWrite(motor_right[0], LOW);
digitalWrite(motor_right[1], HIGH);
}
void turn_left() {
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], HIGH);
digitalWrite(motor_right[0], HIGH);
digitalWrite(motor_right[1], LOW);
}
void turn_right() {
digitalWrite(motor_left[0], HIGH);
digitalWrite(motor_left[1], LOW);
digitalWrite(motor_right[0], LOW);
digitalWrite(motor_right[1], HIGH);
}
void motor_stop(){
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], LOW);
digitalWrite(motor_right[0], LOW);
digitalWrite(motor_right[1], LOW);
}
The obstacle avoiding brain
// ..... Setup code omitted
void loop() {
delay(50);
unsigned int distanceInCms = sonar.ping() / US_ROUNDTRIP_CM;
if(distanceInCms != NO_ECHO && distanceInCms < MAX_DISTANCE_FROM_OBSTACLE_IN_CMS) {
rotate_right(90);
} else {
drive_forward();
}
}
void rotate_right(int angleInDegrees) {
for(int i=0; i< angleInDegrees; i++) {
turn_right();
delay(25);
}
}
// .... Full code can be found in gist mentioned below
Demo & Questions
Thank You
Links
- Instructions to build: http://tech.endeepak.com/blog/2016/01/02/simple-obstacle-avoiding-robot-using-arduino/
- Other simple hardware projects : http://diyhacking.com
simple-obstacle-avoiding-robot-using-arduino
By Deepak Narayana Rao
simple-obstacle-avoiding-robot-using-arduino
- 1,020