Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

Arduino-Controlled Obstacle Avoidance Robot with Bluetooth Interface

View and Edit Project In Cirkit DesignerImage of Arduino-Controlled Obstacle Avoidance Robot with Bluetooth Interface

Circuit Documentation

Summary

The circuit in question is a complex system designed to control various components including motors, sensors, and actuators through an Arduino UNO microcontroller. The system is capable of driving motors, sensing distances, and communicating via Bluetooth. It includes a relay module for controlling power to a water pump and a peristaltic pump, as well as IR sensors for object detection. LEDs and a buzzer provide visual and auditory feedback, respectively. The circuit is powered by a combination of a Li-ion battery and a polymer lithium-ion battery.

Component List

Wiring Details

1 Channel 5V Relay Module

5v Mini Water Pump

Arduino UNO

HC-SR04 Ultrasonic Sensor

1-Channel Relay (5V 10A)

HC-05 Bluetooth Module

LEDs (Red and White)

L298N DC Motor Driver

Buzzer

Peristaltic Pump

Polymer Lithium Ion Battery - Generic

Li-ion Battery, 2200 mAh 11.1 V

Hobby Gearmotors

IR Sensors

Rocker Switch (SPST)

LED: Four Pin

Documented Code

#define in1 5 //L298n Motor Driver pins.
#define in2 6
#define in3 10
#define in4 11
#define EXTRA 4 
const int trigPin = 9;
const int echoPin = 18;
long duration;
int distance;
#define light_FR  13    //LED Front Right   pin A0 for Arduino Uno
//#define light_FL  15   //LED Front Left    pin A1 for Arduino Uno
#define light_BR  12    //LED Back Right    pin A2 for Arduino Uno
//#define light_BL  17    //LED Back Left     pin A3 for Arduino Uno
#define horn_Buzz 7    //Horn Buzzer       pin A4 for Arduino Uno
int command; //Int to store app command state.
int Speed = 204; // 0 - 255.
int Speedsec;
int buttonState = 0;
int lastButtonState = 0;
int Turnradius = 0; //Set the radius of a turn, 0 - 255 Note:the robot will malfunction if this is higher than int Speed.
int brakeTime = 45;
int brkonoff = 1; //1 for the electronic braking system, 0 for normal.
boolean lightFront = false;
boolean lightBack = false;
boolean horn = false;
boolean extra = false;

void setup() {
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); 
  pinMode(EXTRA,OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  pinMode(14,INPUT);
  pinMode(light_FR, OUTPUT);
  //   pinMode(light_FL, OUTPUT);
  pinMode(light_BR, OUTPUT);
  //   pinMode(light_BL, OUTPUT);
  pinMode(horn_Buzz, OUTPUT);
  
  Serial.begin(9600);  //Set the baud rate to your Bluetooth module.
}

void loop() {
  // Ultrasonic distance measurement
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = duration * 0.034 / 2;
  Serial.println(distance);

  // Obstacle detection and buzzer alert
  if(distance < 25){
    Stop();
    delay(100);
    digitalWrite(in1,LOW);
    digitalWrite(in2,HIGH);
    digitalWrite(in3,LOW);
    digitalWrite(in4,HIGH);
    delay(500);
    Stop();
    buzzerAlert();
  }

  // IR sensor detection and response
  if (digitalRead(14) == HIGH){
    Stop();
    delay(100);
    digitalWrite(in1,LOW);
    digitalWrite(in2,HIGH);
    digitalWrite(in3,LOW);
    digitalWrite(in4,HIGH);
    delay(300);
    Stop();
    buzzerAlert();
  }

  // Additional IR sensor detection and response
  // Code for IR sensors connected to pins A1, A2, A3 (15, 16, 17) is similar to above

  // Bluetooth command processing
  if (Serial.available() > 0) {
    command = Serial.read();
    Stop(); //Initialize with motors stopped.
    updateLights();
    updateHorn();
    updateExtra();
    processCommand();
  }
}

// Function definitions for motor control, light and horn updates, command processing, etc.
// ... (omitted for brevity)

void buzzerAlert(){
  for(int i = 0;