Objetivos

 

  • Conectar el Nunchuk al 4-Bot.
  • Leer los movimientos del Nunchuk.
  • Mover a 4-Bot usando el Nunchuk.
  •  

    Material requerido

    El Nunchuk de la Wii

     

    Ya hemos hablado más veces del Nunchuk de la Wii, así que no vamos a entrar mucho en detalle con él más allá de lo que nos interesa para nuestro 4-Bot. Pero si queréis ver un poco más a fondo este dispositivo podéis echar un ojo a esta sesión que le dedicamos en solitario.

    Este mando nos gusta mucho porque además de un joystick y 2 botones incluye un acelerómetro que sirve para detectar el movimiento de nuestra mano,  y que lo hace muy divertido para controlar el 4-Bot. Gracias a él vamos a hacer que 4-Bot se incline en la misma dirección que inclinemos el Nunchuk, mientras que con los botones y el joystick controlaremos el resto de movimientos que tenemos programados.

    yaw-pitch-roll

    El Nunchuck funciona mediante el bus I2C, así que solo vamos a necesitar un par de cables para controlarlo, además de los propios para la alimentación del mando. Sólo tenéis que tener en cuenta que en teoría funciona a 3.3V, y por lo demás el – va a tierra, d (data) a SDA y c (Clock) a SCL, que en el Arduino Uno corresponden a los pines A4 y A5.

    • La forma correcta de colocar el adaptador en la toma del Nunchuk es con los pines hacia el lado del adaptador que no tiene una hendidura.
    • De todas formas, siempre podéis hacerlo por prueba y error. Si al ejecutar el programa no funciona, le dais la vuelta y listo. 

    keyes nunchuk kduino

    Y como casi siempre, hay algunas librerías que nos van a facilitar mucho la programación. Hay varias aunque todas son bastante parecidas, pero nosotros hemos utilizado esta: wiichuck. Esta vez tenemos que incluirla de una manera diferente a la que solemos hacerlo. Lo que tenéis que hacer es descomprimir el archivo que habéis descargado dentro de la carpeta «libraries» que está en el directorio en el que instalasteis el IDE.

     

    Incluir el Nunchuk en el programa

     

    Vamos a modificar el programa para que el robot haga los movimientos que le indiquemos desde el mando. Las funciones que tenemos programadas nos van a servir tal cual, y vamos a modificar el resto del programa.

    Lo primero que tenemos que hacer es incluir las librerías necesarias y crear la instancia para el Nunchuk.

    #include <Wire.h>
    #include  // Librería shield servos
    #include "WiiChuck.h" //Libreria WiiChuck
    #include <math.h>
    
    // De esta manera le llamamos a la direccion por defecto 0x40
    Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
    // Se puede llamar a la direccion que se quiera de esta forma
    // Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x41);
    
    // Dependiendo del tipo de servo el pulso máximo y mínimo es diferente
    // Lo preferible es que sea el máximo posible sin llegar a hacer tope
    
    #define SERVOMIN  150 // Minimo (sobre 4096)
    #define SERVOMAX  550 // Maximo (sobre 4096)
    
    
    const unsigned short h1 = 0; //Hombro extremidad 1
    const unsigned short p1 = 1; //Pata extremidad 1
    const unsigned short h2 = 4; //Hombro extremidad 2
    const unsigned short p2 = 5; //Pata extremidad 2
    const unsigned short h3 = 8; //Hombro extremidad 3
    const unsigned short p3 = 9; //Pata extremidad 3
    const unsigned short h4 = 12; //Hombro extremidad 4
    const unsigned short p4 = 13; //Pata extremidad 4
    
    WiiChuck chuck = WiiChuck(); //Creamos la instancia de WiiChuck
    

    En el setup tenemos que establecer la velocidad del puerto serie e inicializar la instancia del Nunchuk. Además

    void setup()
    {
      Serial.begin(115200); //Configuramos la velocidad del puerto serie
      chuck.begin(); //Iniciamos WiiChuck
      pwm.begin();
      pwm.setPWMFreq(60);  // Los servos funcionan a ~60 Hz
      depie();
    }
    

    Ahora en el loop vamos a actualizar los valores que leemos desde el Nunchuk y los vamos a mostrar por el puerto serie. Cuando tengáis esto programado os recomendamos que lo probéis antes de meter los movimientos y que os aseguréis de que estáis leyendo correctamente el mando.

      delay(100);
      chuck.update(); //Actualizamos los valores
    
      //Imprimimos los valores por pantalla
    
      Serial.print("Eje X: ");
      Serial.print(chuck.readJoyX()); //Eje X del Joystick
      Serial.print(" ");
      Serial.print("Eje Y: ");
      Serial.print(chuck.readJoyY()); //Eje X del Joystick
      Serial.print(" ");
    
      //Boton Z
      if (chuck.buttonZ)
        Serial.print("Z");
      else
        Serial.print("-");
    
      Serial.print(" ");
    
      //Boton C
      if (chuck.buttonC)
        Serial.println("C");
      else
        Serial.println("-");
    
      Serial.print("Lecturas: ");
      Serial.print((int)chuck.readAccelX()); //Lectura eje X
      Serial.print(" ");
      Serial.print((int)chuck.readAccelY()); //Lectura eje Y
      Serial.print(" ");
      Serial.println((int)chuck.readAccelZ()); //Lectura eje Z

    Ahora sólo nos queda hacer unas cuantas condicionales para que el robot obedezca lo que le ordenamos desde el mando.

      if (chuck.readJoyY() < 100 && chuck.readJoyY() > -100 && chuck.readJoyX() < 100 && chuck.readJoyX() > -100 && !chuck.buttonC && !chuck.buttonZ && chuck.readAccelY() > -125 && chuck.readAccelY() < 125 && chuck.readAccelX() > -125 && chuck.readAccelX() < 125) depie(); if (chuck.readJoyX() > 100)
        girarderecha();
      if (chuck.readJoyX() < -100) girarizquierda(); if (chuck.readJoyY() > 100)
        andar();
      if (chuck.readJoyY() < -100)
        atras();
    
      if (chuck.buttonC)
        tumbar();
    
      if (chuck.buttonZ)
        hola();
    
        // Acelerómetro Y arriba sentar
      if (chuck.readAccelY() < -125) sentar(); if (chuck.readAccelY() > 125)
        inclinar();
    
      //Acelerómetro X arriba sentar
      if (chuck.readAccelX() < -125) inclinarizq(); if (chuck.readAccelX() > 125)
        inclinarder();

    Y con esto ya habríamos modificado el programa para poder manejar nuestro 4-Bot desde el Nunchuk utilizando todas sus funcionalidades. Aquí os podéis descargar el programa completo: _4-Bot_Nunchuk. Y como siempre, no os quedéis aquí, probad a modificar el programa y crear vuestros propios movimientos.

    Aquí os dejamos un vídeo de nuestro 4-Bot:

     

    Resumen de la sesión

    En esta sesión hemos aprendido varias cosas importantes:

  • Conectamos el Nunchuk de la Wii al cuadrúpedo 4-Bot.
  • Hemos visto como leer los valores del mando.
  • Utilizamos el Nunchuk para controlar los movimientos del 4-Bot que teníamos ya programados.
  •  

    Deja una respuesta