J'ai récemment conçu deux joysticks (voir ici https://www.checksix-forums.com/viewtop ... 6&t=220259) et pour ce faire j'ai dû faire pas mal de recherches sur les capteurs pour joystick et les cartes de contrôle. Je vous en livre une version résumée ici si quelqu'un veut se lancer dans l'aventure.
PS : ceci n'est pas un tutoriel d'électronique. Si vous ne savez pas ce qu'est un ADC, un microcontrôleur… je vous invite à vous renseigner avant

Le carte de contrôle
Vous pouvez programmer vous-même votre carte de contrôle, en utilisant une Raspberry Pi Pico (https://www.raspberrypi.com/products/raspberry-pi-pico/) par exemple. La Raspberry Pi Pico offre, pour un prix inférieur à 10€, un grand nombre (23) d'entrées numériques et 3 entrées analogiques (ADC 12 bits). Elle est compatible avec (presque) n'importe quel capteur (puisque c'est à l'utilisateur de la programmer) et vous pouvez ajuster le comportement du joystick comme vous le souhaitez. En plus la Raspberry Pi Pico embarque un microcontrôleur ARM véloce (beaucoup plus que les Atmel des anciennes Arduino), tout en étant compatible avec l'outil de développement Arduino IDE.
Une librairie très facile à utiliser permet de transformer la Rasberry Pi Pico en joystick : https://gitlab.com/realrobots/PicoGamepad
Attention toutefois : c'est un microcontrôleur 3.3V, il faudra donc prendre des précautions (un convertisseur de niveaux logiques par exemple) pour pouvoir le relier à des capteurs alimentés en 5V.
Le principal inconvénient de la Raspberry Pi Pico c'est son facteur de forme (elle est assez longue) et son interface (elle utilise un port micro USB). Je lui préfère une alternative quasi identique, la carte Micro RP2040 https://shop.sb-components.co.uk/products/micro-rp2040
Elle fonctionne pareil, elle est plus petite et elle utilise un port USB-C plus commun donc elle est parfaite !
Les capteurs
Pour mesurer la déflexion du manche il vous faudra un ou des capteurs. Je vais diviser les capteurs en deux catégories : les capteurs à sortie analogique et les capteurs à sortie numérique.
Je fais l’hypothèse que vous interfacerez ces capteurs avec un microcontrôleur 3.3V doté d’ADC 12 bits.
Capteurs analogiques
Leur sortie se branche sur l'entrée analogique d'un microcontrôleur (reliée à un ADC) qui convertira la tension en code binaire. La résolution du capteur dépendra alors de la plage de variation en tension de la sortie pour le débattement angulaire considéré. (Voir ci-dessous pour des exemples).
Le potentiomètre
Le potentiomètre est probablement le plus courant des capteurs sur les joysticks « bas de gamme » (probablement car historiquement ce fut le premier capteur à être utilisé dans les joysticks). Un potentiomètre c'est un pont diviseur de tension dont vous modifiez la résistance en tournant l'axe pour changer la tension de sortie. Généralement il varie de ~0V à ~3.3V (si 3.3V est la tension d'alimentation) sur un tour (il existe des potentiomètres multi-tours mails ils ne sont généralement pas adapté pour un joystick). Son principal défaut est qu'il s'use avec l'utilisation et que donc la qualité du joystick va se dégrader au cours du temps. En plus il y a sur le marché une quantité astronomique de potentiomètres de basses qualité (mais pas chers !) qui dès le départ donneront de piètres résultats. Il faudra compter entre 1€ et 10€ par potentiomètre selon la qualité et la quantité commandée.
Pour un joystick vous aurez généralement besoin d'un potentiomètre rotatif, linéaire à un tour avec une résistance de l'ordre de 10k Ohm. Avec un ADC 12 bits, pour un débattement angulaire de +/- 18° cela vous donnera 410 pas d'environ 0.09° (c'est la précision théorique avec un ADC parfait et un potentiomètre parfait, ça n'est pas ce que vous obtiendrez en pratique, mais ça permet de comparer). Les potentiomètres existent en plusieurs tailles et longueurs d’axe mais ils sont la plupart du temps facile à intégrer (vissable sur panneau ou soudable en traversant).
Les capteurs à effet Hall
Le SS49E de chez Honeywell
https://automation.honeywell.com/fr/fr/ ... sensor-ics
C’est probablement le plus facile à trouver et le moins cher (on peut les trouver pour 10€ les 20). Ce capteur délivre une tension analogique qui varie en fonction de la proximité avec le pôle négatif ou positif d'un aimant. Lorsqu’il est proche du pôle négatif la tension se rapproche de 1V et lorsqu’il est proche du pôle positif la tension se rapproche de 2.3 V (si le capteur est alimenté en 3.3V).
C’est un petit capteur pas cher et facile à souder (grâce à son packaging TO-92 traversant) mais difficile à intégrer proprement dans un montage. J’ai vu 2 façons de l’installer : à chaque fois avec 2 aimants.
Ce capteur s’utilise avec des aimants à magnétisation axiale (voir https://www.neomagnete.de/fr/sens-de-magnetisation).
Dans le premier cas il est installé entre deux aimants et les aimants tournent autour du capteur. La variation totale de tension est assez faible (en tout cas lorsque j’ai fait l’essais). Mon test a mesuré une variation de 98 pas pour une rotation de +/- 18° donc une résolution de ~0.4°. Le capteur doit être monté de sorte que le centre de sa zone de mesure soit exactement au centre de l’axe de rotation et les aimants doivent tourner précisément autour du capteur pour obtenir un résultat fiable.
Deuxième cas : le capteur est monté entre deux aimants qui rapprochent linéairement en fonction de la déflexion (par exemple avec un mécanisme qui transforme la déflexion angulaire en déplacement linéaire). Il est alors possible théoriquement d’obtenir une variation de la tension de 1.3 V (la tension d’alimentation moins 2V) pour n’importe quel débattement angulaire. En théorie, cela donnerait une variation de ~1614 pas et donc une résolution de 0.02°. MAIS ! La qualité de la mesure va beaucoup dépendre de la qualité du montage. Par exemple, les aimants ne doivent jamais se trouver trop loin du capteur sinon il y aura une zone morte importante.
Bref, ce capteur n’est pas le plus facile à utiliser.
Le KMZ41 de NXP
https://www.nxp.com/part/KMZ41
Attention c’est un capteur alimenté en 5 V !
C’est un capteur analogique de rotation. Il s’utilise avec un aimant à magnétisation diamétrale, plus difficile à trouver.
Ce capteur sort 2 tensions (4 bornes de sortie en +/-) en fonction de l’angle de rotation. L’une proportionnelle au cosinus de l’angle de déflexion et l’autre au sinus de l’angle de sorte qu’à une fonction atan2 prés on puisse retrouver l’angle de rotation sur 360°. Ces tensions sont de 82 mV pique donc avant de les exploiter il faudra les amplifier. En pratique le débattement maximal d’un joystick n’est jamais supérieur à 90° donc on pourra se contenter de ne brancher qu’une seule des deux tensions sur un amplificateur.
C’est le montage utilisé à ma connaissance sur les capteurs MagRez de GVL24 https://gvl224.com/magrez.php
Sur 12 bits et pour un débattement de +/- 18° cela donnera théoriquement 1638 pas d'environ 0.02° (pour peu que l’on ait correctement amplifié la sortie pour correspondre à la pleine échelle de l’ADC en 3.3V).
Attention ce capteur est en fin de vie (EOL) et donc il pourrait devenir difficile à trouver.
Je n’ai pas testé ce capteur.
Les capteurs numériques
Les encodeurs rotatifs
Il est possible d’utiliser un encodeur rotatif mais ces capteurs sont souvent chers et difficile à utiliser (lorsqu’ils ont une résolution suffisante pour l’utilisation en tant que joystick). Personnellement je les utilise pour l’axe des gaz avec des encodeurs à 24 impulsions par tour (la précision n’est alors pas un problème) où chaque impulsion est une variation des gaz par 2% (donc ~4 tours pour aller de 0 à 100%). Ils sont relativement faciles à intégrer car la plupart peuvent se visser sur un panneau ou se souder de façon traversante. Un encodeur à 24 impulsions par tour bas de gamme vous coutera ~1€ l’encodeur.
Les capteurs à effet Hall
Ces capteurs sont la combinaison d’un ou de plusieurs capteurs analogiques décrits ci-dessus mais ils intègrent en plus les ADC nécessaires pour fournir directement au microcontrôleur une valeur d’angle, par l’intermédiaire d’une liaison SPI ou I2C.
L’AS5600 de AMS OSRAM
https://ams-osram.com/products/sensor-s ... ion-sensor
C’est sans doute celui que j’ai trouvé le plus facilement. Attention toutefois à bien acheter le capteur avec son aimant magnétisé diamétralement car sinon c’est la croix et la bannière pour en trouver ! Il ne coûte pas très cher (~4€ par capteur sur son PCB) mais il y a quelques subtilités à connaître.
D’une, les bibliothèques Arduino qui permettent de l’utiliser facilement sont toutes en développement ce qui signifie qu’il faudra parfois bricoler un peu le code.
Deuxièmement tous les capteurs ont la même adresse sur le bus I2C. Pour en utiliser plusieurs il faudra donc avoir recours à un multiplexeur I2C ce qui ajoute une couche de complexité.
Cela s’explique par l’utilisation théorique prévue pour ce capteur. Il a été conçu dans le but de remplacer les potentiomètres analogiques et donc la liaison I2C n’est prévue que pour programmer le capteur en usine. Il dispose donc d’une sortie analogique en plus de la connexion en I2C mais je vous la déconseille car c’est en fait un DAC qui génère cette sortie analogique. Si vous utilisez la sortie analogique vous aurez une chaîne d’acquisition qui ressemblera à ceci :
capteur analogique embarqué=> ADC 12 bits embarqué => DAC 12 bits embarqué => ADC 12 bits du microcontrôleur
Bref, pas mal de sources de bruits en perspectives.
Par ailleurs, la datasheet propose de régler la plage angulaire de mesure pour améliorer la précision. C’est en réalité un peu trompeur comme description. La seule chose que fait ce réglage (c’est ce que je constate dans mes tests) est de multiplier la valeur mesurée par l’ADC embarqué pour que la variation de la sortie analogique aille de 0V à 3.3V sur la plage angulaire programmée. Mais donc la plus petite différence mesurable est la valeur de la multiplication et donc il n’y a aucun gain de résolution.
La variation sera théoriquement de ~410 pas pour un débattement de +/- 18° soit une résolution de 0.09°. Mes tests montrent que j’atteins bien cette précision en pratique. Par ailleurs, malgré la datasheet un peu trompeuse et les librairies en développement, j’ai quand même pu l’utiliser relativement facilement. Je trouve que c’est donc un plutôt bon choix.
Les TLE5010 & 5011
https://www.infineon.com/cms/en/product ... s/tle5011/
Attention c’est un capteur alimenté en 5 V !
Ces capteurs ne sont plus produits mais se retrouvent souvent sur des PCB vendus par AliExpress ou Ebay (compter de 5 à 10€ par capteur). Sur le principe ils fonctionnent comme l’AS5600 (mesure d’un angle de rotation avec un aimant à magnétisation diamétrale) mais les calculs pour passer des composantes X & Y du champs magnétique (mesurées par le capteur) sont à faire sur la carte de contrôle. Rassurez-vous, plusieurs librairies sont disponibles pour exploiter ces capteurs qui se chargent pour vous. La liaison est une liaison SPI. En théorie, après calculs, le résultat est donné sur 16 bits pour une rotation complète soit ~6554 pas pour un débattement de +/- 18° et donc une résolution de 0.005°. En pratique, vue que les sorties du capteur ne vont pas au-delà de +/- 23 230, je pense que cette résolution n’est pas atteinte.
Je n’ai pas testé ce capteur.
Le MLX90333
https://www.melexis.com/en/product/mlx9 ... og-pwm-spi
Ce capteur, monté sur PCB, se trouve pour environ 7€ pièce sur Ebay et AliExpress.
De toute ma liste c’est le seul à lister explicitement le joystick comme application. On pourrait donc penser que c’est le capteur le plus adapté pour cela, non ?
En pratique c’est un peu plus compliqué. Ce capteur dispose de deux sorties analogiques et d’un bus SPI mais ce dernier est un peu particulier et en pratique, sans le kit de développement, est inutilisable. Vous devrez donc utiliser ce capteur dans sa configuration par défaut. Dans cette dernière, chaque sortie analogique correspond à un angle de déflexion (donc sur un joystick à 2 axes, une pour X et l’autre pour Y). La sortie varie de 0 à 3.3V pour une rotation de 180° donc la variation sera théoriquement de ~820 pas pour un débattement de +/- 18° soit une résolution de 0.04°.
Jusque-là tout va bien alors pourquoi ai-je des réserves sur ce capteur ? Mes réserves sont liées à la méthode de mesure : ce capteur détermine dans quelle direction se trouve l’aimant (magnétisation axiale) et la traduit par deux angles : alpha et beta. Ces angles ne correspondent à la déflexion du joystick que si le capteur se trouve au milieu du cardan (au centre de rotation des 2 axes mesurés). Il est théoriquement possible de le positionner ailleurs mais cela implique de configurer des registres internes via le bus de communication SPI, inutilisable sans le kit de développement (c’est une variante du bus SPI qui n’utilise qu’un fil pour MOSI et MISO). Ce positionnement du capteur est assez problématique à la conception de la mécanique du cardan. De plus il y a du cross-talk entre les deux mesures : un mouvement pur sur un axe entrainera une variation parasite sur l’autre sortie ce qui oblige à mettre une zone morte assez large. Les mesures sont aussi assez bruitées donc il vous faudra filtrer (beaucoup).
Bref, je le déconseille.