Controle de motor sem fio da Lego usando o Steam Controller



Quando eu era jovem, eu sempre quis ter kits Lego Technics para coletar todo tipo de coisas legais deles. Tanques autônomos com torres rotativas disparando tijolos de Lego. Mas então eu não tinha esse conjunto.

E mesmo os tijolos habituais da Lego não eram. Eu tinha apenas um amigo cujo irmão tinha todos esses brinquedos caros.

E agora eu tenho um filho da sua idade. E ele constrói tanques que ... estupidamente se mantêm à frente até atingirem a parede :)

E agora chegou a hora do ESP32 e a magia do ferro de soldar - montaremos o controle remoto certo para eles!

Não, é claro, eu sei sobre a existência de tais controles remotos. Mas nenhum deles combina comigo completamente. Eles são infravermelhos, com tecnologia dos anos 80, ou muito grandes. Ou caro. E o mais importante: não posso dizer ao meu filho sobre nenhum deles: "Eu fiz isso especialmente para você!"

Então, vamos criar um controle remoto novo e aprimorado para governar todos!



Ingredientes:

  • ESP32-WROOM-32D | WiFi, BLE e um processador com E / S - suficiente para controlar dois motores e um LED .
  • DRV8833 | ponte H dupla com potência suficiente para motores.
  • TPS62162 redução da tensão para 17 V, bem como para entretenimento ao soldar o gabinete WSON-8 2 × 2 mm
  • CP2104 para programação ESP32
  • . , Lego .

Tudo isso estará localizado em uma placa pequena - aqui está sua aparência no editor EasyEDA: O



fio que é visível na foto do cabeçalho não é necessário para corrigir erros, mas para fornecer energia a partir de USB. Pode não ser suficiente para o motor, mas, infelizmente, os contatos da China ainda não chegaram até mim. Portanto, verifico primeiro a operação dos LEDs. Para a beleza da foto, eu apenas coloquei o conector do motor na placa.

Na versão 1.1 da minha placa (diferente da versão 1.2, que já está no EasyEDA), não havia LEDs, então soldei dois diodos anti-paralelos na saída para que o que estava acontecendo fosse visível. Se você observar atentamente, o vídeo mostra a inclusão alternativa de um par de diodos 0603, indicando movimento para frente / trás.



Quanto ao painel de controle, no começo eu só queria coletar uma placa adicional com botões e outro ESP32 - um controle remoto clássico.

No entanto, lembrei-me de que os controladores de vapor têm um modo de baixa energia Bluetooth (BLE). Decidi abordar esse problema e, depois de algumas horas, aprendi a receber pacotes do controlador.

Para fazer isso, basta procurar o dispositivo HID que se chama SteamController e conectar-se a ele. E use o serviço não documentado da Valve e alguns comandos não documentados que permitem transferências de pacotes.



E também me deparei com um formato de relatório não documentado, que analisei manualmente.



Após cerca de uma hora, o significado dos sinalizadores e valores ficou claro para mim e consegui piscar o LED usando o controlador Steam e o ESP32. ¯ \ _ (ツ) _ / ¯

arquivos



v1.0: “tentativa de abordagem”
- a primeira opção para a qual escolhi o regulador de tensão errado. O TPS62291 aumenta a tensão apenas para 6 V. Desenvolvi vários projetos em paralelo e esqueci que o dispositivo precisa funcionar com 9 V.

v1.1: “bom o suficiente”
- essa opção é visível nos comerciais e tudo funciona

v1.2: “final”
- Adicionado LEDs indicadores na saída e otimizado o tamanho e o layout da placa.O

próximo vídeo curto mostra a fase de conexão (1-3 segundos após ligar a alimentação) e o controle das saídas do motor. O conector Lego ainda não está conectado. Irá para um espaço vazio ao lado dos outros conectores, marcado com um retângulo branco.



Meu filho agora usa regularmente esse controlador para controlar os dispositivos que ele montou.

Durante o teste de estresse, encontrei apenas um problema: achei que o modo de “decaimento rápido” do motorista funcionaria melhor, mas, por causa disso, após alguns segundos de operação, a velocidade do motor diminuiria muito. Então mudei o código para que ele usasse "decaimento lento".



Até agora, não tenho certeza de como o DRV funciona e por que o motor gira primeiro rapidamente e, depois de 10 segundos, começa a desacelerar gradualmente. Talvez os MOSFETs estejam esquentando e sua resistência aumente demais.



Espero que este exemplo de uso do Arduino inspire facilmente outras pessoas e permita que elas apresentem seus filhos à eletrônica.

All Articles