Aller au contenu






* * * * * 1 votes

Utiliser une nunchuk avec Arduino

Posté par Jekert, dans Difficulté 1/5 26 mai 2016 · 12 454 visite(s)

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 :

SAM_2035.JPG

 
Vous n'aurez besoin que de 4 câbles, à brancher comme ceci sur la manette :

SAM_2033.JPG


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 :


SAM_2042.JPG

 
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 :
 


 


SAM_2040.JPG

 
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 :

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)






C'est trop classe, merci pour cette article  !

  • Signaler
Je ne connais pas ce matériel.
Mais quel est son avantage par rapport à un smartphone ?
  • Signaler

Je ne connais pas ce matériel.
Mais quel est son avantage par rapport à un smartphone ?

J'aime bien la prise en main (plus confortable à tenir qu'un téléphone), le fait que tout ce dont j'avais besoin soit intégré et j'en avais chez moi que l'on n'utilisais pas depuis un moment (ce sont des manettes d'une console de jeux de salon, la Wii). Et j'ai du écrire cet article avant d'avoir des modules Bluetooth. Certes c'est moins modulable qu'un smartphone mais c'est sympa comme recyclage.

  • Signaler

Ma photo

Progression

État du prochain billet :

5%

 

État du prochain chapitre de l'ouvrage:

85%

 

Rechercher dans le blog

utilisateur(s) actif(s)

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)

Derniers visiteurs

Derniers commentaires