Acelerómetro / giroscopio del controlador Xbox 360 Modificación de dirección: 7 pasos
Acelerómetro / giroscopio del controlador Xbox 360 Modificación de dirección: 7 pasos
Anonim
Acelerómetro / giroscopio del controlador Xbox 360 Mod de dirección
Acelerómetro / giroscopio del controlador Xbox 360 Mod de dirección

He estado jugando Assetto Corsa con mi controlador Xbox 360. Desafortunadamente, manejar con la palanca analógica es muy difícil de manejar y no tengo espacio para configurar el volante. Traté de pensar en formas en las que podría calzar un mejor mecanismo de dirección en el controlador, cuando se me ocurrió que podía usar todo el controlador como volante.

El stick analógico tiene dos potenciómetros. Uno mide el movimiento vertical y el otro mide el movimiento horizontal. Pone 1,6 V a través de cada uno y mide el voltaje producido en el limpiaparabrisas para determinar cuánto se ha movido la palanca. Esto significa que es posible controlar el movimiento de la palanca alimentando un voltaje particular al pasador del limpiaparabrisas. (más información aquí:

Este mod usa un Arduino para calcular el ángulo a partir de las lecturas del acelerómetro y convertirlo en un movimiento de palanca analógico a través de un DAC. Por lo tanto, debería funcionar con cualquier juego que use el stick analógico como entrada.

Paso 1: Necesitará:

Instrumentos:

  • Soldador
  • Soldar
  • Ventosa de soldadura / trenza
  • Pelacables
  • Un destornillador, tal vez uno Torx dependiendo de los tornillos en su controlador (los míos son de cruceta)
  • Pegamento (preferiblemente no pegamento superfuerte para que se pueda desmontar más tarde)
  • Un adaptador USB a serie para programar el Arduino

Materiales:

  • Mando Xbox 360 (¡duh!)
  • Arduino Pro Mini (o un clon) (preferiblemente 3.3V. Si usa la versión de 5V probablemente necesitará un convertidor de voltaje elevador)
  • Un giroscopio / acelerómetro MPU-6050
  • Un DAC MCP4725 (dos si desea controlar ambos ejes)
  • Un poco de alambre delgado
  • Una placa de pruebas para que pueda probar todo antes de soldar (opcional, pero recomendado)

Paso 2: desmonte el controlador

Desmontar el controlador
Desmontar el controlador
Desmontar el controlador
Desmontar el controlador
Desmontar el controlador
Desmontar el controlador

Hay siete tornillos que debes quitar. Seis de ellos son obvios, pero el séptimo está detrás de una pegatina. Supongo que eliminarlo anula la garantía, así que proceda bajo su propio riesgo. Muchas guías dicen que necesitas un destornillador Torx, pero los míos son de cruceta, así que revisa tu controlador.

Después de eso, levante con cuidado la cubierta trasera. Si hace palanca en el frente, los botones se derramarán y probablemente se esparcirán por toda la habitación. Levántalo desde abajo. Luego desenchufe los dos motores de vibración. (el que tiene el peso pequeño debe estar a la izquierda y el que tiene el peso grande a la derecha) Saque el PCB y quite las tapas de goma de los sticks analógicos. Simplemente se llevan a cabo.

Lo siguiente es quitar la palanca analógica izquierda para que no interfiera con nuestra entrada, pero el mecanismo de disparo izquierdo está en el camino. Para quitarlo, debe desoldar los tres pines del potenciómetro de la parte frontal de la placa, luego desenganchar el mecanismo de la PCB.

A continuación, desoldar los 14 pines que sostienen la palanca analógica izquierda. Luego saca el palo.

Paso 3: pegue los componentes en su lugar

Pegue los componentes en su lugar
Pegue los componentes en su lugar
Pegue los componentes en su lugar
Pegue los componentes en su lugar

Notará que hay bastante espacio libre entre la parte posterior de la PCB y la carcasa. Esto hace posible colocar todo el hardware en la carcasa sin quitar nada.

Solo me di cuenta más tarde, pero este sería un buen momento para desoldar el botón de reinicio en el Arduino. Si no lo hace, presionará la parte posterior de la carcasa y hará que el proyecto deje de funcionar si aprieta demasiado uno de los tornillos al volver a montarlo.

Pegué un pedazo delgado de tarjeta en la parte posterior de cada PCB para aislarlo, luego lo pegué al PCB del controlador. Era reacio a usar pegamento, pero no podía pensar en una mejor manera de hacerlo.

Las posiciones en la imagen es la mejor combinación que pude encontrar. El Arduino está a la izquierda, con el borde con el botón de reinicio al ras contra la pieza de plástico del mecanismo de disparo derecho, con el otro lado debajo del cable y con la esquina lo más cerca posible del conector blanco. Hay un pequeño bulto en el estuche, pero no pude encontrar un lugar mejor para colocarlo.

El acelerómetro está a la derecha del cable. Debe ser lo más plano y recto posible; de lo contrario, es posible que tenga que escribir algún código más tarde para compensar el desplazamiento. Tenga en cuenta que hay algunas piezas de plástico que sobresalen en la parte posterior de la carcasa que debe evitar. Descubrí que puedes poner algo pegajoso y colorido, como lápiz labial, en las piezas de plástico que sobresalen y luego poner la tapa trasera para ver dónde deja marcas.

Los DAC van en la esquina inferior izquierda. Aquí hay suficiente espacio para apilar dos DAC, uno encima del otro, si desea controlar ambos ejes. No es necesario pegarlos. Se quedarán donde están con solo las conexiones soldadas. Si está pegando una tarjeta entre ellos, asegúrese de cortar la tarjeta para dejar SCL, SDA, VCC y GND accesibles, porque accederá a ellos desde ambos lados.

Si usa dos DAC, no olvide cambiar el puente de dirección y deshabilitar las resistencias de extracción en uno de ellos, como se describe aquí: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -guía-de-conexión-del-convertidor

Paso 4: suelde los cables

Suelde los cables
Suelde los cables
Suelde los cables
Suelde los cables
Suelde los cables
Suelde los cables

Ahora tienes que conectar todo. VCC, GND, SDA y SCL de todos los dispositivos 2/3 deben conectarse a VCC, GND, A4 y A5 en Arduino, respectivamente. Los DAC son la parte más complicada. Si tiene dos, debe conectarlos juntos, dejando un lugar donde pueda conectar la energía y las líneas al acelerómetro, mientras mantiene los cables de SALIDA separados.

El pin de SALIDA en el DAC debe estar conectado al pin en la PCB del controlador que solía ser para el pin del potenciómetro horizontal medio para el stick analógico. Es decir, donde estaba el stick analógico, hay una fila de tres pines en la parte superior. Conéctelo al del medio. Si tiene otro DAC, conéctelo al pin del potenciómetro vertical (la fila de la izquierda) de la misma manera. No podrá acceder a los pines desde la parte posterior cuando se reemplace el gatillo, por lo que debe pasar un cable al frente de la placa. Hay una "pared" circular de plástico alrededor del área del stick analógico, pero afortunadamente hay un espacio conveniente en él por el que se pueden pasar los cables. Asegúrese de que los cables no se interpongan en el camino del poste del tornillo en la parte frontal de la caja.

Mi plan original era alimentar el Arduino con los 5V del cable USB conectado al pin RAW, pero cuando lo probé, no funcionó. El Arduino no ejecutó nada, y tanto el Arduino como el controlador se apagaron después de unos segundos. Sin embargo, descubrí que hay una salida constante de 3.3V desde dos pines en la parte frontal de la placa cerca del zócalo periférico negro, presumiblemente para alimentar periféricos. Funciona tanto con VCC como con RAW, pero elegí VCC porque ya tiene el voltaje correcto y porque me permite soldarlo al cable VCC en el DAC que ya está cerca de la parte inferior de la placa y ahorrar en cables.

Tenga en cuenta que hay muchas piezas de plástico que sobresalen de la carcasa y que tiene que solucionar, pero si pega los cables en su lugar, solo tendrá que preocuparse por ellos una vez.

Todo esto es difícil de describir con palabras, así que he incluido imágenes y un diagrama burdo.

Paso 5: programa el Arduino

Ahora tienes que programar el Arduino. Esto requiere mover el cable USB en el controlador para que pueda acceder a los pines seriales del Arduino. Incluí el código que usé. Requiere la biblioteca Adafruit MCP4725, que se puede encontrar aquí:

Tal como está, el código le permite recorrer todo el rango de movimiento de la palanca analógica de manera uniforme moviendo el controlador de 90 grados a la izquierda a 90 grados a la derecha, y mantenerlo en el medio manteniéndolo plano.

Obtiene el ángulo del controlador calculando la tangente inversa de la fuerza g del eje X dividida por la fuerza g del eje Z. Esto significa que funciona si el controlador es vertical, plano o en cualquier ángulo intermedio. (más información aquí:

Funciona en mi controlador, pero otros controladores pueden requerir diferentes voltajes, desalineándolos. Creo que la mejor manera de encontrar el rango de voltaje es mediante prueba y error. Muchos juegos te mostrarán un control deslizante para el movimiento del joystick analógico, pero la forma más precisa que he encontrado para determinar el movimiento es con jstest en Linux. (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) Le da un número entre -32, 767 y 32, 767 en lugar de un gráfico, para que sepa exactamente dónde está el palo. Conecte tanto el controlador como el adaptador Arduino USB a serie, cargue jstest y pruebe diferentes valores de DAC hasta que alcance la parte superior e inferior del rango, y tome nota de cada uno. Para mí fue 1, 593 - 382.

De particular interés es la línea 36:

dacvalue = (controllerangle + 2.5617859169446084418) / 0.0025942135867793503208 + 0.5;

No es inmediatamente obvio lo que hace. Simplemente, toma el ángulo del controlador (medido en radianes y entre ~ 1,57 y ~ -1,57) y lo convierte a un valor entre 1, 593 y 382 para el DAC. Si tiene un rango de DAC diferente, deberá cambiar esa línea.

La línea se puede escribir como:

dacvalue = (controllerangle +) / + 0.5;

Con y siendo los números que necesitas cambiar. es igual al rango del ángulo del controlador (pi) dividido por el rango total de valores DAC. (la parte superior del rango menos la parte inferior del rango) Esto le permite cambiar el voltaje, aunque los resultados estarán fuera del rango que desea. Por eso lo necesitas. es igual a multiplicado por la parte inferior del rango más la mitad del rango de movimiento del controlador. (pi / 2) Agregar la mitad del rango de movimiento asegura que no sea un número negativo, y agregar multiplicado por la parte inferior del rango asegura que esté sincronizado con el rango que desea.

Al convertir los decimales en un número entero, C ++ no se redondea. En su lugar, corta el decimal, por lo que 9.9 se convierte en 9. Al agregar 0.5 al final, se asegura de que cualquier cosa por encima de la mitad vaya al siguiente entero, por lo que se redondea.

Una vez que haya cargado su programa, asegúrese de que funcione con jstest.

Paso 6: vuelva a ensamblar el controlador

Vuelva a armar el controlador de la misma manera que lo desmontó, menos el stick analógico izquierdo. Debería funcionar ahora. Encuentro que no hay un retraso notable y es mucho mejor que usar el stick analógico. Debido a que usa un acelerómetro, se ve afectado por movimientos bruscos, pero tienes que esforzarte para notarlo.

Paso 7: posibles mejoras

Hay algunas mejoras que podrían realizarse. Éstos incluyen:

  • Usar alambre magnético menos engorroso
  • Grabar todo en una placa de circuito impreso que está diseñada para caber en la caja del controlador
  • Vuelva a colocar la palanca analógica izquierda y conecte las patas a las entradas analógicas en el Arduino para que puedan usarse para ajustar el Arduino
  • Obtener la pieza de la carcasa trasera para un controlador inalámbrico y colocar el proyecto en el compartimento de la batería (esto requeriría cortar un orificio para el cable USB)