P35 Hack-a-Wii : Emulation de wiimote pour rendre la Wii accessibles aux personnes handicapées

De Wiki de Projets IMA
Révision datée du 20 février 2015 à 22:13 par Fviolier (discussion | contributions) (Étape 1 le contrôle des boutons)


Emulation de wiimote avec une kinect



Informations générales

Page de wiki du projet Hack-a-Wii : Emulation de wiimote pour rendre la Wii accessibles aux personnes handicapées

Étudiant Fabien Violier

Tuteur Laurent Grisoni

Contexte : Dans un contexte de handicap physique et/ou mental, des éducateurs utilisent la Wii comme exercice ludique. Cependant, certains utilisateurs ont des difficultés motrice a se servir de la manette de la Wii la WiiMote.

But : Afin de palier à ces problèmes de motricité, il a été proposé de passer par l'utilisation d'une kinnect et de l'émulation d'une WiiMote. Au vue de la période relativement courte allouer au projet, seul la partie émulation de la WiiMote sera abordée.

Présentation générale du projet


Le principe du projet est de se servir d'une kinnect pour jouer sur une Wii afin de palier des problèmes de motricité chez des utilisateurs handicapés.
Le schéma d'une manette de jeu se décomposerai comme suit :
PFE prez du projet global.png

Dans la suite de cette page, il ne sera uniquement question du contrôle de la WiiMote. L'organisation de cette page est relativement chronologique et suit 2 parties principales causées par l'impossibilité de poursuivre la première partie

Partie 1 : émulation d'une WiiMote via des modules Bluetooth semaine 1 et 2

Prise en main du Bluetooth, découverte des modules Bluetooth

Lors de la première réunion du projet, nous avons décidé d'explorer les différents modules Bluetooth usuellement piloté par un plateforme Arduino. Nous avons choisi cette piste car l'Arduino nous permet un contrôle plus "bas niveau" et permettrai un panel de configuration du Bluetooth plus large. L'idée étant de reproduire une WiiMote et d'envoyer les mêmes messages que celle-ci.
Afin que l’illusion soit complète et qu'il n'y ai pas de problème de connexion entre cette reproduction de WiiMote et la Wii, il faut avoir accès à un large panel de configuration comme :

  • le nom
  • l'adresse MAC
  • le code PIN
  • la "Class Of Device" (COD)
  • ...

Au vue de l'état de l'art actuel dans le domaine, les éléments de configuration indispensable à la connexion n'ont pas pu être listé.

Les modules Bluetooth

Le Module série simple d'utilisation
module basic

Ce module permet d'établir une liaison série facilement. Il n'y a pas de configuration possible.
Ce module ne répond dons pas à nos besoin. Nous l'avons rapidement abandonnée pour un module offrant d'avantage de configuration.

Le module HC 06
module HC 06

Ce module permet d’établir une communication série simple, la configuration est rapide et simple. Il n’est cependant pas possible de configurer entièrement le module.
Pour configurer le module, on utilise les commandes AT. Attention toutefois à la tension d’entrée sur la broche Rx, le module accepte du 3.3V il est donc recommandé de faire un pont diviseur de tension sur cette broche.
Le protocole de configuration est le suivant : (pour ce module il ne faut pas envoyer de retour charriot « \r\n », entre chaque commande il est recommandé d’attendre 2secondes.

Emission : AT
Attente
Réception : OK

Il est possible de changer le nom du périphérique, le code PIN ainsi que la vitesse de communication, par défaut la vitesse est de 9600BAUD, cette vitesse resterai utilisable peu importe la vitesse choisie.
Changer le nom : AT+NAMEnomduperipherique
répond OKsetname
Changer le code pin : AT+PINxxxx
répond OKsetpin
Changer la vitesse de transmission : AT+BAUDx ‘x’ allant de 1 à 9
1 correspond à 1200BAUD
4 correspond à 9600 BAUD
Ce module n’est donc pas adaptée à l’émulation d’une wiimote celui-ci n’offrant pas suffisamment de personnalisation du module.

Le module HC 05
module HC 05

Ce module permet d’établir une communication Bluetooth. Ce module permet aussi un large panel de configuration possible. On configure ce module en utilisant des commandes AT.
Le protocole est le suivant : On envoie une commande AT\r\n à une vitesse de 38400 BAUD, La pin « KEY » du module doit être mise à VCC. Le module accepte du 0-5V.
Suite à l’envoie de la commande AT\r\n le module répond OK.

Configuration de la WiiMote

Après avoir connecté la WiiMote à un ordinateur sous linux, l'appel de la fonction hidtools info nous renvoie les informations suivantes.

BD Address:  00:24:1E:B8:87:6F
Device Name: Nintendo RVL-CNT-01
LMP Version: 2.0 (0x3) LMP Subversion: 0x31c
Manufacturer: Broadcom Corporation (15)
Features: 0xbc 0x02 0x04 0x38 0x08 0x00 0x00 0x00
  	 <encryption> <slot offset> <timing accuracy> <role switch>
  	 <sniff mode> <RSSI> <power control> <enhanced iscan>
  	 <interlaced iscan> <interlaced pscan> <AFH cap. slave>

Le site internet wiibrew.org/wiki nous apporte des informations complémentaire sur la configuration

Wii Remote/old Wii Remote Plus
Name Nintendo RVL-CNT-01
Vendor ID 0x057e
Product ID 0x0306
Major Device Class 1280
Minor Device Class 4
Service Class 0
(Summary of all Class Values) 0x002504

Configuration des modules

J'ai essayé de configurer les modules de façon a imiter une WiiMote. Voici la configuration que j'ai utilisé pour le module HC 05.

AT+NAME=Nintendo RVL-CNT-01\r\n nom du module
AT+BIND=0024,1E,B8876F\r\n adresse mac du module
AT+CLASS=2504\r\n (source [1] )
apparaît en manette de jeu lors de la connexion au pc
AT+ROLE=0\r\n (par défaut) slave
AT+PSWD=1234\r\n code PIN du module
AT+CMODE=1\r\n (défaut) le périphérique se connecte sur n'importe quelle adresse

Cette configuration n'a pas permis d'établir une connexion entre la Wii et notre système.
Le site wiibrew.org/wiki indique que le mot de passe Wiimote suit l'adresse mac en ASCII. La configuration suivante a également échoué.

AT+BIND=3635,34,333231\r\n (ce qui correspond en code ASCII à 65,4,321
AT+PSWD=123456\r\n

Conclusion

La WiiMote étant un périphérique utilisant un protocole HID, il n'est pas possible, ou pas encore réalisé, d'établir une connexion en utilisant les modules précédents, il est nécessaire d'utiliser des modules intégrant de base le protocole. Cependant, au vue du temps restant allouer au projet, il a été proposé de changer de point de vue et d'essayer de contrôler la WiiMote au lieu de l'émuler.

Partie 2 : Asservissement d'une WiiMote semaine 3 et 4

Afin de contourner le problème rencontré avec les modules Bluetooth je vais maintenant essayer d'asservir une WiiMote. L'idée est donc de brancher un Arduino à la WiiMote et exécuter la commande reçu. Dans un premier temps on ouvrira la WiiMote afin de mettre en évidence les éléments qui nous intéresse. La première étape sera d'activer des boutons. La 2ème d'envoyer des instructions de l’accéléromètre de la WiiMote. La 3ème étape d'émuler un Nunchuck, la manette d'extension de la WiiMote. La 4ème d'externaliser la caméra infra-rouge.

La manette

Wiimote inside.png

Pour démonter la WiiMote, un tournevis spéciale est recommandé, les vis étant de la forme d'une étoile à 3 branches. Il est cependant possible de sen sortir à l'aide d'un tournevis cruciforme relativement pointu ou plat.
2 encoches empêchent l'ouverture de la WiiMote du côté de la caméra IR, celle-ci se trouve au niveau des touches gauches et droites de la croix directionnelles.
Des vidéos sont disponibles montrant comment démonter une WiiMote, dont voici un lien [2]
Après avoir démonter la WiiMote et analysé l'intérieur de celle-ci, On peut voir les éléments suivant :

1 Prise du nunchuck
2 Bouton de synchronisation
3 Puce Bluetooth
4 Vibreur
5 Bouton 'B'
6 Caméra IR
7 Bouton power
8 Croix directionnelle
9 Accéléromètre
10 Boutons '-' 'Home' '+'
11 Le haut parleur
12 Boutons '1' et '2'


Étape 1 le contrôle des boutons


Des tests réalisés à l'aide d'un multimètre ont permis d'établir les informations suivantes au niveaux des boutons:
Pont diviseur tension.svg.png

Les boutons ont une masse communes ainsi qu'un connecteur dont la tension est de 3.16V. La masse est quand à elle relié à la borne négative de la batterie.
J'ai donc choisi d'utiliser les sorties digitales de l'Arduino afin de piloter ces boutons. Je brancherai un diviseur de tension afin d'abaisser la tension à 3.16V. A la sortie de mon diviseur, je brancherai sur la borne '+' des boutons

L'Arduino impose une tension de 0-5V en sortie.
On prendra donc R2=2.2kohms et R1= 1.2kohms

Suite à l'utilisation d'un Arduino DUE, un pont diviseur n'est pas nécessaire puisque les sorties ont une tension 0-3.3V. L'Arduino DUE présente également l'avantage d'offrir des Digital to Analog Converter (DAC). Il sera donc plus facile de piloter les tensions x,y,z de l’accéléromètre.
L'accéléromètre de la WiiMote fournit des tensions variant de 1.10V à 1.8V. Cela correspond à des valeurs pour le DAC de l'Arduino comprise entre 1350 et 1450.

Le programme Arduino