Contrôleur de jeu USB pour appareil d'exercice : 8 étapes (avec photos)
Contrôleur de jeu USB pour appareil d'exercice : 8 étapes (avec photos)
Anonim
Contrôleur de jeu USB pour machine d'exercice
Contrôleur de jeu USB pour machine d'exercice
Contrôleur de jeu USB pour machine d'exercice
Contrôleur de jeu USB pour machine d'exercice
Contrôleur de jeu USB pour machine d'exercice
Contrôleur de jeu USB pour machine d'exercice
Contrôleur de jeu USB pour machine d'exercice
Contrôleur de jeu USB pour machine d'exercice

Pour encourager l'exercice en soi et en famille, j'ai créé un adaptateur qui émule un adaptateur de contrôleur de jeu USB standard, mais contrôle la vitesse de déplacement du jeu en pédalant sur une machine elliptique ou un vélo d'appartement. C'est particulièrement agréable pour les jeux de course. Cela motive certainement à pédaler vite lorsque l'on joue à des jeux de course.

Le matériel principal est une carte de développement STM32F103C8 "pilule noire" à 2 $ avec le noyau Arduino stm32duino et une bibliothèque USB HID que j'ai développée sur la base de la fourche principale de libarra111. Le STM32F1 est rapide et bon marché et prend en charge l'USB à pleine vitesse, il est donc parfait pour le projet.

Pour l'utiliser, vous devez puiser dans le capteur de rotation du vélo elliptique ou d'exercice (si votre capteur de rotation fonctionne différemment de ceux de nos machines - environ 3v, actif bas - vous devrez peut-être modifier le circuit et/ou le code).

La vitesse de rotation elliptique/vélo contrôle le curseur du contrôleur. De plus, vous branchez un contrôleur Wii Nunchuck ou Gamecube standard dans l'adaptateur pour le mouvement du joystick, les boutons, etc. Il existe de nombreux modes de contrôle différents. Par exemple, les enfants plus petits peuvent avoir besoin d'augmenter un peu leur vitesse, et certains jeux peuvent utiliser un schéma de contrôle différent. Il existe un certain nombre de schémas de contrôle intégrés dans le logiciel, et d'autres peuvent facilement être ajoutés dans le code. L'appareil peut émuler un contrôleur de jeu USB, un clavier, une souris, un contrôleur XBox 360 ou une combinaison des trois premiers.

Le sens du mouvement n'est actuellement pas détecté: pour basculer entre le mouvement avant et arrière, l'adaptateur dispose d'un interrupteur à bascule. (Alternativement, on pourrait utiliser un capteur magnétique à effet Hall comme cet appareil et changer le circuit et le logiciel.)

L'adaptateur fonctionne comme un contrôleur USB standard, vous pouvez donc l'utiliser avec Windows, Linux, OS X, Android, etc.

En prime, l'adaptateur possède toutes les fonctions de ce projet, fonctionnant comme un adaptateur Gamecube complet, vous permettant d'utiliser des contrôleurs Gamecube sur un ordinateur, y compris de contrôler des jeux avec des tapis de danse Dance Dance Revolution compatibles Gamecube/Wii.

Le coût est inférieur à environ 10 $, plus le boîtier (j'ai un design imprimable en 3D), les fils et la soudure. Les pièces:

  • Carte de développement "Black Pill" stm32f103c8 (2 $ sur Aliexpress)
  • Prise Gamecube (1,60 $ sur Aliexpress, pour une rallonge Gamecube qui peut être coupée)
  • Carte de dérivation de prise Nunchuck (0,51 $ sur Aliexpress; recherchez Wiichuck)
  • Petit interrupteur à bascule à deux positions (moins de 1 $ sur Aliexpress)
  • Votre choix de connecteurs mâles et femelles à deux conducteurs (environ 1 $ sur Aliexpress si vous optez pour des connecteurs à barillet d'alimentation de 5,5 mm); vous avez besoin d'un connecteur femelle par appareil d'exercice
  • 2 interrupteurs tactiles (moins de 0,50 $ sur Aliexpress)
  • 4 LED rouges (moins de 0,50 $ sur Aliexpress; vous pouvez également utiliser un petit écran LCD Nokia)
  • condensateurs: électrolytique 10 uF et 100 nF en option
  • résistances: 1 x 100K, 2 x 10K, 1 x 1K, 4 x 220ohm
  • petite carte proto (moins de 1 $ sur Aliexpress).

Un Nunchuck est bon pour une utilisation à une main avec une machine elliptique. Sur un vélo d'appartement, vous pouvez utiliser un adaptateur à deux mains comme celui de la Gamecube. Si vous ne souhaitez utiliser qu'une de ces deux options de contrôle, vous pouvez utiliser moins de connexions.

Vous avez également besoin d'un ordinateur, d'un fer à souder et d'un multimètre. Vous aurez également besoin d'un pont UART vers USB (j'ai utilisé un Arduino Mega que j'avais pour un autre projet; ou vous pouvez acheter un module CP2102 sur Aliexpress pour un dollar) pour installer un bootloader sur votre pilule noire pour l'utiliser avec le Environnement Arduino, ou bien vous pouvez dépenser quelques dollars de plus et obtenir la carte de développement de RobotDyn avec un chargeur de démarrage Arduino préchargé.

Permettez-moi d'ajouter que je participe au concours Wheels, car il s'agit d'un moyen de relier les roues virtuelles des jeux de course automobile sur ordinateur aux roues physiques des vélos d'appartement et des vélos elliptiques.

Étape 1: appuyez sur le capteur de rotation

Appuyez sur le capteur de rotation
Appuyez sur le capteur de rotation
Appuyez sur le capteur de rotation
Appuyez sur le capteur de rotation
Appuyez sur le capteur de rotation
Appuyez sur le capteur de rotation
Appuyez sur le capteur de rotation
Appuyez sur le capteur de rotation

Les deux appareils d'exercice que j'ai piratés ont une console qui affiche la vitesse. Il y a des fils entre la console et le corps de la machine. Vous devez puiser dans ces fils pour accéder aux données. Si vos machines sont comme les miennes, la console peut être retirée, et vous y trouverez soit un câble plat (elliptique) soit deux fils (vélo). J'ai exploité ceux-ci en débranchant les fils et en les reliant avec des cavaliers mâle-femelle individuels dans lesquels je pouvais puiser.

Utilisez des essais et des erreurs et un multimètre pour identifier une paire de fils entre lesquels a une impulsion de tension pendant une rotation complète.

En gros, la perceuse est la suivante: branchez le multimètre à une paire de fils (en faisant attention à ne rien court-circuiter) avec la machine en marche, et faites tourner très lentement les pédales. Dans nos deux machines, il y a une paire de fils entre lesquels la tension est normalement d'environ +3V, mais pendant une courte partie de la rotation, elle tombe à la terre: c'est un schéma actif-bas. Vous constaterez peut-être que votre machine a un schéma actif-élevé où la majeure partie de la rotation est rectifiée et l'impulsion est positive, puis vous devrez modifier le croquis Arduino.

Si vous pensez qu'il y a une chance que l'un des fils de la console avec laquelle vous avez affaire soit sur secteur, je vous recommande de vous arrêter à moins que vous ne sachiez vraiment ce que vous faites. Heureusement, notre vélo d'appartement est alimenté par batterie et notre vélo elliptique se branche sur une verrue murale, il n'y a donc qu'environ 12 V CC autour de la console.

Dans le cas du vélo d'appartement, c'était vraiment facile. Il n'y avait que quatre fils. Deux étaient pour le moniteur de fréquence cardiaque et deux pour le capteur de rotation.

L'elliptique avait beaucoup plus de fils, donc c'était plus de travail. La méthode de la force brute est la suivante. Attachez un multimètre à une paire de fils. Faites lentement une rotation complète (ou un peu plus juste au cas où) sur les pédales et voyez s'il y a une chute ou un saut de tension. Si oui, vous l'avez. Sinon, répétez pour une autre paire. C'est beaucoup d'essais et d'erreurs: pour 13 fils, c'est 78 rotations.

Voici une astuce qui pourrait vous aider à accélérer la recherche de la bonne paire de fils. Vous pouvez espérer que votre machine, comme la mienne, a une tension de détecteur normalement élevée avec une impulsion faible. Si c'est le cas, alors si vous laissez les pédales à un endroit aléatoire, vous avez de bonnes chances que les deux fils du détecteur aient environ +3V ou +5V entre eux. Ne faites donc le test de rotation de la pédale que pour les paires de fils qui ont +3V ou +5V entre eux.

Une autre astuce. Vous pourrez peut-être identifier à quel endroit de la rotation de la pédale le capteur de rotation se déclenche. Par exemple, votre machine peut alors faire clignoter quelque chose à l'écran, mettre à jour l'affichage de la vitesse, s'activer à partir du mode veille ou émettre un bip. Si c'est le cas, éloignez les pédales d'environ 1/3 de rotation, puis recherchez des paires de fils qui ont 3-5 V entre eux, et testez-les en déplaçant les pédales vers la position où le capteur se déclenche.

Si vous pouvez identifier le fil de terre, vous pouvez accélérer considérablement le processus, puisqu'il vous suffit alors d'aller entre la terre et chaque fil inconnu. Curieusement, cependant, sur notre elliptique, la masse de l'alimentation ne semblait pas être la même que la masse du détecteur de rotation.

Une fois que vous avez identifié les fils, notez-les. Assurez-vous de noter:

  • le niveau de haute tension: s'il est supérieur à environ 3,3 V mais pas à plus de 5 V, vous voudrez changer le circuit pour utiliser la broche A9 au lieu de A7 pour la détection de rotation, car la broche A9 a une tolérance de 5 V et pas A7, et modifiez une ligne dans mon croquis; si c'est plus de 5V, vous devrez ajouter un diviseur de tension
  • si l'impulsion de détection de rotation est faible ou élevée: si l'impulsion est élevée, vous devrez modifier une ligne dans mon croquis Arduino.

Si vous avez un oscilloscope et que l'appareil d'exercice est alimenté par batterie, vous pouvez également utiliser l'oscilloscope au lieu du multimètre. (Si l'appareil d'exercice est branché sur secteur et que votre oscilloscope l'est aussi, vous devez connaître les boucles de masse et savoir comment les éviter. Soyez prudent !)

Étape 2: Préparer le conseil de développement

Préparer le conseil de développement
Préparer le conseil de développement
Préparer le conseil de développement
Préparer le conseil de développement
Préparer le conseil de développement
Préparer le conseil de développement

Soudez les six broches du cavalier central sur votre pilule noire.

Si vous avez une carte RobotDyn avec le chargeur de démarrage Arduino, connectez B0- et B1- aux broches centrales, et vous avez terminé avec l'étape.

Sinon, vous devez maintenant installer le bootloader. Vous aurez besoin d'un pont UART vers USB autonome ou vous pouvez utiliser un Arduino Uno ou Mega à cette fin. Bien que la pilule noire fonctionne à 3,3 V, les broches UART tolèrent 5 V, alors ne vous inquiétez pas si votre connecteur fonctionne à 3,3 V ou 5 V.

Si vous avez un Uno ou un Mega, placez un câble de démarrage entre RESET et GROUND. Cela transforme l'Arduino en un pont UART vers USB dédié, sauf que les broches TX/RX sont à l'inverse de ce qu'elles sont habituellement sur un connecteur.

Téléchargez le binaire du chargeur de démarrage. Vous voulez générique_boot20_pb12.bin. Sous Windows, installez le démonstrateur Flash Loader de ST. Sous Linux (et peut-être OS X et même Windows si vous préférez les outils en ligne de commande), utilisez plutôt ce script python, mais mes instructions seront pour Windows.

Effectuez les connexions suivantes:

  • PA9 vers UART bridge RX ("TX" si vous utilisez l'astuce Arduino)
  • PA10 vers UART bridge TX ("RX" si vous utilisez l'astuce Arduino)
  • G à la masse du pont UART

J'aime utiliser des pointes de sonde logique pour effectuer les connexions du côté STM32, mais vous pouvez également simplement souder certains fils que vous pourrez ensuite couper (ou dessouder si vous voulez être soigné).

Connectez votre pont UART à votre ordinateur. Allumez la Black Pill via son port USB (mieux si vous la connectez à un chargeur plutôt qu'à l'ordinateur, car l'ordinateur se plaindra probablement d'un périphérique USB non reconnu). Démarrez le démonstrateur Flash Loader. Choisissez le port COM de votre pont UART. Choisissez "Supprimer la protection" si disponible. Choisissez une version flash de 64 Ko plutôt que 128 Ko. Et téléchargez le binaire du chargeur de démarrage.

Débranchez tout puis déplacez le cavalier de B0+/center à B0-/center. Vous disposez maintenant d'un chargeur de démarrage que vous pouvez utiliser avec l'IDE Arduino.

Étape 3: Préparez Stm32duino dans Arduino IDE

Préparer Stm32duino dans Arduino IDE
Préparer Stm32duino dans Arduino IDE
Préparer Stm32duino dans Arduino IDE
Préparer Stm32duino dans Arduino IDE

Je suppose que vous avez installé le dernier IDE Arduino.

Dans Outils | Conseils | Boards Manager, installez la prise en charge de l'Arduino Zero (il suffit de mettre Zero dans la recherche, de cliquer sur l'entrée trouvée, puis d'installer). Oui, vous ne travaillez pas avec un Zero, mais cela installera le bon compilateur gcc.

Ensuite, téléchargez le noyau stm32duino. Sous Windows, je recommande de télécharger le fichier zip, car lorsque j'ai extrait les fichiers (certes, avec svn), j'ai eu quelques problèmes d'autorisations avec les fichiers du répertoire des outils Windows qui devaient être corrigés. Mettez la branche dans Arduino/Hardware/Arduino_STM32 (vous aurez donc des dossiers comme Arduino/Hardware/Arduino_STM32/STM32F1, etc.) Sous Windows, installez les pilotes en exécutant drivers\win\install_drivers.bat.

Installer ma bibliothèque USBHID: Allez dans Sketch | Inclure la bibliothèque | Gérez les bibliothèques et recherchez USBHID. Cliquez dessus et cliquez sur Installer.

Installer ma bibliothèque GameControllersSTM32: Aller à Sketch | Inclure la bibliothèque | Gérez les bibliothèques et recherchez les GameControllers. Cliquez dessus et cliquez sur Installer.

Étape 4: Circuit

Circuit
Circuit
Circuit
Circuit
Circuit
Circuit
Circuit
Circuit

Ma configuration utilise quatre LED pour indiquer le mode d'émulation actuel en binaire (oui, on pourrait utiliser un écran LCD, mais j'avais des LED qui traînaient quand j'ai construit cela), deux boutons-poussoirs pour changer de mode (et faire d'autres astuces), et un interrupteur à bascule pour changer la direction du mouvement.

De plus, il y a une entrée I2C du Nunchuck et un connecteur vers le contrôleur Gamecube. Si vous ne souhaitez prendre en charge qu'un seul de ces deux, vous pouvez simplement éditer gamecube.h dans l'esquisse et vous épargner quelques soudures.

J'ai utilisé un petit morceau de protoboard pour monter les quatre LED de mode et les deux boutons de changement de mode (haut et bas), ainsi que la résistance de rappel pour les données Gamecube. J'ai apporté 3,3 V au protoboard, mais je n'ai pas eu besoin d'y apporter de la terre, bien que vous puissiez le faire si vous le souhaitez. J'ai utilisé un autre petit morceau de protoboard pour monter le connecteur Nunchuck.

Coupez le câble Gamecube. Vous voulez travailler avec le côté socket, celui sur lequel votre contrôleur va se brancher. Dénudez les câbles pour la connexion.

Effectuez maintenant ces connexions selon le schéma de circuit:

  • Condensateur 10 uF entre 3,3 V et la masse (avec le côté négatif de tout électrolytique à la masse). Cela devrait être aussi proche que possible de la puce, je l'ai donc soudé directement sur la carte de développement plutôt que sur la protoboard. Pour faire bonne mesure, vous pouvez ajouter un 100nF comme je l'ai fait, mais je ne suis pas sûr que ce soit nécessaire.
  • Prise Gamecube #2 -- A6 sur carte stm32
  • Résistance 1Kohm entre la prise Gamecube #2 et 3.3V sur carte stm32 (ou sur protoboard)
  • Prise Gamecube #3 et #4 -- mise à la terre sur la carte stm32
  • Prise Gamecube #6 -- 3.3V sur carte stm32 (ou sur protoboard)
  • LED en série avec une résistance de 220 ohms (ou plus) entre A0 sur la carte stm32 et 3,3 V (extrémité négative (plate) à PA0; extrémité positive à 3,3 V)
  • Répéter avec LED+résistance entre A1 et 3,3V, A2 et 3,3V, et A3 et 3,3V
  • Commutation momentanée entre A5 sur la carte stm32 (mode incrémental) et 3,3V et un autre entre A4 et 3,3V (mode décrément); ce commutateur incrémente le numéro de mode
  • Basculer entre A8 et 3,3 V
  • masse de machine d'exercice -- masse stm32
  • Signal positif de la machine d'exercice - carte stm32 A7 (notez que A7 n'est bon que pour 3,3 V; si votre machine d'exercice est à 5 V, utilisez A9 et modifiez gamecube.h)
  • Masse Nunchuck (étiquetée - sur ma carte adaptateur) -- masse stm32
  • Nunchuck +3.3V (étiqueté +) -- stm32 3.3V
  • Nunchuck SDA (étiqueté D) -- stm32 B7
  • Nunchuck SCL (étiqueté C) -- stm32 B6
  • Résistance 10Kohm entre Nunchuck SDA et 3.3V sur carte stm32
  • Résistance de 10Kohm entre Nunchuck SCL et 3.3V sur carte stm32.

Étape 5: Installer l'esquisse

Installer l'esquisse
Installer l'esquisse
Installer l'esquisse
Installer l'esquisse

Téléchargez mon croquis d'adaptateur USB Gamecube et chargez-le dans l'IDE Arduino. Il y a quelques options à contrôler dans gamecubecontroller.h:

  • remove // devant #define ENABLE_EXERCISE_MACHINE (tout le monde doit faire celui-ci)
  • si vous deviez déplacer la connexion de la machine d'exercice sur A9, remplacez PA7 par PA9 dans la ligne const uint32_t rotationDetector = PA7
  • si le pouls de détection de rotation de votre machine d'exercice est élevé, remplacez #define ROTATION_DETECTOR_CHANGE_TO_MONITOR FALLING par #define ROTATION_DETECTOR_CHANGE_TO_MONITOR RISING
  • si vous ne voulez pas utiliser de Nunchuck, mettez // devant #define ENABLE_NUNCHUCK
  • si vous ne voulez pas utiliser de manette Gamecube, mettez // devant #define ENABLE_GAMECUBE.

Dans l'IDE Arduino, choisissez Outils | Conseil | Série générique STM32F103C.

Appuyez sur le bouton de téléchargement flèche droite. Notez que vous devrez peut-être appuyer sur le bouton de réinitialisation (ou débrancher/brancher) la carte au bon moment si vous obtenez un message indiquant que la carte n'est pas reconnue.

Étape 6: connexion de la machine d'exercice

Connexion de la machine d'exercice
Connexion de la machine d'exercice
Connexion de la machine d'exercice
Connexion de la machine d'exercice
Connexion de la machine d'exercice
Connexion de la machine d'exercice
Connexion de la machine d'exercice
Connexion de la machine d'exercice

Épissure dans une prise pour la connexion de votre appareil d'exercice. Sur notre vélo elliptique, je l'ai soudé, tandis que sur le vélo d'appartement, j'ai pu utiliser des connecteurs dupont mâle et femelle. Sur l'elliptique, j'ai fait un trou sur le côté de la console pour faire passer la connexion. Sur la machine d'exercice, j'ai juste des fils qui en sortent et une petite boîte imprimée en 3D (fichier OpenSCAD) à l'extérieur.

Étape 7: Cas du projet

Cas de projet
Cas de projet
Cas de projet
Cas de projet
Cas de projet
Cas de projet
Cas de projet
Cas de projet

On peut enfermer le projet dans une petite boîte en carton, un contenant tupperware ou un boîtier imprimé en 3D personnalisé. Comme j'ai une imprimante 3D, j'ai opté pour le boîtier personnalisé. Les fichiers OpenSCAD et STL sont ici.

Les pieds sont conçus pour être collés (fonctionne avec de la superglue) au fond et pour y être collés avec des pieds en caoutchouc collants.

J'ai également collé à chaud des attaches auto-agrippantes à la fois sur le boîtier du projet et sur les machines d'exercice.

Étape 8: Utiliser

Utilisation
Utilisation
Utilisation
Utilisation
Utilisation
Utilisation
Utilisation
Utilisation

Les deux boutons peuvent basculer entre jusqu'à 16 modes d'émulation différents (vous pouvez en avoir plus, en fait, mais il n'y a que quatre LED dans le projet pour afficher le numéro de mode). Les modes d'émulation sont définis dans gamecubecontroller.h dans le sketch. Pour la plupart des jeux, vous pouvez utiliser le mode 1, joystick à curseur unifié à 100% de vitesse. Le joystick émulé a un curseur (en fait deux curseurs, mais les deux font la même chose) qui est contrôlé par la rotation de la machine d'exercice. Les boutons et le joystick lui-même sont contrôlés par le contrôleur Gamecube ou le Nunchuck. Sous Windows, certains jeux prennent en charge une manette XBox 360 mais pas une manette USB. Pour ceux-là, utilisez le mode 13 (appuyez sur le bouton bas du mode 1).

Les modes 9 et 10 vous permettent de pédaler plus lentement tout en obtenant une dépression complète du curseur, ce qui est agréable pour les enfants ou pour les appareils d'exercice réglés sur une résistance plus élevée. Vous pouvez également ajuster les vitesses dans exercisemachine.ino.

Il existe de nombreux autres modes d'émulation. Une référence imprimable est incluse dans modelist.pdf avec le croquis.

Lorsque vous pédalez sur l'appareil d'exercice, les LED du projet passent de l'affichage du numéro de mode actuel à la vitesse. Lorsque les quatre voyants sont allumés, votre vitesse est au maximum (le curseur émulé a une extension maximale) - à ce stade, vous n'obtenez aucun avantage dans le jeu à aller plus vite. De plus, la LED bleue de la carte STM32F1 est allumée lorsque tout fonctionne, mais s'éteint lorsque le capteur de rotation se déclenche.

Pour inverser le mouvement, basculez l'interrupteur à bascule de direction sur le boîtier de l'adaptateur.

Sous Windows, exécutez joy.cpl pour calibrer et voir comment les choses fonctionnent. Parce que c'est une nuisance d'avoir à pédaler très vite pour calibrer le joystick émulé, il existe un moyen de tricher pour le calibrage. Sur le contrôleur Gamecube, si vous restez immobile pendant environ 10 secondes, vous pouvez commencer à utiliser les boutons d'épaule pour contrôler les curseurs du joystick émulés. Avec le Nunchuck, pendant que vous maintenez le bouton mode-moins, vous pouvez utiliser le joystick haut/bas pour contrôler les curseurs émulés à la place.

Si vous voulez une interface graphique pour changer de mode d'émulation, sous Windows, l'esquisse inclut mode.py, un script python avec une interface graphique pour changer de mode. Vous pouvez également appeler mode.py dans un fichier batch qui lance un jeu.

Deux jeux que j'ai trouvés très efficaces avec la machine d'exercice sont Toybox Turbos et SuperTuxCart (gratuit).

L'adaptateur comprend également de nombreuses autres fonctionnalités d'émulation. Par exemple, vous pouvez l'utiliser comme un simple adaptateur Nunchuck ou Gamecube Controller, émulant un joystick, un clavier (par exemple, des flèches/WASD) et/ou une souris. Il y a beaucoup de modes répertoriés dans gamecubecontroller.h. Vous pouvez également brancher un pad compatible Gamecube/Wii Dance Dance Revolution et l'utiliser pour jouer à des jeux non conçus pour lui, comme Tetris, pour plus de plaisir et d'exercice.