Arduino UNO-Based Autonomous Obstacle-Avoiding Robot with Ultrasonic Sensors
View and Edit Project In Cirkit Designer
Circuit Documentation
Summary
This document provides a detailed overview of a circuit designed to control a robotic car using an Arduino UNO microcontroller. The circuit includes an H-Bridge motor driver, multiple DC motors, and ultrasonic sensors for obstacle detection. The Arduino UNO is programmed to control the motors based on the distance measurements from the ultrasonic sensors.
Component List
Arduino UNO
- Description: A microcontroller board based on the ATmega328P.
- Pins: UNUSED, IOREF, Reset, 3.3V, 5V, GND, Vin, A0, A1, A2, A3, A4, A5, SCL, SDA, AREF, D13, D12, D11, D10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0
Puente H carrito
- Description: An H-Bridge motor driver used to control the direction and speed of DC motors.
- Pins: OUT1, OUT2, OUT3, OUT4, 12V, GND, 5V, ENA, IN1, IN2, IN3, IN4, ENB, 5VEN
DC Motor (2 units)
- Description: A simple DC motor.
- Pins: pin 1, pin 2
HC-SR04 Ultrasonic Sensor (3 units)
- Description: An ultrasonic sensor used for distance measurement.
- Pins: VCC, TRIG, ECHO, GND
9V Battery
- Description: A 9V battery used to power the circuit.
- Pins: -, +
Wiring Details
Arduino UNO
GND connected to:
- 9V Battery (-)
- Puente H carrito (GND)
- HC-SR04 Ultrasonic Sensor (GND) (3 units)
5V connected to:
- HC-SR04 Ultrasonic Sensor (VCC) (3 units)
Vin connected to:
- Puente H carrito (5V)
A0 connected to:
- HC-SR04 Ultrasonic Sensor (TRIG) (front)
A1 connected to:
- HC-SR04 Ultrasonic Sensor (ECHO) (front)
A2 connected to:
- HC-SR04 Ultrasonic Sensor (TRIG) (left)
A3 connected to:
- HC-SR04 Ultrasonic Sensor (ECHO) (left)
A4 connected to:
- HC-SR04 Ultrasonic Sensor (TRIG) (right)
A5 connected to:
- HC-SR04 Ultrasonic Sensor (ECHO) (right)
D11 connected to:
- Puente H carrito (ENB)
D10 connected to:
- Puente H carrito (IN4)
D9 connected to:
- Puente H carrito (IN3)
D5 connected to:
- Puente H carrito (ENA)
D4 connected to:
- Puente H carrito (IN1)
D3 connected to:
- Puente H carrito (IN2)
Puente H carrito
12V connected to:
- 9V Battery (+)
GND connected to:
- Arduino UNO (GND)
- 9V Battery (-)
5V connected to:
- Arduino UNO (Vin)
OUT1 connected to:
- DC Motor 1 (pin 2)
OUT2 connected to:
- DC Motor 1 (pin 1)
OUT3 connected to:
- DC Motor 2 (pin 2)
OUT4 connected to:
- DC Motor 2 (pin 1)
DC Motor 1
pin 1 connected to:
- Puente H carrito (OUT2)
pin 2 connected to:
- Puente H carrito (OUT1)
DC Motor 2
pin 1 connected to:
- Puente H carrito (OUT4)
pin 2 connected to:
- Puente H carrito (OUT3)
HC-SR04 Ultrasonic Sensor (front)
VCC connected to:
- Arduino UNO (5V)
TRIG connected to:
- Arduino UNO (A0)
ECHO connected to:
- Arduino UNO (A1)
GND connected to:
- Arduino UNO (GND)
HC-SR04 Ultrasonic Sensor (left)
VCC connected to:
- Arduino UNO (5V)
TRIG connected to:
- Arduino UNO (A2)
ECHO connected to:
- Arduino UNO (A3)
GND connected to:
- Arduino UNO (GND)
HC-SR04 Ultrasonic Sensor (right)
VCC connected to:
- Arduino UNO (5V)
TRIG connected to:
- Arduino UNO (A4)
ECHO connected to:
- Arduino UNO (A5)
GND connected to:
- Arduino UNO (GND)
9V Battery
+ connected to:
- Puente H carrito (12V)
- connected to:
- Arduino UNO (GND)
- Puente H carrito (GND)
Documented Code
Arduino UNO Code
int motor_lA = 9;
int motor_lB = 10;
int motor_enableA = 11;
int motor_rA = 3;
int motor_rB = 4;
int motor_enableB = 5;
int trigger_front = A0;
int echo_front = A1;
int trigger_left = A2;
int echo_left = A3;
int trigger_right = A4;
int echo_right = A5;
void setup() {
// Configuración de pines
pinMode(motor_lA, OUTPUT); // Motores izquierdos adelante
pinMode(motor_lB, OUTPUT); // Motores izquierdos atrás
pinMode(motor_enableA, OUTPUT);
pinMode(motor_rA, OUTPUT); // Motores derechos adelante
pinMode(motor_rB, OUTPUT); // Motores derechos atrás
pinMode(motor_enableB, OUTPUT);
pinMode(trigger_front, OUTPUT);
pinMode(echo_front, INPUT);
pinMode(trigger_left, OUTPUT);
pinMode(echo_left, INPUT);
pinMode(trigger_right, OUTPUT);
pinMode(echo_right, INPUT);
// Inicialización de PWM para los motores
analogWrite(motor_enableA, 80);
analogWrite(motor_enableB, 88);
// Inicialización del puerto serial
Serial.begin(9600);
}
void loop() {
// Variables para la duración y distancia
long duration_front, distance_front, duration_left, distance_left, duration_right, distance_right;
// Calcular distancia del sensor frontal
digitalWrite(trigger_front, LOW);
delayMicroseconds(2);
digitalWrite(trigger_front, HIGH);
delayMicroseconds(10);
digitalWrite(trigger_front, LOW);
duration_front = pulseIn(echo_front, HIGH);
distance_front = duration_front * 0.034 / 2;
// Calcular distancia del sensor izquierdo
digitalWrite(trigger_left, LOW);
delayMicroseconds(2);
digitalWrite(trigger_left, HIGH);
delayMicroseconds(10);
digitalWrite(trigger_left, LOW);
duration_left = pulseIn(echo_left, HIGH);
distance_left = duration_left * 0.034 / 2;
// Calcular distancia del sensor derecho
digitalWrite(trigger_right, LOW);
delayMicroseconds(2);
digitalWrite(trigger_right, HIGH);
delayMicroseconds(10);
digitalWrite(trigger_right, LOW);
duration_right = pulseIn(echo_right, HIGH);
distance_right = duration_right * 0.034 / 2;
// Imprimir distancias en el puerto serial
Serial.print("front = ");
Serial.println(distance_front);
Serial.print("Left = ");
Serial.println(distance_left);
Serial.print("Right = ");
Serial.println(distance_right);
delay(50);
// Lógica de movimiento basada en las distancias medidas
if (distance_front > 20) {
forward();
if (distance_left > 10 && distance_left < 20) {
forward();
}
if (distance_left >= 20) {
left();
delay(30);
forward();
}
if (distance_left < 10 && distance_left > 0) {
right();
delay(30);
forward();
}
}
if (distance_front <= 20 && distance_right > 20) {
Stop();
delay(1000);
right();
delay(400);
}
if (distance_front <= 20 && distance_right < 20) {
Stop();
delay(1000);
right();
delay(800);
}
}
void forward()