Fundamentos de la Programación
Trípode de Posición
Controlable
1
Ingeniería en Automatización y Robótica
Fundamentos de la Programación
Índice
Contenido
Índice............................................................................................................................................. 2
Introducción .................................................................................................................................. 3
Objetivos Generales y Específicos .................................................................................................. 4
Revisión Bibliográfica ..................................................................................................................... 5
Carta Gantt .................................................................................................................................... 6
Diagrama de Bloques ..................................................................................................................... 6
Materiales y Presupuestos ............................................................................................................. 7
Desarrollo ...................................................................................................................................... 8
Discusión ......................................................................................................................................15
Conclusión ....................................................................................................................................16
Anexos ..........................................................................................................................................17
2
Ingeniería en Automatización y Robótica
Fundamentos de la Programación
Introducción
El uso de la tecnología forma parte esencial de la vida humana. La necesidad de crear más y
mejores implementos para facilitar las tareas cotidianas ha impulsado al hombre a desarrollar
múltiples herramientas para satisfacer estas necesidades.
En el último tiempo los sistemas digitales y la electrónica han conformado el principal foco de
desarrollo de tecnologías y su impacto en las vidas de las personas es tal que llega a ser
impensable el vivir sin utilizar estas tecnologías.
Una de estas placas micro-controladoras es el Arduino, diseñada para ser de bajo costo, gran
versatilidad y fácil uso, lo que permite crear grandes oportunidades de desarrollo. Otra de las
propiedades de Arduino es que es “hardware libre”, lo que significa que cualquiera puede utilizarlo
sin necesitar obtener licencias de uso, por lo que se vuelve accesible a cualquier persona
interesada en aprender y crear. El proyecto a desarrollar involucra el uso del Arduino como
herramienta principal.
Para presentar el proyecto se invita a pensar en una cámara de vigilancia. El poder manejar la
posición de la cámara a distancia ofrece una ventaja al aumentar el rango de visión de la cámara.
Esto se logra gracias a la implementación de un soporte que permita el movimiento en distintos
ángulos. Otra tecnología que puede aprovechar esta implementación serían los brazos robóticos.
Aunque por lo general están completamente automatizados, su uso puede ser ampliado a distintas
operaciones de producción, lo que disminuiría el riesgo de accidentes personales en situaciones de
montaje. El control de estos brazos por lo general se realiza con palancas. Siguiendo esta línea se
pueden encontrar muchos ejemplos donde el control de posición a distancia genera ventajas
considerables.
El objetivo del proyecto es crear un sistema de control de posición a distancia que sea preciso e
intuitivo, de forma que su uso sea considerablemente más simple en comparación a las
tradicionales palancas de control. Se realizara el proyecto pensando en controlar el Angulo de
visión de una cámara montada sobre un trípode, como una generalización de la idea. Utilizando el
control Nunchuck del sistema Nintendo Wii y la placa Arduino se controlara un grupo de
servomotores que moverán la cámara en distintos ángulos.
3
Ingeniería en Automatización y Robótica
Fundamentos de la Programación
Objetivo General
Diseñar un sistema de control a distancia para mover una cámara montada a un trípode.
Objetivos Específicos
Comprender el funcionamiento del control Nunchuck del sistema Nintendo Wii y sus
componentes internos.
Diseñar una vía de comunicación entre el control Nunchuck y la placa Arduino para poder
controlar la posición de servomotores.
4
Ingeniería en Automatización y Robótica
Fundamentos de la Programación
Revisión Bibliográfica
http://arduino.cc/en/Reference/HomePage
http://arduino.cc/es/Reference/Servo
http://arduino.cc/es/Reference/Wire
http://playground.arduino.cc/Main/WiiChuckClass
http://www.olimex.cl/tutorial/Guia%20MCI%20-
%20Servo%20motor%20con%20Arduino.pdf
http://es.wikipedia.org/wiki/I%C2%B2C
5
Ingeniería en Automatización y Robótica
Fundamentos de la Programación
Carta Gantt
Diagrama de Bloques
Acelerometro Servo
Boton Z
eje X Rotacion
Nunchuck
Arduino
Acelerometro Servo
Boton c
eje Y Inclinacion
Pin 9 PMW
_ _
Regulador
5V
Bateria Bateria
9V 9V
+ +
6
Ingeniería en Automatización y Robótica
Fundamentos de la Programación
Materiales y Presupuestos
Presupuesto
Descripcion Costo por Unidad Cantidad Lugar de Compra Referencia
Materiales
Arduino Uno R3 Placa microcontroladora 15440 1 MCI Electronics (Olimex) http://www.olimex.cl/product_info.php?products_id=756&product__name=Arduino_Uno_R3
Servomotor Hitec HS-311 4400 2 Mirax Hobbies http://www.mirax.cl/detalles.php?codigo=27308
Regulador de Voltage L7805 260 1 Casa Royal Codigo Casa Royal: 424370
Broche para Baterias 100 2 Casa Royal Codigo Casa Royal: 356850
Tripode Soligor CT-23 5990 1 Konica "Mi Foto" http://www.mifoto.cl/products/view/247-minitripode-soligor-ct-15
Herramientas
Cautin Goot 30w KS-30R pta redonda 6990 1 Casa Royal Codigo Casa Royal: 233103
Multitester DT 830/D 3990 1 Casa Royal Codigo Casa Royal: 270490
Insumos
Cinta aisladora 690 1 Homecenter Sodimac http://www.sodimac.cl/sodimac-cl/product/720526/Cinta-electrica-negra-scotch?passedNavAction=
Soldadura Golden 1.0 mm, 20 g 60/40 690 1 Casa Royal Codigo Casa Royal: 290610
Baterias Duracell 9V 2250 2 Casa Royal Codigo Casa Royal: 358521
Cables Pin Pack 10 u. 12"" 2630 1 Olimex http://www.olimex.cl/product_info.php?products_id=760&product__name=Cables_Jumpers_Premium_12
Total 50180
7
Ingeniería en Automatización y Robótica
Fundamentos de la Programación
Desarrollo
El diseño del proyecto inicia con la comunicación entre el control Nunchuck y la placa Arduino.
Para ello se cuenta con la librería WiiChuck.h encontrada en la página oficial de la placa Arduino.
#ifndef WiiChuck_h
#define WiiChuck_h
#include "Arduino.h"
#include <Wire.h>
#include <math.h>
class WiiChuck {
private:
uint8_t cnt;
uint8_t status[6];
uint8_t averageCounter;
int i;
int total;
uint8_t zeroJoyX;
uint8_t zeroJoyY;
int lastJoyX;
int lastJoyY;
int angles[3];
bool lastZ, lastC;
public:
uint8_t joyX;
uint8_t joyY;
bool buttonZ;
bool buttonC;
8
Ingeniería en Automatización y Robótica
Fundamentos de la Programación
void begin() {
Wire.begin();
cnt = 0;
averageCounter = 0
Wire.beginTransmission(0x52);
Wire.write(0xF0);
Wire.write(0x55);
Wire.endTransmission();
delay(1);
Wire.beginTransmission(0x52);
Wire.write(0xFB);
Wire.write((uint8_t)0x00);
Wire.endTransmission();
update();
for (i = 0; i<3;i++) {
angles[i] = 0;
}
zeroJoyX = DEFAULT_ZERO_JOY_X;
zeroJoyY = DEFAULT_ZERO_JOY_Y;
}
void calibrateJoy() {
zeroJoyX = joyX;
zeroJoyY = joyY;
}
void update() {
if (cnt > 5) {
lastZ = buttonZ;
lastC = buttonC;
lastJoyX = readJoyX();
lastJoyY = readJoyY();
cnt = 0;
joyX = (status[0]);
9
Ingeniería en Automatización y Robótica
Fundamentos de la Programación
joyY = (status[1]);
for (i = 0; i < 3; i++)
float readAccelX() {
}
float readAccelZ() {
bool zPressed() {
}
bool cPressed() {
10
Ingeniería en Automatización y Robótica
Fundamentos de la Programación
int readJoyX() {
return (int) joyX - zeroJoyX;
}
int readJoyY() {
int readRoll() {
int readPitch() {
return (int) (acos(readAccelY()/RADIUS)/ M_PI * 180.0);
}
private:
uint8_t _nunchuk_decode_byte (uint8_t x){
return x;
void _send_zero(){
Wire.beginTransmission (0x52);
Wire.write ((uint8_t)0x00);
Wire.endTransmission ();
}
};
#endif
11
Ingeniería en Automatización y Robótica
Fundamentos de la Programación
El Nunchuck posee en su interior un acelerómetro de 3 ejes, dos botones y un joystick. Para cada
uno de ellos existe una función en la librería que permite leer los datos que se envían además del
constructor para el objeto Wiichuck. Estas funciones son:
12
Ingeniería en Automatización y Robótica
Fundamentos de la Programación
Luego de conocer la librería WiiChuck.h, se diseña el programa que será cargado en el Arduino.
#include <Servo.h>
#include "Wire.h"
#include "WiiChuck.h"
#define MAXANGLE 90
#define MINANGLE -90
Servo servo1;
Servo servo2;
void setup() {
Serial.begin(115200);
chuck.begin();
chuck.update();
servo1.attach(9);
servo2.attach(10);
servo1.write(89);
servo2.write(89);
chuck.calibrateJoy();
}
void loop() {
delay(20);
chuck.update();
if(chuck.buttonZ==true){
servo1.write(map((int)chuck.readAccelX(),-180,179,0,179));
delay(15);
}
if (chuck.buttonC==true){
servo2.write(map((int)chuck.readAccelY(),-180,179,179,0));
delay(15);
}
if ((chuck.readJoyX()>20 && chuck.readJoyY()>20)||(chuck.readJoyX()<-20
&& chuck.readJoyY()<-20)){
servo1.write(89);
servo2.write(89);
delay(15);
}
}
13
Ingeniería en Automatización y Robótica
Fundamentos de la Programación
El código presentado primero incluye las librerías necesarias para el control de servos, el Nunchuck
y la comunicación en serie. Inicializa los do servos utilizados, vincula el pin 9 con el servo para el
eje X, el pin 10 con el servo para el eje Y, inicia la comunicación entre el Nunchuck y el Arduino y
centra los servos.
Luego en el loop de Arduino, se indica que actualise constantemente las lecturas desde el
Nunchuck.
El sistema de servos no se mueve en todo momento. Para ello se requiere que se mantengan
presionados los botones Z para mover el eje X o C para mover el eje Y o ambos para un
movimiento simultaneo.
Finalmente se implementa una forma de volver a centrar el sistema en cualquier momento. Para
ello se debe mover el joystick hacia arriba.
14
Ingeniería en Automatización y Robótica
Fundamentos de la Programación
Discusión
Uno de los principales problemas que se presentaron a la hora de armar el sistema fue la conexión
entre el Arduino y el Nunchuck. Debido a que la entrada de conexión en el Nunchuck no es
estándar debe realizar un adaptador que permita la conexión. Una de las formas más simples que
hay es la de directamente cortar el cable del Nunchuck para acceder a los cables. Como esto
destruiría el dispositivo se prefirió no considerarlo como opción válida.
Existe un adaptador comercial llamado WiiChuck Adapter que permite la conexión. Este
dispositivo además de ser económico, es fácilmente construible pues no es más que una placa PCB
con pines dispuestos de forma que calcen en el Arduino fácilmente.
Para finalizar el asunto de la conexión entre dispositivos, cabe señalar que en algunos modelos de
Nunchuck es posible introducir un cable Pin directamente en el cabezal de conexión del Nunchuck,
lo que permite realizar la conexión directamente.
Otra de las dificultades que se presentaron a la hora de armar el sistema fue una forma de
energizar los servos. El Arduino puede proveer de energía muchos componentes digitales, sin
embargo, el consumo de energía de los servos puede ser muy alto, lo que genera el riesgo de
quemar la placa. Para solucionar esto se recurrió a una fuente externa. Se decidió utilizar baterías
como fuente de alimentación, lo que genero otro problema. Las baterías proveen una tención 9V,
mientras que los servos funcionan como mucho a 6V. La solución a esto es proporcionada por un
regulador de voltaje de 5V. De esta forma las baterías proveen un suministro eléctrico constante
de 5V y el exceso de electricidad es liberado como calor.
15
Ingeniería en Automatización y Robótica
Fundamentos de la Programación
Conclusión
Para la realización del proyecto fue necesaria una investigación sobre la interfaz de comunicación
I2C. De esta se comprendió el esquema de comunicación entre dispositivos conectados entre sí,
comunicándose por medio de I2C, la manera en que la estructura maestro-esclavo regula las
comunicaciones y la estructura de los datos que se envían entre ellos. La principal ventaja que
presenta este tipo de comunicación es que la interfaz requiere solo dos líneas de datos para
funcionar lo que permite ahorrar conexiones y ofrece una forma sencilla para implementar
dispositivos.
Luego de una búsqueda sobre dispositivos de control a distancia, se obtuvo en línea una librería
que posibilita la comunicación entre el control Nunchuck y el Arduino a través del uso de
comunicación serial. Dicha librería contiene métodos que permiten el uso de todos los elementos
del Nunchuck, que son el acelerómetro de tres ejes, el joystick direccional y los dos botones. La
librería también permite funciones de calibración para adaptar el Nunchuck a distintas
configuraciones de uso. Más allá del hecho de que dicha librería existiera, se logra apreciar un gran
interés en el uso de dispositivos de control de videojuegos como herramientas para usos en el
desarrollo de hardware de propósito general.
Finalmente, después de realizar el montaje del trípode, se puede observar que la implementación
básica del sistema, que es el controlar una cámara a distancia, es sencilla y de bajo costo. Esto
abre las posibilidades para un diseño de mayor envergadura en áreas como la seguridad doméstica,
o cualquier necesidad del uso de cámaras controladas a distancia.
16
Ingeniería en Automatización y Robótica
Fundamentos de la Programación
Anexos
17
Ingeniería en Automatización y Robótica
Fundamentos de la Programación
18
Ingeniería en Automatización y Robótica
Fundamentos de la Programación
19
Ingeniería en Automatización y Robótica
Fundamentos de la Programación
20