Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Para incentivar o exercício pessoal e familiar, fiz um adaptador que emula um adaptador de controlador de jogo USB padrão, mas controla a velocidade do movimento do jogo pedalando em uma máquina elíptica ou bicicleta ergométrica. É particularmente bom para jogos de corrida. Certamente motiva alguém a pedalar rápido ao jogar jogos de corrida.
O hardware principal é uma placa de desenvolvimento STM32F103C8 "black pill" de $ 2 com o núcleo stm32duino Arduino e uma biblioteca HID USB que desenvolvi com base no fork do núcleo libarra111. O STM32F1 é rápido e barato e tem suporte para USB de alta velocidade, por isso é perfeito para o projeto.
Para usar, você precisa tocar no sensor de rotação na bicicleta elíptica ou ergométrica (se o seu sensor de rotação funcionar de maneira diferente dos de nossas máquinas - cerca de 3v, baixo ativo - você pode precisar modificar o circuito e / ou código)
A velocidade de rotação elíptica / bicicleta controla o controle deslizante. Além disso, você conecta um controlador Wii Nunchuck ou Gamecube padrão no adaptador para movimento do joystick, botões, etc. Existem muitos modos de controle diferentes. Por exemplo, crianças menores podem precisar aumentar um pouco a velocidade e alguns jogos podem usar um esquema de controle diferente. Existem vários esquemas de controle embutidos no software e outros podem ser facilmente adicionados ao código. O dispositivo pode emular um controlador de jogo USB, teclado, mouse, controlador XBox 360 ou alguma combinação dos três primeiros.
A direção do movimento não é detectada no momento: para alternar entre o movimento para frente e para trás, o adaptador tem uma chave seletora. (Como alternativa, pode-se usar um sensor magnético de efeito Hall como este dispositivo e alterar o circuito e o software.)
O adaptador funciona como um controlador USB padrão, então você pode usá-lo com Windows, Linux, OS X, Android, etc.
Como bônus, o adaptador tem todas as funções deste projeto, funcionando como um adaptador Gamecube de função completa, permitindo que você use os controladores Gamecube em um computador, incluindo o controle de jogos com tapetes de dança Dance Dance Revolution compatíveis com Gamecube / Wii.
O custo é cerca de US $ 10, mais a caixa (tenho um design 3D para impressão), fios e solda. Partes:
- Placa de desenvolvimento stm32f103c8 "Black Pill" (US $ 2 no Aliexpress)
- Tomada Gamecube ($ 1,60 no Aliexpress, para um cabo de extensão Gamecube que pode ser cortado)
- Nunchuck socket breakout board ($ 0,51 no Aliexpress; pesquise por Wiichuck)
- Interruptor de alternância pequeno de duas posições (abaixo de $ 1 no Aliexpress)
- Sua escolha de conectores macho e fêmea de dois condutores (cerca de US $ 1 no Aliexpress se você for com conectores de barril de alimentação de 5,5 mm); você precisa de um conector fêmea por máquina de exercício
- 2 interruptores táteis (abaixo de $ 0,50 no Aliexpress)
- 4 LEDs vermelhos (abaixo de $ 0,50 no Aliexpress; você também pode usar uma pequena tela LCD Nokia)
- capacitores: eletrolítico de 10uF e 100nF opcional
- resistores: 1 x 100K, 2 x 10K, 1 x 1K, 4 x 220ohm
- pequena placa proto (menos de $ 1 no Aliexpress).
Um Nunchuck é bom para uso com uma mão em uma máquina elíptica. Em uma bicicleta ergométrica, você pode usar um adaptador de duas mãos como o Gamecube. Se você quiser usar apenas uma dessas duas opções de controle, poderá usar menos conexões.
Você também precisa de um computador, um ferro de solda e um multímetro. Você também precisará de uma ponte UART para USB (usei um Arduino Mega que tinha para outro projeto; ou você pode comprar um módulo CP2102 no Aliexpress por um dólar) para instalar um bootloader em sua pílula preta para usá-lo com o Ambiente Arduino, ou então você pode gastar mais alguns dólares e obter a placa de desenvolvimento do RobotDyn com um carregador de inicialização Arduino pré-carregado.
Permitam-me acrescentar que estou inscrevendo-o no concurso Wheels, porque é uma forma de ligar as rodas virtuais dos jogos de corridas de automóveis de um computador às rodas físicas das bicicletas ergométricas e elípticas.
Etapa 1: toque no sensor de rotação
Ambas as máquinas de exercício que hackeado têm um console que exibe a velocidade. Existem fios passando entre o console e o corpo da máquina. Você precisa conectar esses fios para acessar os dados. Se suas máquinas forem como as minhas, o console pode ser removido e você encontrará um cabo plano (elíptico) ou dois fios (bicicleta). Eu os conectei desconectando os fios e conectando-os com jumpers individuais homem-para-mulher que eu pudesse usar.
Use tentativa e erro e um multímetro para identificar um par de fios entre os quais há um pulso de tensão durante uma rotação completa.
Basicamente, o exercício é o seguinte: conecte o multímetro a um par de fios (tomando cuidado para não causar curto-circuito) com a máquina em funcionamento e gire os pedais bem devagar. Em ambas as nossas máquinas, existe um par de fios entre os quais normalmente a tensão está em torno de + 3V, mas durante uma pequena parte da rotação cai para o terra: este é um esquema ativo-baixo. Você pode descobrir que sua máquina tem um esquema ativo-alto em que a maior parte da rotação é aterrada e o pulso é positivo, e então você precisará editar o esboço do Arduino.
Se você acha que há alguma chance de que qualquer um dos fios do console com o qual esteja lidando seja da rede elétrica, recomendo parar, a menos que você realmente saiba o que está fazendo. Felizmente, nossa bicicleta ergométrica é alimentada por bateria e nossa elíptica se conecta a uma verruga na parede, portanto, há apenas cerca de 12 V CC ao redor do console.
No caso da bicicleta estática, foi muito fácil. Havia apenas quatro fios. Dois eram para o monitor de freqüência cardíaca e dois eram para o sensor de rotação.
O elíptico tinha muito mais fios, então dava mais trabalho. O método da força bruta é este. Conecte um multímetro a um par de fios. Faça lentamente uma rotação completa (ou um pouco mais, apenas no caso) nos pedais e veja se há uma queda ou salto de tensão. Se sim, você conseguiu. Se não, repita para outro par. É muita tentativa e erro: para 13 fios, são 78 rotações.
Aqui está um truque que pode ajudá-lo a acelerar a busca pelo par de fios correto. Você pode esperar que sua máquina, como a minha, tenha a tensão do detector normalmente alta com um pulso baixo. Nesse caso, se você deixar os pedais em um local aleatório, terá uma boa chance de que os dois fios do detector tenham cerca de + 3 V ou + 5 V entre eles. Portanto, faça o teste de rotação do pedal apenas para os pares de fios que têm + 3V ou + 5V entre eles.
Outro truque. Você pode ser capaz de identificar onde na rotação do pedal o sensor de rotação é acionado. Por exemplo, sua máquina pode piscar algo na tela ou atualizar a exibição de velocidade, ou ser ativada do modo de hibernação ou bip. Em caso afirmativo, mova os pedais cerca de 1/3 de rotação para longe e, em seguida, procure pares de fios que tenham 3-5 V entre eles e teste-os movendo os pedais para a posição onde o sensor é acionado.
Se você puder identificar o fio terra, você pode acelerar o processo consideravelmente, já que então você só precisa ir entre o terra e cada fio desconhecido. Estranhamente, porém, em nosso elíptico, o aterramento da fonte de alimentação não parecia ser o mesmo que o aterramento do detector de rotação.
Depois de identificar os fios, anote-os. Certifique-se de observar:
- o nível de alta tensão: se for mais do que cerca de 3,3 V, mas não mais do que 5 V, você vai querer mudar o circuito para usar o pino A9 em vez de A7 para detecção de rotação, pois o pino A9 tem tolerância de 5 V e A7 não, e editar uma linha em meu esboço; se for mais de 5 V, você precisará adicionar um divisor de tensão
- se o pulso de detecção de rotação é baixo ou alto: se o pulso for alto, você precisará editar uma linha em meu esboço do Arduino.
Se você tiver um osciloscópio e a máquina de exercícios funcionar com bateria, também poderá usar o osciloscópio em vez do multímetro. (Se a máquina de exercícios estiver conectada à corrente alternada e o osciloscópio também, você precisa saber sobre loops de terra e como evitá-los. Tenha cuidado!)
Etapa 2: preparar a placa de desenvolvimento
Solde os seis pinos do jumper central em sua pílula preta.
Se você tiver uma placa RobotDyn com o carregador de inicialização Arduino, conecte B0- e B1- aos pinos centrais e você concluiu a etapa.
Caso contrário, agora você precisa instalar o bootloader. Você precisará de uma ponte UART para USB autônoma ou pode usar um Arduino Uno ou Mega para essa finalidade. Embora o comprimido preto funcione a 3,3 V, os pinos UART são tolerantes a 5 V, então não se preocupe se o seu conector funciona a 3,3 V ou 5 V.
Se você tiver um Uno ou Mega, coloque um cabo jumper entre RESET e GROUND. Isso transforma o Arduino em uma ponte UART para USB dedicada, exceto que os pinos TX / RX são o inverso de como normalmente são em um conector.
Baixe o binário do bootloader. Você deseja generic_boot20_pb12.bin. No Windows, instale o Flash Loader Demonstrator do ST. No Linux (e talvez no OS X e até no Windows se você preferir ferramentas de linha de comando), use este script python, mas minhas instruções serão para o Windows.
Faça as seguintes conexões:
- PA9 para UART bridge RX ("TX" se você estiver usando o truque do Arduino)
- PA10 para ponte UART TX ("RX" se você estiver usando o truque do Arduino)
- G para aterramento da ponte UART
Eu gosto de usar pontas de prova lógicas para fazer as conexões no lado do STM32, mas você também pode apenas soldar alguns fios que você pode mais tarde cortar (ou dessoldar se quiser limpar).
Conecte sua ponte UART ao computador. Ligue o Black Pill através de sua porta USB (melhor se você conectá-lo a um carregador em vez de ao computador, pois o computador provavelmente reclamará de um dispositivo USB não reconhecido). Inicie o Flash Loader Demonstrator. Escolha a porta COM para sua ponte UART. Escolha "Remover proteção", se disponível. Escolha uma versão flash de 64kb em vez de 128kb. E carregue o binário do bootloader.
Desligue tudo e mova o jumper de B0 + / centro para B0- / centro. Agora você tem um carregador de boot que pode ser usado com o IDE do Arduino.
Etapa 3: preparar Stm32duino no Arduino IDE
Presumo que você tenha o IDE do Arduino mais recente instalado.
Em ferramentas | Placas | Boards Manager, instale o suporte para o Arduino Zero (basta colocar Zero na pesquisa, clicar na entrada encontrada e, em seguida, Instalar). Sim, você não está trabalhando com um Zero, mas isso instalará o compilador gcc correto.
Em seguida, baixe o núcleo stm32duino. No Windows, recomendo baixar o arquivo zip, pois quando fiz o check-out dos arquivos (reconhecidamente, com svn), tive alguns problemas de permissão com arquivos no diretório de ferramentas do Windows que precisavam de conserto. Coloque o branch em Arduino / Hardware / Arduino_STM32 (assim você terá pastas como Arduino / Hardware / Arduino_STM32 / STM32F1, etc.) No Windows, instale os drivers executando drivers / win / install_drivers.bat.
Instale minha biblioteca USBHID: Vá para Sketch | Incluir Biblioteca | Gerencie bibliotecas e pesquise USBHID. Clique nele e clique em Instalar.
Instale minha biblioteca GameControllersSTM32: Vá para Sketch | Incluir Biblioteca | Gerencie bibliotecas e pesquise GameControllers. Clique nele e clique em Instalar.
Etapa 4: circuito
Minha configuração usa quatro LEDs para indicar o modo de emulação atual em binário (sim, pode-se usar um display LCD, mas eu tinha LEDs por aí quando construí isso), dois botões de pressão para alternar o modo para cima e para baixo (e alguns outros truques) e uma chave seletora para mudar a direção do movimento.
Além disso, há uma entrada I2C do Nunchuck e um conector para o controlador Gamecube. Se você quiser oferecer suporte a apenas um desses dois, basta editar gamecube.h no esboço e economizar um pouco de solda.
Usei um pequeno protoboard para montar os quatro LEDs de modo e dois botões de mudança de modo (para cima e para baixo), bem como um resistor pull-up para dados do Gamecube. Eu trouxe 3,3 V para o protoboard, mas não precisei trazer terra para ele, embora você possa, se quiser. Usei outro pequeno protoboard para montar o conector Nunchuck.
Corte o cabo do Gamecube. Você quer trabalhar com o lado do soquete, aquele ao qual seu controlador se conectará. Retire os cabos para conexão.
Agora faça essas conexões de acordo com o diagrama de circuito:
- Capacitor de 10uF entre 3,3 V e terra (com o lado negativo de qualquer eletrolítico no terra). Ele deve ser o mais próximo possível do chip, então eu o soldei direto na placa de desenvolvimento ao invés do protoboard. Para uma boa medida, você pode adicionar 100nF como eu fiz, mas não tenho certeza se isso é necessário.
- Soquete Gamecube # 2 - A6 na placa stm32
- Resistor de 1Kohm entre o soquete Gamecube # 2 e 3,3 V na placa stm32 (ou no protoboard)
- Tomada Gamecube # 3 e # 4 - aterrada na placa stm32
- Tomada Gamecube # 6 - 3,3 V na placa stm32 (ou no protoboard)
- LED em série com resistor de 220 ohm (ou maior) entre A0 na placa stm32 e 3,3 V (extremidade negativa (plana) para PA0; extremidade positiva para 3,3 V)
- Repita com LED + resistor entre A1 e 3,3 V, A2 e 3,3 V e A3 e 3,3 V
- Troca momentânea entre A5 na placa stm32 (modo de incremento) e 3,3 V e outra entre A4 e 3,3 V (modo de decremento); esta opção aumenta o número do modo
- Alternar entre A8 e 3.3V
- solo da máquina de exercícios - solo stm32
- sinal positivo da máquina de exercícios - placa stm32 A7 (observe que A7 só é bom para 3,3 V; se sua máquina de exercícios for 5 V, use A9 e edite gamecube.h)
- Nunchuck ground (rotulado - na minha placa adaptadora) - stm32 ground
- Nunchuck + 3,3 V (etiquetado +) - stm32 3,3 V
- Nunchuck SDA (rotulado como D) - stm32 B7
- Nunchuck SCL (identificado como C) - stm32 B6
- Resistor de 10 kohm entre Nunchuck SDA e 3,3 V na placa stm32
- Resistor de 10Kohm entre Nunchuck SCL e 3,3 V na placa stm32.
Etapa 5: Instale o Sketch
Baixe meu esboço do Adaptador USB Gamecube e carregue-o no IDE do Arduino. Existem algumas opções de controle em gamecubecontroller.h:
- remove // na frente de #define ENABLE_EXERCISE_MACHINE (todos precisam fazer isso)
- se você precisar mover a conexão da máquina de exercício para A9, altere PA7 para PA9 na linha const uint32_t rotationDetector = PA7
- se o pulso de detecção de rotação da máquina de exercícios for alto, altere #define ROTATION_DETECTOR_CHANGE_TO_MONITOR FALLING para #define ROTATION_DETECTOR_CHANGE_TO_MONITOR RISING
- se você não quiser usar um Nunchuck, coloque // antes de #define ENABLE_NUNCHUCK
- se você não quiser usar um controlador Gamecube, coloque // antes de #define ENABLE_GAMECUBE.
No IDE do Arduino, escolha Ferramentas | Board | Série STM32F103C genérica.
Pressione o botão de upload com a seta para a direita. Observe que pode ser necessário pressionar o botão de reset (ou desconectar / plugar) a placa no momento certo se receber uma mensagem de que a placa não foi reconhecida.
Etapa 6: Conexão da máquina de exercícios
Emende um conector para a conexão da máquina de exercícios. Em nossa máquina elíptica, soldei-o, enquanto na bicicleta ergométrica, pude usar conectores duplos macho e fêmea. No elíptico, fiz um orifício na lateral do console para encaixar a conexão. Na máquina de exercícios, só tenho fios saindo dela e uma pequena caixa impressa em 3D (arquivo OpenSCAD) do lado de fora.
Etapa 7: Caso do Projeto
Pode-se encerrar o projeto em uma pequena caixa de papelão, um recipiente para tupperware ou um invólucro impresso em 3D personalizado. Como tenho uma impressora 3D, optei pelo gabinete personalizado. Os arquivos OpenSCAD e STL estão aqui.
Os pés são projetados para colar (a supercola funciona) na parte inferior e ter pés de borracha pegajosa presos a eles.
Também colei alguns fechos de velcro na caixa do projeto e nas máquinas de exercícios.
Etapa 8: usar
Os dois botões podem alternar entre até 16 modos de emulação diferentes (você pode ter mais, na verdade, mas há apenas quatro LEDs no projeto para exibir o número do modo). Os modos de emulação são definidos em gamecubecontroller.h no esboço. Para a maioria dos jogos, você pode usar o modo 1, joystick deslizante unificado com velocidade de 100%. O joystick emulado tem um controle deslizante (na verdade, dois controles deslizantes, mas ambos fazem a mesma coisa) que é controlado pela rotação da máquina de exercícios. Os botões e o joystick em si são controlados pelo controlador Gamecube ou Nunchuck. No Windows, alguns jogos suportam um controlador XBox 360, mas não um joystick USB. Para aqueles, use o modo 13 (pressione o botão para baixo a partir do modo 1).
Os modos 9 e 10 permitem que você pedale mais devagar e ainda obtenha uma depressão total do controle deslizante, o que é bom para crianças ou para máquinas de exercício configuradas para resistência mais alta. Você também pode ajustar as velocidades em exercíciomachine.ino.
Existem muitos outros modos de emulação. Uma referência para impressão está incluída em modelist.pdf com o esboço.
Quando você pedala na máquina de exercícios, os LEDs no projeto mudam de exibir o número do modo atual para a velocidade. Quando todas as quatro luzes estão acesas, sua velocidade está no máximo (o controle deslizante emulado tem extensão máxima) - nesse ponto, você não obtém nenhuma vantagem no jogo por ir mais rápido. Além disso, o LED azul na placa STM32F1 fica aceso quando tudo funciona, mas pisca quando o sensor de rotação é acionado.
Para reverter o movimento, gire a chave seletora de direção na caixa do adaptador.
No Windows, execute joy.cpl para calibrar e ver como as coisas funcionam. Como é um incômodo ter que pedalar muito rápido para calibrar o joystick emulado, existe uma maneira de trapacear para a calibração. No controlador Gamecube, se você ficar parado por cerca de 10 segundos, pode começar a usar os botões de ombro para controlar os controles deslizantes do joystick emulado. Com o Nunchuck, enquanto você segura o botão modo menos, você pode usar o joystick para cima / para baixo para controlar os controles deslizantes emulados.
Se você deseja uma GUI para alternar os modos de emulação, no Windows o esboço inclui mode.py, um script python com uma GUI para alternar os modos. Você também pode invocar mode.py em um arquivo em lote que inicia um jogo.
Dois jogos que descobri que funcionam muito bem com a máquina de exercícios são Toybox Turbos e SuperTuxCart (gratuito).
O adaptador também inclui muitos outros recursos de emulação. Por exemplo, você pode usá-lo como um adaptador Nunchuck ou Gamecube Controller simples, emulando joystick, teclado (por exemplo, setas / WASD) e / ou mouse. Existem vários modos listados em gamecubecontroller.h. Você também pode conectar um pad compatível com Dance Dance Revolution Gamecube / Wii e usá-lo para jogar jogos não projetados para ele, como Tetris, para diversão e exercícios adicionais.