informe proyecto fundamentos programacion
TRANSCRIPT
-
Ingeniera en Automatizacin y Robtica Fundamentos de la Programacin
1
Trpode de Posicin
Controlable
-
Ingeniera en Automatizacin y Robtica Fundamentos de la Programacin
2
ndice
Contenido
ndice ............................................................................................................................................. 2
Introduccin .................................................................................................................................. 3
Objetivos Generales y Especficos .................................................................................................. 4
Revisin Bibliogrfica ..................................................................................................................... 5
Carta Gantt .................................................................................................................................... 6
Diagrama de Bloques ..................................................................................................................... 6
Materiales y Presupuestos ............................................................................................................. 7
Desarrollo ...................................................................................................................................... 8
Discusin ......................................................................................................................................15
Conclusin ....................................................................................................................................16
Anexos ..........................................................................................................................................17
-
Ingeniera en Automatizacin y Robtica Fundamentos de la Programacin
3
Introduccin
El uso de la tecnologa forma parte esencial de la vida humana. La necesidad de crear ms y
mejores implementos para facilitar las tareas cotidianas ha impulsado al hombre a desarrollar
mltiples herramientas para satisfacer estas necesidades.
En el ltimo tiempo los sistemas digitales y la electrnica han conformado el principal foco de
desarrollo de tecnologas y su impacto en las vidas de las personas es tal que llega a ser
impensable el vivir sin utilizar estas tecnologas.
Este desarrollo de la tecnologa digital ha impulsado el pensamiento hazlo t mismo. Esto
significa el disear 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, diseada para ser de bajo costo, gran
versatilidad y fcil 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 cmara de vigilancia. El poder manejar la
posicin de la cmara a distancia ofrece una ventaja al aumentar el rango de visin de la cmara.
Esto se logra gracias a la implementacin de un soporte que permita el movimiento en distintos
ngulos. Otra tecnologa que puede aprovechar esta implementacin seran los brazos robticos.
Aunque por lo general estn completamente automatizados, su uso puede ser ampliado a distintas
operaciones de produccin, lo que disminuira el riesgo de accidentes personales en situaciones de
montaje. El control de estos brazos por lo general se realiza con palancas. Siguiendo esta lnea se
pueden encontrar muchos ejemplos donde el control de posicin a distancia genera ventajas
considerables.
El objetivo del proyecto es crear un sistema de control de posicin a distancia que sea preciso e
intuitivo, de forma que su uso sea considerablemente ms simple en comparacin a las
tradicionales palancas de control. Se realizara el proyecto pensando en controlar el Angulo de
visin de una cmara montada sobre un trpode, como una generalizacin de la idea. Utilizando el
control Nunchuck del sistema Nintendo Wii y la placa Arduino se controlara un grupo de
servomotores que movern la cmara en distintos ngulos.
-
Ingeniera en Automatizacin y Robtica Fundamentos de la Programacin
4
Objetivos Generales y Especficos
Objetivo General
Disear un sistema de control a distancia para mover una cmara montada a un trpode.
Objetivos Especficos
Comprender el funcionamiento del control Nunchuck del sistema Nintendo Wii y sus
componentes internos.
Disear una va de comunicacin entre el control Nunchuck y la placa Arduino para poder
controlar la posicin de servomotores.
Realizar el montaje de un trpode de cmara para controlar el ngulo de visin de la
cmara a distancia, utilizando servos, el control Nunchuck y el Arduino.
-
Ingeniera en Automatizacin y Robtica Fundamentos de la Programacin
5
Revisin Bibliogrfica
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
-
Ingeniera en Automatizacin y Robtica Fundamentos de la Programacin
6
Carta Gantt
Diagrama de Bloques
Arduino
Servo Rotacion
Servo Inclinacion
Nunchuck
Boton Z
Boton c
Acelerometroeje X
Acelerometroeje Y
Arduino
Servo 1 Servo 2
Nunchuck
GND a Analog Pin 2
Data a Analog Pin 4
PWR a Analog pin 3
Clock aAnalog pin 5
Pin 9 PMW
Pin 10 PMW
Bateria 9V
Bateria 9V
_
+
Regulador 5V
GNDGND PWR
PWR
+
_
-
Ingeniera en Automatizacin y Robtica Fundamentos de la Programacin
7
Materiales y Presupuestos
Ver expandido en Documento anexo
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
-
Ingeniera en Automatizacin y Robtica Fundamentos de la Programacin
8
Desarrollo El diseo del proyecto inicia con la comunicacin entre el control Nunchuck y la placa Arduino.
Para ello se cuenta con la librera WiiChuck.h encontrada en la pgina oficial de la placa Arduino.
#ifndef WiiChuck_h
#define WiiChuck_h #include "Arduino.h" #include #include
#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;
-
Ingeniera en Automatizacin y Robtica Fundamentos de la Programacin
9
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 5) { lastZ = buttonZ;
lastC = buttonC; lastJoyX = readJoyX(); lastJoyY = readJoyY(); cnt = 0; joyX = (status[0]);
-
Ingeniera en Automatizacin y Robtica Fundamentos de la Programacin
10
joyY = (status[1]); for (i = 0; i < 3; i++) angles[i] = (status[i+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); }
-
Ingeniera en Automatizacin y Robtica Fundamentos de la Programacin
11
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
-
Ingeniera en Automatizacin y Robtica Fundamentos de la Programacin
12
El control Nunchuck funciona utilizando la interfaz de comunicaciones I2C o Inter-Integrated
Circuits (circuitos inter-integrados). Una de las caractersticas de este tipo de comunicacin es
que utiliza solo dos lneas para funcionar, una de datos y una para el reloj del procesador. El
control Nunchuck posee 4 lneas de datos, que son las dos propias de la interfaz I2C y dos ms que
sera la alimentacin (PWR) y tierra (GND).
La librera WiiChuck.h permite la comunicacin entre el Arduino y el Nunchuck utilizando la librera
Wire.h de Arduino.
El Nunchuck posee en su interior un acelermetro de 3 ejes, dos botones y un joystick. Para cada
uno de ellos existe una funcin en la librera que permite leer los datos que se envan adems del
constructor para el objeto Wiichuck. Estas funciones son:
begin() : se utiliza para inicializar la comunicacin entre el Nunchuck y el Arduino.
calibrateJoy() : permite marcar el cero del joystick en la posicin actual del joystick
update() : actualiza los datos ledos del Nunchuck.
readAccelX(), readAccelY(),readAccelZ() : lee el valor del acelermetro en los ejes X, Y, Z
respectivamente.
zPressed(), cPressed() : lee el estado de los botones C, Z respetivamente.
readJoyX(),readJoyY() : lee la posicin del joystick en los ejes X, Y respectivamente.
-
Ingeniera en Automatizacin y Robtica Fundamentos de la Programacin
13
Luego de conocer la librera WiiChuck.h, se disea el programa que ser cargado en el Arduino.
#include #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()
-
Ingeniera en Automatizacin y Robtica Fundamentos de la Programacin
14
El cdigo presentado primero incluye las libreras necesarias para el control de servos, el Nunchuck
y la comunicacin 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 comunicacin 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.
-
Ingeniera en Automatizacin y Robtica Fundamentos de la Programacin
15
Discusin
Uno de los principales problemas que se presentaron a la hora de armar el sistema fue la conexin
entre el Arduino y el Nunchuck. Debido a que la entrada de conexin en el Nunchuck no es
estndar debe realizar un adaptador que permita la conexin. Una de las formas ms simples que
hay es la de directamente cortar el cable del Nunchuck para acceder a los cables. Como esto
destruira el dispositivo se prefiri no considerarlo como opcin vlida.
Existe un adaptador comercial llamado WiiChuck Adapter que permite la conexin. Este
dispositivo adems de ser econmico, es fcilmente construible pues no es ms que una placa PCB
con pines dispuestos de forma que calcen en el Arduino fcilmente.
Para finalizar el asunto de la conexin entre dispositivos, cabe sealar que en algunos modelos de
Nunchuck es posible introducir un cable Pin directamente en el cabezal de conexin del Nunchuck,
lo que permite realizar la conexin 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 energa muchos componentes digitales, sin
embargo, el consumo de energa 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 bateras
como fuente de alimentacin, lo que genero otro problema. Las bateras proveen una tencin 9V,
mientras que los servos funcionan como mucho a 6V. La solucin a esto es proporcionada por un
regulador de voltaje de 5V. De esta forma las bateras proveen un suministro elctrico constante
de 5V y el exceso de electricidad es liberado como calor.
-
Ingeniera en Automatizacin y Robtica Fundamentos de la Programacin
16
Conclusin
Para la realizacin del proyecto fue necesaria una investigacin sobre la interfaz de comunicacin
I2C. De esta se comprendi el esquema de comunicacin entre dispositivos conectados entre s,
comunicndose por medio de I2C, la manera en que la estructura maestro-esclavo regula las
comunicaciones y la estructura de los datos que se envan entre ellos. La principal ventaja que
presenta este tipo de comunicacin es que la interfaz requiere solo dos lneas de datos para
funcionar lo que permite ahorrar conexiones y ofrece una forma sencilla para implementar
dispositivos.
Luego de una bsqueda sobre dispositivos de control a distancia, se obtuvo en lnea una librera
que posibilita la comunicacin entre el control Nunchuck y el Arduino a travs del uso de
comunicacin serial. Dicha librera contiene mtodos que permiten el uso de todos los elementos
del Nunchuck, que son el acelermetro de tres ejes, el joystick direccional y los dos botones. La
librera tambin permite funciones de calibracin para adaptar el Nunchuck a distintas
configuraciones de uso. Ms all del hecho de que dicha librera existiera, se logra apreciar un gran
inters en el uso de dispositivos de control de videojuegos como herramientas para usos en el
desarrollo de hardware de propsito general.
Finalmente, despus de realizar el montaje del trpode, se puede observar que la implementacin
bsica del sistema, que es el controlar una cmara a distancia, es sencilla y de bajo costo. Esto
abre las posibilidades para un diseo de mayor envergadura en reas como la seguridad domstica,
o cualquier necesidad del uso de cmaras controladas a distancia.
-
Ingeniera en Automatizacin y Robtica Fundamentos de la Programacin
17
Anexos
-
Ingeniera en Automatizacin y Robtica Fundamentos de la Programacin
18
-
Ingeniera en Automatizacin y Robtica Fundamentos de la Programacin
19
-
Ingeniera en Automatizacin y Robtica Fundamentos de la Programacin
20