Mando Nunchuk de la Wii

El Nunchuk es un mando adicional para la consola Wii de Nintendo que incluye 2 botones, un joystick análogico y un acelerómetro de 3 ejes en una carcasa ergonómica. Se puede controlar mediante el bus I2C, y gracias a su producción en masa hace que su coste sea muy reducido de modo que resulta perfecto para incorporarlo como mando de control en nuestros proyectos DIY.

Además existe una versión inalámbrica que resulta mucho más práctica que la versión habitual con cable. Funciona por bluetooth con un alcance limitado a unos 5 metros como máximo.

El conector que incluye es exclusivo para conectarlo al mando principal de la consola, pero podemos sacar las señales fácilmente. En la versión con cable se puede cortar y soldar directamente a unos pines, aunque recomiendo la opción no destructiva de usar un pequeño adaptador fácil de conseguir en la misma tienda online donde se ha adquirido el mando.

El dispositivo debe alimentarse a 3.3V, el bus I2C puede conectarse directamente a nuestro Arduino a los pines A4(SDA) y A5(SCL) pero recomendamos utilizar un conversor de niveles  y si no disponemos de él se pueden usar un par de resistencias pull-up de 4.7K para conectar directamente Arduino con un componente que usa el bus I2C a 3.3V según se describe en este enlace. El esquema de conexión quedaría así:

Ejemplo 1

En el primer ejemplo usamos una de las librerías que existen para acceder a los datos proporcionados por el dispositivo, Wii Nunchuck resulta muy sencilla de utilizar y en el programa de ejemplo visualizamos los valores capturados del mando en el monitor  serie.

La versión utilizada del mando, de origen asiático, no funciona demasiado con bien la librería elegida y no es sólo cuestión de calibración: El botón Z activa también el C, además los valores de X e Y del joystick no alcanzan todo el rango,…. Por todo esto he preparado otro sketch que no usa librerías y funciona perfectamente con mi mando, además así resulta mucho más didáctico pues se ve la forma de acceder al bus I2C.

Ejemplo 2

Este sketch de ejemplo muestra por el puerto serie los datos suministrados por el mando. Los comentarios junto al código explican la forma de acceder a él y la información técnica sobre el formato de datos del Nunchuk están en este enlace.

La forma de operar el bus es la siguiente:

Se envía a la dirección 0x52 los bytes 0xF0 y 0x55, a continuación se envía a la dirección 0x52 los bytes 0xFB y 0x00. A partir de entonces, cada vez que queramos leer los datos tenemos que enviar a la dirección 0x52 el byte 0x00, Recibiremos 6 bytes que contienen esta información:

  • Byte1: Posición X del joystick (0-255)
  • Byte2: Posición Y del joystick (0-255)
  • Byte3: Los 8 bits de mayor peso del eje X del acelerómetro
  • Byte4: Los 8 bits de mayor peso del eje Y
  • Byte5: Los 8 bits de mayor peso del eje Z
  • Byte6: Los 2 bits de menor peso del eje Z, Y, X del acelerómetro. 1 bit indica el estado del botón C (0 si está pulsado). 1 bit indica el estado del botón Z.

Como ejemplo de aplicaciones he seleccionado unos vídeos

También te podría gustar...