tutoriales.com

Diseño y Construcción de un Robot Móvil Diferencial Controlado por ESP32

Este tutorial te guiará paso a paso en el emocionante proceso de diseñar y construir tu propio robot móvil diferencial. Aprenderás sobre los componentes clave, el montaje mecánico y la programación con ESP32 para dotar a tu robot de movimiento y autonomía básica.

Intermedio20 min de lectura20 views12 de marzo de 2026Reportar error

¡Bienvenido al fascinante mundo de la robótica móvil! 🤖 En este tutorial, te embarcarás en el proyecto de construir un robot móvil diferencial desde cero, utilizando el versátil microcontrolador ESP32. Este tipo de robot es ideal para aprender los fundamentos de la cinemática, la electrónica y la programación robótica.

🎯 ¿Qué Aprenderás en Este Tutorial?

Al finalizar esta guía, serás capaz de:

  • Comprender los principios de funcionamiento de un robot diferencial.
  • Seleccionar los componentes electrónicos y mecánicos adecuados.
  • Realizar el montaje físico de la plataforma robótica.
  • Programar el ESP32 para controlar los motores DC.
  • Entender la importancia de la alimentación eléctrica en robótica.
🔥 **Importante:** Este tutorial asume conocimientos básicos de electrónica (uso de protoboard, multímetro) y programación en C++ con el IDE de Arduino.

🛠️ Materiales Necesarios

Para embarcarte en este proyecto, necesitarás los siguientes materiales. La mayoría son fáciles de conseguir en tiendas de electrónica o en línea.

CategoríaComponenteCantidadNotas
ElectrónicaPlaca de desarrollo ESP32 (DevKitC recomendado)1Con Wi-Fi y Bluetooth integrados
Driver de Motor L298N o TB6612FNG1El TB6612FNG es más eficiente y pequeño
Motores DC con reductor (gear motors)2Con soportes y ruedas a juego
Batería LiPo (7.4V o 11.1V) o power bank1Asegúrate que la batería pueda entregar la corriente necesaria
Módulo regulador de voltaje (buck converter)1Para reducir el voltaje a 5V para el ESP32
Mini protoboard1O PCB perforada para soldar
Cables jumper (macho-macho, macho-hembra)~30Varios colores y longitudes
Interruptor ON/OFF1Para la alimentación principal
MecánicaChasis de robot (acrílico, madera, metal)1Puedes comprar uno o fabricarlo
Rueda loca (caster wheel)1Para el tercer punto de apoyo
Tornillos, tuercas, separadoresVariosPara fijar los componentes
HerramientasSoldador y estaño1Opcional, pero recomendado para conexiones robustas
Destornilladores, alicatesVarios
Multímetro1Para verificar conexiones y voltajes
Computadora con IDE de Arduino1Con los drivers del ESP32 instalados
💡 Consejo: Considera un kit de robot si es tu primera vez. A menudo incluyen chasis, motores y ruedas, simplificando la compra inicial.

📖 Fundamentos del Robot Móvil Diferencial

Un robot diferencial es un tipo de robot móvil que utiliza dos ruedas motrices montadas en un eje común, cada una impulsada por un motor independiente. Una o más ruedas pasivas (ruedas locas) se utilizan para el equilibrio y el soporte.

📌 Nota: La cinemática diferencial es la base de muchos robots móviles, ya que permite movimientos complejos con un control relativamente simple de solo dos motores.

¿Cómo se Mueve?

  • Hacia adelante/atrás: Ambas ruedas giran a la misma velocidad en la misma dirección.
  • Giro sobre el eje: Una rueda gira hacia adelante y la otra hacia atrás a la misma velocidad.
  • Giro por arco: Una rueda gira más rápido que la otra o solo una rueda gira, haciendo que el robot pivote alrededor de la rueda más lenta o estacionaria.

Aquí tienes un diagrama simple de la configuración:

Chasis del Robot Rueda Izquierda Rueda Derecha Rueda Loca Motor Izquierdo Motor Derecho

⚙️ Montaje Mecánico: Paso a Paso

El montaje mecánico es la base de tu robot. Tómate tu tiempo para asegurar que todo esté firme y bien alineado.

Paso 1: Montar Motores al Chasis: Fija los motores DC a los lados del chasis. Asegúrate de que las ruedas queden paralelas entre sí y con suficiente espacio para girar libremente.
Paso 2: Montar Ruedas: Acopla las ruedas a los ejes de los motores. Asegúrate de que estén bien apretadas para evitar que se salgan durante el movimiento.
Paso 3: Montar Rueda Loca: Instala la rueda loca en la parte delantera o trasera del chasis, según el diseño. Esta rueda es crucial para la estabilidad y para permitir giros suaves.
Paso 4: Fijar ESP32 y Driver: Utiliza separadores y tornillos para fijar de forma segura la placa ESP32 y el driver de motor al chasis. Esto evitará movimientos indeseados y posibles desconexiones.
Paso 5: Ubicar la Batería: Coloca la batería en una posición que mantenga el centro de gravedad del robot lo más bajo y centrado posible. Puedes usar cinta doble cara o bridas.

Importante El equilibrio del robot es crucial. Un centro de gravedad mal ubicado puede afectar la estabilidad y la tracción.


🔌 Conexiones Electrónicas: Diagrama de Cableado

Las conexiones son el cerebro y el sistema nervioso de tu robot. ¡Presta mucha atención!

Utilizaremos un driver L298N por su simplicidad y capacidad para manejar dos motores DC. Si usas un TB6612FNG, las conexiones serán similares, pero con menos pines.

Aquí tienes un diagrama de conexión clave:

ESP32 VIN (5V) GND GPIO16 (IN1_A) GPIO17 (IN2_A) GPIO18 (IN3_B) GPIO19 (IN4_B) Driver L298N ENA (PWM_A) IN1 IN2 IN3 IN4 ENB (PWM_B) 12V (VIN Motor) GND 5V (VIN ESP32) Motor A Motor B Batería Regulador

Tabla de Conexiones (ESP32 y L298N)

Pin ESP32Pin L298NFunción
GPIO16IN1Control Motor A - Dirección 1
GPIO17IN2Control Motor A - Dirección 2
GPIO18IN3Control Motor B - Dirección 1
GPIO19IN4Control Motor B - Dirección 2
GPIO13ENAHabilitar/Velocidad Motor A (PWM)
GPIO12ENBHabilitar/Velocidad Motor B (PWM)
GNDGNDTierra compartida
5V (desde regulador)5V (input L298N, si disponible)Alimentación lógica L298N (o puente)
⚠️ Advertencia: Asegúrate de que todas las conexiones de tierra (GND) estén unidas. Una tierra común es vital para el correcto funcionamiento de los circuitos. Nunca conectes la batería directamente al ESP32 sin un regulador de voltaje.

Alimentación Eléctrica

  1. Conecta tu batería LiPo al módulo regulador de voltaje (buck converter).
  2. Ajusta el regulador para que la salida sea de 5V. Usa un multímetro para verificar con precisión.
  3. Conecta la salida de 5V del regulador al pin 5V del ESP32 y también al pin +5V (lógica) del L298N (si lo tiene y si no estás usando su regulador interno para el ESP32).
  4. Conecta el voltaje completo de la batería (sin regular) a los pines +12V (motor power) del L298N.
  5. Conecta los pines GND de la batería, el regulador, el ESP32 y el L298N entre sí.

✍️ Programación del ESP32: El Código de Control

Ahora viene la parte donde le damos vida a nuestro robot. Utilizaremos el IDE de Arduino y C++ para programar el ESP32. Primero, asegúrate de tener el soporte para ESP32 instalado en tu IDE (puedes buscar tutoriales en línea sobre cómo hacerlo).

Configuración del IDE de Arduino

  1. Abre el IDE de Arduino.
  2. Ve a Archivo > Preferencias y añade https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json en URLs adicionales de gestores de tarjetas.
  3. Ve a Herramientas > Placa > Gestor de tarjetas... Busca esp32 e instálalo.
  4. Selecciona tu placa ESP32 (ESP32 Dev Module o similar) en Herramientas > Placa.

Código Básico para Control de Motores

Este código te permitirá mover el robot hacia adelante, hacia atrás, girar y detenerse. Implementaremos funciones simples para cada acción.

// Definición de pines para el Motor A (Izquierdo)
const int in1 = 16; // Pin IN1 del L298N
const int in2 = 17; // Pin IN2 del L298N
const int enA = 13; // Pin ENA (PWM) del L298N

// Definición de pines para el Motor B (Derecho)
const int in3 = 18; // Pin IN3 del L298N
const int in4 = 19; // Pin IN4 del L298N
const int enB = 12; // Pin ENB (PWM) del L298N

// Configuración de canales PWM para ESP32
const int freq = 30000; // Frecuencia PWM (Hz)
const int ledChannelA = 0;
const int ledChannelB = 1;
const int resolution = 8; // Resolución PWM (8 bits = 0-255)

void setup() {
  // Configurar pines de dirección como salida
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  
  // Configurar pines PWM
  ledcSetup(ledChannelA, freq, resolution);
  ledcAttachPin(enA, ledChannelA);
  ledcSetup(ledChannelB, freq, resolution);
  ledcAttachPin(enB, ledChannelB);

  Serial.begin(115200);
  Serial.println("Robot diferencial iniciado!");
}

// Función para mover el Motor A (Izquierdo)
void moveMotorA(int speed) {
  if (speed > 0) { // Adelante
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
  } else if (speed < 0) { // Atrás
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
  } else { // Detener
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);
  }
  ledcWrite(ledChannelA, abs(speed)); // Establecer velocidad (PWM)
}

// Función para mover el Motor B (Derecho)
void moveMotorB(int speed) {
  if (speed > 0) { // Adelante
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
  } else if (speed < 0) { // Atrás
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
  } else { // Detener
    digitalWrite(in3, LOW);
    digitalWrite(in4, LOW);
  }
  ledcWrite(ledChannelB, abs(speed)); // Establecer velocidad (PWM)
}

// Funciones de movimiento del robot
void forward(int speed) {
  moveMotorA(speed);
  moveMotorB(speed);
  Serial.print("Moviendo adelante a velocidad: ");
  Serial.println(speed);
}

void backward(int speed) {
  moveMotorA(-speed);
  moveMotorB(-speed);
  Serial.print("Moviendo atrás a velocidad: ");
  Serial.println(speed);
}

void turnLeft(int speed) {
  moveMotorA(-speed); // Rueda izquierda atrás
  moveMotorB(speed);  // Rueda derecha adelante
  Serial.print("Girando izquierda a velocidad: ");
  Serial.println(speed);
}

void turnRight(int speed) {
  moveMotorA(speed);  // Rueda izquierda adelante
  moveMotorB(-speed); // Rueda derecha atrás
  Serial.print("Girando derecha a velocidad: ");
  Serial.println(speed);
}

void stopRobot() {
  moveMotorA(0);
  moveMotorB(0);
  Serial.println("Robot detenido.");
}

void loop() {
  // Ejemplo de secuencia de movimientos
  forward(150); // Mover adelante a velocidad media
  delay(2000);
  stopRobot();
  delay(1000);

  backward(100); // Mover atrás a velocidad baja
  delay(1500);
  stopRobot();
  delay(1000);

  turnLeft(120); // Girar izquierda
  delay(1500);
  stopRobot();
  delay(1000);

  turnRight(120); // Girar derecha
  delay(1500);
  stopRobot();
  delay(1000);

  forward(200); // Mover adelante a velocidad alta
  delay(3000);
  stopRobot();
  delay(5000); // Esperar más tiempo antes de repetir
}

Explicación del Código

  • Definición de Pines: Se asignan los pines GPIO del ESP32 a los pines de control del L298N (IN1, IN2, IN3, IN4, ENA, ENB).
  • PWM con ESP32: El ESP32 tiene un sistema de PWM (Pulse Width Modulation) más avanzado que el Arduino UNO, con múltiples canales. Usamos ledcSetup y ledcAttachPin para configurar y asociar los pines PWM a un canal (ledChannelA, ledChannelB) y una frecuencia/resolución.
  • Funciones moveMotorA y moveMotorB: Estas funciones controlan individualmente la dirección (HIGH/LOW en INx) y la velocidad (ledcWrite) de cada motor. La velocidad se establece como un valor absoluto (0-255 para 8 bits de resolución PWM).
  • Funciones de Movimiento del Robot: forward, backward, turnLeft, turnRight, stopRobot abstraen los movimientos complejos, llamando a las funciones individuales de los motores con las velocidades y direcciones adecuadas.
  • loop(): Contiene una secuencia de ejemplo para probar los movimientos del robot. Puedes modificar esta sección para implementar comportamientos más complejos o añadir control remoto (Bluetooth/Wi-Fi).
💡 Consejo: Experimenta con diferentes valores de `speed` para entender cómo afectan la velocidad real de tus motores. Los valores entre 0 (detenido) y 255 (velocidad máxima) son válidos.

✨ Primeras Pruebas y Depuración

Una vez que tengas el código cargado en tu ESP32, es hora de probar tu robot.

  1. Desconecta la alimentación principal (batería) antes de subir el código.
  2. Conecta el ESP32 a tu computadora por USB y sube el código.
  3. Abre el Monitor Serie en el IDE de Arduino (asegúrate de la velocidad de 115200 baudios).
  4. Conecta la batería (con el interruptor ON/OFF si lo instalaste). ¡El robot debería empezar a moverse según la secuencia programada!

Si algo no funciona:

  • El robot no se mueve:
    • Verifica todas las conexiones de cables, especialmente la alimentación (voltaje y tierra).
    • Asegúrate de que la batería tenga carga suficiente.
    • Confirma que el driver L298N esté recibiendo alimentación tanto lógica (5V) como de motor (voltaje de la batería).
    • Revisa el código para posibles errores de pinout.
  • El robot se mueve en la dirección incorrecta: Invierte los pines IN1/IN2 o IN3/IN4 para el motor correspondiente, o simplemente cambia la lógica en el código.
  • Un motor funciona y el otro no: Revisa las conexiones específicas de ese motor, su driver y los pines GPIO asociados en el ESP32.
  • El ESP32 no se carga o se desconecta: Asegúrate de tener los drivers correctos del ESP32 instalados y que el cable USB sea de buena calidad.
⚠️ Advertencia: Si los motores hacen ruido pero no se mueven, o se mueven débilmente, es posible que la batería no esté proporcionando suficiente corriente o que los engranajes de los motores estén atascados.

🚀 Próximos Pasos: Mejorando Tu Robot

¡Felicidades! Has construido y programado tu primer robot móvil diferencial. Pero esto es solo el principio. Aquí tienes algunas ideas para llevar tu robot al siguiente nivel:

  • Control Remoto: Implementa control vía Bluetooth (usando una aplicación en tu teléfono) o Wi-Fi (creando una interfaz web simple en el ESP32).
  • Sensores de Obstáculos: Añade sensores ultrasónicos (HC-SR04) o infrarrojos para que el robot pueda detectar y evitar obstáculos de forma autónoma.
  • Seguidor de Líneas: Incorpora sensores TCRT5000 para que el robot siga una línea negra sobre un fondo blanco.
  • Odometría: Utiliza encoders en los motores para medir con precisión la distancia recorrida y los ángulos girados, lo que es fundamental para una navegación más avanzada.
  • Diseño de PCB Personalizado: Una vez que tu prototipo funcione, considera diseñar una placa de circuito impreso (PCB) para hacer las conexiones más robustas y profesionales.
¿Por qué el ESP32 es una excelente opción para proyectos de robótica?El ESP32 es ideal debido a su bajo costo, gran cantidad de GPIOs, capacidad de procesamiento, y sus módulos Wi-Fi y Bluetooth integrados. Esto permite al robot comunicarse de forma inalámbrica, recibir comandos y enviar datos sin hardware adicional, abriendo un mundo de posibilidades para el control remoto y la interacción con otros dispositivos.
¡Proyecto Completado!

Esperamos que este tutorial te haya proporcionado una base sólida para explorar el emocionante campo de la robótica. ¡Ahora sal y crea!

Tutoriales relacionados

Comentarios (0)

Aún no hay comentarios. ¡Sé el primero!