wusbmote: Adaptateur pour accessoires wiimote à USB



Résumé du projet

Wii-USB

Wii-USB

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

Mode Joystick (Mode par défaut)

Mode souris (Nouveau dans version 1.2)

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: Points faibles:

goto top Retour en haut


Photos

Voici quelques photos du projet et des périphériques supportés:
En développement

En développement

Nunchuk officielle

Nunchuk officielle

Wii MotionPlus

Wii MotionPlus

Manettes classiques officielles

Manettes classiques officielles

Nunchuk clones (Avec et sans fil)

Nunchuk clones (Avec et sans fil)

Adaptateur terminé

Adaptateur terminé



Faites moi parvenir des photos si vous réalisez ce projet! Il me fera plaisir de les ajouter à cette page.

goto top Retour en haut


Schéma

Un microcontrôleur Atmega8 (ou Atmega8a) d'atmel est utilisé. L'horloge est assuré par un cristal de 12mhz.
MCU et USB

MCU et USB

Connecteur Wiimote

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:

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.

goto top Retour en haut


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

Multiuse pcb2

Circuit câblé

Circuit câblé

Schéma de câblage

Schéma de câblage

Connecteur Wiimote

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.

goto top Retour en haut


Logiciel

Fichier(s)DateDescription
wusbmote-1.3.tar.gz (129 KB)
wusbmote-1.3-m8.hex (19.1 KB)
wusbmote-1.3-m168.hex (19.9 KB)
29 Mai 2014 (Jeudi) Meilleure configurabilité:
  • 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.
wusbmote-1.2.1.tar.gz (122.2 KB)
wusbmote-1.2.1-m8.hex (17.2 KB)
wusbmote-1.2.1-m168.hex (17.9 KB)
11 Mai 2014 (Dimanche) Petites corrections:
  • Fonctionne de nouveau sous Windows (Correction des «report descritors»)
  • Ajout d'un Makefile pour la compilation de l'outil de configuration sous Windows.
wusbmote-1.2.tar.gz (111.7 KB)
wusbmote-1.2-m8.hex (17.3 KB)
wusbmote-1.2-m168.hex (18 KB)
4 Mai 2014 (Dimanche) Nouvelles fonctionnalités:
  • Ajout d'un mode souris (Avec la Nunchuk ou manette classique)
    • Défilement (roulette) avec le stick de droite de la manette classique.
    • Défilement par movement et maintient du bouton C appuyé (Nunchuck)
  • La configuration est maintenant enregistrée dans l'EEPROM. Contenu:
    • Numéro de série
    • Mode d'opération (Souris ou Joystick)
    • Paramètres pour le mode souris: Diviseur, Zone morte, Défilement inverse.
  • Configuration modifiable via 'HID Feature report'
  • Ajout d'un outil Linux pour modifier la configuration (Utilise hidapi)
  • Changement de VID/PID USB
  • Mainteant compatible aussi avec l'Atmega168 (Utilisez Makefile.atmega168)
  • Nettoyage du code
wusbmote-1.1.tar.gz (102.7 KB)
wusbmote-1.1.hex (10.8 KB)
26 Avril 2014 (Samedi) Maintenance:
  • Mise à jour de V-USB et ajustements pour les version récentes de GCC
  • Optimisation du code de communication I2C
wusbmote-1.0.tar.gz (81.7 KB)
wusbmote-1.0.hex (11.5 KB)
4 Novembre 2012 Version initiale.
  • Support de la Nunchuk
  • Support de la manette classique
  • Support partiel de la Wii MotionPlus
  • Compatible USB HID
  • Changement de type d'accessoire possible en tout temps.
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

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.

goto top Retour en haut


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:

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.
./wusbmote_ctl -s 1001 --mouse_mode
Setting mouse/joystick mode...command result: 0

Configuration de la souris

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:
sudo ./wusbmote_ctl -s 1001 --mouse_mode
Setting mouse/joystick mode...command result: 0

goto top Retour en haut


Références

Les pages suivantes m'ont été d'une grande utilité pour la réalisation de ce projet.

http://www.hardwarebook.info/Wiimote_Expansion_Port
http://wiibrew.org/wiki/Wiimote/Extension_Controllers
http://wiibrew.org/wiki/Wiimote/Extension_Controllers/Nunchuck
http://wiibrew.org/wiki/Wiimote/Extension_Controllers/Classic_Controller
http://wiibrew.org/wiki/Wiimote/Extension_Controllers/Wii_Motion_Plus

goto top Retour en haut


Avertissement

Je ne saurais être tenu responsable pour les dommages que la mise en œuvre des instructions présentées sur cette page pourraient causer à votre équipement ou à vous-même. Aussi, je ne donne aucune garantie quant à l'exactitude des informations et à leur fonctionnement. Notez toutefois que les procédures ci-haut ont fonctionnées sans aucun problème pour moi.

goto top Retour en haut


Les marques de commerce utilisées dans ce site appartiennent à leurs propriétaires respectifs.
Copyright © 2002-2014, Raphaël Assénat
Site codé avecSite codé avec vimDernière mise à jour: 7 Novembre 2014 (Vendredi)