Anda di halaman 1dari 20

Ingeniería en Automatización y Robótica

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.

Este desarrollo de la tecnología digital ha impulsado el pensamiento “hazlo tú mismo”. Esto


significa el diseñar por cuenta propia herramientas que faciliten las necesidades puntuales de cada
persona. Para ello se han creado muchos implementos, entre los cuales existen las placas micro-
controladoras.

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

Objetivos Generales y Específicos

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.

 Realizar el montaje de un trípode de cámara para controlar el ángulo de visión de la


cámara a distancia, utilizando servos, el control Nunchuck y el Arduino.

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

GND a Analog Pin 2 Servo 1 Servo 2


Pin 10 PMW
Data a Analog Pin 4 Arduino
Nunchuck
PWR a Analog pin 3
GND PWR
GND PWR
Clock aAnalog pin 5

_ _
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

Ver expandido en Documento anexo

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>

#define ZEROX 510


#define ZEROY 490
#define ZEROZ 460
#define RADIUS 210

#define DEFAULT_ZERO_JOY_X 124


#define DEFAULT_ZERO_JOY_Y 132

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() {

Wire.requestFrom (0x52, 6);


while (Wire.available ()) {

status[cnt] = _nunchuk_decode_byte (Wire.read());


cnt++;
}

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++)

angles[i] = (status[i+2] << 2) + ((status[5] & (B00000011 <<


((i+1)*2) ) >> ((i+1)*2)));

buttonZ = !( status[5] & B00000001);


buttonC = !((status[5] & B00000010) >> 1);
_send_zero();
}
}

float readAccelX() {

return (float)angles[0] - ZEROX;


}
float readAccelY() {

return (float)angles[1] - ZEROY;

}
float readAccelZ() {

return (float)angles[2] - ZEROZ;

bool zPressed() {

return (buttonZ && ! lastZ);

}
bool cPressed() {

return (buttonC && ! lastC);

bool rightJoy(int thresh=60) {

return (readJoyX() > thresh and lastJoyX <= thresh);

bool leftJoy(int thresh=60) {

return (readJoyX() < -thresh and lastJoyX >= -thresh);

10
Ingeniería en Automatización y Robótica
Fundamentos de la Programación

int readJoyX() {
return (int) joyX - zeroJoyX;
}

int readJoyY() {

return (int)joyY - zeroJoyY;

int readRoll() {

return (int)(atan2(readAccelX(),readAccelZ())/ M_PI * 180.0);

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 control Nunchuck funciona utilizando la interfaz de comunicaciones I2C o “Inter-Integrated


Circuits” (circuitos inter-integrados). Una de las características de este tipo de comunicación es
que utiliza solo dos líneas para funcionar, una de datos y una para el reloj del procesador. El
control Nunchuck posee 4 líneas de datos, que son las dos propias de la interfaz I2C y dos más que
sería la alimentación (PWR) y tierra (GND).

La librería WiiChuck.h permite la comunicación entre el Arduino y el Nunchuck utilizando la librería


Wire.h de Arduino.

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:

 begin() : se utiliza para inicializar la comunicación entre el Nunchuck y el Arduino.


 calibrateJoy() : permite marcar el “cero” del joystick en la posición actual del joystick
 update() : actualiza los datos leídos del Nunchuck.
 readAccelX(), readAccelY(),readAccelZ() : lee el valor del acelerómetro en los ejes X, Y, Z
respectivamente.
 zPressed(), cPressed() : lee el estado de los botones C, Z respetivamente.
 readJoyX(),readJoyY() : lee la posición del joystick en los ejes X, Y respectivamente.

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

WiiChuck chuck = WiiChuck();

int angleStart, currentAngle;


int tillerStart = 0;
double angle;

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

Anda mungkin juga menyukai