Course Content
1. Arduino UNO Board
0/1
2. Ultrasonic Sensor (HC-SR04)
0/1
3. Motor Driver Module (L293D or L298N)
A motor driver module is required because Arduino cannot directly supply enough current to run DC motors. The L293D or L298N motor driver acts as a bridge between Arduino and motors, enabling direction and speed control. It uses an H-Bridge circuit to allow motors to run forward, backward, or stop. In this project, Arduino sends control signals to the driver, which then powers the DC motors accordingly. Without the motor driver, the motors would not function properly. This component ensures safe operation by isolating Arduino from high motor currents while enabling full robot movement.
0/1
4. DC Geared Motors
0/1
5. Robot Chassis
0/1
7. Jumper Wires
0/1
8. Breadboard (Optional)
0/1
9. Battery Holder / Power Supply
0/1
Circuit Diagram
0/1
Arduino Obstacle Avoiding Course

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

#define TRIG_PIN A0
#define ECHO_PIN A1
#defineMAX_DISTANCE200
#define MAX_SPEED 190 // sets speed of DC  motors
#define MAX_SPEED_OFFSET 20

NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);

AF_DCMotor motor1(1, MOTOR12_1KHZ);
AF_DCMotor motor2(2, MOTOR12_1KHZ);
AF_DCMotor motor3(3, MOTOR34_1KHZ);
AF_DCMotor motor4(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);
}

intreadPing(){
  delay(70);
  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);
}  
Exercise Files
Adafruit-Motor-Shield-library-master.zip
Size: 14.64 KB
Arduino-NewPing-master.zip
Size: 13.02 KB