Joystick caseiro MMJOY e Arduino Micro

Forum dedicado a Joysticks, HOTAS, Track-Ir, Freetrack, contrôles e cockpit's tipo "faça você mesmo", etc.
Post Reply
gm2gabriel

Joystick caseiro MMJOY e Arduino Micro

Post by gm2gabriel »

Olá pessoal,

Depois de pesquisar algumas coisas na internet, tomei coragem para começar a construir o meu próprio joystick. Um joystick simples, com X e Y, pedais de leme, throttle, mistura, meia dúzia de botões e talvez um hat é tudo que eu preciso para o Rise of Flight.

Vou usar o firmware MMJOY, que parece ser bem popular, e por mais que tenha muita coisa disponível na internet, até me perdi no meio de tanto conteúdo e não consegui sanar algumas dúvidas básicas ainda... se vocês puderem me ajuda, aqui estão elas:

- usando um Arduino Pro Micro Atmega32u4, quantos eixos, botões e hats eu posso ter? É possível fazer um joystick com X, Y, leme, throttle, mistura, hat e 6 botões? Em termos de eletrônica todos os eixos são iguais, ou seja, posso usar o mesmo potenciometro ou sensor hall independente se o eixo for o pitch, o pedal de leme ou o throtle? *OBS: já comprei o arduino.

- quem utiliza sensor hall, qual sensor vocês utilizam? Compram de onde? Comprei alguns A1302 no mercado livre, mas achei o preço bem salgado, e além disso no próprio datasheet fala que o modelo está descontinuado.

- e sobre os botões, alguém conhece alguma loja que venda botões para joystick, em especial o gatilho? Ou o jeito é depenar um joystick antigo mesmo?

Por enquanto é isso galera.
Gostei muito do forum de vocês, parabéns!
Quem anda jogando RoF me procure no Steam.
21_Sokol1
Veterano
Veterano
Posts: 15493
Joined: 01 Aug 2003 21:00
Location: Uberaba-MG

Re: Joystick caseiro MMJOY e Arduino Micro

Post by 21_Sokol1 »

O limitador é a quantidade de pinos do Arduino PRO micro: 20 pinos, que possibilitam usar:

6 eixos, por ex. X, Y, leme, throttle, mistura, freio.
Matrix 6x6 = 36 posições dos quais 4 reservadas para o HAT*, podendo usar até 32 botões - o que é o limite visto pelo Windows.

* HAT são 4 posições de botões com um código que faz com que 2 pressionados ao mesmo tempo pressionem outros 4, assim tendo: N, NE, E, SE, S, SW, W, NW.

"Botões" podem ser switches momentaneos (botão de pressão) ou toggle (chave de alavanca), encoder, chave rotatória de multiplas posições (ou "de onda") ...

As entradas de eixos no Arduino são analógicos e podem usar potenciometro, sensor HALL, sensor de posição - que funcionem de forma analógica (variação de voltagem), pode inclusive misturar os tipos,
ex. HALL no eixo X, Y e leme, pot' nos outros.

Também podem ser usadas entradas de eixos no formato digital (código binário), usando um controlador ADC externo e conectando os eixos (pot, sensor) nele, ou usar sensores que tenham incorporado o controlador ADC, caso do TLE5010/11 (tem resolução de 12 bits, a do ADC do Arduino é 10 bits).

Sensor HALL já ficou até meio "obsoleto" (1), em todo caso voce precisa do tipo "linear".
Os ideais são o Honeywell SS495A1 e Allegro A1320/1324.

Veja se encontra na Farnel - http://www.newark.com/brazil-direct-ship

Mais prático e barato (em dolar, porque em real... :P ) é comprar no eBay (precisa cartão de crédito internacional), o problema é a demora para entregar, pois chega no Brazil,zil,zil (em geral em 10/15 dias) e vai para um depósito da Receita e fica lá uns 2/4 meses, com o risco de "sumir"...

(1) Porque um sensor de posição como o magnetoresitor TLE5010/11 funciona melhor (bus digital), custa pouca coisa a mais, é mais prático de ajustar, mas é SMD e precisar montar um mini-PCB...

Em joystick os switches (interruptores) que tem sob a capa dos botões, gatilho, HAT... são do tipo micro-swtich tactil ("clica"), você encontra na http://www.soldafria.com.br (em chaves), bem com o tipo toggle switch (alavanca) do tipo ON-OFF, ON-OFF-ON, (ON)-OFF-(ON).**

O () significa posição momentanea, enquanto segura a alavaca - tipo dos switchs na base do X-55.

** "Jogo de avião" com opções "dumb'erizadas" (777) não tem suporte para toggle switch como o DCSW e portanto requem uso de keymappers.

Sobre a construção em si do joy', veja os tópicos do Tche_Loko.
gm2gabriel

Re: Joystick caseiro MMJOY e Arduino Micro

Post by gm2gabriel »

Muito obrigado Sokol!
gm2gabriel

Re: Joystick caseiro MMJOY e Arduino Micro

Post by gm2gabriel »

Mais uma dúvida Sokol, por favor.

Os potenciômetros comuns que eu encontrei possuem curso de 270º. Nos freios dos pedais eu gostaria que o ângulo de deflexão máximo fosse próximo de 30º, e nos pedais 30° para cada lado, ou seja, 60º no total. Sendo assim eu preciso usar um jogo de engrenagens com redução 1:9. É isso mesmo? Nesses pedais/joysticks caseiros que encontrei pela internet (por exemplo Baloo Pedals) não vi ninguém mencionando essa redução de 270º para qualquer outra coisa, nem tão pouco consegui ver o jogo de engrenagem nas fotos.
21_Sokol1
Veterano
Veterano
Posts: 15493
Joined: 01 Aug 2003 21:00
Location: Uberaba-MG

Re: Joystick caseiro MMJOY e Arduino Micro

Post by 21_Sokol1 »

270º graus é justamente o X da questão. Longa "estória": :)

Pot' feito para joystick tem o "angulo elétrico" (trilha) entre 30 e 60º - embora o eixo possa girar 270/300º igual a estes que você acha no mercado, só a variação de leitura no trecho definido pelo fabricante do joy', 30, 40...60º.

PROBLEMA: Pot' de josytick não é vendido para mero mortais - talvez consiga comprar os da CH Products, por ~10$ cada... Mas se não morar nos IUSEI precisa ser conhecido do amigo de um cara, para este "apadrinhar" a compra para o "restoftheworld"... :P

Então, para usar pot' do comércio precisa da engrenagem para casar os 270º do pot com o angulo que quer usar, ex. 30+30º no leme = redução de 4.5 - 1 ou o mais próximo que conseguir.

Ah, mais no projeto do Baloo Pedal não é mencionado isso!

Porque o Baloo Pedal é do tempo da "Idade Média dos Simuladores", quando ainda se usava gameport nos joysticks/pedais.;)

Na gameport o pot' não é usado como variador de voltagem (tal qual nos controladores USB atuais) e sim como variador de resistência.

Então o truque era o seguinte, se para 60º era preciso variar a resistência 100k (valor típico dos pot' de joy' da epóca - 100K em 60º ) e o DIY não era amigo do tal cara acima :P comprava-se um pot com uma resitência maior, ex. 450K de forma que nos 60º do movimento do pedal a resistência variasse mais ou menos os 100K esperados. (1)

E se usar o pot' de 270º do comércio nos controladores USB, não funciona?

Funciona, mas o controlador USB espera que o pot varie a voltagem de 0 a 5 volts (tipicamente), o que é conseguido através de toda a sua trilha (ângulo elétrico).

Então se o pot foi feito para 270º e girar só 60º a voltagem irá variar apenas de 0 a ~1,2 volts.
Vai funcionar, mais limitará a resolução, se o controlador USB é 10 bits (1024) conseguirá apenas uns 25% da resolução possível, ficando com um controle muito limitado, quase um ON/OFF, no freio até vai, mas para o leme não dá.

Então, ou consegue o pot' de ~60º ou usa redução por engenagens, polias... ou usa sensor HALL* ou sensor GMR pois estes sensores tem um "ângulo elétrico" menor - mais comum de 90 a 180 (mas pode ser de 30 a 360... depende da finalidade).

Assim, mesmo se não conseguir girar o imã todo o "ângulo elétrico" requerido, a perda de resolução será tolerável.

* Tem sensor HALL como o Melexis usado no T.16000M/Warthog que é programável, seu projeto requer 55º, você entra na configuração do sensor e determina que irá variar de 0 a 5v em 55º. ;)

O problema para o DIY é que isso requer um dispositivo programador que custa alguns milhares de doláres... :(

O sensor GMR baseado no KMZ41 pode ter seu "ângulo elétrico" ajustado através de resitores no PCB.
GMR = Giant magnetoresistance é um sensor desenvolvido recentemente (O HALL foi concebido no século XIX), muito usado na indústria automotiva, ex. o comando do acelerador, já que não se usa mais cabo entre o pedal e o controle de injeção no motor, é via sinal elétrico, então precisa de um sensor de ângulo de precisão no pedal.
Sensor HALL - em autos - fica para coisa menos importante, como marcador de nível de combustível. :)

(1) Com o GMR TLE501x no MMjoy2 usa-se um truque semelhante, o "ângulo elétrico" do TLE501X é 180º, impraticável de usar em joy sem uso de engrenagens, que convenhamos não é uma solução "elegante" - folgas, backslash... além de representar custo adicional, dificuldade de achar e complicação mecânica para montar.

O truque é aumentar a resolução do controlador USB (MMJoy2) por oversampling, assim se quer que o pedal tenha 12 bits de resolução, defina no MMjoy2 14 bits, como o imã não vai girar os esperados 180º haverá uma perda de resolução, mas esta ficará próxima aos 12 bits esperados - qualquer coisa cima de 10 bits (1024 pontos) já esta bom.

Espero que tenha esclarecido e não confundido. :)
gm2gabriel

Re: Joystick caseiro MMJOY e Arduino Micro

Post by gm2gabriel »

Esclareceu bastante, deu para entender o problema.

Bom, vou pensar em uma solução para isso, se eu tiver algum progresso compartilho aqui.
21_Sokol1
Veterano
Veterano
Posts: 15493
Joined: 01 Aug 2003 21:00
Location: Uberaba-MG

Re: Joystick caseiro MMJOY e Arduino Micro

Post by 21_Sokol1 »

Este esquema elétrico faz com que o sinal de um potenciometro de 270 graus, mas girado só 90 graus varie de 0 a 5 volts e assim o controlador USB consiga entregar toda a resolução possível.

http://i269.photobucket.com/albums/jj55 ... 51121d.jpg

Variando os valores dos resistors o circuito pode ser adaptado para outros ângulos, porem não sei como isso é calculado. :)

Circuito similar para substituição de pot em um transmissor R/C, também devido a falta de "potenciometro de joystick" no mercado (internacional).

http://www.rcgroups.com/forums/showpost ... ostcount=6
Post Reply