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

Arduino-Controlled Human-Following Robot with Obstacle Avoidance and Bluetooth Connectivity

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

Circuit Documentation

Summary of the Circuit

The circuit is designed to control a robot that follows a human and avoids obstacles. It consists of an Arduino Expansion Board as the main controller, interfaced with an HC-SR04 Ultrasonic Sensor for distance measurement, multiple FC-51 IR Sensors for obstacle detection, an L298N DC Motor Driver for motor control, and a 12V battery for power supply. The circuit also includes an HC-05 Bluetooth module for wireless communication and an nRF24L01 module for wireless data transmission.

Component List

Arduino Expansion Board

HC-SR04 Ultrasonic Sensor

FC-51 IR Sensors

L298N DC Motor Driver

12V Battery

HC-05 Bluetooth Module

nRF24L01 Module

Wiring Details

Arduino Expansion Board

HC-SR04 Ultrasonic Sensor

FC-51 IR Sensors

L298N DC Motor Driver

12V Battery

HC-05 Bluetooth Module

nRF24L01 Module

Documented Code

/*
 * Arduino Sketch for a robot that follows a human and avoids obstacles.
 * Components:
 * - Arduino Expansion Board
 * - HC-SR04 Ultrasonic Sensor
 * - FC-51 IR Sensors
 * - L298N DC Motor Driver
 * - 12V Battery
 *
 * Connections:
 * - HC-SR04: TRIG to D3, ECHO to D4
 * - FC-51 IR Sensors: OUT to A4, A5, A6, A7
 * - L298N: IN1 to D8, IN2 to D9, IN3 to D10, IN4 to D11, ENA to D5, ENB to D6
 */

// Pin definitions
const int trigPin = 3;
const int echoPin = 4;
const int irSensor1 = A4;
const int irSensor2 = A5;
const int irSensor3 = A6;
const int irSensor4 = A7;
const int motorIn1 = 8;
const int motorIn2 = 9;
const int motorIn3 = 10;
const int motorIn4 = 11;
const int motorENA = 5;
const int motorENB = 6;

void setup() {
  // Initialize serial communication
  Serial.begin(9600);

  // Set pin modes
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(irSensor1, INPUT);
  pinMode(irSensor2, INPUT);
  pinMode(irSensor3, INPUT);
  pinMode(irSensor4, INPUT);
  pinMode(motorIn1, OUTPUT);
  pinMode(motorIn2, OUTPUT);
  pinMode(motorIn3, OUTPUT);
  pinMode(motorIn4, OUTPUT);
  pinMode(motorENA, OUTPUT);
  pinMode(motorENB, OUTPUT);
}

void loop() {
  // Read distance from ultrasonic sensor
  long distance = getDistance();

  // Read IR sensors
  int ir1 = digitalRead(irSensor1);
  int ir2 = digitalRead(irSensor2);
  int ir3 = digitalRead(irSensor3);
  int ir4 = digitalRead(irSensor4);

  // Obstacle avoidance logic
  if (distance < 20) {
    stopMotors();
  } else if (ir1 == LOW || ir2 == LOW || ir3 == LOW || ir4 == LOW) {
    followHuman();
  } else {
    stopMotors();
  }

  delay(100);
}

long getDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long duration = pulseIn(echoPin, HIGH);
  long distance = duration * 0.034 / 2;
  return distance;
}

void followHuman() {
  digitalWrite(motorIn1, HIGH);
  digitalWrite(motorIn2, LOW);
  digitalWrite(motorIn3, HIGH);
  digitalWrite(motorIn4, LOW);
  analogWrite(motorENA, 255);
  analogWrite(motorENB, 255);
}

void stopMotors() {
  digitalWrite(motorIn1, LOW);
  digitalWrite(motorIn2, LOW);
  digitalWrite(motorIn3, LOW);
  digitalWrite(motorIn4, LOW);
  analogWrite(motorENA, 0);
  analogWrite(motorENB, 0);
}

This code is responsible for controlling the robot's movements based on the data received from the ultrasonic and IR sensors. It includes functions for following a human, stopping the motors, and calculating the distance to obstacles.