Activité 5 - Expérimentation 2 : Détournement d'un objet

 

Vous allez utiliser la Wiimote pour commander un ordinateur. En effet, la Wiimote va tout simplement remplacer votre souris et cela grâce au logiciel GlovePie. Ce logiciel fonctionnant avec des scripts, il permet d’assigner des touches clavier et mouvements de souris (détectés par l'accéléromètre) aux différentes touches et mouvements de la Wiimote.

Pour cela il va falloir connecter la manette au PC. Elle communique avec la console Wii par l’intermédiaire du Bluetooth donc il suffit de la connecter au PC via une clef Bluetooth et de logiciels adaptés.

Question 1 : En vous aidant de la documentation logiciels, relier chaque logiciel à sa fonction :

Connection de la Wiimote

 

Vérifier que la clef Bluetooth est connectée à votre PC et que le logiciel BlueSoleil est installé. Connecter la manette en vous aidant de la documentation logiciel BlueSoleil.

Question 2 : Sous quel type de périphérique la manette Wiimote est-elle détectée par BlueSoleil ?

WiinRemote

 

On va utiliser le logiciel WiinRemote pour visualiser les données de l’accéléromètre.

Lancer le logiciel en vous aidant de la documentation logiciel WiinRemote. Bouger la manette et regarder les effets sur le tableau de contrôle du logiciel.

Question 3 : A quoi sert la zone entourée en rouge ?

Question 4 : Peut-on récupérer des valeurs numériques avec ce logiciel ?

GlovePie

 

En vous aidant de la documentation logiciel, lancer le logiciel GlovePie (GlovePie ne nécessite pas d'installation particulière).

GlovePIE permet de lancer des scripts. Chaque script permet de configurer la Wiimote de façon individualisée. Il existe de nombreux scripts sur Internet déjà faits pour des jeux (Counter Strike, ...) et des logiciels (media player classic...).

Envoi d’un ordre à la Wiimote :

Le logiciel GlovePie permet de commander ou de récupérer des données de la manette Wiimote. On va faire allumer les LEDs pour commencer.

Ecrire le script suivant : wiimote.led1 = 1

Lancer le programme en appuyant sur RUN.

Question 5 : Entourer la LED qui s’allume sur la Wiimote ?

Question 6 : Ecrire le script pour allumer la LED entourée en vert ?

Il existe une autre commande ‘wiimote.leds’ permettant d’allumer les LEDs sous codification binaire.

Ecrire le script suivant : wiimote.leds = 12

Lancer le programme en appuyant sur RUN.

Question 7 : Colorier les LED qui s’allument sur la Wiimote :

Question 8 : En vous aidant de la documentation physique sur la codification binaire, pourquoi ne peut-on associer à cette commande qu’un code variant entre 0 et 15 ?

Question 9 : Que peut-on dire de la position des LED par rapport à la représentation classique du binaire ?

Récupération des données de la Wiimote / Vérification des axes de la Wiimote

 

On veut vérifier la position des axes sur la Wiimote. Pour cela on va récupérer les valeurs des accélérations dans trois positions statiques de la manette :

  • A plat
  • Sur le côté
  • Debout

Pour pouvoir récupérer les données de l’accéléromètre 3 axes, on écrit le script suivant (sur la même ligne) :

OutputToFile(RemoveUnits(Time)*86400 + ":"+RemoveUnits(Wiimote.RawAccX)+

'#'+RemoveUnits(Wiimote.RawAccY)+'*'+RemoveUnits(Wiimote.RawAccZ))

Lancer le programme en appuyant sur RUN dans une position prédéfinie de la Wiimote pendant un temps très court.

Remarque :

Ce script enregistre le temps, les accélérations ax, ay, az dans un fichier Output.txt au niveau du répertoire d’extraction de GlovePie.

Ouvrir le fichier Output.txt, sélectionner tout et copier/coller dans un fichier EXCEL. En vous aidant de la documentation sur EXCEL séparer les colonnes de chaque donnée.

Question 10 : A la lecture du script, à quoi correspondent les valeurs de chaque colonne ?

Question 11 : Quelle est l’unité des valeurs des accélérations ?

Refaire les prises de mesures pour les deux autres positions de la manette.

La manette immobile ne subit que l’attraction terrestre.

Question 12 : Donner la valeur mesurée par l’accéléromètre pour chaque axe ? Pourquoi y a-t-il des différences dans les valeurs ?

Question 13 : En interprétant les résultats, inscrire le nom des axes sur la Wiimote ? Sont-ils les axes classiques de représentation ?

Création de scripts pour GlovePie (pour ceux qui sont en avance)

 

Passons maintenant à la création de scripts pour GlovePie. Nous n'expliquerons que succinctement le fonctionnement des scripts et les commandes principales. Si vous comprenez les bases, vous pourrez aller plus loin en approfondissant un peu vos connaissances.

Les différents boutons de la Wiimote :

Les boutons :

  • wiimote.up
  • wiimote.down
  • wiimote.left
  • wiimote.right
  • wiimote.A
  • wiimote.B
  • wiimote.minus
  • wiimote.plus
  • wiimote.home
  • wiimote.one
  • wiimote.two

Ainsi que les 4 LEDs :

  • wiimote.led1
  • wiimote.led2
  • wiimote.led3
  • wiimote.led4
  • wiimote.leds (code allant de 0 à 15)

A. Comment assigner une touche clavier à un bouton de la Wiimote :

La syntaxe est très simple.

Par exemple, je veux assigner la touche "droite" du clavier au bouton "droit" du PAD de la Wiimote : key.right = wiimote.right

et maintenant, la touche "B" au bouton "A" de la Wiimote : key.B = wiimote.A

Lancer le programme en appuyant sur RUN.

Tester le programme avec un document Word par exemple.

Admettons que vous souhaitiez contrôler votre MediaCenter préféré avec le PAD de la Wiimote en utilisant les touches directionnelles et le bouton A pour la touche "Entrée" :

key.right = wiimote.right

key.left = wiimote.left

key.up = wiimote.up

key.down = wiimote.down

key.enter = wiimote.A

Lancer le programme en appuyant sur RUN. Et voilà, c'est pas plus compliqué que ça...

Tester le programme avec Google Earth par exemple.

B. Passons maintenant au combinaisons de touches... Nous allons assigner la combinaison CTRL+C au bouton A de la Wiimote :

key.CTRL+key.C = wiimote.A

Ou alors ALT+CTRL+C :

key.ALT+key.CTRL+key.C = wiimote.A

Et c'est pareil pour les autres combinaisons : liste au format pdf de l'ensemble des raccourcis claviers paramétrables

C. Comment assigner une touche clavier à une combinaison de boutons Wiimote :

Prenons l'exemple où vous souhaitez assigner la touche C au bouton A de la Wiimote mais à condition que le bouton B soit enfoncé. Nous allons utiliser la fonction IF bien connue :

if (wiimote.B) and (wiimote.A) then

key.C = TRUE

key.C = FALSE

endif

D. Commander les fonctions gyroscopiques de la Wiimote :

Tout ce que nous pouvons vous expliquer, c'est la manière d'assigner une touche à une rotation sur l'axe X et ceci en fonction du degré de rotation.

Voici un exemple de script simulant l'appui de la touche D du clavier si l'on penche la manette vers la droite de plus de 80° :

var.xOffset = -1

var.xRot = wiimote.RawForceX + var.xOffset

if (var.xRot > 22) then

key.D = TRUE

key.D = FALSE

endif

Explications :

  • var.xRot est une variable permettant de calibrer sa Wiimote
  • Wiimote.RawForceX est la valeur en "degré wiimote" (90° = 25) lorsque vous bouger votre Wiimote
  • var.xRot est la valeur calibrée
  • (var.xRot > 22) then veut dire que si vous tourner de plus de 22 (soit 79,20°) votre Wiimote sur l'axe X, vous simulerez l'appui de la touche D

Tester le programme avec un document Word par exemple.

Utilisation de scripts existants pour GlovePie (pour ceux qui sont très en avance 8-))

 

Pour utiliser un script déjà existant, faites File > Open et choisissez un script (WiiMouse0.1.PIE).

Ce script permet de remplacer la souris par votre Wiimote. Ceci est très pratique quand vous avez un ordinateur de salon avec films et musiques. Cliquez sur le bouton RUN pour lancer le script. La Wiimote n'étant pas correctement calibré le curseur de la souris est incontrôlable. Pour quitter le mode RUN faire "Alt+R".

Votre travail est de calibrer la Wiimote afin que le curseur de la souris soit fixe quand la Wiimote est posée sur une table. Pour cela aidez-vous de la figure des axes ci-dessous et modifiez les 3 paramètres "var.trim... :

if wiimote.home

if doubleclicked(wiimote.home)

ExitPie

else

wait 200 ms

ExitProgram

endif

endif

var.trimx = 6

var.trimy = -31

var.trimz = 6