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

ESP32 and Ultrasonic Sensor-Based Obstacle Avoidance Robot with Battery Power

View and Edit Project In Cirkit DesignerImage of ESP32 and Ultrasonic Sensor-Based Obstacle Avoidance Robot with Battery Power

Circuit Documentation

Summary

This circuit is designed to interface multiple HC-SR04 ultrasonic sensors with an ESP32 microcontroller to measure distances and detect obstacles. Additionally, it includes an L298N motor driver to control two DC motors with wheels, powered by two 18650 Li-ion batteries.

Component List

  1. HC-SR04 Ultrasonic Sensor

    • Description: Ultrasonic distance sensor
    • Pins: VCC, TRIG, ECHO, GND
  2. ESP32 (30 pin)

    • Description: Microcontroller with Wi-Fi and Bluetooth capabilities
    • Pins: EN, VP, VN, D34, D35, D32, D33, D25, D26, D27, D14, D12, D13, GND, Vin, D23, D22, TX0, RX0, D21, D19, D18, D5, TX2, RX2, D4, D2, D15, 3V3
  3. L298N DC Motor Driver

    • Description: Dual H-Bridge motor driver
    • Pins: OUT1, OUT2, 12V, GND, 5V, OUT3, OUT4, 5V-ENA-JMP-I, 5V-ENA-JMP-O, +5V-J1, +5V-J2, ENA, IN1, IN2, IN3, IN4, ENB
  4. Motor and Wheels

    • Description: DC motor with attached wheels
    • Pins: vcc, GND
  5. 18650 Li-ion Battery x 2

    • Description: Rechargeable lithium-ion battery
    • Pins: +, -

Wiring Details

HC-SR04 Ultrasonic Sensor 1

HC-SR04 Ultrasonic Sensor 2

HC-SR04 Ultrasonic Sensor 3

HC-SR04 Ultrasonic Sensor 4

HC-SR04 Ultrasonic Sensor 5

ESP32 (30 pin)

L298N DC Motor Driver

Motor and Wheels 1

Motor and Wheels 2

18650 Li-ion Battery x 2

Code Documentation

sketch.ino

#define TRIG_PIN1 13
#define ECHO_PIN1 12
#define TRIG_PIN2 14
#define ECHO_PIN2 27
#define TRIG_PIN3 25
#define ECHO_PIN3 26
#define TRIG_PIN4 33
#define ECHO_PIN4 32
#define TRIG_PIN5 23
#define ECHO_PIN5 22

void setup() {
  Serial.begin(9600);
  pinMode(TRIG_PIN1, OUTPUT);
  pinMode(ECHO_PIN1, INPUT);
  pinMode(TRIG_PIN2, OUTPUT);
  pinMode(ECHO_PIN2, INPUT);
  pinMode(TRIG_PIN3, OUTPUT);
  pinMode(ECHO_PIN3, INPUT);
  pinMode(TRIG_PIN4, OUTPUT);
  pinMode(ECHO_PIN4, INPUT);
  pinMode(TRIG_PIN5, OUTPUT);
  pinMode(ECHO_PIN5, INPUT);

  Serial.println("Starting ultrasonic sensors...");
}

void loop() {
  float distance1 = getDistanceDebug(TRIG_PIN1, ECHO_PIN1, 1);
  float distance2 = getDistanceDebug(TRIG_PIN2, ECHO_PIN2, 2);
  float distance3 = getDistanceDebug(TRIG_PIN3, ECHO_PIN3, 3);
  float distance4 = getDistanceDebug(TRIG_PIN4, ECHO_PIN4, 4);
  float distance5 = getDistanceDebug(TRIG_PIN5, ECHO_PIN5, 5);

  Serial.print("Distance 1: ");
  Serial.print(distance1);
  Serial.println(" cm");

  Serial.print("Distance 2: ");
  Serial.print(distance2);
  Serial.println(" cm");

  Serial.print("Distance 3: ");
  Serial.print(distance3);
  Serial.println(" cm");

  Serial.print("Distance 4: ");
  Serial.print(distance4);
  Serial.println(" cm");

  Serial.print("Distance 5: ");
  Serial.print(distance5);
  Serial.println(" cm");

  float averageDistanceLeft = (distance1 + distance2) / 2;
  Serial.print("Distance left: ");
  Serial.print(averageDistanceLeft);
  Serial.println(" cm");

  float averageDistanceRight = (distance3 + distance4) / 2;
  Serial.print("Distance right: ");
  Serial.print(averageDistanceRight);
  Serial.println(" cm");

  if (averageDistanceRight <= 20 || averageDistanceLeft <= 20) {
    Serial.println("Obstacle detected");
  }

  delay(1000); // Wait for 1 second before measuring again
}

float getDistanceDebug(int trigPin, int echoPin, int sensorNumber) {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

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

  Serial.print("Sensor ");
  Serial.print(sensorNumber);
  Serial.print(": duration = ");
  Serial.print(duration);
  Serial.print(" us, distance = ");
  Serial.print(distance);
  Serial.println(" cm");

  return distance;
}

documentation.txt

This file is empty and reserved for additional documentation if needed.