Controle sem fio de motores Lego com o Steam Controller

Controle sem fio de motores Lego com o Steam Controller

Quando eu era jovem, sempre quis ter conjuntos de Lego techno para construir coisas legais. Tanques autônomos com torres giratórias que disparam peças de Lego. Mas então eu não tinha esse conjunto.

E não havia nem peças normais de Lego. Eu só tinha um amigo cujo irmão tinha todos aqueles brinquedos caros.

E agora tenho um filho dessa idade. E ele constrói tanques que ... avançam estupidamente até baterem na parede 🙂

E agora é hora do ESP32 e da magia do ferro de soldar - vamos montar o controle remoto certo para eles!

Não, é claro que sei da existência de tais controles remotos. Mas nenhum deles combina comigo perfeitamente. Eles são infravermelhos, com tecnologia dos anos 80, ou muito grandes. Ou caros. E o mais importante, não poderei contar ao meu filho sobre nenhum deles: “Fiz isso especialmente para você!”

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

Controle sem fio de motores Lego com o Steam Controller

Ingredientes:

  • ESP32-WROOM-32D | WiFi, BLE e processador com E/S - o suficiente para controlar dois motores и LIDERADO.
  • DRV8833 | ponte H dupla com potência suficiente para os motores.
  • TPS62162 | reduza a tensão para 17V, também para se divertir ao soldar o gabinete WSON-8 2x2mm
  • CP2104 | para programação ESP32
  • Conectores para conectar motores e diodos. Corte os fios e solde-os na parte inferior e cole o conector Lego na parte superior.

Tudo isso será colocado em um quadro bem pequeno - aqui está sua aparência no editor EasyEDA:

Controle sem fio de motores Lego com o Steam Controller

O fio, que fica visível na foto do título, não é necessário para corrigir alguns erros, mas para fornecer energia via USB. Pode não ser suficiente para o motor, mas, infelizmente, os contatos da China ainda não chegaram até mim. Portanto, primeiro verifico o funcionamento dos LEDs. Para ficar mais bonito na foto, acabei de colocar o conector do motor na placa.

A versão 1.1 da minha placa (ao contrário da versão 1.2 já presente no EasyEDA) não tinha LEDs, então soldei dois diodos antiparalelos na saída para poder ver o que estava acontecendo. Se você olhar de perto, o vídeo mostra o acionamento alternado de um par de diodos 0603, indicando movimento para frente/para trás.

Quanto ao controle remoto, a princípio queria apenas montar uma placa adicional com botões e outro ESP32 - um controle remoto clássico.

Porém, lembrei-me então que os controladores Steam possuem um modo de operação Bluetooth Low Energy (BLE). Resolvi resolver esse problema e depois de algumas horas aprendi como receber pacotes do controlador.

Para fazer isso, basta procurar um dispositivo HID que se autodenomina SteamController e conectar-se a ele. E então use um serviço não documentado da Valve e alguns comandos não documentados, permitindo a transmissão de pacotes.

Controle sem fio de motores Lego com o Steam Controller

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

Controle sem fio de motores Lego com o Steam Controller

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 ESP32. ¯_(ツ)_/¯

Arquivos

v1.0: "abordagem experimental"
- a primeira opção para a qual escolhi o regulador de tensão errado. O TPS62291 só leva tensão até 6 V. Eu estava desenvolvendo vários projetos em paralelo e esqueci que o aparelho precisa funcionar com 9 V.

v1.1: "bom o bastante"
- esta opção fica visível nos vídeos e tudo funciona

v1.2: "final"
- adicionados LEDs indicadores à saída e otimizado o tamanho e layout da placa

O breve vídeo a seguir mostra a fase de conexão (1-3 segundos após a energização) e o controle das saídas do motor. O conector da Lego ainda não está conectado. Ele irá para o espaço vazio próximo aos demais conectores, marcado com um retângulo branco.

Meu filho agora usa regularmente este controlador para controlar as máquinas que montou.

Durante o teste de estresse, encontrei apenas um problema: pensei que o modo “decaimento rápido” [decaimento rápido] do driver do motor funcionaria melhor, mas por causa disso, após alguns segundos de operação, a velocidade do motor caiu muito . Então mudei o código para que ele use “slow Decay” [decaimento lento].

Controle sem fio de motores Lego com o Steam Controller

Embora eu não tenha certeza de como o DRV funciona e por que o motor gira rápido no início, depois de 10 segundos ele começa a desacelerar gradualmente. Talvez os MOSFETs estejam esquentando e sua resistência esteja aumentando demais.

Espero que este exemplo de como usar o Arduino inspire outras pessoas sem esforço e lhes permita apresentar a eletrônica a seus filhos.

Fonte: habr.com

Adicionar um comentário