tutoriales.com

Construcción y Programación de un Robot Limpiador Autónomo con ESP32

Este tutorial práctico detalla el proceso completo para crear un robot de limpieza autónomo. Aprenderás a integrar sensores, motores DC, lógica de navegación básica y código en C++ con ESP32.

Intermedio8 min de lectura18 views
Reportar error

Introducción al Proyecto de Robótica de Limpieza 🧹

La robótica doméstica ha evolucionado enormemente en los últimos años, pasando de ser una curiosidad tecnológica a convertirse en un electrodoméstico indispensable. En este tutorial, abordaremos el diseño, ensamblaje y programación de un robot limpiador autónomo utilizando el potente y económico microcontrolador ESP32.

Este proyecto es ideal para entusiastas que desean dar el salto de los circuitos básicos a sistemas robóticos móviles con capacidad de toma de decisiones autónomas en entornos cerrados.

💡 Consejo: Antes de comenzar, asegúrate de tener conocimientos básicos de electrónica, soldadura y programación en Arduino IDE.

Materiales y Componentes Necesarios 🛠️

Para construir nuestro robot limpiador autónomo, necesitaremos reunir una serie de componentes electrónicos y mecánicos específicos. La siguiente tabla detalla la lista completa de materiales:

ComponenteCantidadDescripciónPropósito
------------
ESP32 NodeMCU1Microcontrolador con Wi-Fi/BluetoothCerebro del robot
Chasis 2WD para Robot1Base acrílica con 2 motores DC y ruedasEstructura móvil
------------
Driver L298N1Controlador de motores doble puente HControl de velocidad y giro
Sensor Ultrasónico HC-SR041Sensor de distancia por ultrasonidosDetección de obstáculos
------------
Servomotor SG901Micro servo para rotar el sensorExploración lateral
Batería 18650 x21 soporteAlimentación de 7.4V - 8.4VEnergía portátil
------------
Mini bomba y mangueraOpcionalSistema de rociado de agua básicoFunción de fregado
Cables Dupont y ProtoboardVariosConexiones eléctricasCableado

Arquitectura del Sistema Robótico 🧠

El sistema se divide en tres capas principales: la capa de percepción (sensores), la capa de control (ESP32) y la capa de actuación (motores y actuadores).

Baterías Fuente de Energía HC-SR04 + SG90 Sensor Ultrasonido y Micro Servo ESP32 Cerebro del Sistema Driver L298N Puente H Motores DC Tracción

La lógica general consiste en que el robot avanza en línea recta mientras el sensor ultrasónico montado sobre el servomotor escanea continuamente el entorno en busca de obstáculos. Si detecta una pared o mueble a menos de 20 centímetros, se detiene, retrocede ligeramente, gira en una dirección aleatoria o predeterminada y continúa su marcha.


Ensamblaje Mecánico y Conexiones Eléctricas ⚙️

El montaje físico requiere paciencia y orden para evitar cortocircuitos debido a las vibraciones del movimiento.

Pasos para el Montaje:

Paso 1: Monta los motores DC en el chasis acrílico utilizando los soportes y tornillos incluidos. Asegura las ruedas en los ejes.
Paso 2: Fija la rueda loca (caster wheel) en la parte frontal o trasera del chasis para garantizar el equilibrio.
Paso 3: Instala el soporte del servomotor SG90 en la parte delantera y coloca el sensor HC-SR04 encima del eje del servo.
Paso 4: Coloca el ESP32 y el driver L298N sobre la plataforma superior utilizando separadores de nylon y cinta doble faz.

Esquema de Conexiones del ESP32:

  • ENA / ENB (L298N): Conectados a pines PWM del ESP32 para control de velocidad.
  • IN1, IN2, IN3, IN4: Conectados a pines digitales del ESP32 para dirección de motores.
  • Trigger (HC-SR04): Pin digital GPIO 5.
  • Echo (HC-SR04): Pin digital GPIO 18.
  • Control Servo SG90: Pin PWM GPIO 19.
⚠️ Advertencia: Nunca alimentes los motores directamente desde los pines de 3.3V o 5V del ESP32. Utiliza una fuente de alimentación externa conectada al driver L298N y asegúrate de unificar las tierras (GND).

Programación del ESP32 💻

A continuación, presentamos el código base en C++ utilizando el entorno de Arduino IDE. Este programa implementa la lectura del sensor ultrasónico, el movimiento básico de los motores y una rutina simple de evitación de obstáculos.

#include <Servo.h>

// Definición de pines para el Driver L298N
const int enA = 13;
const int in1 = 12;
const int in2 = 14;
const int in3 = 27;
const int in4 = 26;
const int enB = 25;

// Definición de pines para el Sensor Ultrasónico
const int trigPin = 5;
const int echoPin = 18;

// Objeto Servo
Servo scannerServo;

void setup() {
  Serial.begin(115200);
  
  // Configurar pines de motores como salida
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  
  // Configurar pines del sensor ultrasónico
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  
  // Inicializar servomotor
  scannerServo.attach(19);
  scannerServo.write(90); // Posición frontal
  
  // Velocidad inicial de los motores (0 - 255)
  analogWrite(enA, 200);
  analogWrite(enB, 200);
}

long medirDistancia() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  long duracion = pulseIn(echoPin, HIGH);
  long distancia = duracion * 0.034 / 2;
  return distancia;
}

void moverAdelante() {
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
}

void detener() {
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
}

void girarDerecha() {
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
}

void loop() {
  long distanciaActual = medirDistancia();
  Serial.print("Distancia: ");
  Serial.println(distanciaActual);
  
  if (distanciaActual < 20 && distanciaActual > 0) {
    detener();
    delay(500);
    girarDerecha();
    delay(400);
  } else {
    moverAdelante();
  }
  
  delay(100);
}

Calibración y Pruebas en Terreno Real 🎯

Una vez cargado el código en el ESP32, es momento de realizar las pruebas de campo. Coloca el robot sobre una superficie lisa y sin desniveles pronunciados.

📌 Nota: Si notas que el robot gira en sentido contrario al esperado al detectar un obstáculo, simplemente intercambia los valores de los pines in1 e in2 o in3 e in4 en el código.

Niveles de Dificultad del Proyecto:

  • Nivel de Dificultad: Intermedio
  • Progreso general de implementación:
90% Completado

Preguntas Frecuentes (FAQ) ❓

¿Puedo controlar este robot limpiador desde mi smartphone? Sí, gracias a que el ESP32 cuenta con conectividad Wi-Fi integrada, puedes programar un servidor web local en el microcontrolador o utilizar protocolos como MQTT para enviar comandos de movimiento y limpieza desde tu teléfono móvil.
¿Cuánto dura la batería con dos celdas 18650? Con un uso continuo y dependiendo de la corriente consumida por los motores DC y la bomba de agua, la autonomía suele rondar entre los 45 y 60 minutos antes de requerir una recarga.

Conclusión y Próximos Pasos ✨

¡Felicidades! Has construido con éxito la base de un robot limpiador autónomo utilizando tecnologías accesibles y potentes como el ESP32. A partir de este punto, puedes expandir las capacidades de tu robot integrando sistemas de mapeo por LiDAR, sensores de suciedad o algoritmos de navegación más avanzados como comportamientos basados en boids o lógica difusa.

Tutoriales relacionados

Comentarios (0)

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