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.
  •  

    Vista principal Arduino UNO
    Vista principal Nunchuck WII
     Bazo robótico dos ejes  Soporte pan & tilt
     Vista lateral  Diodo Laser
     Vista principal  2 x Servo SG90
    Img_3_6 cables de Protoboard

    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(6) ; // Conectar servo1 al pin 6
     servo2.attach(9) ; // Conectar servo1 al pin 9
     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.[/fancy-ul] [/three-fourth]

    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.
  •  

    Deja una respuesta