Informe Proyecto Fundamentos Programacion

20
 Ingeniería en Automatización y Robótica Fundamentos de la Programación 1 Trípode de Posición Controlable

Transcript of Informe Proyecto Fundamentos Programacion

  • 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