Índice:

Mod de direção do acelerômetro / giroscópio do Xbox 360: 7 etapas
Mod de direção do acelerômetro / giroscópio do Xbox 360: 7 etapas

Vídeo: Mod de direção do acelerômetro / giroscópio do Xbox 360: 7 etapas

Vídeo: Mod de direção do acelerômetro / giroscópio do Xbox 360: 7 etapas
Vídeo: Como tranformar seu controle em um volante no assetto corsa! (quase literalmente) 2024, Julho
Anonim
Mod de direção do acelerômetro / giroscópio do Xbox 360
Mod de direção do acelerômetro / giroscópio do Xbox 360

Estou jogando Assetto Corsa com meu controle Xbox 360. Infelizmente, dirigir com o manche analógico é muito pesado e não tenho espaço para uma configuração de roda. Tentei pensar em maneiras de colocar um mecanismo de direção melhor no controlador, quando me ocorreu que poderia usar todo o controlador como volante.

O stick analógico possui dois potenciômetros. Um mede o movimento vertical e o outro mede o movimento horizontal. Ele coloca 1,6 V em cada um e mede a tensão produzida no limpador para determinar o quanto o stick se moveu. Isso significa que é possível controlar o movimento do manche alimentando uma determinada tensão no pino do limpador. (mais informações aqui:

Este mod usa um Arduino para calcular o ângulo das leituras do acelerômetro e convertê-lo em movimento analógico do manche por meio de um DAC. Portanto, deve funcionar com qualquer jogo que use o stick analógico como entrada.

Etapa 1: Você precisará de:

Ferramentas:

  • Ferro de solda
  • Solda
  • Ventosa / trança de solda
  • Descascador de fios
  • Uma chave de fenda, talvez Torx, dependendo dos parafusos do seu controlador (os meus são cruzeta)
  • Cola (de preferência cola não super forte, para que possa ser desmontada mais tarde)
  • Um adaptador USB para serial para programar o Arduino

Materiais:

  • Controlador Xbox 360 (duh!)
  • Arduino Pro Mini (ou um clone) (de preferência 3,3 V. Se você usar a versão de 5 V, provavelmente precisará de um conversor de tensão de aumento)
  • Um giroscópio / acelerômetro MPU-6050
  • Um MCP4725 DAC (dois se você quiser controlar os dois eixos)
  • Algum fio fino
  • Uma placa de ensaio para que você possa testar tudo antes de soldar (opcional, mas recomendado)

Etapa 2: desmontar o controlador

Desmontar o controlador
Desmontar o controlador
Desmontar o controlador
Desmontar o controlador
Desmontar o controlador
Desmontar o controlador

Existem sete parafusos que você deve remover. Seis deles são óbvios, mas o sétimo está atrás de um adesivo. Presumo que removê-lo anula sua garantia, portanto, proceda por sua própria conta e risco. Muitos guias dizem que você precisa de uma chave de fenda Torx, mas as minhas são cruzadas, então verifique seu controlador.

Depois disso, retire cuidadosamente a tampa traseira. Se você arrancar pela frente, os botões irão derramar e provavelmente irão por toda a sala. Levante-o por baixo. Em seguida, desconecte os dois motores de vibração. (o que tem o peso pequeno deve ficar à esquerda e o que tem o peso grande à direita) Retire a placa de circuito impresso e remova as tampas de borracha dos bastões analógicos. Eles simplesmente funcionam.

A próxima coisa é remover o stick analógico esquerdo para que não interfira com nossa entrada, mas o mecanismo de gatilho esquerdo está no caminho. Para removê-lo, você deve dessoldar os três pinos do potenciômetro da parte frontal da placa e, em seguida, soltar o mecanismo do PCB.

Em seguida, desolder os 14 pinos segurando o stick analógico esquerdo. Em seguida, puxe a vara para fora.

Etapa 3: colar os componentes no lugar

Cole os componentes no lugar
Cole os componentes no lugar
Cole os componentes no lugar
Cole os componentes no lugar

Você notará que há bastante espaço entre a parte traseira do PCB e o gabinete. Isso torna possível colocar todo o hardware no gabinete sem remover nada.

Só percebi mais tarde, mas esse seria um bom momento para dessoldar o botão de reset no Arduino. Do contrário, ele pressionará a parte de trás da caixa e fará com que o projeto pare de funcionar se você apertar demais um dos parafusos ao remontá-lo.

Colei um pedaço fino de cartão na parte de trás de cada PCB para isolá-lo, depois colei no PCB do controlador. Eu estava relutante em usar cola, mas não conseguia pensar em uma maneira melhor de fazer isso.

As posições na imagem são a melhor combinação que consegui encontrar. O Arduino fica à esquerda, com a borda com o botão de reset rente ao pedaço de plástico do mecanismo de gatilho direito, com o outro lado sob o fio e com o canto o mais próximo possível do conector branco. Há uma pequena protuberância na caixa, mas não consegui encontrar um lugar melhor para colocá-la.

O acelerômetro está à direita do fio. Deve ser o mais plano e reto possível, caso contrário, você pode ter que escrever algum código mais tarde para compensar o deslocamento. Observe que há algumas peças de plástico salientes na parte de trás do gabinete que você deve ter cuidado para evitar. Descobri que você pode colocar algo pegajoso e colorido, como batom, nas peças de plástico salientes e, em seguida, colocar a tampa traseira para ver onde deixa marcas.

O (s) DAC (s) vão no canto esquerdo inferior. Há espaço suficiente aqui para empilhar dois DACs, um em cima do outro, se você quiser controlar os dois eixos. Você não precisa colá-los. Eles ficarão onde estão apenas com as conexões soldadas. Se for colocar um cartão entre eles, certifique-se de cortar o cartão de forma a deixar SCL, SDA, VCC e GND acessíveis, pois você os acessará de ambos os lados.

Se você usar dois DACs, não se esqueça de trocar o jumper de endereço e desabilitar os resistores pull up em um deles, conforme descrito aqui: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -converter-hookup-guide

Etapa 4: Solde os fios

Solde os fios
Solde os fios
Solde os fios
Solde os fios
Solde os fios
Solde os fios

Agora você tem que conectar tudo. VCC, GND, SDA e SCL de todos os dispositivos 2/3 devem ser conectados a VCC, GND, A4 e A5 no Arduino, respectivamente. Os DACs são a parte mais complicada. Se você tiver dois, terá que conectá-los, deixando algum lugar onde você pode conectar a alimentação e as linhas ao acelerômetro, enquanto mantém os fios de saída separados.

O pino OUT no DAC deve ser conectado ao pino no PCB do controlador que costumava ser para o pino do potenciômetro horizontal intermediário do stick analógico. Ou seja, onde estava o stick analógico, há uma fileira de três pinos no topo. Conecte-o ao meio. Se você tiver outro DAC, conecte-o ao pino do potenciômetro vertical (a linha à esquerda) da mesma maneira. Você não conseguirá chegar aos pinos pela parte de trás quando o gatilho for recolocado, então você tem que passar um fio na frente da placa. Há uma "parede" circular de plástico ao redor da área do stick analógico, mas felizmente há uma lacuna conveniente nela pela qual você pode passar os fios. Certifique-se de que os fios não atrapalhem a haste do parafuso na parte frontal do gabinete.

Meu plano original era alimentar o Arduino com o 5V do cabo USB conectado ao pino RAW, mas quando tentei, não funcionou. O Arduino não executou nada e tanto o Arduino quanto o controlador desligaram após alguns segundos. No entanto, descobri que há uma saída estável de 3,3 V de dois pinos na frente da placa perto do soquete periférico preto, provavelmente para alimentar periféricos. Funciona com VCC e RAW, mas escolhi VCC porque já tem a tensão certa e porque me permite soldá-lo ao fio VCC no DAC que já está perto da parte inferior da placa e economizar em fios.

Esteja ciente de que há muitas peças de plástico projetando-se do gabinete que você precisa contornar, mas se colar os fios no lugar, só precisa se preocupar com eles uma vez.

Tudo isso é difícil de descrever com palavras, então incluí fotos e um diagrama tosco.

Etapa 5: programar o Arduino

Agora você tem que programar o Arduino. Isso requer mover o cabo USB no controlador para que você possa acessar os pinos seriais no Arduino. Eu incluí o código que usei. Requer a biblioteca Adafruit MCP4725, que pode ser encontrada aqui:

Como está, o código permite que você percorra toda a amplitude de movimento do stick analógico de maneira uniforme, movendo o controlador de 90 graus para a esquerda a 90 graus para a direita, e mantenha-o no meio, mantendo-o plano.

Ele obtém o ângulo do controlador calculando a tangente inversa da força-g do eixo X dividida pela força-g do eixo Z. Isso significa que funciona se o controlador for vertical, plano ou qualquer ângulo intermediário. (mais informações aqui:

Ele funciona no meu controlador, mas outros controladores podem exigir voltagens diferentes, colocando-o fora de alinhamento. Acho que a melhor maneira de encontrar a faixa de tensão é por tentativa e erro. Muitos jogos mostram um controle deslizante para o movimento do stick analógico, mas a maneira mais precisa que encontrei de determinar o movimento é com o jstest no Linux. (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) Fornece um número entre -32, 767 e 32, 767 em vez de um gráfico, para que você saiba exatamente onde está o stick. Conecte o controlador e o Arduino USB para o adaptador serial, carregue o jstest e tente diferentes valores DAC até atingir o topo e o fundo da faixa e anote cada um. Para mim, foi 1.593-382.

De particular interesse é a linha 36:

valor dac = (ângulo do controlador + 2,5617859169446084418) / 0,0025942135867793503208 + 0,5;

Não é imediatamente óbvio o que isso faz. Simplesmente, ele pega o ângulo do controlador (medido em radianos e entre ~ 1,57 e ~ -1,57) e o converte para um valor entre 1, 593 e 382 para o DAC. Se você tiver um intervalo de DAC diferente, você precisará alterar essa linha.

A linha pode ser escrita como:

valor dac = (ângulo do controlador +) / + 0,5;

Com e sendo os números que você precisa mudar. é igual ao intervalo do ângulo do controlador (pi) dividido pelo intervalo total dos valores DAC. (a parte superior da faixa menos a parte inferior da faixa) Isso permite que você mude a tensão, embora os resultados fiquem fora da faixa desejada. É por isso que você precisa. é igual a multiplicado pela parte inferior da faixa mais a metade da amplitude de movimento do controlador. (pi / 2) Adicionar metade da amplitude de movimento garante que não seja um número negativo, e adicionar multiplicado pela parte inferior da amplitude garante que ele esteja sincronizado com a amplitude desejada.

Ao converter os decimais em inteiros, C ++ não arredonda. Em vez disso, ele corta o decimal, então 9,9 torna-se 9. Adicionar 0,5 no final garante que qualquer coisa acima da metade vá para o próximo inteiro, então ele é arredondado.

Depois de fazer o upload do seu programa, verifique se ele funciona com o jstest.

Etapa 6: remonte o controlador

Monte o controlador de volta da mesma maneira que você o desmontou, menos o stick analógico esquerdo. Deve funcionar agora. Acho que não há nenhum atraso perceptível e é muito melhor do que usar o stick analógico. Por usar um acelerômetro, ele é afetado por movimentos bruscos, mas você tem que sair do seu caminho para perceber isso.

Etapa 7: Possíveis Melhorias

Existem algumas melhorias que podem ser feitas. Esses incluem:

  • Usando fio magnético menos pesado
  • Gravando tudo em um PCB projetado para caber na caixa do controlador
  • Reconectando o stick analógico esquerdo e conectando as pernas às entradas analógicas no Arduino para que possam ser usadas para ajustar o Arduino
  • Pegando a parte traseira da caixa de um controlador sem fio e colocando o projeto no compartimento da bateria (isso exigiria cortar um orifício para o cabo USB)

Recomendado: