ESP32 - Coche

Una de las cosas más geniales que puedes probar si recién empiezas con ESP32 es hacer un coche robótico. En esta guía, aprenderemos a usar ESP32 para construir un coche robótico y controlarlo con un mando a distancia por infrarrojos. Para controlar el coche robótico a través de la Web (Wi‑Fi), consulta el tutorial ESP32 controla el coche vía Web.

Coche de control remoto por infrarrojos con ESP32

Acerca de Robot Car

En el contexto del ESP32, el coche robot suele llamarse por diferentes nombres, como coche robot, coche RC, coche de control remoto, coche inteligente o coche DIY. Se puede controlar a distancia sin cables. Puede usarse ya sea un control remoto especial que use luz infrarroja o una aplicación para teléfonos inteligentes mediante Bluetooth o WiFi. El coche robot puede ir hacia la izquierda o hacia la derecha y también avanzar o retroceder.

Un coche con tracción en dos ruedas (2WD) para ESP32 es un pequeño vehículo robótico que puedes construir y controlar usando una placa ESP32. Generalmente consta de los siguientes componentes:

  • Chasis: la base o marco del coche, donde se montan todos los demás componentes.
  • Ruedas: Las dos ruedas que proporcionan locomoción al coche. Están conectadas a dos motores DC.
  • Motores: Dos motores DC se utilizan para impulsar las dos ruedas.
  • Controlador de motores: La placa controladora de motores es un componente esencial que hace de interfaz entre el ESP32 y los motores. Toma señales del ESP32 y proporciona la potencia y el control necesarios a los motores.
  • Placa ESP32: El cerebro del coche. Lee las entradas de los sensores y los comandos del usuario y controla los motores en consecuencia.
  • Fuente de alimentación: El coche de tracción en dos ruedas (2WD) requiere una fuente de alimentación, usualmente baterías y un portabaterías, para alimentar los motores y la placa ESP32.
  • Receptor inalámbrico: Un módulo infrarrojo, Bluetooth o WiFi para comunicación inalámbrica con un control remoto o teléfono inteligente.
  • Componentes opcionales: Dependiendo de la complejidad de tu proyecto, puedes añadir varios componentes opcionales como sensores (p. ej., sensores ultrasónicos para evitar obstáculos, sensores de seguimiento de línea), y más.

En este tutorial, para simplificarlo, usaremos:

  • Kit de coche 2WD (incluye chasis, ruedas, motores, soporte para batería)
  • Controlador de motor L9110S
  • Kit infrarrojo (incluye controlador IR y receptor IR)

Revisa la lista de hardware en la parte superior de esta página.

Cómo funciona

Coche 2WD con ESP32, ¿cómo funciona?
  • ESP32 se conecta a los motores de corriente continua del robot a través del módulo controlador de motor L9110S.
  • ESP32 se conecta a un receptor IR.
  • La batería alimenta al ESP32, a los motores de corriente continua, al módulo controlador de motor y al receptor IR.
  • Los usuarios presionan las teclas ARRIBA/ABAJO/IZQUIERDA/DERECHA/OK en el control remoto IR.
  • ESP32 recibe los comandos ARRIBA/ABAJO/IZQUIERDA/DERECHA/OK a través del receptor IR.
  • El ESP32 controla el coche para avanzar/retroceder/girar a la izquierda/girar a la derecha/detenerse mediante el control de los motores de corriente continua a través del módulo controlador de motor.

Diagrama de Cableado

El siguiente diagrama muestra cómo conectar el ESP32, el controlador de motor L9110S, los dos motores DC y el receptor IR, usando una placa de pruebas para compartir las líneas comunes de alimentación y tierra:

Diagrama de cableado del coche robot 2WD con ESP32 en una placa de pruebas

This image is created using Fritzing. Click to enlarge image

Si no sabe c\u00f3mo alimentar ESP32 y otros componentes, encuentre instrucciones en el siguiente tutorial: C\u00f3mo alimentar ESP32.

Nota: El diagrama anterior muestra el cableado correcto. En la práctica, conectar varios cables (como las líneas compartidas de VCC y GND) en el mismo orificio del conector de pines del ESP32 no es fácil. Una solución conveniente es usar una placa de expansión con bloque de terminales de tornillo para ESP32 — se pueden asegurar varios cables en el mismo terminal de tornillo, o un cable en el tornillo y otro en el pin del conector adyacente.

Diagrama de cableado del coche robot 2WD con ESP32 usando un bloque de terminales de tornillo

This image is created using Fritzing. Click to enlarge image

El módulo L9110S alimenta los motores directamente desde sus pines VCC y GND y no tiene un regulador de 5 V integrado. Esto significa que puedes alimentar todo con una única fuente de energía: cuatro pilas AA de 1,5 V (un total de 6 V). Así es como puedes hacerlo:

  • Conecta la batería de 6 V a los pines VCC y GND del módulo L9110S para alimentar los motores.
  • Conecta la misma batería de 6 V a los pines Vin y GND de la placa ESP32 para alimentarla (el receptor IR se alimenta desde el pin de 5 V del ESP32).
  • Asegúrate de que el módulo L9110S, la placa ESP32 y el receptor IR compartan un GND común.

A diferencia del L298N, el L9110S no tiene puentes de habilitación ENA/ENB ni una terminal de tornillo de 12 V, por lo que el cableado es más sencillo.

Código ESP32

/* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp32/esp32-car */ #include <DIYables_IRcontroller.h> // IR Remote Controller library #define IR_RECEIVER_PIN 13 // The ESP32 pin GPIO13 connected to IR receiver #define MOTOR_A_IA_PIN 14 // The ESP32 pin GPIO14 connected to the A-IA pin of the L9110S (Motor A) #define MOTOR_A_IB_PIN 27 // The ESP32 pin GPIO27 connected to the A-IB pin of the L9110S (Motor A) #define MOTOR_B_IA_PIN 33 // The ESP32 pin GPIO33 connected to the B-IA pin of the L9110S (Motor B) #define MOTOR_B_IB_PIN 32 // The ESP32 pin GPIO32 connected to the B-IB pin of the L9110S (Motor B) DIYables_IRcontroller_17 irController(IR_RECEIVER_PIN, 200); // debounce time is 200ms void setup() { Serial.begin(9600); irController.begin(); pinMode(MOTOR_A_IA_PIN, OUTPUT); pinMode(MOTOR_A_IB_PIN, OUTPUT); pinMode(MOTOR_B_IA_PIN, OUTPUT); pinMode(MOTOR_B_IB_PIN, OUTPUT); } void loop() { Key17 key = irController.getKey(); if (key != Key17::NONE) { switch (key) { case Key17::KEY_UP: Serial.println("CAR - MOVING FORWARD"); CAR_moveForward(); break; case Key17::KEY_DOWN: Serial.println("CAR - MOVING BACKWARD"); CAR_moveBackward(); break; case Key17::KEY_LEFT: Serial.println("CAR - TURNING LEFT"); CAR_turnLeft(); break; case Key17::KEY_RIGHT: Serial.println("CAR - TURNING RIGHT"); CAR_turnRight(); break; case Key17::KEY_OK: Serial.println("CAR - STOP"); CAR_stop(); break; default: Serial.println("WARNING: unused key:"); break; } } } void CAR_moveForward() { digitalWrite(MOTOR_A_IA_PIN, HIGH); digitalWrite(MOTOR_A_IB_PIN, LOW); digitalWrite(MOTOR_B_IA_PIN, HIGH); digitalWrite(MOTOR_B_IB_PIN, LOW); } void CAR_moveBackward() { digitalWrite(MOTOR_A_IA_PIN, LOW); digitalWrite(MOTOR_A_IB_PIN, HIGH); digitalWrite(MOTOR_B_IA_PIN, LOW); digitalWrite(MOTOR_B_IB_PIN, HIGH); } void CAR_turnLeft() { digitalWrite(MOTOR_A_IA_PIN, HIGH); digitalWrite(MOTOR_A_IB_PIN, LOW); digitalWrite(MOTOR_B_IA_PIN, LOW); digitalWrite(MOTOR_B_IB_PIN, LOW); } void CAR_turnRight() { digitalWrite(MOTOR_A_IA_PIN, LOW); digitalWrite(MOTOR_A_IB_PIN, LOW); digitalWrite(MOTOR_B_IA_PIN, HIGH); digitalWrite(MOTOR_B_IB_PIN, LOW); } void CAR_stop() { digitalWrite(MOTOR_A_IA_PIN, LOW); digitalWrite(MOTOR_A_IB_PIN, LOW); digitalWrite(MOTOR_B_IA_PIN, LOW); digitalWrite(MOTOR_B_IB_PIN, LOW); }

Pasos R\u00e1pidos

  • Si es la primera vez que usas ESP32, consulta cómo configurar el entorno para ESP32 en Arduino IDE.
  • Instala la biblioteca DIYables_IRcontroller en el IDE de Arduino siguiendo esta instrucción.
  • Realiza el cableado tal como se muestra en el diagrama de arriba.
  • Desconecta el cable del Vin en el ESP32 porque alimentaremos el ESP32 a través del cable USB cuando carguemos el código.
  • Da la vuelta al coche para que las ruedas queden en la parte superior.
  • Conecta la placa ESP32 a tu PC mediante un cable micro USB.
  • Abre el IDE de Arduino en tu PC.
  • Selecciona la placa ESP32 correcta (p. ej. ESP32 Dev Module) y el puerto COM.
  • Copia el código proporcionado y ábrelo en el IDE de Arduino.
  • Haz clic en el botón Subir en el IDE de Arduino para transferir el código al ESP32.
  • Utiliza el control remoto IR para hacer que el coche avance, retroceda, gire a la izquierda, gire a la derecha o se detenga.
  • Verifica si las ruedas se mueven correctamente de acuerdo con tus comandos.
  • Si las ruedas se mueven en la dirección incorrecta, intercambia los cables del motor DC en el módulo L9110S.
  • También puedes ver los resultados en el Monitor Serial del IDE de Arduino.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
CAR - MOVING FORWARD CAR - MOVING BACKWARD CAR - TURNING LEFT CAR - TURNING RIGHT CAR - STOP
Ln 11, Col 1
ESP32 Dev Module on COM15
2
  • Si todo va bien, desconecta el cable USB del ESP32 y luego conecta de nuevo el cable al pin Vin 5V. Esto dará energía al ESP32 desde la batería.
  • Haz que el coche vuelva a su posición normal con las ruedas en el suelo.
  • ¡Diviértete controlando el coche!

Explicación del código

Puedes encontrar la explicación en la línea de comentarios del código de Arduino anterior.

Puede aprender más sobre el código consultando los siguientes tutoriales:

Puedes ampliar este proyecto mediante:

  • Agregar sensores de evitación de obstáculos para detener el coche inmediatamente si se detecta un obstáculo.
  • Agregar una función para controlar la velocidad del coche (ver el tutorial ESP32 - motor DC). El código proporcionado controla el coche a máxima velocidad.

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

Tutoriales Relacionados

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!