Contrôleur Xbox 360 Accéléromètre/Gyroscope Mod : 7 étapes
Contrôleur Xbox 360 Accéléromètre/Gyroscope Mod : 7 étapes
Anonim
Contrôleur Xbox 360 Accéléromètre/Gyroscope Mod de direction
Contrôleur Xbox 360 Accéléromètre/Gyroscope Mod de direction

J'ai joué à Assetto Corsa avec ma manette Xbox 360. Malheureusement, la direction avec le stick analogique est très lourde et je n'ai pas la place pour une configuration de roue. J'ai essayé de penser à des moyens de mettre en place un meilleur mécanisme de direction dans le contrôleur, quand il m'est venu à l'esprit que je pouvais utiliser l'ensemble du contrôleur comme volant.

Le stick analogique dispose de deux potentiomètres. L'un mesure le mouvement vertical et l'autre le mouvement horizontal. Il met 1,6 V à travers chacun et mesure la tension produite au niveau de l'essuie-glace pour déterminer de combien le bâton a bougé. Cela signifie qu'il est possible de contrôler le mouvement du manche en appliquant une tension particulière à la goupille d'essuie-glace. (plus d'informations ici:

Ce mod utilise un Arduino pour calculer l'angle à partir des lectures de l'accéléromètre et le convertir en mouvement de stick analogique via un DAC. Par conséquent, il devrait fonctionner avec n'importe quel jeu qui utilise le stick analogique comme entrée.

Étape 1: Vous aurez besoin de:

Outils:

  • Fer à souder
  • Souder
  • Ventouse/tresse de soudure
  • Pince à dénuder
  • Un tournevis, peut-être un Torx selon les vis de votre contrôleur (les miennes sont cruciformes)
  • Colle (de préférence pas de colle super forte pour qu'elle puisse être démontée plus tard)
  • Un adaptateur USB vers série pour programmer l'Arduino

Matériaux:

  • Manette Xbox 360 (duh !)
  • Arduino Pro Mini (ou un clone) (de préférence 3,3 V. Si vous utilisez la version 5 V, vous aurez probablement besoin d'un convertisseur de tension élévateur)
  • Un gyroscope/accéléromètre MPU-6050
  • Un DAC MCP4725 (deux si vous souhaitez contrôler les deux axes)
  • Du fil fin
  • Une planche à pain pour que vous puissiez tout tester avant de souder (facultatif, mais recommandé)

Étape 2: Démonter le contrôleur

Démonter le contrôleur
Démonter le contrôleur
Démonter le contrôleur
Démonter le contrôleur
Démonter le contrôleur
Démonter le contrôleur

Il y a sept vis que vous devez retirer. Six d'entre eux sont évidents, mais le septième est derrière un autocollant. Je suppose que le retirer annule votre garantie, alors procédez à vos risques et périls. Beaucoup de guides disent que vous avez besoin d'un tournevis Torx, mais les miens sont cruciformes, alors vérifiez votre contrôleur.

Après cela, soulevez soigneusement le couvercle arrière. Si vous soulevez le devant, les boutons déborderont et iront probablement dans toute la pièce. Soulevez-le par le bas. Débranchez ensuite les deux moteurs de vibration. (celui avec le petit poids doit être à gauche et celui avec le gros poids à droite) Retirez le PCB et retirez les capuchons en caoutchouc des sticks analogiques. Ils s'en tirent simplement.

La prochaine chose à faire est de retirer le stick analogique gauche pour qu'il n'interfère pas avec notre entrée, mais le mécanisme de déclenchement gauche gêne. Pour le retirer, il faut dessouder les trois broches du potentiomètre de la face avant de la carte, puis déclipser le mécanisme du PCB.

Ensuite, dessoudez les 14 broches tenant le stick analogique gauche. Retirez ensuite le bâton.

Étape 3: Collez les composants en place

Collez les composants en place
Collez les composants en place
Collez les composants en place
Collez les composants en place

Vous remarquerez qu'il y a beaucoup d'espace entre l'arrière du PCB et le boîtier. Cela permet de mettre tout le matériel dans le boîtier sans rien enlever.

Je ne m'en suis rendu compte que plus tard, mais ce serait le bon moment pour dessouder le bouton de réinitialisation de l'Arduino. Si vous ne le faites pas, cela appuiera sur l'arrière du boîtier et le projet cessera de fonctionner si vous serrez trop l'une des vis lors du remontage.

J'ai collé un mince morceau de carte au dos de chaque PCB pour l'isoler, puis je l'ai collé sur le PCB du contrôleur. J'étais réticent à utiliser de la colle, mais je ne pouvais pas penser à une meilleure façon de le faire.

Les positions dans l'image sont la meilleure combinaison que j'ai pu trouver. L'Arduino est sur la gauche, avec le bord avec le bouton de réinitialisation contre le morceau de plastique du mécanisme de déclenchement droit, avec l'autre côté sous le fil et avec le coin aussi près que possible du connecteur blanc. Il y a un léger renflement dans le boîtier, mais je n'ai pas pu trouver un meilleur endroit pour le mettre.

L'accéléromètre est à droite du fil. Il doit être aussi plat et droit que possible, sinon vous devrez peut-être écrire du code plus tard pour compenser le décalage. Notez qu'il y a des morceaux de plastique saillants à l'arrière du boîtier que vous devez faire attention à éviter. J'ai découvert que vous pouvez mettre quelque chose de collant et de coloré, comme du rouge à lèvres, sur les morceaux de plastique saillants, puis mettre le couvercle arrière pour voir où il laisse des marques.

Le ou les DAC vont dans le coin inférieur gauche. Il y a suffisamment d'espace ici pour empiler deux DAC, l'un au-dessus de l'autre, si vous souhaitez contrôler les deux axes. Vous n'avez pas besoin de les coller. Ils resteront là où ils sont avec juste les connexions soudées. Si vous collez une carte entre eux, assurez-vous de couper la carte de manière à laisser SCL, SDA, VCC et GND accessibles, car vous y accéderez des deux côtés.

Si vous utilisez deux DAC, n'oubliez pas de basculer le cavalier d'adresse et de désactiver les résistances de rappel sur l'un d'entre eux, comme décrit ici: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -convertisseur-branchement-guide

Étape 4: souder les fils

Soudez les fils
Soudez les fils
Soudez les fils
Soudez les fils
Soudez les fils
Soudez les fils

Maintenant, vous devez tout connecter. VCC, GND, SDA et SCL de tous les appareils 2/3 doivent être connectés respectivement à VCC, GND, A4 et A5 sur l'Arduino. Les DAC sont la partie la plus délicate. Si vous en avez deux, vous devez les connecter ensemble, tout en laissant un endroit où vous pouvez connecter l'alimentation et les lignes à l'accéléromètre, tout en gardant les fils de sortie séparés.

La broche OUT du DAC doit être connectée à la broche du PCB du contrôleur qui servait auparavant à la broche centrale du potentiomètre horizontal pour le stick analogique. C'est-à-dire que là où se trouvait le stick analogique, il y a une rangée de trois broches en haut. Connectez-le à celui du milieu. Si vous avez un autre DAC connectez-le à la broche du potentiomètre vertical (la rangée à gauche) de la même manière. Vous ne pourrez pas accéder aux broches par l'arrière lorsque la gâchette est remplacée, vous devez donc faire passer un fil à l'avant de la carte. Il y a un "mur" circulaire en plastique autour de la zone du stick analogique, mais heureusement, il y a un espace pratique dans lequel vous pouvez passer des fils. Assurez-vous que les fils ne gênent pas la vis sur la partie avant du boîtier.

Mon plan initial était d'alimenter l'Arduino avec le 5V du câble USB connecté à la broche RAW, mais quand je l'ai essayé, cela n'a pas fonctionné. L'Arduino n'a rien exécuté et l'Arduino et le contrôleur se sont éteints après quelques secondes. Cependant, j'ai découvert qu'il y a une sortie constante de 3,3 V à partir de deux broches à l'avant de la carte près de la prise périphérique noire, probablement pour alimenter les périphériques. Cela fonctionne à la fois avec VCC et RAW, mais j'ai choisi VCC parce que c'est déjà la bonne tension et parce qu'il me permet de le souder au fil VCC du DAC qui se trouve déjà près du bas de la carte et d'économiser sur les fils.

Sachez qu'il y a beaucoup de pièces en plastique qui dépassent du boîtier et que vous devez contourner, mais si vous collez les fils en place, vous n'aurez à vous en préoccuper qu'une seule fois.

Tout cela est difficile à décrire avec des mots, j'ai donc inclus des images et un schéma grossier.

Étape 5: programmer l'Arduino

Maintenant, vous devez programmer l'Arduino. Cela nécessite de déplacer le câble USB sur le contrôleur afin que vous puissiez accéder aux broches série de l'Arduino. J'ai inclus le code que j'ai utilisé. Il nécessite la bibliothèque Adafruit MCP4725, qui peut être trouvée ici:

Tel quel, le code vous permet de parcourir toute la plage de mouvement du stick analogique de manière uniforme en déplaçant le contrôleur de 90 degrés vers la gauche à 90 degrés vers la droite, et de le maintenir au milieu en le maintenant à plat.

Il obtient l'angle du contrôleur en calculant la tangente inverse de la force g de l'axe X divisée par la force g de l'axe Z. Cela signifie que cela fonctionne si le contrôleur est vertical, plat ou n'importe quel angle entre les deux. (plus d'informations ici:

Cela fonctionne sur mon contrôleur, mais d'autres contrôleurs peuvent nécessiter des tensions différentes, ce qui le désaligne. Je pense que la meilleure façon de trouver la plage de tension est par essais et erreurs. De nombreux jeux vous montreront un curseur pour le mouvement du stick analogique, mais le moyen le plus précis que j'ai trouvé pour déterminer le mouvement est avec jstest sur Linux. (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) Il vous donne un nombre entre -32, 767 et 32, 767 plutôt qu'un graphique, afin que vous sachiez exactement où se trouve le stick. Branchez à la fois le contrôleur et l'adaptateur Arduino USB vers série, chargez jstest et essayez différentes valeurs DAC jusqu'à ce que vous atteigniez le haut et le bas de la plage, et notez chacune d'elles. Pour moi, c'était 1 593 - 382.

La ligne 36 est particulièrement intéressante:

valeur dac = (angle du contrôleur + 2,5617859169446084418) / 0,0025942135867793503208 + 0,5;

Ce qu'il fait n'est pas immédiatement évident. Simplement, il prend l'angle du contrôleur (mesuré en radians et compris entre ~1,57 et ~-1,57) et le convertit en une valeur comprise entre 1 593 et 382 pour le DAC. Si vous avez une gamme DAC différente, vous devrez changer cette ligne.

La ligne peut s'écrire:

valeur dac = (angle du contrôleur +) / + 0,5;

Avec et étant les nombres que vous devez changer. est égal à la plage de l'angle du contrôleur (pi) divisée par la plage totale des valeurs du DAC. (le haut de la plage moins le bas de la plage) Cela vous permet de changer la tension, bien que les résultats soient en dehors de la plage souhaitée. C'est pourquoi vous avez besoin. est égal à multiplié par le bas de la plage plus la moitié de la plage de mouvement du contrôleur. (pi / 2) L'ajout de la moitié de la plage de mouvement garantit qu'il ne s'agit pas d'un nombre négatif, et l'ajout multiplié par le bas de la plage garantit sa synchronisation avec la plage souhaitée.

Lors de la conversion des décimales en nombre entier, C++ n'arrondit pas. Au lieu de cela, il coupe la décimale, de sorte que 9,9 devient 9. L'ajout de 0,5 à la fin garantit que tout ce qui dépasse la moitié va à l'entier suivant, donc il arrondit.

Une fois que vous avez téléchargé votre programme, assurez-vous qu'il fonctionne avec jstest.

Étape 6: Remontez le contrôleur

Remettez le contrôleur en place de la même manière que vous l'avez démonté, moins le stick analogique gauche. Cela devrait fonctionner maintenant. Je trouve qu'il n'y a pas de retard notable et c'est bien mieux que d'utiliser le stick analogique. Parce qu'il utilise un accéléromètre, il est affecté par des mouvements brusques, mais vous devez faire tout votre possible pour le remarquer.

Étape 7: Améliorations possibles

Certaines améliorations pourraient être apportées. Ceux-ci inclus:

  • Utilisation de fil magnétique moins encombrant
  • Tout graver sur un seul PCB conçu pour tenir dans le boîtier du contrôleur
  • Remettre le stick analogique gauche et connecter les pattes aux entrées analogiques de l'Arduino afin qu'elles puissent être utilisées pour ajuster l'Arduino
  • Obtenir la pièce arrière du boîtier pour une manette sans fil et mettre le projet dans le compartiment à piles (cela nécessiterait de découper un trou pour le câble USB)