CONECTAR UN NUNCHUK

Conectar nunchuck a LEGO Mindstorms NXT
down-rojo-flecha

Actualización 27/11/11: el programa en NXT-G (bajar aquí).

Actualización 2/12/11: ajuste fino (más preciso) del Nunchuk (bajar aquí).


UN ACELEROMETRO CASERO


Si sigues este tutorial, acabarás conectando un Nunchuck al NXT y podrás programarlo con el NXT-G, el software de origen. Para facilitarte las cosas, te puedes descargar un bloque (My Block) ya creado para su control.





Este montaje tiene algunas peculiaridades:


1. Dejaremos un Nunchuck inservible para su uso con la Wii. La parte buena es que por unos 10 o 15€ puedes tener un acelerómetro de 3 ejes, un joystic completo y 2 botones en un solo puerto.


2. Hay que soldar.


3. Lo puedes programar en NXT-G.


4. Obviamente (y como siempre) no me hago responsable de los daños que puedas causarle al mando, a la Wii, al NXT o cualquier otra cosa.


MATERIAL


1 Nunchuck (obviamente), que quedará inutilizado para la wii.

2 resistencias de 33K

1 diodo 1N4148

Cable fino de colores

Un soldador y estaño.

Un cable del NXT para cortar por la mitad.

Tubo termoretráctil o cinta aislante.

Una placa para soldadura (opcional).


CONSTRUCCION


Lo primero que hay que hacer es quitar el dichoso tornillo "triwing" de la parte de atrás de la carcasa del Nunchuck para poderlo abrir. El tornillo tiene una cabeza de 3 puntas un poco raras:


Tornillo triwing del Nunchuck

Con mucha paciencia, pude encontrar un destornillador plano de los de relojero (el típico estuchito con destornilladores pequeños) y los pude quitar. Al final los sustituí por unos de estrella de los de todo la vida que tenía por ahí.


Una vez hemos quitado los 2 tornillos de la parte trasera, la carcasa quedará entreabierta. "Clavamos" la punta de la uña y vamos recorriendo todo el perfil del mando y acabará saltando la pieza. Si no te aclaras, tienes un video de youtube de cómo abrirlo aquí. Nos encontraremos con esto:


Conectar nunchuck a LEGO Mindstorms NXT 1

Ahora vamos sacando los elementos de su alojamiento. A la hora de volver a montar no es complicado porque las piezas solo admiten ua posición. Si lo montas mal, se nota enseguida. La cosa quedará así:


Conectar nunchuck a LEGO Mindstorms NXT 2

Con un ligero vaivén, saldrá el cable de su sitio. Fíjate bien cómo va montado, que luego cuesta un poco. La pieza blanca tiene dos ganchos en la parte de abajo. Con un poco de cuidado, también sale.


Conectar nunchuck a LEGO Mindstorms NXT 3

Quitando las resistencias R1 y R2


Bueno, ahora empieza ya lo complicado. Lo primero que hay que hacer, es quitar las resistencias R1 y R2 de la placa del Nunchuck. Para eso es necesario usar el soldador.


Conectar nunchuck a LEGO Mindstorms NXT 4

Conectar nunchuck a LEGO Mindstorms NXT 5

Saltan como si fueran manchas de obra sobre un cristal y les pasaras por encima una rasqueta. Es decir, no hay que sacarlas de su alojamiento con pinzas. Simplemente aplicando encima el soldador y enpujando con un cuter o unas pinzas de depilar, saltarán. Eso sí, hay que tener la placa firmemente sujeta para poder hacer fuerza y no quemarte con el soldador.


Soldando el pequeño circuito


Vamos ahora a soldar un pequeño circuito que irá alojado dentro del mando. Es muy simple. No uses una placa muy grande para que luego quepa bien. El circuito es este:


Circuito LEGO Mindstorms NXT Nunchuck 1

Los elementos simplemente están colocados sin soldar en la placa. Si no dispones de una, supongo que no será una barbaridad usar un trocito de cartón, no se. Si no se quema...


Las líneas de color, son los cables que hay que soldar y que se corresponden con los colores del Nunchuck. Este circuito habrá que intercalarlo en el mando cuando cortemos sus cables.


Verás que el diodo tiene una franja negra. Ese lado debe quedar del lado del Nunchuck.


Conectar nunchuck a LEGO Mindstorms NXT 6

Por el lado del Nunchuck, los 3 elementos, las dos resistencias y el diodo, quedan soldados entre sí y se conectan a un cable rojo, tal como se ve en la imagen. Los otros cables, los que irán al NXT, se conectan cada uno a un color:


Conectar nunchuck a LEGO Mindstorms NXT 7

Por la parte de atrás se observa la soldadura y las conexiones.


Conectar nunchuck a LEGO Mindstorms NXT 8

Ahora la parte dolorosa de cortar los cables dentro del Nunchuck. No cortes el cable negro, no es necesario. El blanco tampoco es necesario (ver circuito), pero lo corté por error, así que luego me tocó soldarlo de nuevo.


Conectar nunchuck a LEGO Mindstorms NXT 9

Ahora ponemos tubitos negros termoretráctiles antes de soldar los cables. Recuerda la parte que va hacia el Nunchuck y la que va hacia el NXT. Aunque realmente el único con el que hay que tener cuidado es con el rojo, ya que los cables verde y amarillo que salen del circuito que hemos hecho son equivalentes, da igual el que cojas. Intercalamos el circuito y soldamos.


Conectar nunchuck a LEGO Mindstorms NXT 10

Colocamos los tubitos negros en su sitio, calentamos con un mechero y listo. Alojamos de nuevo los elementos en la carcasa del mando y atornillamos. Mucho cuidado que no se toquen entre sí ningún elemento, pueden hacer un cortocircuito. Pon cinta aislante si es necesario.


Conectar nunchuck a LEGO Mindstorms NXT 11

El conector del NXT


Ahora el últomo paso, unir un conector del NXT. Cortamos uno por la mitad y pelamos los cables. El blanco y el negro del conector del NXT no sirven para nada, así que lo mejor es cortarlos y aislar las puntas con tubo termoretráctil.


Pasa tubo termoretráctil antes de soldar los cables, teniendo en cuenta que los colores no coinciden. El circuito anterior ya lo hemos hecho pensando en esto.


Circuito LEGO Mindstorms NXT Nunchuck 2

Conectar nunchuck a LEGO Mindstorms NXT 12

Y una vez recubierto con el tubo negro (si no se te ha olvidado), el resultado final es este:


Conectar nunchuck a LEGO Mindstorms NXT 13

EL PROGRAMA EN NXT-G


Lo primero de todo, quiero agradecer las explicaciones aportadas por el usuario 3,14159 en el foro de Hispalug. Sin estas aclaraciones, no hubiera sacado el programa.


Bueno, vamos al tema. Intentaré explicar todos los pasos para que lo puedas programar por tu cuenta, pero si no te interesa, te puedes descargar el siguiente icono e instalarlo. Con él podrás controlar TODAS las funciones del nunchuk sin necesidad de leer todas las explicaciones que vienen a continuación. Eso si, lee las NOTAS siguientes.


Descargar Nunchuk Básico (8 bits)


NOTAS:


1. Es un "My Block". Para instalarlo, descarga el archivo y lo pegas en el directorio (y no en otro): [...]/LEGO Creations/MINDSTORMS Projects/Profiles/Default/Blocks/My Blocks.


2. Para que el icono funcione correctamente, DEBERÁS disponer de los siguientes bloques instalados en tu ordenador: Write, Read y Mask. Todos ellos los puedes encontrar en la sección de Software.


3. Verás que el icono tiene 2 salidas lógicas correspondientes a cada uno de los botones del mando. 2 salidas más correspondientes al eje X e Y del Joystic y 3 salidas adicionales para los datos procedentes de los ejes X, Y y Z del acelerómetro. Entre paréntesis tienes los valores que pueden tomar esas variables.


4. Como cualquier otro dispositivo I2C, de vez en cuando se queda colgado. Desenchufa el Nunchuk y espera unos segundos y/o reinicia el programa.


5. DEBES conectar el mando en el puerto 1 del NXT. Si lo quieres modifcar, debes entrar en la configuración del My Block haciendo doble click sobre él y guardando después.


6. Todos los mandos NO son iguales ni tienen los mismos valores de respuesta ante los movimientos. Si el mando no responde bien, tendrás que hacer pequeños ajustes en el My Block, pero espero que no sea necesario.


7. Más abajo en esta página tienes otro "My Block" más preciso que este, aunque funcionan ambos según lo que quieras hacer.


Conectar nunchuck a LEGO Mindstorms NXT

Iniciando la comunicación con el Nunchuk


El Nunchuk se comunica con el protocolo I2C. Este protocolo implica la existencia de un "master" (el NXT) y un "esclavo", el mando. Esto permite que hayan muchos esclavos conectados a un único master y que nos podamos comunicar con cada uno de ellos.


La forma en la que el NXT se comunica con ellos, es enviando una señal o telegrama al dispositivo con el que quiere comunicarse, en este caso el Nunchuk, para "iniciar la conversación". La direccion fija (Address) para comunicarnos con el Nunchuk es 164 y esta no cambia. Esa forma de iniciar la comunicación es como sigue, y será lo primero en el programa:


Conectar nunchuck a LEGO Mindstorms NXT

Obteniendo los datos del Nunchuk


La tabla de direcciones para leer los datos procedentes del mando es esta:


Conectar nunchuck a LEGO Mindstorms NXT

Es decir, leyendo el registro 2 (siempre de la dirección 164), obtendremos los datos del eje X del acelerómetro del mando. Cada vez que queramos conocer un valor, hay que empezar con:


Conectar nunchuck a LEGO Mindstorms NXT

Fíjate bien en la configuración de las pestañas "WriteReg", unas veces están activadas y otras no. Bueno, ya tenemos los 4 primeros iconos escritos. Ahora, ya podemos preguntar por el valor que queremos conocer:


Conectar nunchuck a LEGO Mindstorms NXT

Tiene poco sentido preguntar 1 sola vez el valor. Para que aparezca el resultado en pantalla en tiempo real, solo hay que usar un bucle. Con todo lo visto, el programa completo queda así:


Conectar nunchuck a LEGO Mindstorms NXT

Si quieres visualizar 2 variables a la vez, el registro 2 y el 3 por ejemplo, repite TODO lo que hay en el interior del bucle, seleccionando el registro 3:


Conectar nunchuck a LEGO Mindstorms NXT

Excepciones


La sistemática para leer cada registro es la que acabamos de ver. El protocolo I2C tiene un reloj interno que va aumentando y leyendo consecutivamente cada registro. De esta forma, si empezamos leyendo el registro 2 y queremos leer uno o varios iconos consecutivamente, no es necesario que llamemos con los 2 iconos iniciales. Es decir, el programa anterior funcionaría igual así:


Conectar nunchuck a LEGO Mindstorms NXT

Otra excepción que no he podido entender bien es la lectura del eje X del joystic. Es el único para el que la pestaña "WriteReg" NO debe estar activada cuando lo leemos:


Conectar nunchuck a LEGO Mindstorms NXT

Botones C y Z


La información de estos botones se obtiene de forma un poco distinta que la del resto. Se encuentra en el registro 5. Cuando leemos este registro, vemos que va absolutamente loco. Los valores aportados por los "Read" varían entre 0 y 255. Este número es decimal. Abre la calculadora de Windows, selecciona Ver/Calculadora científica y escribes 255. Ahora pulsa "Bin" y obtendrás el número en binario, el 1111 1111.


Bueno, pues si lees el registro 5, obtendrás un número. Pásalo a binario. El último dígito de la derecha corresponde al botón Z. Y el penúltimo, al botón C. Para obtenerlo en NXT-G, necesitamos descargar el icono Mask. Acude al final de la sección de Software. Allí hay una breve explicación de cómo funciona el icono.


Conectar nunchuck a LEGO Mindstorms NXT

Brevemente, introducimos en la entrada "A" del icono el cable del registro 5 (ver imagen). La máscara sirve para filtrar el número obtenido y leer solo el dígito que nos interesa. Nos interesa el último. En binario es: 0000-0001. Este número en decimal es el 1. Y eso es lo que escribimos en la máscara (ver flecha en la imagen).


Para el segundo botón, nos interesa la segunda posición por el final, es decir: 0000-0010. Este número en decimal es el 2. Poniendo la máscara en 2, obtenemos el valor de la C. El programa completo para leer el botón Z quedaría así:


Conectar nunchuck a LEGO Mindstorms NXT

Una cosa que puedes hacer ahora es comprender la programación interna del My Block anterior para despejar dudas y ver un ejemplo completo.


AJUSTE FINO DEL ACELEROMETRO


En el "My Block" anterior hemos usado los datos procedentes del registro 2 para recoger y visualizar los datos del eje X. Los valores del registro 2 (como los del Y y el Z) varían entre 0 y 255, o lo que es lo mismo, entre 0000-0000 y 1111-1111 en binario. Es decir, 8 dígitos o bits. Bueno, pues el Nunchuk tiene más precisión, (10 dígitos) aunque es un poco liado.


Esto que en principio es bueno, tiene un problema: el ruido y las vibraciones de la mano también se reproducen de forma más precisa. Usa este icono o el anterior en función de la precisión que necesites en tu proyecto. Lee las notas que ponía más arriba, ya que son igualmente aplicables aquí.


Como antes, puedes descargarte directamente el siguiente "My Block", con bastante más precisión que el anterior y pasar de todas las explicaciones siguientes, pero si te interesa cómo está programado, sigue leyendo.


Descargar Nunchuk Ajuste Fino (10 bits)


Al igual que en el caso del My Block básico de 8 bits, en este My Block avanzado puede que se de el caso de pequeños ajustes. Si fuera necesario, se debe a que la fabricación de cada mando y/o acelerómetro puede ser ligeramente distinto. De ser así, haz pruebas, anota resultados, haz doble click sobre el My Block y corrige los iconos de resta al final del todo del programa. Cierra y graba.


El registro 5


Este registro es un pequeño cajón de sastre. El registro 5 también es un número entre 0 y 255 o en binario, entre 0000-0000 y 1111-1111: 8 bits en total. Bueno, pues cada uno de esos bits corresponden a: ZZYYXXCZ. Los 2 valores de la derecha corresponden a los botones C y Z (pulsados o no).


Explicaremos los valores de los 2 dígitos XX, ya que el resto es igual. El registro 2 nos aporta 8 dígitos. Pues estos 2 dígitos XX hay que ponerlos al final. Por ejemplo, imagina que el registro 2 nos aporta el dato 1000-1000 y el registro 5 nos da el dato 11 para las posiciones XX. El valor total uniendo los datos de ambos registros es por tanto: 1000-1000-11, diez dígitos.


Este ejemplo que acabamos de ver en números decimales sería así: Reg. 2: 136. Reg 5 (valores XX): 3. Todo junto: 547. Para entender todo esto, hay que pensar en binario, pero para programar el NXT-G hay que escribirlo en decimal. En binario, hemos añadido los 2 dígitos XX procedentes del registro 5 al final del registro 2. ¿Cómo traducir esto a decimal para poder programar?


Los pasos a dar.


Lo primero es "rescatar" los 2 dígitos de interés del registro 5. Para ello usamos el icono "Mask", poniendo en la configuración un "12", que corresponde en binario a 0000-1100 para coger los dígitos ZZYYXXCZ. En este ejemplo lo hemos guardado en la variable [XX Reg 5].


Conectar nunchuck a LEGO Mindstorms NXT

El siguiente paso se explica mejor en decimal. Si tienes un número cualquiera y quieres dejar 2 espacios al final "en blanco" para añadir ahí otros dos números, habría que multiplicar x100. De esa forma se "desplaza" el número hacia la izquierda dejando el espacio correspondiente.


Así, 2654 se convierte en 265400. ¿Cómo hacer esto en binario? Multiplicando x4. Mira el ejemplo anterior: teníamos Reg. 2: 136. Reg 5: 3. Todo junto: 547. La operación a realizar es: 136x4+3=547. Y esto es lo que tenemos que programar. Si no ves bien la imagen, sigue leyendo.


Conectar nunchuck a LEGO Mindstorms NXT

Como me temo que no se ve muy bien, en la siguiente imagen he eliminado los iconos amarillos, que son siempre los mismos. O sea, que este programa NO FUNCIONA, pero se ve bien:


Conectar nunchuck a LEGO Mindstorms NXT

Ahora solo tienes que representar en pantalla ese valor y ya tienes el eje X con precisión de 10 bits. Te podrás imaginar que los otros 2 ejes se programan igual. Resumiendo, hemos unido el registro 2 con el dato procedente del registro 5 al que le hemos aplicado un valor de máscara de 12. Para el resto es:


Conectar nunchuck a LEGO Mindstorms NXT

Así que ahora ya puedes hacer doble clik sobre el "My Block" anterior y entenderlo todo.


Los ejes y los movimientos


De forma muy breve, el Eje X presenta los movimientos cuando giras el mando de derecha a izquierda. El eje Y, cuando apuntas al techo o al suelo. Y el Eje Z simplemente comprueba si el botón del joystic está cara arriba o cara abajo, es decir, cómo está respecto al plano del suelo.


Con ayuda del Data Logger he representado los movimientos del nunchuk durante 12 segundos. Eje X al moverlo de izquierda a derecha, primero lento (curva suave) y luego rápido (picos agudos). Al final, posición horizontal sin movimiento


Conectar nunchuck a LEGO Mindstorms NXT

El eje Y, primero lentamente hacia abajo y luego hacia arriba. A continuación, un movimiento rápido de abajo a arriba (los picos). Acaba con el joystic parado en horizontal.


Conectar nunchuck a LEGO Mindstorms NXT

Por último, el eje Z. Lo muevo bruscamente de arriba a abajo 2 veces. Finalmente lo devuelvo a la posición de "arriba" poco a poco. En el eje Z hay que destacar la cantidad de ruido que hay. Ya te digo que mi mano no tiembla tanto :-)


Conectar nunchuck a LEGO Mindstorms NXT

Ejemplos de uso


Tienes algunas aplicaciones en la sección de Proyectos/Nunchuk.


Otras referencias. El programa en NXC


Existen varias páginas que aportan código para el Nunchuk en otros lenguajes de programación. Una de ellas corresponde al mensaje de 3,14159 en el foro Hispalug. Una de las primeras páginas que pude encontrar con información en NXC fue esta.


En cuanto a referencias e información complementaria sobre el Nunchuk, puedes consultar en esta página o también aquí en castellano.


Cualquier duda adicional o aplicación nueva, no dudes en acudir al foro.


up-rojo-flecha
Reloj calendario
Teclado numerico clásico
.