Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Intégrer une Wii Nunchuk à Arduino : guide pas à pas

Composants et fournitures

Composant Quantité
Nintendo Nunchuk (ou réplique) 1
Convertisseur de niveau logique (SparkFun) 1 Recommandé pour alimenter le Nunchuk en 3,3V
Arduino UNO 1

À propos du projet

Préface

Cet article a été publié à l'origine sur www.xarg.org.

Utiliser une Wii Nunchuk avec Arduino

Nous avons tous grandi avec des gamepads en main — ils sont idéaux pour piloter n'importe quelle application. La Nunchuk de Nintendo, extension bon marché de la Wiimote, utilise l'I2C : accès facile aux données brutes. Cherchant une implémentation stable, je n'ai trouvé que des bribes de code. J'ai donc comblé ce vide. Ce guide détaille le matériel, le protocole I2C, et fournit une bibliothèque Arduino prête à l'emploi.

Matériel

Intégrer une Wii Nunchuk à Arduino : guide pas à pas

La Nunchuk comporte :

Alimentation recommandée : 3,3V. Utilisez un convertisseur de niveau si votre Arduino est en 5V (Uno, Mega…) pour prolonger la durée de vie du contrôleur.

Pièces minimales

Nunchuk original ou réplique ?

J'ai testé les deux. Différence ~10-15€.

Ma bibliothèque applique un filtre de Kalman qui nivelle ces différences. Pour un usage durable : original. Pour prototype pas cher : réplique peut suffire.

Connecteur Nunchuk

Connecteur propriétaire Nintendo. Je n'ai pas de Wii, j'ai coupé le connecteur. Adaptateurs Nunchuk existent (quelques €) si vous préférez. Ouvrir le connecteur permet de voir le câblage réel — crucial pour les répliques où les couleurs sont aléatoires. L'original a 4 fils, la réplique 5, pour 6 broches sur le connecteur.

Intégrer une Wii Nunchuk à Arduino : guide pas à pas Intégrer une Wii Nunchuk à Arduino : guide pas à pas

Vue de face du connecteur (broches) :

Intégrer une Wii Nunchuk à Arduino : guide pas à pas

Câblage Nunchuk original :

Câblage réplique testée :

Vérifiez toujours le câblage réel de VOTRE unité — ne vous fiez pas aux couleurs !

Acronymes : nc = non connecté, SDA = ligne données (→ A4 Arduino), SCL = horloge (→ A5 Arduino). L'Arduino fournit du 3,3V via son régulateur. Si vous utilisez un adaptateur WiiChuck : 3,3V sur A2, GND sur A1, puis appelez nunchuk_init_power().

Intégrer une Wii Nunchuk à Arduino : guide pas à pas

Logiciel

J'ai écrit une petite bibliothèque header-only (nunchuk.h) qui gère la communication. Utilisation simple :

#include <Wire.h>
#include "nunchuk.h"

void setup() {
  Serial.begin(9600);
  Wire.begin();
  // nunchuk_init_power(); // Si alimentation via A1/A2
  nunchuk_init();
}

void loop() {
  if (nunchuk_read()) {
    // Travaillez avec nunchuk_data
    nunchuk_print(); // Affiche sur Serial
  }
  delay(10);
}

Le fichier Processing inclus permet d'équilibrer un cône 3D avec la Nunchuk :

Intégrer une Wii Nunchuk à Arduino : guide pas à pas

Fonctions de la bibliothèque

Note : Pas de nunchuk_yaw() — l'accéléromètre mesure l'accélération (gravité), pas la vitesse angulaire. Le pitch est limité à 180°, le roll devient incorrect au-delà. Calculs basés sur l'hypothèse que seule la gravité agit (contrôleur immobile ou vitesse constante).

Calibration

Chaque fonction joystick/accéléromètre existe en version calibrée et brute. Les constantes de position zéro sont en tête de bibliothèque. Lisez les valeurs brutes en position neutre et ajustez les constantes.

Protocole I2C (détails techniques)

Inutile pour l'utilisation basique, mais utile pour comprendre.

Adresse I2C du Nunchuk : 0x52. Lecture similaire à une EEPROM I2C. Séquence d'initialisation requise avant lecture.

Pour lire les données : envoyer adresse 0x00, lire 6 octets. Le contrôleur incrémente l'adresse à chaque lecture.

Écriture : adresse suivie des données.

1. Initialisation standard (avec chiffrement) :

START, 0x40, 0x00, STOP

Chaque octet lu doit être déchiffré : (x ^ 0x17) + 0x17.

2. Initialisation sans chiffrement (recommandée) :


START, 0xF0, 0x55, STOP
START, 0xFB, 0x00, STOP

Données directement exploitables, compatible répliques.

3. Lecture identifiant dispositif :


START, 0xFA, STOP
READ 6 octets

4. Lecture mesures (6 octets) :


START, 0x00, STOP
READ 6 octets

Structure des 6 octets :

Octet Bits 7-0
1Joystick X [7:0]
2Joystick Y [7:0]
3Accel X [9:2]
4Accel Y [9:2]
5Accel Z [9:2]
6Az[1:0] Ay[1:0] Ax[1:0] ¬Bc ¬Bz

Boutons inversés (¬Bz, ¬Bc). Les 2 bits de poids faible de chaque axe accéléromètre sont dans l'octet 6. La bibliothèque les recombine. Tronquer ces bits (comme vu parfois) perd de l'information — mieux vaut filtrer (Kalman/complémentaire) le signal bruité.

5. Lecture données de calibration (16 octets à 0x20) :

Octet Description
1Valeur 0G axe X [9:2]
2Valeur 0G axe Y [9:2]
3Valeur 0G axe Z [9:2]
4LSB valeurs 0G X,Y,Z
5Valeur 1G axe X [9:2]
6Valeur 1G axe Y [9:2]
7Valeur 1G axe Z [9:2]
8LSB valeurs 1G X,Y,Z
9Joystick X max
10Joystick X min
11Joystick X centre
12Joystick Y max
13Joystick Y min
14Joystick Y centre
15Checksum
16Checksum

Octets 0-3 : valeurs 0G (repos). Octets 4-7 : valeurs 1G (gravité terrestre). Données de calibration non encore exploitées dans la librairie logicielle.

Code

Extrait de code #1 (exemple minimal)

#include <Wire.h>
#include "nunchuk.h"

void setup() {
  Serial.begin(9600);
  Wire.begin();
  // nunchuk_init_power(); // Si alimentation via A1/A2
  nunchuk_init();
}

void loop() {
  if (nunchuk_read()) {
    nunchuk_print();
  }
  delay(10);
}

Dépôt GitHub

https://github.com/infusion/Fritzing/tree/master/Nunchuk (schéma Fritzing + bibliothèque)

Pièces personnalisées et boîtiers

Intégrer une Wii Nunchuk à Arduino : guide pas à pas

Processus de fabrication

  1. Capturer les commandes de télécommande IR sur Raspberry Pi sans LIRC : Approche Python UART
  2. Contrôler la Luminosité de LEDs par PWM avec un Bouton Poussoir sur Arduino Mega
  3. Créer un système Ambilight spectaculaire pour moniteur avec Arduino
  4. Système de pointage RFID fiable avec Arduino et Python (base de données phpMyAdmin)
  5. Capteur CO2 K30 : Surveillance en temps réel de la qualité de l'air intérieur
  6. Faciliter la communication sourd-aveugle avec 1Sheeld et Arduino
  7. Construire une Tirelire Intelligente : Contrôler un Accepteur de Pièces avec Arduino Nano
  8. Construire un Voltmètre Intelligent avec Arduino et Smartphone – Projet DIY Facile
  9. Moniteur de Fréquence Cardiaque IoT en Temps Réel avec Arduino et MAX30100