3 puntos por GN⁺ 2025-02-03 | 1 comentarios | Compartir por WhatsApp

ESP32 RC Cars

Video de demostración

  • Este proyecto demuestra un sistema de cámara de control remoto basado en ESP32
  • Puede transmitir video en tiempo real por medio de WebSockets y controlar el motor y el servo
  • Una aplicación de servidor en Python gestiona la comunicación por WebSocket y proporciona una interfaz web para controlar el dispositivo ESP32

Funciones

  • Transmisión de video en tiempo real desde el ESP32-CAM hacia un servidor web
  • Control remoto del motor y el servo mediante comandos WebSocket
  • Función de tiempo de espera automática que restablece el motor y el servo a su estado predeterminado
  • El servidor proporciona un lienzo dinámico de video feed para múltiples clientes

Requisitos de hardware

  • ESP32-CAM (módulo AI Thinker o placa compatible)
  • Motor y servo conectados a los pines GPIO adecuados
  • Fuente de alimentación estable de 5V para el ESP32-CAM
  • Opcional: tarjeta SD para funciones adicionales
  • Red Wi-Fi para la comunicación

Materiales

  • Todos los kits se pueden comprar en aliexpress
  • Chasis del auto, controlador electrónico de velocidad, portabaterías, celdas 18650 o paquete de baterías de 7.4v, ESP32-CAM, gamepad Bluetooth (se usa un control de PS4)

Requisitos de software

Código ESP32
Bibliotecas
  • WiFi.h: conexión Wi-Fi
  • ArduinoWebsockets.h: comunicación WebSocket
  • esp_camera.h: control de la cámara ESP32-CAM
  • ServoControl.h y Esc.h: control del servo y del motor
  • Arduino.h: funciones estándar de Arduino
Servidor Python
Dependencias
  • Instalar las siguientes bibliotecas de Python: aiohttp, opencv-python, numpy

Configuración

Firmware del ESP32
  1. Modificar el archivo secrets.h para incluir las credenciales de Wi-Fi y la URL del servidor WebSocket
  2. Verificar que los pines GPIO del módulo de cámara, el motor y el servo coincidan con la configuración de hardware
Servidor Python
  1. Colocar el script del servidor en un directorio junto con el archivo index.html para la interfaz web
  2. Iniciar el servidor: python3 server.py

Uso

ESP32
  1. Usar Arduino IDE o una plataforma compatible para cargar el sketch proporcionado en el ESP32-CAM
  2. Monitorear la salida serial para comprobar que se haya conectado correctamente al Wi-Fi y al servidor WebSocket
Servidor
  1. Ejecutar el script del servidor Python
  2. Abrir la interfaz web en el navegador para ver el stream de video en tiempo real
  3. Enviar comandos de control por medio de la conexión WebSocket

Comandos WebSocket

  • MOTOR:<speed>: establece la velocidad del motor (-255 a 255)
  • SERVO:<angle>: establece el ángulo del servo (0 a 180)
  • CONTROL:<speed>:<angle>: controla al mismo tiempo la velocidad del motor y el ángulo del servo

Detalles técnicos

Inicialización del ESP32
  • Wi-Fi: conexión a la red Wi-Fi especificada
  • Cámara: configuración del ESP32-CAM con los ajustes adecuados para transmisión de video
  • WebSocket: establecimiento de una conexión WebSocket con el servidor
Manejo de timeout
  • Si no se recibe un comando de control dentro del período de timeout predefinido, la velocidad del motor se restablece a 0 y el ángulo del servo a 90
Servidor Python
  • Maneja la comunicación WebSocket con múltiples clientes ESP32
  • Procesa los frames de video recibidos y los organiza dinámicamente en una cuadrícula
  • Transmite la cuadrícula de frames de video a la interfaz web

Solución de problemas

Problemas de conexión
  • Verificar las credenciales de Wi-Fi en secrets.h
  • Confirmar que el servidor WebSocket esté en ejecución y sea accesible
Problemas con el stream de video
  • Verificar que el ESP32-CAM tenga una alimentación adecuada
  • Revisar la configuración de inicialización de la cámara

Licencia

  • Este proyecto se ofrece como código abierto bajo la licencia MIT

Contribuciones

  • Se agradecen issues o pull requests para mejorar la aplicación

1 comentarios

 
GN⁺ 2025-02-03
Comentarios en Hacker News
  • Hace 12 años, en una época en la que existía Arduino pero no ESP32, hice un proyecto usando un teléfono HTC Magic como cámara y transmisor WiFi, conectándolo a Arduino para controlar un servo y un LED RGB. La conexión no era estable, pero fue divertido.

    • Gracias por compartir el proyecto; me gustaría revivirlo con microcontroladores de nueva generación.
    • Gracias por los comentarios sobre el proyecto; quiero seguir avanzándolo y me gustaría ver PRs.
    • Si te gusta el proyecto, estaría bueno que se lo recomiendes a alguien que esté buscando un desarrollador remoto. Soy desarrollador Ruby-on-Rails, pero también estoy considerando trabajar en robótica.
  • Si te interesa la automatización de autos RC, es una lectura entretenida. El material es de hace algunos años, pero hoy en día podría haber formas más fáciles.

  • Antes de comprar un ESP32 CAM, conviene considerar uno con antena externa. Tomé como referencia consejos de Reddit sobre problemas de frame rate.

  • Hace poco hice un proyecto parecido usando Rust y una Steam Deck.

  • El gran problema del FPV es la latencia, y me da curiosidad cuál es la latencia de este proyecto.

  • Controlé un tanque RC impulsado por ESP32 con un control de PlayStation 4 vía Bluetooth.

    • El software base empieza con unas 20 líneas de código en C y usa una biblioteca para controladores Bluetooth.
    • Con los dos sticks se pueden controlar las dos orugas a baja velocidad, pero a alta velocidad hace falta otro método de control.
    • Implementé control directo de las orugas con límite de rpm usando los "triggers" del control DualShock.
    • Al manejar a alta velocidad, el stick izquierdo se usa como acelerador y el derecho como dirección, así que se maneja como un auto RC común.
    • Compartí un video del modelo impreso en 3D que usé.
  • En AliExpress, un buen auto RC de 2.5 pulgadas cuesta 30 dólares, y una cámara analógica independiente de 5.8 GHz cuesta 25 dólares.

    • Es información para quienes están más interesados en el resultado que en hacer solo un proyecto divertido.
  • Estoy considerando un proyecto parecido y me interesa conocer experiencias sobre la latencia. Quiero saber si se puede controlar de forma remota mirando el video feed. Parece que la latencia sería un problema para evitar obstáculos.

  • Quería hacer un juguete para gato que evitara obstáculos automáticamente. Este proyecto podría ser una mejor base que la opción que había elegido antes.