Cette fois, j'ai décidé de créer un adaptateur permettant d'utiliser
des manettes récentes, c'est à dire du genre encore vendues dans les grand magasins,
à l'état neuf, et non, pas dans les fameux paniers en fil de fer bourrés d'articles offerts
au quart du prix initial. (Que de trésors peut-on y trouver.. mais enfin.)
Caractéristiques
Changement de type d'accessoire possible en tout temps.
Périphérique USB HID standard. Pilote non requis pour la plupart des systèmes d'exploitation. Fonctionne sous Linux, Windows 7, 8, 8.1, et bien d'autres.
Mode Joystick (Mode par défaut)
Support de la Nunchuk, version officielle et clones. Pleine résolution (8 bits pour le joystick XY, 10 bits pour les 3 accéléromètres)
Support de la Manette classique, versions officielles (RVL-005, RVL-005(-02)) et clones (comme la HORI Battle pad pour Wii U). Par défaut, le slider analogique L est déactivé. Il est possible d'alterner entre un slider L actif/inactif en gardant le bouton HOME enfoncé pendant 3 secondes.
Support partiel de la Wii MotionPlus. Le raccord de périphérique à la MotionPlus n'est pas possible. Les mesures de roulis, tanguage et lacet sont réduites pour pouvoir être transmises sous 10 bits. Cela en limite donc très sévèrement la précision et l'utilité.
Mode souris (Nouveau dans version 1.2)
Note: Ce mode doit être activé en utilisant l'outil de configuration.
Support de la Nunchuk, version officielle et clones.) Joystick: Pointeur. Défilement effectué en appuyant le bouton C pendant le déplacement du pointeur.
Support de la Manette classique, versions officielles (RVL-005, RVL-005(-02)) et clones. Joystick de gauche: Pointeur. Joystick de droite: Défilement.
Configurable: Diviseur (contrôle de la vitesse), Zone morte, seuil pour le défilement, inversion du sens de défilement.
Applications
L'utilité de la manette classique ne fait pas de doutes. C'est pratiquement une manette de Playstation.
Mais qu'en est-il de la Nunchuk? Ne comportant que deux boutons et un joystick, je n'étais pas certain.
Mais en testant, j'ai rapidement réalisé qu'elle est parfaite pour des jeux simples à la master system ou à la NES.
Points forts de la Nunchuk:
Fonctionne très bien comme souris.
Il est possible de jouer d'une seule main. L'autre se libère donc pour déguster quelque chose ou manipuler son portable tout en surveillant le jeu distraitement (surtout lors du "grinding" dans les RPG).
Ne pas être contraint à utiliser ses deux mains permet l'adption de postures traditionellement
impossibles ou difficiles telles que jouer le bras détendu le long du corps, pendant sous le siège, ou
encore en s'appuyant la tête sur l'autre main.
Jouer n'importe quelle main est possible.
Points faibles:
Deux boutons sont souvent insuffisants. Heureusement pour les jeux NES, les boutons manquants, start et select, ne sont pas souvent utilisés en plein jeu. Il n'est donc pas trop incommode d'y accéder par le clavier à l'occasion.
Les accéléromètres ne sont pas très utiles pour le moment.
Voici quelques photos du projet et des périphériques supportés:
En développement
Nunchuk officielle
Wii MotionPlus
Manettes classiques officielles
Nunchuk clones (Avec et sans fil)
Adaptateur terminé
Faites moi parvenir des photos si vous réalisez ce projet! Il me fera plaisir de les ajouter à cette page.
Schéma
Un microcontrôleur Atmega8 (ou Atmega8a) d'atmel est utilisé. L'horloge est assuré par un cristal de 12mhz.
MCU et USB
Connecteur Wiimote
Alimentation 3.3v
Une source de 3.3 volt est nécessaire pour l'alimentation de la manette et pour les résistances R4 et R5 du schéma ci-dessus.
Un régulateur de voltage abaissant la tension d'USB 5v à 3.3v peut être facilement réalisé en utilisant le populaire circuit
intégré LM317 tel que suggéré pour le projet de manettes N64/Gamecube à USB:
http://www.raphnet.net/electronique/gc_n64_usb/index.php#2
Connecteur Wii
Il y a plusieurs options:
Utiliser une rallonge. (Beaucoup d'options sur eBay, et très économique)
Utiliser le connecteur d'une manette Wiimote endomagée. (Parfois sur eBay en cherchant "broken wiimote" par exemple)
Ne pas utiliser de connecteur. Couper le câble de la manette Nunchuk / Classique. (Recommandé si le circuit est assemblé/installé à l'intérieur de la manette)
Important: Je ne précise pas la couleur des conducteurs dans les rallonges Wiimote car cela varie d'un
manufacturier à l'autre. Vous devez absolument déterminer le code de couleur de vos câbles en utilisant un
testeur de continuité pour réaliser un tableau tel que ci-dessous qui clarifiera ensuite les raccords.
Très important: Ne vous fiez pas aux couleurs de fils indiquées dans l'exemple ci-dessus. Désolé d'insister,
mais c'est que s'y fier aveuglément peut résulter au mieux en un montage non-fonctionnel et au pire à des
dommages permanents à votre matériel (Manette, PC, Maison?). Quoi qu'il advienne, je ne serai pas tenu responsable.
Et le bouclier du câble?
Le bouclier devrait être raccordé au GND.
Circuit imprimé
Comme c'est souvent le cas, j'ai utilisé mon circuit
multiuse pcb2 qui est fait
pour acceuillir un Atmega8 et les composantes liées à cette implémentation
USB.
Multiuse pcb2
Circuit câblé
Schéma de câblage
Connecteur Wiimote
La couleur des fils dans la deuxième image ci-dessus a été volontairement désaturée car tel que déjà énoncé dans la section schématique, il est n'est pas prudent de s'y fier aveuglément.
Création d'une interface de configuration séparée (HID-Generic). Ceci permet d'envoyer des commandes de configuration à l'adaptateurs sous Windows, même en mode souris.
Mise à jour de l'outil de configuration suivant les changements énoncés ci-dessus.
Implémentation d'un mode « Interface I2C » (utilse pour accéder directement aux manettes et pour de l'expérimentation générale. Referez-vous au répertoire i2c_tool/ pour un exemple.
Ce projet est aussi disponible sur GitHub! Pour suggérer de nouvelles fonctionnalités, signaler un problème ou contribuer au projet,
vous pouvez m'écrire ou utiliser le dépôt GitHub: https://github.com/raphnet/wusbmote
Code source:
Le code source est rendu publique sous la license GPL version 2. Voir
License.txt pour plus d'information. Le projet se compile avec avr-gcc.
Utilisation des fichiers .hex
Atmega8: Les fichiers *-m8-*.hex ou les .hex avant la version 1.4 sont pour programmer un Atmega8. Les "fuses bytes" pour l'atmega8 sont:
high_byte=0xc9 low_byte=0x9f.
Atemga168: Les fichiers *-m168-*.hex sont pour programmer un Atmega168. Les "fuses bytes" pour l'atemga168 sont: high=0xdd, low=0xd7, extended=0x01
Pour de l'information sur la programmation d'un AVR, visitez ma page sur la
programmation d'AVR
Fonctionalité USB:
J'ai construit mon adaptateur en utilisant le microcontrôleur ATmega8 d'Atmel.
Ce microcontrôleur ne supporte pas USB nativement alors j'ai utilisé le
pilote USB logiciel-seulement
V-USB.
Combinaison Vendor ID/Product ID USB:
Veuillez ne pas réutiliser ma combinaison VID/PID pour des projets dérivés
ou autres. Obtenez-en un vous-même.
Configuration
Un outil de configuration est fourni avec les sources sous le répertoire tool/. Pour l'instant je ne
l'ai compilé que sur Linux, mais comme hidapi est aussi
compatible avec Windows et Mac OS X, il devrait être possible de l'utiliser sous ces systèmes d'exploitation également.
Notez:
Les ajustements effectués avec cet outil seront stockés dans l'adaptateur. Aux branchements suivants, les mêmes paramètres
seront effectifs.
Cet outil ne fonctionne pas avec les anciennes version (avant 1.2).
Aide
$ wusbmote_ctl --help
./wusbmote_ctl [OPTION]... [COMMAND]....
Control tool for WUSBmote adapter. Version 1.1.1
Options:
-h, --help Print help
-l, --list List devices
-s serial Operate on specified device (required unless -f is specified)
-f, --force If no serial is specified, use first device detected.
Configuratin commands:
--set_serial serial Assign a new device serial number
--mouse_mode Put the device in mouse mode
--joystick_mode Put the device in joystick mode
--mouse_divisor val Set the mouse rate divisor (Higher = slower). Typ: 4
--mouse_deadzone val Set the deadzone for mouse mode. Typ: 5
--scroll_joystick_invert val Invert joystick scrolling direction. (0 = normal, 1 = inverted)
--scroll_nunchuck_invert val Invert scroll direction (0 = normal, 1 = inverted)
--scroll_nunchuck_threshold val Set the nunchuck roll threshold for scrolling. Typ: 127
--scroll_nunchuck_step val Set the scroll step size (Higher = more scrolling). Typ: 5
--scroll_nunchuck_c val Enable/disable scrolling by move + C. (1 = enable, 0 = disable)
--scroll_nunchuck_c_threshold val Stick deflection threshold for scrolling. (Typ: 64)
Exemple: Listing des adaptateurs
Chaque adaptateur possède un numéro d'identification qui est utilisé lors de la
configuration. Cela permet de configurer un adaptateur spécifique, même si
plusieurs adaptateurs sont présents. La commande de listing permet d'obtenir
ces numéros.
Dans le cas où vous n'auriez qu'un adaptateur, vous pouvez simplement utiliser l'option --force qui
fera agir l'outil sur le premier adaptateur (et donc le seul) de la liste.
$ ./wusbmote_ctl -l
Simply listing the devices...
Found device 'WUSBmote_v1.2', serial '1001'
1 device(s) found
Activer le mode souris
Par défaut, l'adaptateur fonctionne en mode joystick. Le mode souris doit donc être activé. Notez
que vous devrez utiliser le numéro de série correspondant à votre adaptateur. (Voir listing des périphériques
ci-dessus) Note: Lorsque qu'on bascule entre le mode souris et joystick, il est nécessaire de débrancher et rebrancher l'adaptateur
par la suite.
Si la souris est trop rapide (ou lente), il est possible d'en modifier la vitesse via l'option --mouse_divisor.
Si le pointeur bouge tout seul lorsque le joystick est au centre, augmentez la zone morte avec --mouse_deadzone. Idéalement,
gardez cette valeur aussi bas que possible pour un meilleur contrôle. Sachez également que comme la zone morte est calculée
après l'ajustement d'échelle (--mouse_divisor), plus le diviseur est grand, plus la zone morte requise devient possible.
Permissions sous Linux
Généralement, il ne sera pas possible par défaut de configurer le périphérique en tant qu'usager normal:
./wusbmote_ctl -s 1001 --mouse_mode
Error opening device. (Do you have permissions?)
Une solution rapide consiste à utiliser l'usager root via sudo:
Je ne saurais être tenu responsable pour les dommages
que l'utilisation des informations ou la mise en œuvre des instructions présentées
sur cette page pourrait causer à votre équipement,
à vous-même ou à autrui. Aussi, je ne donne aucune garantie quant
à l'exactitude des informations et à leur fonctionnement.