Los materiales que ocuparemos en esta practica son:

1 Arduino UNO.

1 Wii Nunchuk.

1 Estructura «Pan Tilt» para servos como la que se muestra aquí.

2 Servo motores Sg90.

Cables para Conexión.

Nota: Yo usare una cámara USB que monte a la estructura solo para el ejemplo.

Conexión.

Algo de información sobre el Wii Nunchuk(Wikipedia):

Hardware

La siguiente tabla describe las entradas de un Nunchuk, el hardware que se utiliza para controlar la entrada, y la forma en que se monta en la placa de circuito.}

Input

Hardware

Montaje
Botón C interruptor de membrana placa hija, a través de agujeros
Botón Z interruptor de membrana placa hija, a través de agujeros
Joystick X potenciómetro axial de 30KΩ a través de agujeros
Joystick Y potenciómetro axial de 30KΩ a través de agujeros
Acelerómetro ST Microelectronics LIS3L02AL Montado en superficie, arriba
Microcontrolador FNURVL 405 849KM (36-pin) Montado en superficie, abajo

Chips FNURVL se han encontrado presentes en varias versiones del mando clásico de la Super Nintendo Entertainment System y en el Classic Controller de la Wii.

Como ya lo vimos el Nunchuk tiene integrado un acelerometro y 2 potenciometros que se encargarán de enviarnos las «coordenadas» a Arduino y visualizarlas en el monitor serial.

El código que les muestro a continuación solo sirve para mostrarnos los datos en el monitor serial.

//Arduino Center//
//www.facebook.com/ArduinoCenter
 
#include "Wire.h"
#include "ArduinoNunchuk.h"
 
ArduinoNunchuk nunchuk = ArduinoNunchuk();
int xjoystick;
int yjoystick;
int xtilt;
int ytilt;
 
void setup() {
  Serial.begin(9600);
  nunchuk.init();
}
 
void loop() {
  xjoystick = nunchuk.analogX;
  xjoystick = constrain(xjoystick, 26, 226);
  xjoystick = map(xjoystick, 26, 226, 0, 180);
 
  yjoystick = nunchuk.analogY;
  yjoystick = constrain(yjoystick, 26, 226);
  yjoystick = map(yjoystick, 26, 226, 180, 0);
 
  xtilt = nunchuk.accelX;
  xtilt = constrain(xtilt, 320, 720);
  xtilt = map(xtilt, 320, 720, 180, 0);
 
  ytilt = nunchuk.accelY;
  ytilt = constrain(ytilt, 320, 720);
  ytilt = map(ytilt, 320, 720, 0, 180);
 
  Serial.print ("Joystick X: ");
  Serial.print (xjoystick, DEC);
  Serial.print ("\t");
 
  Serial.print ("Joystick Y: ");
  Serial.print (yjoystick, DEC);
  Serial.print ("\t");
 
  Serial.print ("X: ");
  Serial.print (xtilt, DEC);
  Serial.print ("\t");
 
  Serial.print ("Y: ");
  Serial.print (ytilt, DEC);
  Serial.print ("\t");
  nunchuk.update();
 
  if (nunchuk.cButton == 1) {
    Serial.print("--C--  ");
  }
 
  if (nunchuk.zButton == 1) {
    Serial.print("--Z--  ");
  }
 
  if (nunchuk.cButton == 1 && nunchuk.zButton == 1) {
    Serial.print("--Z-C--");
  }
 
  Serial.print ("\r\n");
  delay(15);
}

 

Después de cargarlo al Arduino se nos mostrara lo siguiente:

 

Ahora podemos hacer lo que queramos con estos datos.

Cargamos el sketch que les dejo a continuación para empezar a manipular los servos con el mando.

//Arduino Center//
//www.facebook.com/ArduinoCenter
 
 
//Incluimos las librerias necesarias
#include "Wire.h"
#include "ArduinoNunchuk.h"
#include <Servo.h>
 
//Creamos los objetos para el mando y los servos
ArduinoNunchuk nunchuk = ArduinoNunchuk();
Servo servo1;
Servo servo2;
 
//Inicializamos las variables
int xjoystick;
int yjoystick;
int xtilt;
int ytilt;
 
void setup() {
  //Inicializamos el monitor serial para ver los datos.
  Serial.begin(9600);
  //Inicializamos Nunchuk y señalamos los pines usados por los servos.
  nunchuk.init();
  servo1.attach(2);
  servo2.attach(3);
}
 
void loop() {
  //Guardamos los valores que nos manda el Nunchuk en las variables
  xjoystick = nunchuk.analogX;
  xjoystick = constrain(xjoystick, 26, 226);
  xjoystick = map(xjoystick, 26, 226, 0, 180);
 
  yjoystick = nunchuk.analogY;
  yjoystick = constrain(yjoystick, 26, 226);
  yjoystick = map(yjoystick, 26, 226, 180, 0);
 
  xtilt = nunchuk.accelX;
  xtilt = constrain(xtilt, 320, 720);
  xtilt = map(xtilt, 320, 720, 180, 0);
 
  ytilt = nunchuk.accelY;
  ytilt = constrain(ytilt, 320, 720);
  ytilt = map(ytilt, 320, 720, 0, 180);
 
  Serial.print ("Joystick X: ");
  Serial.print (xjoystick, DEC);
  Serial.print ("\t");
 
  Serial.print ("Joystick Y: ");
  Serial.print (yjoystick, DEC);
  Serial.print ("\t");
 
  Serial.print ("X: ");
  Serial.print (xtilt, DEC);
  Serial.print ("\t");
 
  Serial.print ("Y: ");
  Serial.print (ytilt, DEC);
  Serial.print ("\t");
 
  nunchuk.update();
 
  if (nunchuk.cButton == 1) {
    Serial.print("--C--  ");
  }
 
  if (nunchuk.zButton == 1) {
    Serial.print("--Z--  ");
  }
 
  if (nunchuk.cButton == 1 && nunchuk.zButton == 1) {
    Serial.print("--Z-C--");
  }
 
  Serial.print ("\r\n");
 
  //Con este while decimos que se muevan los servos
  //solo cuando mantengamos oprimido el boton Z
  //y se moveran conforme la posicion de el acelerometro
  while (nunchuk.zButton == 1) {
    servo1.write(xtilt);
    servo2.write(ytilt);
    break;
  }
  //Con este while decimos que se muevan los servos
  //solo cuando mantengamos oprimido el boton C
  //y se moveran conforme la posicion de el Joystick
  while (nunchuk.cButton == 1) {
    servo1.write(xjoystick);
    servo2.write(yjoystick);
    break;
  }
 
  delay(15);
}

 

Para ver el resultado final se muestra en el foro

Espero les guste este post, y de ser así no olviden darle un like, compartir y dejar sus comentarios en caso de que tengan alguna duda.

Hasta pronto colegas!!!

 

Por: @Riojas

Posts Relacionados

Comments

comments

Deja una respuesta

Tu email no será publicado. Los campos requeridos estan marcados con *
Puedes usar tags HTML y los atributos: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>