ESP32 and Ultrasonic Sensor-Based Obstacle Avoidance Robot with Battery Power
View and Edit Project In Cirkit Designer
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
HC-SR04 Ultrasonic Sensor
- Description: Ultrasonic distance sensor
- Pins: VCC, TRIG, ECHO, GND
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
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
Motor and Wheels
- Description: DC motor with attached wheels
- Pins: vcc, GND
18650 Li-ion Battery x 2
- Description: Rechargeable lithium-ion battery
- Pins: +, -
Wiring Details
HC-SR04 Ultrasonic Sensor 1
- VCC: Connected to ESP32 Vin and 18650 Li-ion Battery +
- TRIG: Connected to ESP32 D35
- ECHO: Connected to ESP32 D34
- GND: Connected to ESP32 GND and 18650 Li-ion Battery -
HC-SR04 Ultrasonic Sensor 2
- VCC: Connected to ESP32 Vin and 18650 Li-ion Battery +
- TRIG: Connected to ESP32 D13
- ECHO: Connected to ESP32 D12
- GND: Connected to ESP32 GND and 18650 Li-ion Battery -
HC-SR04 Ultrasonic Sensor 3
- VCC: Connected to ESP32 Vin and 18650 Li-ion Battery +
- TRIG: Connected to ESP32 D14
- ECHO: Connected to ESP32 D27
- GND: Connected to ESP32 GND and 18650 Li-ion Battery -
HC-SR04 Ultrasonic Sensor 4
- VCC: Connected to ESP32 Vin and 18650 Li-ion Battery +
- TRIG: Connected to ESP32 D33
- ECHO: Connected to ESP32 D32
- GND: Connected to ESP32 GND and 18650 Li-ion Battery -
HC-SR04 Ultrasonic Sensor 5
- VCC: Connected to ESP32 Vin and 18650 Li-ion Battery +
- TRIG: Connected to ESP32 D26
- ECHO: Connected to ESP32 D25
- GND: Connected to ESP32 GND and 18650 Li-ion Battery -
ESP32 (30 pin)
- Vin: Connected to 18650 Li-ion Battery +
- GND: Connected to 18650 Li-ion Battery -
L298N DC Motor Driver
- 12V: Connected to ESP32 Vin and 18650 Li-ion Battery +
- GND: Connected to ESP32 GND and 18650 Li-ion Battery -
- ENA: Connected to ESP32 D21
- IN1: Connected to ESP32 D19
- IN2: Connected to ESP32 D18
- IN3: Connected to ESP32 D5
- IN4: Connected to ESP32 TX2
- ENB: Connected to ESP32 RX2
- OUT1: Connected to Motor and Wheels vcc
- OUT2: Connected to Motor and Wheels GND
- OUT3: Connected to Motor and Wheels GND
- OUT4: Connected to Motor and Wheels vcc
Motor and Wheels 1
- vcc: Connected to L298N DC Motor Driver OUT1
- GND: Connected to L298N DC Motor Driver OUT2
Motor and Wheels 2
- vcc: Connected to L298N DC Motor Driver OUT4
- GND: Connected to L298N DC Motor Driver OUT3
18650 Li-ion Battery x 2
- +: Connected to ESP32 Vin, L298N DC Motor Driver 12V, and HC-SR04 Ultrasonic Sensor VCC pins
- -: Connected to ESP32 GND, L298N DC Motor Driver GND, and HC-SR04 Ultrasonic Sensor GND pins
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.