





Utiliser une nunchuk avec Arduino
nunchuk wii arduino
Vous connaissez sûrement le contrôleur de jeu de Nintendo qu'est la Nunchuk, mais le fait de pouvoir l'utiliser avec Arduino l'est d'autant moins, peut-être...
Quoi qu'il en soit, on va voir dans ce billet comment utiliser une avec une carte Arduino ainsi que quelques exemples de ce que l'on peut faire avec.
Pourquoi l'utiliser ?
Car une Nunchuk comporte beaucoup de composants intéressants tels que :
- Deux boutons (nommés C et Z)
- Un joystique (malheureusement, les coins sont difficilement atteignables)
- Un accéléromètre 3 axes
- Une bonne longueur de câble
Le tout dans une manette que je trouve très agréable à tenir en main, comparé à une breadboard sur laquelle ont aurait mis les composants , ainsi qu'une exploitation des données très facile grâce aux bibliothèques. De plus, aucune soudure n'est nécessaire si vous souhaitez l'utiliser sur votre arduino que temporairement.
Comment ?
Le câblage :
Afin d'utiliser la manette avec votre Arduino, prenez le connecteur de la manette de face :
Vous n'aurez besoin que de 4 câbles, à brancher comme ceci sur la manette :
Et il vous suffit juste de les raccorder aux pins de votre Arduino indiqués sur la photo.
Attention à bien choisir le pin d'alimentation, on utilise ici du 3,3V.
Coté programmation, la bibliothèque :
Il en existe plusieurs mais celle que j'ai choisi d'utiliser se nomme ArduinoNunchuk, écrite par Gabriel Bianconi. Elle n'est plus maintenue mais comporte tout ce dont il vous faut et elle fonctionne facilement. Il vous suffit de télécharger l'archive puis de copier le dossier ArduinoNunchuk dans le dossier nommé libraries d'Arduino.
Dès que ceci est fait, vous pouvez commencer à l'utiliser, pour commencer ajoutez ceci en haut de votre programme :
#include
Puis avant la boucle setup(), attribuez un nom à votre nunchuk, comme vous l'auriez fait pour un servomoteur, il vous faut donc ajouter ceci :
ArduinoNunchuk wii = ArduinoNunchuk();
N'hésitez pas à modifier le nom "wii" par celui que vous souhaitez mais n'oubliez pas de le remplacer par la suite aussi.
Ensuite, il vous suffit d'écrire ceci dans la fonction setup:
wii.init();
Et votre carte Arduino est prête à recevoir les informations de la Nunchuk.
Enfin, écrivez ceci avant chaque lecture de données provenant de la manette afin de les mettre à jour :
wii.update();
Et voici comment lire et afficher sur l'interface série les différentes informations (il vous faudra ajouter le "wii.update()" au tout début) :
Serial.print(wii.analogX, DEC); //Haut/Bas du joystique --> wii.analogX Serial.print(' '); Serial.print(wii.analogY, DEC); //Gauche/Droite du Joystique --> wii.analogY Serial.print(' '); Serial.print(wii.accelX, DEC); Serial.print(' '); Serial.print(wii.accelY, DEC); Serial.print(' '); Serial.print(wii.accelZ, DEC); Serial.print(' '); Serial.print(wii.zButton, DEC); //Renvoie un 0 si on appuie pas sur le bouton Z ou un 1 si on appuie dessus Serial.print(' '); // ---> wii.ZButton Serial.println(wii.cButton, DEC); //Renvoie un 0 si on appuie pas sur le bouton C ou un 1 si on appuie dessus // ---> wii.CButton
(Morceau de code du programme d'exemple)
Exemples d'utilisations de la nunchuk :
Un des exemples qui m'a pousser à utiliser cette manette est le contrôle d'un servomoteur grâce à un axe de l'accéléromètre, ça tombe bien, les deux exemples que je vais vous montrer utilisent des servomoteurs.
Exemple n°1 avec 1 servo :
Le but ici est de contrôler un servomoteur avec un des axes de la manette, pour cela j'ai ajouter au montage existant (décrit plus haut) un servomoteur SG90 dont le contrôle se fait via le pin 9.
Voici à quoi ressemble le montage :
Ainsi que le programme que j'ai utilisé :
//Bibliothèques #include "Servo.h" #include #include // Nunchuk: ArduinoNunchuk wii = ArduinoNunchuk(); int axeY; //Servo du bas : Servo servoBas; int pinServoBas = 9; int servoBasInit = 90; void setup() { //Initialisation des servos : servoBas.attach(pinServoBas); servoBas.write(servoBasInit); //Initialisation de la nunchuk et de la liaison série wii.init(); Serial.begin(9600); } void loop() { wii.update(); //Accélérateur Y -> Servo du bas: axeY = wii.accelY, DEC; Serial.println(axeY); axeY = map(axeY, 330, 700, 0, 180); servoBas.write(axeY); delay(30); }
Et la petite démonstration qui va avec :
Exemple n°2 avec 2 servos :
Exemple de programme pour contrôler 2 servomoteurs (ici de même axe), l'un avec un axe de l'accéléromètre et l'autre avec un axe du joystick. Les 2 servos sont disposés comme ceci :
Ainsi que le programme, dont le second servo se contrôle via le pin 10 :
//Bibliothèques #include "Servo.h" #include #include // Nunchuk: ArduinoNunchuk wii = ArduinoNunchuk(); int axeY,jY; //Servo du bas : Servo servoBas; int pinServoBas = 9; int servoBasInit = 90; //Servo du haut : Servo servoHaut; int pinServoHaut = 10; int servoHautInit = 90; void setup() { //Initialisation des servos : servoBas.attach(pinServoBas); servoBas.write(servoBasInit); servoHaut.attach(pinServoHaut); servoHaut.write(servoHautInit); //Initialisation de la nunchuk et de la liaison série wii.init(); Serial.begin(9600); } void loop() { wii.update(); //Accélérateur Y -> Servo du bas: axeY = wii.accelY, DEC; Serial.print(axeY); Serial.print(" "); axeY = map(axeY, 330, 700, 0, 180); servoBas.write(axeY); //Joystick Y (nommé jY) -> Servo du haut jY = wii.analogY, DEC; Serial.println(jY); jY = map(jY, 220, 30, 0, 180); servoHaut.write(jY); delay(30); }
Ainsi que la démonstration :
Idées supplémentaires :
Si vous souhaitez aller plus loin dans l'utilisation de la Nunchuk voici quelques idées d'utilisation :
- Contrôler sa souris ou des touches de clavier (pour contrôler l'avion dans Google Earth par exemple)
- Contrôler une base roulante (ou un robot comme celui d'Ashira par exemple)
- Contrôler une caméra à distance
Bref, les possibilités sont nombreuses.
Voilà tout pour ce billet, j'espère qu'il vous aura plu
A bientôt !
Image(s) jointe(s)
- Mike118 aime ceci
C'est trop classe, merci pour cette article !