bclose

Brazo robótico y el Nunchuk de la Wii

Apuntar un láser con el movimiento de la mano

Objetivos

 

 

    • Utilizar el acelerómetro del Nunchuk. para controlar la posición del brazo robótico.
    • Aprender a usar un diodo láser.
    • Encender el láser con un botón del Nunchuk.

 

Material requerido.

Imagen de Arduino UNO

Arduino Uno o compatible. Para está sesión sirve cualquier otro modelo.

Protoboardconexiones Una Protoboard y algunos  cables.
nunchuk wiiUn Nunchuk con adaptador de pines.
mainUn soporte servo pan & tilt.
servos sg90Dos servos con sus horns, esas pequeñas piezas de plástico que se ponen en el eje.
Vista lateralUn diodo láser.

INTRODUCCIÓN

 

Ya hemos aprendido a controlar la posición del brazo robótico con un joystick, pero se nos ha ocurrido una manera de hacerlo mucho más divertido,y que de paso nos ayude a aprender alguna cosa por el camino.

Para ello esta vez vamos a usar el Nunchuk de la Wii, de forma que el brazo imite el movimiento de nuestra mano. Y además le vamos a añadir un diodo láser, que al menos a mí me ha hecho sentir como una suerte de espía apuntando una torreta.

Así que si llegáis a esta entrada sin pasar por las anteriores, os recomendamos que les echéis un ojo, para que podáis entender perfectamente el contenido de la sesión (que además es bastante sencillita).

 

 

EL DIODO LÁSER

 

Vamos a hablar un poco de este componente que no hemos usado hasta ahora, pero que no tiene tampoco mayor misterio que un LED de los normales.

El diodo láser viene con montaje Keyes, de forma que no tendremos que usar ninguna resistencia para conectarlo. Tiene tres pines de conexión, aunque sólo vamos a utilizar 2.

Vista principal

Conectaremos el pin “-“ a GND y el pin rotulado con una “S” a uno de los pines digitales de Arduino.  Como hemos dicho, funciona igual que un diodo LED, si le damos tensión activara el puntero láser.

 

MONTAJE

 

Este montaje va a tener unos cuantos cables, así que como siempre, os recomendamos mantener el máximo orden que podáis, de forma que al ver el color del cable os hagáis una idea de la función que tiene. Por lo demás es simplemente combinar montajes que ya hemos realizado anteriormente

esquema-montaje

Hemos puesto un diodo normal en vez del láser porque no existe en el programa con el que realizamos los esquemas, pero seguro que no tenéis ninguna dificultad para entenderlo.

Para fijar el láser a la parte superior del brazo robótico yo he utilizado una goma, pero podéis usar una brida o cualquier otra cosa que se os ocurra.

PROGRAMA

 

El programa, igual que el montaje, va ser un refrito de las sesiones en las que hemos trabajado con cada uno de los componentes.

Lo primero será incluir las librerías que vamos a usar, y declarar las instancias, objetos y variables que necesitaremos para el programa:

#include <math.h>
#include "Wire.h" //Libreria I2C
#include "WiiChuck.h" //Libreria WiiChuck
#include <Servo.h> // Incluir la librería Servo

WiiChuck chuck = WiiChuck(); //Creamos la instancia de WiiChuck

Servo servo1; // Crear un objeto tipo Servo llamado servo1
Servo servo2; // Crear un objeto tipo Servo llamado servo2
int x; //Posición del brazo en X
int y; //Posición del brazo en Y
int LASER=13;

En el setup fijaremos la velocidad de la comunicación por el puerto serie, por si quisiéramos imprimir en pantalla la posición del Nunchuk, e iniciaremos su funcionamiento. Además indicaremos los pines a los que están conectados los servos y configuraremos como salida el pin conectado al láser.

void setup()
{
 Serial.begin(115200);
 chuck.begin(); //Iniciamos el Nunchuk
 servo1.attach(7) ; // Conectar servo1 al pin 7
 servo2.attach(8) ; // Conectar servo1 al pin 8
 pinMode(LASER, OUTPUT);
}

Y en el loop lo que vamos a hacer es fijar la posición de los servos al ángulo que recibamos desde el Nunchuk. Pero lo adecuaremos para que al tener la manos en reposo los servos estén en su posición media.

 
  • Como el eje X nos da 0º para la posición en reposo de la mano, le sumaremos 90 para que el servo se posicione en 90º.
  • Y lo mismo con el eje Y, que nos da 135º, así que le restaremos 45. 

 

Además haremos que se encienda el láser si pulsamos el botón “Z”.

void loop()
{
 delay(20);
 chuck.update();

 x = chuck.readRoll() + 90; //Posicición eje X
 y = chuck.readPitch() - 45; //Posición eje Y

 servo1.write(x);
 servo2.write(y);

 if (chuck.buttonZ)
 digitalWrite (LASER, HIGH);
 else
 digitalWrite (LASER, LOW);
}

Y no nos queda más que probar que todo funcione correctamente y pasar un rato divertido practicando un poco la puntería. Podéis descargar el programa completo aquí: nunchuk_y_brazo_robotico.

Resumen de la sesión

 

 

En esta sesión hemos aprendido varias cosas importantes:

    • Hemos aprendido a controlar la posición de un servo con el acelerómetro del Nunchuk.
    • Sabemos controlar la posición de un brazo robótico de dos ejes utilizando el movimiento de nuestra mano.
    • Hemos explicado como funcionan los diodos láser.
    • Utilizamos un botón del Nunchuk para encender el diodo láser.

 

No Comments

Give a Reply

WordPress Anti-Spam by WP-SpamShield