🧭 Robot autónomo
El rover de la Ruta 1 incorpora control desde el celular, sentidos de posición y un cerebro de control de verdad. Conectas Wi-Fi y BLE, mides el giro y la distancia con IMU y encoders, dominas el PID, ejecutas varias tareas al mismo tiempo, registras todo en gráficos y terminas con un seguidor de línea con PID que ajustas mirando los datos.
Cómo leer: los tres primeros pasos (azul) le dan al robot control remoto, noción de dónde está y la capacidad de llegar a un objetivo sin oscilar. Los dos siguientes (cian) organizan el código y muestran lo que ocurre por dentro. El último, con brillo, integra todo en el seguidor de línea. ¿Ya sabes usar Wi-Fi? Comienza en el 2.2.
🏁 Lo que construyes en esta ruta
El mismo rover de la Ruta 1, ahora con encoders en las ruedas, IMU y una barra de sensores de línea en la parte inferior. Durante el recorrido quedan listos: un control con joystick en el navegador del celular, un medidor de inclinación, la posición del robot en x, y y θ, dos ruedas que avanzan a la misma velocidad, un registro de datos en una tarjeta microSD y un panel en vivo. Al final, el robot sigue una línea negra en curvas cerradas e intersecciones, contra el reloj.
- ✓Código completo para ESP32 en la API 3.x
- ✓PID que puedes probar con un motor simulado
- ✓Detención segura cuando se pierde la señal
- ✓Base directa para micro-ROS en la Ruta 4
💡 Antes de comenzar
Necesitas que el rover de la 1.6 ya funcione y saber usar el Serial Monitor. El PID (2.3) y el código sin bloqueos (2.4) funcionan en Wokwi; para la IMU y los encoders necesitas las piezas del kit de abajo.
Mapa de la ruta
📱 Control desde el celular: Wi-Fi y BLE
Joystick en el navegador, detención si se pierde la señal
🧭 IMU y encoders: saber dónde está
Cuánto giró, cuánto avanzó, dónde está
🎯 Control PID en la práctica
Llegar al objetivo y quedarse ahí
🧵 Varias tareas al mismo tiempo
Adiós a delay(), hola FreeRTOS
📈 Telemetría y registro de datos
Ver qué pasa dentro del robot mientras se mueve
🏁 Proyecto: seguidor de línea con PID
Curvas cerradas contra el reloj
Contenido detallado
📱 Control desde el celular: Wi-Fi y BLE
Wi-Fi en modo estación y punto de acceso, página con botones, WebSocket sin retraso, BLE con una app genérica, watchdog de comandos y un joystick en el navegador para conducir el rover.
Las dos formas en que el ESP32 usa Wi-Fi: conectarse a la red de casa o crear su propia red, con un sketch que intenta una opción y, si falla, usa la otra.
Todo control inalámbrico y toda telemetría comienzan aquí; elegir el modo correcto evita que el robot no se conecte durante una feria.
STA · AP · dirección IP · 2,4 GHz.
La biblioteca WebServer de la 3.x sirve una página con cinco botones que envían comandos al robot.
Cualquier celular se convierte en control, sin instalar una app, y después el mismo servidor ajusta parámetros.
Ruta · solicitud GET · handleClient · fetch.
Un canal que permanece abierto entre el navegador y el ESP32 y lleva comandos breves en ambos sentidos.
El joystick y la telemetría continua necesitan poco retraso; HTTP abre y cierra la conexión con cada comando.
Latencia · canal abierto · comunicación bidireccional · biblioteca WebSockets.
Bluetooth de bajo consumo con la biblioteca BLE incluida en el paquete esp32: un servicio, una característica y una app genérica.
Funciona sin ninguna red y es el mismo estándar de los controles y sensores inalámbricos.
Servicio · característica · UUID · advertising.
Contraseña en la red del robot y watchdog de comandos: si no llega un mensaje nuevo durante 300 ms, el robot se detiene solo.
La señal se pierde; un robot que sigue con el último comando de «adelante» choca. La falla segura es una regla para todo robot real.
Watchdog · timeout · falla segura · velocidad máxima en el robot.
Sketch completo: punto de acceso, página con joystick, WebSocket, mezcla diferencial y watchdog, para conducir el rover real.
Es el modo manual que todo robot autónomo necesita para pruebas y rescates.
Mezcla diferencial · pointer events · cadena sin procesar · 10 envíos por segundo.
🧭 IMU y encoders: saber dónde está
El acelerómetro y el giroscopio, cómo leer la MPU-6050 directamente por sus registros, el filtro complementario, los encoders en cuadratura y la odometría en x, y y θ, con los errores que se acumulan.
El chip que detecta la gravedad y el giro en tres ejes, y las fortalezas y debilidades de cada sensor.
Girar exactamente 90°, detectar una pendiente y detectar una caída dependen de ella.
g · °/s · integrar · deriva · MPU-6050 x ICM-20948.
Cuatro cables y un sketch que activa el sensor y lee 14 bytes de aceleración y giro, sin biblioteca adicional.
El mismo procedimiento sirve para casi cualquier sensor I2C que uses después.
Registro · dirección 0x68 · lectura en ráfaga · conversión de unidades.
Combinar el giroscopio (rápido, deriva) y el acelerómetro (lento, ruidoso) para obtener una inclinación estable, con tres curvas en el Serial Plotter.
Es la fusión de sensores más sencilla y la puerta de entrada al filtro de Kalman.
atan2 · offset del giroscopio · α = 0,98 · dt fijo.
Un disco o imán que genera pulsos al girar; dos canales en cuadratura indican el sentido; una interrupción cuenta sin perder ninguno.
La velocidad real de la rueda es la entrada del PID y la base de la odometría.
Pulsos por vuelta · cuadratura · ISR con IRAM_ATTR · volatile.
Cinco operaciones que suman cuánto avanzó cada rueda y lo convierten en posición y dirección.
Volver a la base y avanzar hasta un punto exigen saber dónde estás; eso es lo que micro-ROS publica en la Trilha 4.
Pose · metros por pulso · distancia entre ruedas · radián.
Por qué la posición estimada se aleja de la real y la calibración en cuatro pasos que reduce el error.
Muestra cuándo basta la odometría y cuándo el robot necesita una línea, una cámara o un LiDAR para corregirse.
Error acumulado · error sistemático · deslizamiento · referencia externa.
🎯 Control PID en la práctica
Por qué el encendido/apagado oscila, la función de P, I y D, un PID completo probado con un motor simulado, ajuste metódico, anti-windup y dos ruedas a la misma velocidad.
El vaivén de quien solo conoce el «todo o nada» y la idea de corregir en proporción al error.
Es el problema que el PID resuelve en autos, drones, impresoras 3D y brazos robóticos.
Objetivo · medición · error · lazo cerrado.
Volante proporcional, corrección del viento constante y freno antes de pasarte: las tres letras con una analogía y tres curvas.
Con clara la función de cada ganancia, ajustas leyendo la gráfica, sin tantear.
Kp · Ki · Kd · sobreimpulso · error en estado estable.
Un PID completo a 100 Hz frente a un motor simulado, con ganancias ajustables desde el Serial Monitor, que se ejecuta en Wokwi.
Es la estructura que puedes reutilizar en el seguidor de línea y en todos los controles posteriores.
Período fijo · micros() · planta simulada · Serial Plotter.
El orden P → I → D para ajustar manualmente y la tabla de Ziegler-Nichols a partir de la ganancia crítica.
Un PID mal ajustado oscila y calienta el motor; con un método, bastan unas pocas pruebas.
Ku · Tu · una ganancia a la vez · prueba en el suelo.
Las tres trampas del PID real y las cuatro líneas de código que las resuelven.
Es la diferencia entre el PID que funciona en la simulación y el que funciona en el robot.
Saturación · anti-windup · derivada de la medición · pasa-bajas.
Un PI por rueda, el mismo objetivo en RPM y cada uno leyendo su propio encoder: el rover avanza en línea recta.
Base estable para el seguidor de línea y para /cmd_vel de ROS 2.
Un PID por rueda · RPM medida · PI basta · poner la integral en cero al detenerse.
🧵 Varias tareas al mismo tiempo
Por qué delay() bloquea el robot, tareas sin bloqueo con millis(), máquina de estados, FreeRTOS con tareas en ambos núcleos, colas y semáforos, y código organizado en archivos y clases.
Qué ocurre con los sensores, el PID y la comunicación mientras el programa está detenido en un delay().
Un robot «ciego» durante medio segundo choca antes de percibir el obstáculo.
Código bloqueante · tiempo de respuesta · bucle principal.
Cada tarea con su propio reloj: leer un sensor cada 20 ms, parpadear un LED cada 500 ms y enviar telemetría cada 100 ms.
Es la forma más sencilla de hacer varias cosas «al mismo tiempo» en un solo bucle.
Tarea periódica · desbordamiento de millis() · planificador cooperativo.
Estados, eventos y transiciones definidos antes de escribir el código, con acciones de entrada y salida.
Comportamiento complejo sin anidar if; fácil de probar y modificar.
Estado · evento · transición · enum class.
El sistema en tiempo real que ya se ejecuta dentro del ESP32: crear tareas con prioridad y elegir el núcleo para cada una.
El control de los motores se mantiene al día incluso cuando el Wi-Fi y la telemetría ocupan el procesador.
Tarea · prioridad · núcleo · vTaskDelayUntil.
Cómo una tarea pasa datos a otra de forma segura, sin que ambas modifiquen la misma variable al mismo tiempo.
Evita los errores más difíciles de encontrar: valores corruptos que aparecen una vez por hora.
Cola · mutex · semáforo · condición de carrera.
Separar motores, sensores y control en pestañas .h/.cpp y clases pequeñas dentro del sketch.
El seguidor del 2.6 y el robot de la Trilha 3 crecen sin convertirse en un archivo de mil líneas.
Clase · encabezado .h · responsabilidad única · reutilización.
📈 Telemetría y registro de datos
Qué medir y con qué frecuencia, gráfico en vivo en Serial Plotter, registro en CSV en la tarjeta microSD, MQTT a través de la red, panel en el navegador o en Node-RED/Grafana y análisis en Python.
Elegir las variables que explican el comportamiento del robot y la frecuencia adecuada para cada una.
Medir todo satura el procesador; medir poco no explica la falla.
Frecuencia de muestreo · marca de tiempo · variable de estado.
El formato «nombre:valor» que Arduino IDE 2 convierte en curvas, con varias variables a la vez.
Es la herramienta más rápida para ajustar el PID y detectar ruido.
Etiqueta · escala · ventana de tiempo.
Registrar los datos en un archivo de texto separado por comas, sin cable y con el robot en movimiento.
El robot que está lejos de la computadora también necesita registrar lo que ocurrió.
SPI · archivo CSV · flush · tarjeta FAT32.
El protocolo ligero para publicar y suscribirse a mensajes por temas, con un broker en la PC o en el Raspberry Pi.
Varios robots y paneles se comunican por el mismo canal; es la idea que amplía ROS 2.
Broker · tema · publicar · suscribirse.
Ver la telemetría en tiempo real: una página servida por el propio ESP32 o un panel creado en Node-RED o Grafana.
Mostrar el robot «por dentro» ayuda a depurarlo y a presentar el proyecto.
Panel · serie temporal · WebSocket · indicador.
Abrir el CSV en la computadora, calcular promedios y errores, y crear un gráfico del antes y el después.
Decidir con datos si el ajuste mejoró el robot, en lugar de basarte en una impresión.
pandas · DataFrame · matplotlib · comparación antes/después.
🏁 Proyecto: seguidor de línea con PID
Pista y barra de sensores, error de la línea mediante promedio ponderado, PID de dirección sobre la velocidad base, calibración automática, ajuste con telemetría y desafíos contra el cronómetro.
Armar una pista con cinta aislante negra y colocar la barra de 5 sensores IR a la altura correcta.
La altura y la separación de los sensores determinan la mitad del rendimiento del seguidor.
TCRT5000 / QTR · altura del sensor · contraste de la pista.
Convertir cinco lecturas en un solo número: la posición de la línea con respecto al centro del robot.
Un error continuo, en lugar de «izquierda/derecha», es lo que permite un PID suave.
Promedio ponderado · posición de la línea · línea perdida.
La corrección del PID se suma a una rueda y se resta de la otra, sobre una velocidad base.
Es la arquitectura de casi todos los seguidores de competencia.
Velocidad base · corrección · saturación por rueda.
El robot gira sobre la línea durante los primeros segundos y aprende el mínimo y el máximo de cada sensor.
La luz ambiente y la pista cambian de un lugar a otro; calibrar en el momento evita tener que modificar el código.
Mínimo y máximo · normalización · EEPROM/Preferences.
Registrar el error de la línea durante una vuelta, cambiar una ganancia, volver a registrar y comparar los gráficos.
Convierte «parece mejor» en «el error promedio se redujo a la mitad».
Error promedio · tiempo por vuelta · un ajuste a la vez.
Pistas más difíciles, como detectar cruces y líneas perdidas, y cronometrar la vuelta.
Prepárate para competencias como la OBR y para el robot con visión de la Trilha 3.
Velocidad adaptativa · memoria del último error · vuelta cronometrada.
📌 Mapa de pines de la trilha
Toda la Trilha 2 usa el mismo mapa. Cambia un poco con respecto al rover de la Trilha 1: el motor derecho pasa de los pines 33/32/4 a 14/16/17, y STBY del controlador queda conectado directamente a 3V3. Así quedan libres pines del ADC1 para los sensores de línea y los pines 18/19 para los encoders o el microSD.
| Pieza | Pin del ESP32 | Módulos |
|---|---|---|
| Motor izquierdo (TB6612FNG) | PWMA 25, AIN1 26, AIN2 27 | 2.1, 2.3, 2.4, 2.6 |
| Motor derecho | PWMB 14, BIN1 16, BIN2 17 | 2.1, 2.3, 2.4, 2.6 |
| STBY del controlador | 3V3 | todos |
| Encoders | izquierdo 18/19, derecho 34/35 | 2.2, 2.3 |
| HC-SR04 | TRIG 13, ECHO 4 (divisor para 3,3 V) | 2.4 |
| microSD | CS 5, SCK 18, MISO 19, MOSI 23 | 2.5, 2.6 |
| Sensores de línea | 36, 39, 34, 35, 32 (solo ADC1) | 2.6 |
✗ Lo que no se conecta al mismo tiempo
Los encoders y el microSD comparten los pines 18 y 19, y el encoder derecho usa 34/35, que también son sensores de línea. Por eso, cada proyecto conecta solo lo que usa: el PID del 2.3 usa encoders sin microSD; el seguidor del 2.6 usa sensores y microSD sin encoders.
🧰 Kit de la trilha
Piezas que se suman al rover de la Trilha 1. Precio aproximado de R$ 150 a R$ 350 por el conjunto adicional (oct/2026; confirma antes de comprar: varía según la tienda, el envío y el tipo de cambio).
Módulo MPU-6050 (GY-521), el más barato y documentado. Alternativa con brújula: ICM-20948 (9 ejes), más caro.
Par de motores N20 con encoder magnético (dos canales) y ruedas, o los motores TT de la T1 con disco de encoder y sensor óptico.
Barra de 5 sensores infrarrojos (TCRT5000) o barra QTR, con salida analógica, para el seguidor del 2.6.
Módulo lector de tarjetas microSD (SPI, 3,3 V) y una tarjeta de 8 a 32 GB formateada en FAT32.
Pantalla OLED SSD1306 (I2C, 0,96") para mostrar el estado, las ganancias y el tiempo de vuelta en el propio robot.
Cinta aislante negra de 19 mm sobre cartulina blanca, MDF claro o piso liso.
✓ Vale la pena
Encoders de dos canales (indican el sentido del giro) y ruedas de goma firme, que patinan menos y hacen más confiable la odometría.
✗ No compres para esta trilha
Sensores de línea digitales de un solo bit (solo indican «línea sí/no») y módulos de IMU de 5 V sin regulador.