Hoy toca hablar de una “herramienta” que puede dar mucho de sí a la hora de trabajar con Arduino, que por pocos €uros podemos conseguir en cualquier tienda de videojuegos y consolas, y es el mando Nunchuk de la Wii (Si, el pequeñito), y la idea es conectarlo al Arduino para poder utilizarlo en nuestros proyectos. Vamos al lío.
Este mando además de los botones y el mando analógico, tiene un acelerómetro de 3 ejes dentro, que es lo que lo convierte en una herramienta bastante útil y ahora veremos porque.
Muchos no sabrán lo que es un acelerómetro a pesar de que aquellos con smartphones y móviles de gama alta los utilizan a diario.
Entonces, lo primero que hay que preguntar es: ¿Qué es un acelerómetro? (¿Lógico, no? )
Entonces, lo primero que hay que preguntar es: ¿Qué es un acelerómetro? (¿Lógico, no? )
Pues sigue leyendo para saberlo!
Tiramos de Wikipedia y vemos:
“Se denomina acelerómetro a cualquier instrumento destinado a medir aceleraciones.”
Bien, me quedo igual que antes, ¿eso que significa?
Existen varios tipos de acelerómetros con diferentes usos, pero a nosotros solo nos interesa el uso del acelerómetro que tiene dentro el mando Nunchuk y que se utiliza para determinar la posición de un cuerpo (del mando en este caso), midiendo la aceleración y conociendo la posición inicial y velocidad con la que se desplaza, podemos calcular la posición final.
Nosotros no calcularemos nada, lo hará acelerómetro del mando, el LIS3L02AL (Datasheet), que es un acelerómetro de 3 ejes, y por tanto, nos dirá en qué posición se encuentra el mando en un plano de coordenadas X, Y, Z, como se puede ver en la siguiente imagen:
Hablando claro, el acelerómetro nos dirá en que posición del Eje X, Y y Z se encuentra el mando cuando lo giramos a la derecha, a la izquierda, hacia adelante, hacia atrás, si está del revés o del derecho.
Todo esto sumado a que además del acelerómetro, el mando dispone de 2 botones y un joystick analógico de 2 ejes, y que en conjunto, su precio es bastante más reducido que comprarlo todo por separado.
Por si fuera poco, y esto es de lo más interesante, todo el conjunto se puede controlar con tan solo 2 pines de nuestro Arduino más la alimentación, así que, pasemos a ver como se conecta y utiliza, ¿No?
El mando se conecta mediante el bus I2C y funciona a 3,3V, y puestos a facilitarnos las cosas, en la web de Arduino hay una librería para poder controlarlo con muy pocas líneas de código.
El pinout del conector del mando (Pragprog):
El pinout del conector del mando (Pragprog):
Donde Clock sería el pin SCL, y Data el pin SDA, del bus I2C correspondientes a los pines analógicos A5 y A4 del Arduino respectivamente.
Yo opté por conectarlo insertando unos cables en el conector y en el Arduino, aunque existe un adaptador específico diseñado para conectar el mando al Arduino, que podemos comprar en muchas tiendas online.
Dicho esto, no hay más que conectarlo de acuerdo a lo visto anteriormente y comenzar a utilizarlo! Para ello, descargamos la librería WiiChuck de la web de Arduino o de aquí mismoLibrería WiiChuk (Para la versión de Arduino 1.0) y veamos como mostrar por el puerto serie los valores de todos los elementos del mando, mediante el siguiente sketch:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| #include "Wire.h" //Libreria I2C #include "WiiChuck.h" //Libreria WiiChuck WiiChuck chuck = WiiChuck(); //Instancia de WiiChuck void setup() { Serial.begin(9600); //Iniciamos comunicacion serie chuck.begin(); //Iniciamos WiiChuck } void loop() { chuck.update(); //Actualizamos los valores y los imprimimos por pantalla. Serial.println( "-----------------------" ); Serial.print( "Eje X: " ); Serial.print(( int )chuck.readAccelX()); Serial.println(); Serial.print( "Eje Y: " ); Serial.print(( int )chuck.readAccelY()); Serial.println(); Serial.print( "Eje Z: " ); Serial.print(( int )chuck.readAccelZ()); Serial.println(); Serial.println(); Serial.print( "Joystick X: " ); Serial.print(( int )chuck.readJoyX()); Serial.println(); Serial.print( "Joystick Y: " ); Serial.print(( int )chuck.readJoyY()); Serial.println(); Serial.println(); Serial.print( "Boton Z: " ); Serial.print(( int )chuck.zPressed()); Serial.println(); Serial.print( "Boton C: " ); Serial.print(( int )chuck.cPressed()); Serial.println(); Serial.println(); Serial.println( "-----------------------" ); delay(2000); } |
Si conectamos y cargamos correctamente, debemos ver por el puerto serie, cada 2 segundos, los valores correspondientes a los ejes X, Y y Z del acelerómetro, los ejes X e Y del joystick analógico y los valores de los botones C y Z, así:
Llegados a este punto, controlando todos los elementos del mando, la imaginación de cada uno y los proyectos que realicen determinarán el uso que le demos, sin duda se pueden hacer muchas cosas.
Yo para hacer algunas pruebas, he conectado el mando y 14 leds a los pines digitales del Arduino, para ir encendiendo y apagando los leds de acuerdo a la posición lateral del mando, mapeando el valor del eje X del acelerómetro.
Aquí dejo la forma de conectarlo, el sketch y un pequeño vídeo de funcionamiento :
Sketch: WiiChukLeds.ino (Para la versión de Arduino 1.0)
Vídeo funcionando!
No hay comentarios:
Publicar un comentario