Control de motor inalámbrico de Lego usando Steam Controller



Cuando era joven, siempre quise tener kits de Lego Technics para recolectar todo tipo de cosas geniales de ellos. Tanques autónomos con torretas giratorias que disparan ladrillos Lego. Pero entonces no tenía ese conjunto.

E incluso los ladrillos habituales de Lego no. Solo tenía un amigo cuyo hermano tenía todos estos juguetes caros.

Y ahora tengo un hijo de su misma edad. Y construye tanques que ... estúpidamente se pegan hacia adelante hasta que golpean la pared :)

Y ahora, ha llegado el momento de ESP32 y la magia del soldador: ¡ensamblaremos el control remoto adecuado para ellos!

No, por supuesto, sé sobre la existencia de tales controles remotos. Pero ninguno de ellos me conviene por completo. Son infrarrojos, con tecnología de los años 80, o demasiado grandes. O caro Y lo más importante: no puedo decirle a mi hijo sobre ninguno de ellos: "¡Lo hice especialmente por ti!"

¡Así que hagamos un control remoto nuevo y mejorado para gobernar a todos!



Ingredientes:

  • ESP32-WROOM-32D | WiFi, BLE y un procesador con E / S: suficiente para controlar dos motores y un LED .
  • DRV8833 | doble puente en H con suficiente potencia para motores.
  • TPS62162 | bajando el voltaje a 17 V, así como para entretenimiento al soldar la carcasa WSON-8 2 × 2 mm
  • CP2104 | para programar ESP32
  • . , Lego .

Todo esto se colocará en una placa bastante pequeña: esta es su aparición en el editor EasyEDA: el



cable que está visible en la foto del encabezado no es necesario para corregir ningún error, sino para suministrar energía desde USB. Puede que no sea suficiente para el motor, pero, desafortunadamente, los contactos de China todavía no me han llegado. Por lo tanto, primero verifico el funcionamiento de los LED. Por la belleza de la foto, acabo de poner el conector del motor en la placa.

En la versión 1.1 de mi placa (a diferencia de la versión 1.2, que ya está en EasyEDA), no había LED, así que solde dos diodos antiparalelos a la salida para que lo que estaba sucediendo fuera visible. Si observa de cerca, el video muestra la inclusión alternativa de un par de diodos 0603, lo que indica un movimiento hacia adelante / hacia atrás.



En cuanto al panel de control, al principio solo quería recoger una placa adicional con botones y otro ESP32, un control remoto clásico.

Sin embargo, recordé que los Steam Controllers tienen un modo Bluetooth de baja energía (BLE). Decidí abordar este problema, y ​​después de unas horas aprendí a recibir paquetes del controlador.

Para hacer esto, simplemente busque el dispositivo HID que se hace llamar SteamController y conéctese a él. Y luego use el servicio no documentado de Valve y algunos comandos no documentados que permiten transferencias de paquetes.



Y también me encontré con un formato de informe no documentado, que analicé manualmente.



Después de aproximadamente una hora, el significado de las banderas y los valores se hizo evidente para mí, y logré parpadear el LED usando el controlador Steam y ESP32. ¯ \ _ (ツ) _ / ¯

Archivos



v1.0: "enfoque de prueba"
: la primera opción para la que elegí el regulador de voltaje incorrecto. TPS62291 eleva el voltaje solo a 6 V. Desarrollé varios proyectos en paralelo, y olvidé que el dispositivo debe funcionar con 9 V.

v1.1: "suficientemente bueno"
: esta opción es visible en los comerciales, y todo funciona

v1.2: "final"
- Se agregaron indicadores LED a la salida y se optimizó el tamaño y el diseño de la placa.El

siguiente video corto muestra la fase de conexión (1-3 segundos después de encender la alimentación) y el control de las salidas del motor. El conector Lego aún no está conectado. Irá a un espacio vacío al lado de los otros conectores, marcado con un rectángulo blanco.



Mi hijo ahora usa regularmente este controlador para controlar los dispositivos que ha ensamblado.

Durante la prueba de esfuerzo, encontré solo un problema: pensé que el modo de "decaimiento rápido" del controlador del motor funcionaría mejor, pero debido a eso, después de unos segundos de operación, la velocidad del motor bajaría mucho. Así que cambié el código para que usara "decadencia lenta".



Hasta ahora no estoy seguro de cómo funciona el DRV y por qué el motor gira primero rápidamente y luego, después de 10 segundos, comienza a disminuir gradualmente. Quizás los MOSFET se están calentando y su resistencia aumenta demasiado.



Espero que este ejemplo de usar Arduino sin esfuerzo inspire a otras personas y les permita presentar a sus hijos la electrónica.

All Articles