Está en la página 1de 119

Universidad de Costa Rica Facultad de Ingeniera Escuela de Ingeniera Elctrica

IE 0502 Proyecto Elctrico

Diseo e implementacin de un sistema de control remoto con sensores de movimiento y rotacin utilizando el protocolo de comunicacin inalmbrica ZigBee

Por: Julin Gutirrez Monge

Ciudad Universitaria Rodrigo Facio Primer Semestre del 2011

Diseo e implementacin de un sistema de control remoto con sensores de movimiento y rotacin utilizando el protocolo de comunicacin inalmbrica ZigBee
Por: Julin Gutirrez Monge

Sometido a la Escuela de Ingeniera Elctrica de la Facultad de Ingeniera de la Universidad de Costa Rica como requisito parcial para optar por el grado de: BACHILLER EN INGENIERA ELCTRICA

Aprobado por el Tribunal: _________________________________ Ing. Fabin Abarca Caldern Profesor Gua

_________________________________ Ing. Lochi Yu Lo, Ph.D. Profesor lector

_________________________________ Ing. Miguel Ruphuy Chan Profesor lector

ii

DEDICATORIA

Les dedico este proyecto a mi familia y a todas las personas que me han apoyado desde el comienzo en mi experiencia universitaria. A mis padres por el apoyo incondicional en todo momento, y aquellas regaadas que fueron necesarias de vez en cuando. A mis hermanas por todo el apoyo y en especial por disque poner atencin cuando les hablaba sobre algo del que supuestamente no estaban interesadas, aunque yo s que s; por lo menos un poco. Y a mis amigos, en especial a los elctricos que sin ellos este camino hubiera sido mucho ms difcil y tedioso.

Muchsimas gracias a todos!

iii

RECONOCIMIENTOS

Deseo darle un reconocimiento a mi profesor gua, el Ing. Fabin Abarca, por ayudarme en todo este proceso y quien confiaba en mi aun cuando no todo resultaba como se deseaba. Tambin me gustara reconocer el apoyo que me dieron los profesores lectores del proyecto, el Ing. Miguel Ruphuy y el Dr. Lochi Yu, quienes fueron de igual forma, muy importantes en el desarrollo del proyecto. Por ltimo, a mi familia por la ayuda y la paciencia que me mostraron en todo este proceso.

iv

NDICE GENERAL
1 1.1 CAPTULO I: Introduccin ........................................................................................ 1 Objetivos ................................................................................................................. 2 1.1.1 1.1.2 1.2 2 2.1 Objetivo general ............................................................................................ 2 Objetivos especficos..................................................................................... 2

Metodologa ............................................................................................................ 3 CAPTULO II: Desarrollo terico............................................................................... 5 IMU: Unidades de medicin inerciales .................................................................... 5 2.1.1 2.1.2 2.1.3 Acelermetros ............................................................................................... 7 Giroscopios ................................................................................................. 17 El Filtro de Kalman ..................................................................................... 26

2.2

ZigBee ................................................................................................................... 28 2.2.1 2.2.2 2.2.3 2.2.4 Generalidades.............................................................................................. 28 Comparacin con Bluetooth ........................................................................ 29 IEEE 802.15.4 y su relacin con ZigBee ..................................................... 31 Topologas .................................................................................................. 35

3 3.1

CAPTULO III: Equipo ............................................................................................ 38 Interfaz Zigbee ...................................................................................................... 38 3.1.1 3.1.2 Mdulo Xbee con Antena de cobre de 1mW................................................ 38 Xbee Explorer ............................................................................................. 41 v

3.1.3 3.2

Xbee Shield para Arduino ........................................................................... 41

Sensores ................................................................................................................ 42 3.2.1 3.2.2 Acelermetro MMA7260Q ......................................................................... 48 Giroscopio LISY300AL .............................................................................. 50

3.3

Micro-controlador.................................................................................................. 52 3.3.1 Arduino Mega 2560 .................................................................................... 52

4 4.1

CAPTULO IV: Aplicacin ...................................................................................... 54 Configuracin de la red de comunicacin ZigBee. ................................................. 54 4.1.1 Procedimiento ............................................................................................. 54

4.2 4.3

Utilizacin del sensor Atomic IMU - 6DOF de Sparkfun .................................... 57 Utilizacin del Arduino Mega 2560 con el Xbee Shield de Sparkfun................... 61 4.3.1 Configurando el Arduino Mega 2560 para usarlo como una interfaz de

comunicacin serial. ................................................................................................. 62 4.3.2 Configurando el Arduino Mega 2560 para procesar la informacin del sensor

y enviarla a la computadora. ..................................................................................... 63 4.4 Aplicacin: Carro a control remoto ........................................................................ 66 4.4.1 4.4.2 4.4.3 4.5 4.6 Control ........................................................................................................ 66 Puente H ..................................................................................................... 71 Pruebas ....................................................................................................... 76

Aplicacin: Medicin de distancia. ........................................................................ 79 Inconvenientes en la ejecucin del proyecto ........................................................... 81

vi

5 5.1 5.2 6 6.1 6.2 6.3 6.4 7

CAPTULO V: Conclusiones y Recomendaciones .................................................... 84 Conclusiones ......................................................................................................... 84 Recomendaciones .................................................................................................. 85 REFERENCIAS ....................................................................................................... 87 Libros .................................................................................................................... 87 Pginas Web .......................................................................................................... 88 Hojas de datos ....................................................................................................... 90 Manuales o tutoriales ............................................................................................. 90 APNDICES ............................................................................................................ 92

vii

NDICE DE FIGURAS
Figura 2-1. Ejemplo del error de Abbe. ............................................................................... 6 Figura 2-2 . Ejemplo funcional de un acelerometro. ............................................................ 8 Figura 2-3. Modelo del principio de un acelermetro. ....................................................... 11 Figura 2-4. Construccin de un acelermetro piezo-resistivo. ........................................... 14 Figura 2-5. Construccin de un acelermetro piezoelctrico. ............................................ 15 Figura 2-6. Fundamento prctico de un acelermetro de gas caliente. ............................... 16 Figura 2-7. Ejemplo funcional de un giroscopio................................................................ 19 Figura 2-8. Giroscopio Foucault. ...................................................................................... 20 Figura 2-9. Modelo de un giroscopio vibratorio. ............................................................... 23 Figura 2-10. Comparacin del estndar ZigBee con Bluetooth y el estndar IEEE 802.11b. ......................................................................................................................................... 29 Figura 2-11. Capas del Protocolo ZigBee.......................................................................... 31 Figura 2-12. Estructura de un paquete ZigBee. ................................................................. 33 Figura 2-13. Ejemplo de una topologa estrella. ................................................................ 36 Figura 2-14. Ejemplo de una topologa punto a punto. ...................................................... 37 viii

Figura 3-1. Fotografa del mdulo Xbee Serie 1 con Antena de 1mW de Digi. .............. 38 Figura 3-2. Modo de envo de datos en una conexin UART. ........................................... 40 Figura 3-3. Fotografa del Xbee Explorer de Sparkfun. .................................................. 41 Figura 3-4. Fotografa del Xbee Shield de Sparkfun. ...................................................... 42 Figura 3-5. Fotografa del sensor Atomic IMU 6 Degrees of Freedom Xbee Ready de Sparfun. ......................................................................................................................... 43 Figura 3-6. Fotografa ejemplar del acelermetro MMA7260Q de Sparkfun. ................. 49 Figura 3-7. Funcionamiento bsico del acelermetro MMA7260Q. .................................. 49 Figura 3-8. Fotografa ejemplar del giroscopio LISY300AL de Sparkfun. ..................... 51 Figura 3-9. Fotografa ejemplar del Arduino Mega 2560. ................................................. 53 Figura 4-1. Imagen del programa Atomic Mixer con el sensor en reposo, comunicndose a travs de la conexin ZigBee. ........................................................................................... 58 Figura 4-2. Imagen del programa Atomic Mixer con el sensor movindose y girando aleatoriamente. ................................................................................................................. 58 Figura 4-3. Men de configuracin del Atomic IMU 6DOF utilizando la consola Serial del software del Arduino. ................................................................................................. 59

ix

Figura 4-4. Imagen de la consola serial al configurar el sensor y los valores que imprime en la pantalla. ........................................................................................................................ 60 Figura 4-5. Fotografa ejemplar del cambio que se le realiza al Xbee Shield. .................... 61 Figura 4-6. Otra fotografa ejemplar del cambio que se le realiza al Xbee Shield. ............. 62 Figura 4-7. Diagrama de flujo del cdigo implementado en la prueba de conversin simple. ......................................................................................................................................... 65 Figura 4-8. Imagen demostrativa de la salida de la prueba del convertidor simple. ............ 66 Figura 4-9. Seales de PWM con distintos ciclos de trabajo (pulse width). ....................... 69 Figura 4-10. Esquemtico general de un puente H. ........................................................... 72 Figura 4-11. Esquemtico del Puente H a usar para el motor de la direccin. .................... 74 Figura 4-12. Esquemtico del Puente H a usar para el motor de la aceleracin. ................. 75

NDICE DE TABLAS
Tabla 1-1. Metodologa. ..................................................................................................... 3 Tabla 2-1. Ejemplos de rangos que necesitan los giroscopios para aplicaciones especficas. ......................................................................................................................................... 25 Tabla 2-2. IEEE 802.15.4 Transferencia de datos y Operaciones de frecuencia. ................ 34 Tabla 3-1. Bytes que se pueden mandar al Sensor en el estado de idle. .......................... 44 Tabla 4-1. Valores posibles para las seales de control del motor encargado de la aceleracin. ...................................................................................................................... 70 Tabla 4-2. Vectores usados en la aplicacin para calcular la distancia. .............................. 79

xi

NOMENCLATURA
Abreviatura ASIC ASK BPSK CAD DIOP FFD g ICSP IEEE IMU INS MAC O-QPSK PHY PWM RFD UART WLAN WPANS Definicin Circuitos integrados de aplicacin especfica Amplitud Shift Keying Binary Phase Shift Keying Convertidor Analgico Digital Pines digitales para entrada y salida Dispositivo Funcional Completo Fuerza gravitacional. 9.8 m/s2 In- Circuit Serial Programming Instituto de Ingenieros Elctricos y Electrnicos Unidad de mediciones inerciales Sistemas inerciales de navegacin Medium Access Control Offset Quadrature Phase Shift Keying Physical Layer Modulacin por ancho de pulso Dispositivo Funcional Reducido Transmisor-Receptor Asncrono Universal Wireless Local Area Network Wireless Personal Area Network

xii

RESUMEN

El presente proyecto fue desarrollado con el fin de conocer ms a fondo la construccin y el manejo de los sensores de posicin y movimiento conocidos como acelermetros y giroscopios. Tambin se utiliz el protocolo de comunicacin inalmbrica ZigBee para poder utilizar los sensores remotamente a la aplicacin que se les daba. En este caso, la aplicacin era controlar un carro a control remoto utilizando la orientacin que tena el sensor, que en este caso era el control remoto. La implementacin de la aplicacin tuvo diversas complicaciones debido a problemas tanto en hardware como en el programa. Dicho esto, se logr resolver la aplicacin satisfactoriamente luego de hacer diversos cambios, especialmente en los puentes H que se utilizan para controlar los motores del carro. Es de suma importancia que en el desarrollo de proyectos futuros se implementen tcnicas que ayuden a maximizar el uso del tiempo en la elaboracin del trabajo, como lo es, probar cada etapa del proyecto por aparte y luego todo en conjunto y no todo al mismo tiempo debido a que esto podra hacer que sea ms difcil encontrar un error en el trabajo. Estos sensores son muy comunes hoy en da, y espero que cada vez se desarrolle de una mejor manera esta tecnologa, ya que se pueden utilizar para muchas aplicaciones tiles. xiii

1 CAPTULO I: Introduccin
La utilidad de los sensores inerciales (IMU) se ha vuelto cada vez ms reconocida debido a que son instrumentos con los que nos podemos comunicar fcilmente; volvindose de esta manera en un puente ms angosto entre la tecnologa y la sensacin de naturaleza. Esto ha resultado en uno de los impulsos ms grandes para estos sensores, ya que son muy utilizados en los videos juegos y en los celulares y Tablet PCs modernos. Tanto en el Wii como en el Play Station 3, existen controles, que por medio de estos instrumentos, nos permiten tener una conexin ms real con el juego. Eso s, su utilidad va ms all de simplemente estos usos, tambin se usan en gran medida en los sistemas de navegacin y muchas ms aplicaciones. Al igual que los IMU, el uso de la red inalmbrica Zigbee ha florecido en gran medida en los ltimos aos. Sus caractersticas permiten una gran forma de crear sistemas simples y baratos para comunicar diferentes instrumentos. De hecho que uno de los principales usos que se le dan a este protocolo es en sistemas inalmbricos con sensores (WSN por sus siglas en ingles). Se escogi este tema debido a que existe un gran inters, hoy en da, tanto por los sensores inerciales como el acelermetro y el giroscopio, cmo por el protocolo de red inalmbrica conocida como Zigbee de baja transmisin de datos. Este proyecto presenta una manera de tener un conocimiento ms profundo del funcionamiento de estos sistemas, de manera que exista un estudio ms accesible para comprender estos medios.

1.1 Objetivos
1.1.1 Objetivo general
Disear e implementar un sistema de control remoto inalmbrico utilizando sensores de movimiento y rotacin, mediante una interfaz ZigBee y una etapa de procesamiento y control con micro controladores.

1.1.2 Objetivos especficos


Disear e implementar un sistema de sensores de movimiento y rotacin, mediante el uso de acelermetros y giroscopios. Implementar un sistema de comunicacin inalmbrica bajo el protocolo ZigBee. Crear una etapa de procesamiento y control utilizando un micro controlador Arduino. Disear e implementar una aplicacin controlada por el sistema realizado.

1.2 Metodologa
La metodologa que se utilizar para la concrecin de los objetivos especficos se puede ver a continuacin en la siguiente tabla.
Tabla 1-1. Metodologa.

Objetivo Disear e implementar un sistema de sensores de posicin y movimiento, mediante el uso de acelermetros.

Actividades
Estudiar el funcionamiento general de los acelermetros y giroscopios con el uso de libros y material extra. Disear el cdigo a programar en el sensor 6DOF Atomic v3 de la empresa Sparkfun basndose en el que ofrece dicha empresa. Comprobar que el acelermetro y los giroscopios del sensor estn

funcionando correctamente. Para esto se puede utilizar algunas herramientas que ofrece Sparkfun.

Implementar un sistema de comunicacin inalmbrica bajo el protocolo ZigBee.

Estudiar el funcionamiento general del protocolo Zigbee. Configurar los mdulos a utilizar (Xbee serie 1) para el uso dentro del proyecto,

segn

lo

estipulado

en

tutoriales

ofrecidos por la empresa Sparkfun Electronics.

Crear una etapa de procesamiento y control utilizando un microcontrolador Arduino.

Configurar

un

microcontrolador

Arduino Mega para poder comunicarse por medio del protocolo Zigbee, por medio del uso de un chip llamado Xbee Shield. Configurar dicho microcontrolador para procesar la informacin recibida para implementarla en el uso que se le va a dar al sistema.

Disear e implementar una aplicacin controlada por el sistema realizado.

Crear una aplicacin funcional para el sistema en cuestin. Configurar el microcontrolador para poder controlar el sistema que se va a implementar. Comprobar que el sistema est

funcionando correctamente.

2 CAPTULO II: Desarrollo terico


2.1 IMU: Unidades de medicin inerciales
Un sensor se puede definir como un dispositivo que est capacitado para detectar acciones o estmulos externos y responder en consecuencia. Estos aparatos pueden transformar las magnitudes fsicas o qumicas en magnitudes elctricas. [2.3]

En pocas palabras, un sensor es capaz de medir un agente externo y transformarlo en una seal elctrica el cual despus se puede interpretar para lograr un objetivo u obtener un resultado. Las unidades de medicin inerciales son instrumentos electrnicos que miden la velocidad, orientacin y fuerza gravitacional aplicada en un objeto por medio del uso de unos sensores conocidos como acelermetros y giroscopios [2.13]. Debido a las caractersticas de estos sensores, los IMUs se han usado en gran medida en sistemas de navegacin tanto martima como area. Otro uso que se les ha dado recientemente el cual a captivado a muchas personas, es en las tablet PCs, como el iPad de la Apple. Estos utilizan estos sensores para que tenga la habilidad de girar el contenido que sale en la pantalla en caso de que el objeto sea girado, o para aplicaciones como juegos de carreras, entre otros. Este proyecto se basa en el uso de estos dos sensores mencionados.

A grandes rasgos, los acelermetros miden aceleracin, mientras que los giroscopios miden velocidad radial. Teniendo dicha informacin sobre los 3 ejes fsicos (x, y, z), es posible deducir tanto la posicin y orientacin de un objeto, cmo la distancia que ha recorrido durante un tiempo determinado dado un punto de referencia. Este tipo de navegacin es conocida como navegacin a estima [2.15]. Debido a las caractersticas intrnsecas de los sensores y este tipo de mediciones; es comn que dichos datos presenten un error conocido como el error de Abb [2.5]. El error de Abb consiste en que dada una medicin en una dimensin espacial como un desplazamiento lineal, y existe un cambio de orientacin angular entre el desplazamiento del objeto y el eje de referencia de la medicin, este error ser la diferencia que existe entre la posicin real del objeto y la medicin obtenida. La mejor forma de explicarlo es por medio de un ejemplo.

[2.6]
Figura 2-1. Ejemplo del error de Abbe.

Viendo la Figura 2-1 se puede observar que la medicin se da en un eje dado, pero hubo otro desplazamiento en el otro eje de manera que causa un desfase entre la posicin

real del objeto y la posicin obtenida. Dicha medicin es hecha de punto a punto de manera que si existe un error en una medicin, por ms pequea que sea, este error se ir sumando a otras hasta que el desfase entre la posicin real y la posicin que se cree que est, es muy diferente. Este tipo de errores es corregible, y debido a esto es que se usan los acelermetros y los giroscopios en conjunto, para corregir de la mejor manera posible esta clase de desfases. Aun as, siempre existe una diferencia entre la medicin obtenida y la posicin real.

2.1.1 Acelermetros
Los acelermetros llevan varias dcadas de existir, pero, como se ha dado en toda tecnologa en general, actualmente ha tenido una gran evolucin debido a su utilidad. Gracias a la micro-tecnologa [1.5], ha habido una gran mejora en la precisin, la linealidad, la estabilidad, la potencia que consume y el tamao de estos sensores.

2.1.1.1 Generalidades Primero que nada, es necesario explicar la componente fsica que est detrs de los sensores. Un acelermetro puede clasificarse segn el principio fsico que usen: La medicin directa de una fuerza. La medicin indirecta por medio del desplazamiento o la deformacin de un elemento.

Ahora, como se mencion antes, un acelermetro mide aceleracin, aunque en pocas palabras, se puede reducir a que mide fuerza. Esto se puede observar por medio de la ecuacin de la ley de Newton dada por: (1) Donde F es fuerza, m masa y a aceleracin. Teniendo en cuenta que la masa es constante, la relacin entre fuerza y aceleracin es lineal. De manera que en la realidad, un acelermetro mide fuerza por medio de distintas maneras, que se vern ms adelante, y teniendo la proporcin definida, se puede desarrollar el valor de la aceleracin. Antes de adentrarse en los tipos de acelermetros que existen, es necesario comprender su funcionamiento general. La mejor manera de explicar cmo funcionan es por medio de un ejemplo.

[3.4]
Figura 2-2 . Ejemplo funcional de un acelerometro.

Imaginmonos la bola que se encuentra en la Figura 2-2. sta est ubicada dentro de un cubo. Como se puede notar, cada cara del cubo representa un valor en el eje de coordenadas ( x+ , x- , y- , y+ , z+ , z- ). Y+ no se nota debido a que es la cara que est justo entre la bola y nuestro punto de referencia. Esta bola se encuentra en un estado sin peso de manera que las aceleraciones aplicadas en dicha bola son 0 en cada uno de los ejes. Para comprender mejor el funcionamiento, es ms fcil imaginarse que ahora la caja se mueve hacia la derecha a una aceleracin de 1m/s2. Lo que ocurrir es que la bola chocar con la cara x- del cubo, sintiendo esta aceleracin, de manera que el valor de la aceleracin en los ejes y y z valdr 0, y en el eje x tendr un valor de -1 m/s2. Es importante notar que la aceleracin se detecta en el eje x- pero la direccin es hacia el eje x+. Otro ejemplo es el de la fuerza gravitacional. Tomemos el estado inicial (bola dentro del cubo sin ninguna fuerza aplicada) y le aplicamos la fuerza gravitacional. Sabemos que la aceleracin creada por esta fuerza es de 9.8 m/s2, de manera que la bola aplicar esta misma fuerza en la cara del cubo dado por z-. Ahora, si se supone que no hay ninguna fuerza externa aplicada al sensor, se sabe que solo la fuerza gravitacional estar aplicada. De manera que si el sensor se gira de cualquier forma, se puede identificar la inclinacin en los 3 ejes midiendo los componentes de la fuerza gravitatoria en cada eje. Dicha medicin puede ser no muy precisa de manera que se usan giroscopios para verificar este valor, pero se hablar luego sobre eso.

Desde luego que los acelermetros no ofrecen valores en m/s2, de hecho que ofrecen una tensin equivalente por eje, segn la fuerza aplicada en cada eje. Para ponerlo en perspectiva, digamos que el rango de valores por eje es de 0 a 6 V, de manera que si no hay ninguna fuerza aplicada en el sensor, las 3 seales, una por cada eje, tendrn un valor de 3 V. Ahora, este lmite de +-3 V va a concordar con el lmite mximo que puede medir el acelermetro. Imaginmonos que este valor es 2 g o 19.6 m/s2 aunque este valor puede variar dependiendo del sensor que se tenga. Esto significa que 3 V = 19.6 m/s2, o que cada 0,153 V equivale a 1 m/s2. En la realidad, esta conversin es prcticamente lineal, de manera que para efectos prcticos se tomar como completamente lineal. Tomando en cuenta esto, podemos concluir que si solo se aplica la fuerza gravitacional en el eje z, la seal de salida tendr una tensin igual a:

(2)

Si el sensor se gira 180 grados con respecto al eje x, el sensor quedara al revs y la seal de salida sera de 1.5 V. Teniendo esta medida, se procede a transformar esta informacin en informacin digital por medio de un CAD. Supongamos que se tiene un convertidor analgico digital (CAD) de 10 bits. Esto significa que la informacin que recibe la transforma en un nmero de 0 a 1024. Ahora, siguiendo el mismo ejemplo anterior, si se tiene este convertidor, la seal de 4.5 V tendr un valor de:

10

(3)

2.1.1.2 Modelo del acelermetro Existe un modelo general para representar un acelermetro. Este se puede ver en la Figura 2-3.

[1.5]
Figura 2-3. Modelo del principio de un acelermetro.

De manera que la ecuacin que representa el movimiento est dado por: ( ) ( )

[1.5]

(4)

Donde:

11

k = coeficiente del resorte. = coeficiente de amortiguamiento. a = aceleracin. x = desplazamiento. t = tiempo. m = masa. El coeficiente de amortiguacin es dado a las perdidas mecnicas del resorte y a la

viscosidad del ambiente [1.5].

2.1.1.3 Tipos de acelermetros Existen diversos modelos de acelermetros. A continuacin se mencionan algunos cuantos y sus caractersticas principales. Cabe resaltar que la siguiente informacin e imgenes han sido tomadas de la referencia [1.5]. 2.1.1.3.1 Acelermetros capacitivos Funcionan basndose en que estos sensores se apoyan en un componente, como la bola en el ejemplo dado anteriormente, que se mueve a destiempo segn la carcasa del acelermetro. Luego se usa un transductor para generar la seal elctrica en funcin de dicha aceleracin. Al final, sin importar como estn construidos los sensores, el objetivo principal es el de determinar este desplazamiento. El desplazamiento capacitivo es una conversin muy confiable.

12

Se basa en el mismo principio de un capacitor. Una placa est localizada en la carcasa del sensor (el cubo en el ejemplo anterior) y otra placa est ubicada en la masa inercial (bola del ejemplo). Estas placas forman un capacitor el cual su valor estar en funcin de la distancia entre las placas. 2.1.1.3.2 Acelermetros piezo-resistivos Son acelermetros que se basan en un indicador de tensin que mide la tensin en resortes alineados con la masa inercial. Esta tensin se puede relacionar con la magnitud y velocidad del desplazamiento de la masa, de manera que se puede correlacionar con dicha aceleracin. Estos sensores pueden llegar a medir aceleracin hasta los 10 000 g, pero por lo general se usan para medicin de los 1 000g con errores de menos del 1%. En la Figura 2-4 se puede observar la construccin de uno de estos acelermetros.

13

Figura 2-4. Construccin de un acelermetro piezo-resistivo.

2.1.1.3.3 Acelermetros piezoelctricos Funcionan por una conversin directa de energa mecnica a energa elctrica. Un cristal compuesto de dipolos elctricos es puesto entre la carcasa y una masa ssmica en un mismo eje de medicin. Cuando el acelermetro es movido en este eje, la fuerza ejercida por este movimiento de la masa est aplicada al cristal; y dicha fuerza es proporcional a la aceleracin de la masa ssmica. Desde luego que esta fuerza resultante har que el cristal produzca una seal de salida proporcional a su valor, de manera que esta tensin de salida ser proporcional al valor de la aceleracin.

14

Figura 2-5. Construccin de un acelermetro piezoelctrico.

2.1.1.3.4 Acelermetros de placas calientes A grandes rasgos, estos funcionan por medio de una masa suspendida y posicionada cerca de un disipador de calor. Esta masa luego es calentada a una temperatura especfica donde, en caso de que no haya aceleraciones aplicadas, existir un balance de temperaturas entre el disipador y la masa. De manera que la temperatura en la masa depender de la distancia a la que est del disipador de calor. Otra variacin de este tipo es el acelermetro de gas caliente. Funciona de una manera similar, a excepcin de que en vez de usar una masa, utiliza un gas. Este se basa en el principio de transferencia de calor por conveccin forzada. Es un sistema mucho ms complejo, pero de gran inters.

15

Figura 2-6. Fundamento prctico de un acelermetro de gas caliente.

2.1.1.4 Aplicaciones Es necesario enfatizar un poco en la aplicacin que se le dan a los acelermetros. Por lo general, un acelermetro siempre est vinculado a un giroscopio y se usan en su mayora, para obtener la informacin de la velocidad y la posicin de un objeto. Entre una de las aplicaciones ms comunes estn los sistemas inerciales de navegacin (INS por sus siglas en ingls) tales como el sistema de navegacin Gimbaled o el sistema de navegacin Strapdown los cuales son generalmente sistemas donde se usan los acelermetros para medir velocidad y posicin del objeto.

16

El clculo de la posicin de un objeto se puede obtener de diversas maneras. Como se sabe de la fsica, el desplazamiento es la derivada de la velocidad, el cual es la derivada de la aceleracin. Teniendo en cuenta esto, se podra decir que si se tiene la aceleracin, con tal de integrar 2 veces, se obtendra una ecuacin que correspondera al desplazamiento del objeto, pero esto trae como consecuencia, grandes errores en los clculos. Una forma ms fcil de obtener este resultado es teniendo un punto de referencia inicial y midiendo a tiempos definidos la aceleracin entre puntos, de manera que se puede calcular a qu velocidad va y cuanto se ha movido en dicho transcurso de tiempo.

2.1.2 Giroscopios
Como se ha mencionado anteriormente, los giroscopios se utilizan en gran medida junto a los acelermetros. El primer giroscopio utilizado como instrumento fue creado por Johann Bohnenberger en 1817 [2.12]. Su uso ha sido de gran servicio en la navegacin, especialmente en la navegacin area debido a que puede indicar la inclinacin que tiene el avin. Un giroscopio puede medir la rotacin alrededor de cada eje de diferentes maneras, de las cuales se hablarn ms adelante.

2.1.2.1 Generalidades Un giroscopio mide la velocidad radial en cada eje dada en rad/s o /s. En su mayora, los giroscopios tienden a presentar un desfase de 0.01 grados por hora de manera

17

que es necesario concurrir a correcciones peridicas para corregir este desfase, especialmente si la navegacin en cuestin puede durar varios das, estos errores pueden causar grandes desfases entre el valor real y el valor medido. Por lo general, un giroscopio mide esta velocidad radial de una manera relativamente similar a la de un acelermetro. La diferencia consiste en que las fuerzas aplicadas, al ser radiales, se toman en cuenta como torques. En pocas palabras, el giroscopio es el anlogo al acelermetro, en el sentido de que el giroscopio mide velocidad giratoria y el acelermetro mide aceleracin lineal. Este sensor se basa en un fenmeno fsico mejor conocido como el principio de conservacin del momento angular [2.2]. Este fenmeno se puede ejemplificar con una rueda girando, la cual se va a resistir a que se cambie la direccin de su eje de rotacin o plano de giro, o visto de otra manera, el momento angular de un cuerpo se mantendr constante al menos que se aplique un torque externo al objeto. Al igual que el acelermetro, este sensor transforma el movimiento angular en una tensin proporcional a su valor. Dicha tensin tiene que ser convertida por medio del uso de un convertidor analgico digital (CAD) de la misma manera como se explic con el acelermetro.

18

[1.5]
Figura 2-7. Ejemplo funcional de un giroscopio.

Dada la Figura 2-7, que muestra un ejemplo de la base de un giroscopio, la ecuacin general para la descripcin de un giroscopio se puede observar a continuacin.

Dnde: p = velocidad angular respecto al eje z, en el ejemplo. m = masa. g = aceleracin gravitacional. rcg = distancia desde el centro de gravedad hasta el eje de simetra. I = momento de inercia. s = velocidad angular respecto al eje de simetra del objeto giratorio.

19

De esta manera, para un giroscopio lo ideal es que p sea lo ms pequea posible de manera que el momento angular I*s sea grande y rcg sea pequeo. Ahora teniendo un conocimiento general del funcionamiento de un giroscopio, se mencionarn a continuacin algunos tipos de giroscopios utilizados hoy en da. 2.1.2.2 Tipos de giroscopios

[2.11]
Figura 2-8. Giroscopio Foucault.

En la Figura 2-8 se puede observar un giroscopio inventado por Lon Foucault y construido por Dumoulin-Froment en 1852 [2.11]. Actualmente existe una gran gama de modelos de giroscopios. A continuacin se mostrarn los ms comunes.

20

2.1.2.2.1 Giroscopios rotatorios Mejor conocidos como giroscopios mecnicos, han sido usados en aviacin por muchos aos. Una de las principales limitantes que tienen es que no son muy confiables ya que tienen una exactitud y una resolucin relativamente limitada. De hecho, que el tiempo de uso de estos giroscopios es recomendado a mantenerlo por debajo de las 1000 horas [1.5]. Este giroscopio est constituido por un disco el cual puede girar sobre un eje libremente, el cual est confinado dentro de otra estructura que puede girar libremente segn 1 o 2 ejes. Debido a esto, se les dicen que son de 1 grado de libertad o de 2. Este giroscopio permite ofrecer una seal de salida como un torque por ejemplo, el cual es proporcional a la velocidad angular alrededor de un eje perpendicular al eje de giro [1.5]. Su funcionalidad ha sido descrita en el apartado anterior. La exactitud de los giroscopios mecnicos depende en gran medida de los efectos que pueden causar torques indeseadas, creando distorsiones como desfases. Algunos causantes de estos efectos son la friccin, rotores desbalanceados, efectos magnticos, entre otros [1.3]. Existen diferentes mtodos para minimizar el impacto ocasionado por la friccin, pero el mejor mtodo es el de suspender el rotor en el vacio por medio de campos elctricos (giroscopios electrostticos) o por campos magnticos (giroscopios magnticos) [1.3].

21

2.1.2.2.2 Giroscopios vibratorios Estos giroscopios estn basados en el efecto Coriolis. Existen varias versiones de este tipo, pero se explicar el funcionamiento general nada ms. La Fuerza de Coriolis ejercida en un cuerpo est dada por la siguiente ecuacin: Donde: m = masa = velocidad angular v = velocidad lineal Estos giroscopios utilizan una masa suspendida por resortes como se muestra en la siguiente figura. En vez de girar como un giroscopio normal, la masa vibra en un movimiento traslacional. Como se mencion anteriormente, estos se basan en el principio de la generacin y deteccin de la aceleracin Coriolis [1.5]. (5)

22

[1.5]
Figura 2-9. Modelo de un giroscopio vibratorio.

Una vez en funcionamiento, la masa es sensible a variaciones angulares inducidas sobre el eje z perpendicular al sustrato. Este giro induce una aceleracin Coriolis en el eje y. Esto, a su vez, induce un movimiento de Coriolis el cual su amplitud es proporcional a la velocidad angular a la que est girando el sustrato. De manera que la fuerza de Coriolis est dada por [1.5]: (6) Dnde: = la velocidad angular

23

= la pulsacin correspondiente a la frecuencia de vibracin de la partcula t = tiempo Algunas de las principales caractersticas de estos sensores es que tienen diseos

compactos, bajo costo y tienen un amplio rango de mediciones (pueden medir inclusive hasta +- 3000 /s) [4.1]. Una de las principales desventajas que tenan los giroscopios rotatorios es que no permitan tener un diseo pequeo como un sensor monoltico (vibratorio) el cual es algo crucial en las aplicaciones modernas. Estos giroscopios tienden a ser muy grandes e incmodos de manera que resultaban ser soluciones muy caras para los problemas. El uso de sistemas micro electro-mecnicos (MEMS, del ingls Micro Electro-Mechanical Systems) permita disear giroscopios mucho ms pequeos, y tambin resultaban ser giroscopios ms robustos y podan estar en ambientes mucho ms hostiles. Existen diferentes maneras de construir un giroscopio vibratorio, pero se pueden dividir en 3 grupos principales [1.3]: 1. Osciladores simples (masa en una cuerda, lasers) 2. Osciladores balanceados (diapasones) 3. Resonadores Shell (cilindros, aros, otros).

24

2.1.2.3 Aplicaciones En general, los giroscopios se usan de diversas maneras, pero algunas de las aplicaciones ms comunes que se les dan se muestran a continuacin. Control de trayectoria Orientacin autmata Estabilizacin de Antenas & Plataformas Sistemas de Navegacin Instrumentacin Robtica & Vehculos Agricultura de Precisin Automatizacin de la Fabricacin Mdico/Ortopdico A continuacin se muestra una tabla obtenida de la referencia [1.5] con aplicaciones generales y el rango que tiene que medir el giroscopio para funcionar correctamente.
Tabla 2-1. Ejemplos de rangos que necesitan los giroscopios para aplicaciones especficas. Mercado Requerimientos Automovilismo Bajo costo, fiabilidad, ambientes hostiles, larga vida Domstico/medicinal Seguridad Suspensin activa Navegacin Frenos ABS Juegos Usos Rango de (/s) 200 50 100 50 100 Tipo de rendimiento (/s) 10 2 0.1 0.5 0.1

25

Bajo costo, bajo consume de energa, tamao pequeo, larga vida Industrial Tamao pequeo, fiabilidad, ambientes hostiles

Deportes Cmaras Ratones 3D Robtica Monitoreo de maquinas Control de orientacin Estabilizacin

50 50 100 10 10

0.1 0.5 2 0.1 0.1

20 10 600 400 200 600 100 to 800

0.2 0.01 10-5 to 10-3 10-5 to 10-4 10-5 to 10-7 10-5 to 10-3 10-7 to 10-3

Aeroespacial Rendimiento, fiabilidad, larga vida, bajo consumo Militar

Orientacin Pilotear Navegacin Estabilizacin Proyectiles y cohetes

2.1.3 El Filtro de Kalman


Es indispensable explicar un poco el funcionamiento de este filtro debido a que es una parte necesaria en la elaboracin del proyecto. Este filtro es un algoritmo que se usa para predecir el valor real de un dato cuando las mediciones, en su mayora, contienen ruido. En pocas palabras, es un sistema recursivo y eficiente que aplica el mtodo de mnimos cuadrados (mejor ajuste) [1.6]. Esta solucin permite determinar el estado de un proceso en un momento t con la informacin que se tiene del momento t-1 ms la informacin de t [1.6]. ste fue desarrollado en 1960 por Rudolf E. Kalman [1.6]. Su uso va ms all de sistemas fsicos ya que, por ejemplo, desde el 2003 se empez a usar en economa como un mtodo para

26

estimar el nivel de la tasa de desempleo que no afecta la inflacin [1.7]. En este proyecto, se utilizar este filtro para poder obtener un valor estimado del ngulo de inclinacin del sensor usando los datos obtenidos del giroscopio (ocurre un desfase con el tiempo) y el acelermetro (contiene mucho ruido). De esta manera, se juntan los 2 valores para predecir con mayor exactitud la orientacin de dicho sensor. Para mayor informacin sobre este tema se pueden consultar las referencias [1.6] y [1.7].

27

2.2 ZigBee
2.2.1 Generalidades
ZigBee es un estndar que define una serie de protocolos de comunicacin para redes inalmbricas de baja transferencia de datos. La frecuencia a la que generalmente operan es a 868 MHz, 915 MHz, o 2.4 GHz [1.2]. Desde hace muchos aos, ha habido un creciente desarrollo en el rea de redes inalmbricas, pero en su mayora, stas se enfocaban ms en transferencias de datos altas y de alcances largos, pero la industria no necesariamente necesita todos estos valores. En algunas ocasiones, no es necesario transferencias de datos altas, o sistemas complejos para poder comunicarse a largas distancias. Debido a esto es que se implement este sistema de comunicacin. Sus caractersticas principales son: un sistema de bajo costo y de bajo consumo de potencia de manera que resulta en aplicaciones sumamente tiles cuando es necesaria la utilizacin de bateras. Debido a esto, su principal uso es dado en redes inalmbricas de sensores. Adems, presentan una transferencia de datos de 250Kb/s. Sus bases son fundamentadas por el estndar IEEE 802.15.4 utilizado principalmente en la capa fsica y en los protocolos MAC. Este estndar fue desarrollado por el ZigBee Alliance [1.4]. Esta alianza fue formada en el 2002 como una organizacin sin fines de lucro del cual cualquiera poda formar parte. Un uso que se le puede dar es por ejemplo, para monitorear un paciente [1.2]. Por ejemplo, su presin arterial, ritmo cardiaco; todo esto se puede medir usando sensores

28

porttiles, de manera que a travs de este sistema de comunicacin, los sensores se pueden conectar a una computadora por ejemplo, y llevar un monitoreo bien detallado de la condicin del paciente, la cual luego puede ser mandada a un doctor. Esto permite que el paciente se pueda mover libremente sin la necesidad de estar conectado a travs de cables a un monitor.

2.2.2 Comparacin con Bluetooth


A continuacin se muestra la Figura 2-10 donde se puede observar una relacin general entre los distintos tipos de redes inalmbricas de bajo alcance.

[1.2]
Figura 2-10. Comparacin del estndar ZigBee con Bluetooth y el estndar IEEE 802.11b.

En general, ZigBee y Bluetooth tienen mucho en comn. Ambos se basan en el estndar 802.15 para WPANs. Ambos tambin funcionan en la banda de frecuencia de 2.4 GHz y funcionan con bajo consumo. Aunque dicho esto, el consumo de ZigBee si es menor

29

al de Bluetooth. En general, ZigBee tiene un consumo de 30 mA transmitiendo y de 3 uA en reposo, mientras que Bluetooth consume 40 mA transmitiendo y 0.2 mA en reposo. Una red ZigBee puede estar constituida por un mximo de 65535 nodos distribuidos en subredes de 255 nodos, mientras que Bluetooth solo permite como mximo 8 nodos. Otra gran diferencia es, como se mencion anteriormente, la tasa de transferencia de este protocolo es de 250 kb/s mientras que Bluetooth puede llegar hasta los 3 Mb/s. La tcnica de modulacin utilizado en ZigBee es conocido como DSSS o Direct Sequence Spread Spectrum (Espectro Propagado de Secuencia Directa) , mientras que Bluetooth utiliza la tcnica conocida como FHSS o Frequency Hopping Spread Spectrum (Espectro Propagado de Salto de Frecuencia) [2.10]. El DSSS consiste en transmitir una seal con un ancho de banda ms grande que el ancho de banda de la informacin. Se le da el nombre de Spread Spectrum debido a esto mismo, ya que las seales portadoras ocurren sobre todo el dominio de la frecuencia de transmisin. Esto permite mejorar el rendimiento en los receptores cuando el sistema es multidireccional, ya que resulta en una mejor resistencia ante interferencias, mayor seguridad en la comunicacin, entre otros. Debido a las caractersticas de estos protocolos, el tamao del paquete es de 250 kB para Bluetooth y para ZigBee es de 28 kB. Los rangos de alcance varan mucho dependiendo del tipo de mdulo que se utiliza, pero por lo general, ambos andan rondando los 100 m [2.10].

30

2.2.3 IEEE 802.15.4 y su relacin con ZigBee


Como es mencionado en el libro ZigBee Wireless Networks and Transceivers [1.2], la mejor manera de establecer una red de comunicacin es utilizando el concepto de capas. Cada capa es responsable de llevar acabo ciertas funciones dentro de la misma red. Esto crea una facilidad en la distribucin de trabajos y resulta ms fcil realizar modificaciones, como por ejemplo si el protocolo cambia, ya que solo se tendra que cambiar la capa donde se modific dicho protocolo, o tambin por el hecho que al desarrollar una aplicacin; las capas ms bajas son independientes de dicha aplicacin. ZigBee est basado en las capas del modelo OSI (Open System Interconnect). En la Figura 2-11 se puede ver la construccin del modelo de la red de ZigBee.

[2.4]
Figura 2-11. Capas del Protocolo ZigBee.

31

Se puede observar en la figura anterior que el sistema de comunicacin ZigBee slo se basa en el estndar 802.15.4 para las capas MAC y PHY. Estas capas son la capa Medium Access Control y la capa Physical. De manera que el estndar de ZigBee define las capas de Network, Security y de Application. A continuacin se muestra el uso general que se le da a cada capa del protocolo. Capa fsica (PHY): Se encarga de las conexiones y transmitir la informacin binaria. Capa de enlace de datos (MAC): Se encarga del direccionamiento fsico de los datos, topologa de la red, deteccin de errores, entre otros. Cada dispositivo tiene una direccin MAC nica, eh ah la razn del nombre de la capa, el cual es utilizado para identificar cada dispositivo y poder direccionar los datos. Capa de red (Network): Se encarga de hacer que los datos lleguen desde el origen hasta el destino. Esto es debido a que no siempre dichos objetos estn conectados directamente, de manera que tienen que pasar por una serie de enrutadores para que el paquete llegue. Un ejemplo es en una topologa tipo estrella, del cual se ve ms informacin ms adelante. En este caso, todos los dispositivos end-point o en general, los que tienen los sensores, se comunican con un coordinador o un enrutador. Digamos que un dispositivo 3 se quiere conectar con el dispositivo 5, este se tiene que comunicar con el coordinador para que l lo comunique con el dispositivo 5.

32

Capa de seguridad (Security Service Provider): Se encarga de la seguridad de los paquetes ya que al ser una conexin inalmbrica, cualquiera puede accesar los datos. De manera que esta capa se encarga de encriptar el paquete antes de mandarse para asegurar que ningn intruso pueda interpretar la informacin. Uno de los mtodos de encriptacin que puede usar es el AES de 128 bits. Tambin existe una unidad llamada Trust Center el cual proporciona seguridad utilizando 2 claves, una para el enlace y una para la red.

Capa de aplicacin (Application): Se encarga de la representacin de la informacin. Esta es la capa donde se utiliza la informacin transmitida, y no tiene tanto que ver con la forma en que se comunica. [2.14].

En la Figura 2-12 se puede observar como la informacin es agregada en cada capa hasta llegar al paquete que ser mandado a travs de la capa fsica.

[1.2]
Figura 2-12. Estructura de un paquete ZigBee.

33

Para no adentrarnos en el funcionamiento de este sistema de comunicacin de una manera muy especfica, ser ms fcil si lo vemos a grandes rasgos. A continuacin se muestra una tabla la cual contiene informacin general con respecto a este protocolo segn las frecuencias a las que funciona y la cantidad de canales.

Tabla 2-2. IEEE 802.15.4 Transferencia de datos y Operaciones de frecuencia.

[1.2]

Como se puede observar en la tabla anterior, existen 3 mtodos de modulacin utilizados. El BPSK, el ASK y el O-QPSK. Explicado de una manera muy general, estos mtodos son el binary phase shift keying, el amplitude shift keying y el offset quadrature phase shift keying. En BPSK y O-QPSK, el dato va en la fase de la seal

34

mientras que en ASK el dato va en la amplitud de la seal. Una de las ventajas de transmitir en PSK es que la potencia de todos los smbolos es la misma, de manera que se reduce el costo del sistema. Esto ocasiona que se puedan transmitir ms datos.

2.2.4 Topologas
Este sistema de comunicacin permite manejar dos topologas de redes distintas. La topologa estrella y la topologa punto a punto [1.4]. Para comprender como funcionan estas topologas hay que explicar los dispositivos que forman parte de la red IEEE 802.15.4. Estos son el Coordinador de red, el Dispositivo Funcional Completo (FFD) y el Dispositivo Funcional Reducido (RFD). El coordinador de red se encarga de la red en general. Es el ms sofisticado de los 3 y requiere de mucha memoria y procesamiento computacional. El FFD soporta todas las funciones dadas en el estndar IEEE 802.15.4. ste puede tener 3 funciones. 1 Puede funcionar como un coordinador de red (PAN). 2 Puede funcionar como un coordinador o mejor dicho, como un router. 3 Puede llegar a funcionar como un dispositivo final (el que est conectado a los sensores) de ser necesario. El RFD est limitado en relacin al estndar para reducir costo y complejidad. Este es el que se encuentra generalmente conectado a los sensores solamente para transmitir informacin. En pocas palabras, los FFD pueden comunicarse tanto con otros FFDs como con RFDs, pero los RFDs solo se pueden comunicar con el FFD al cual estn asignados.

35

Ahora bien, teniendo esta informacin, podemos explicar de una manera general, el funcionamiento de las topologas. La topologa estrella est formada por un FFD el cual se establece con su propia red y se convierte en un coordinador de una red PAN. Luego, otros dispositivos FFD y RFD se pueden comunicar a travs de este coordinador. En pocas palabras, cada nodo dentro de la red PAN especifica al coordinador en cuestin, tienen que comunicarse siempre a travs de l. En el caso de la topologa punto a punto, tambin hay un coordinador PAN pero en este caso, los otros dispositivos s se pueden comunicar con otros dispositivos en el mismo PAN. Esto permite que se crean formaciones ms complejas. En las siguientes figuras se pueden observar estas 2 topologas. En el caso de este proyecto se har uso de la topologa punto a punto.

Figura 2-13. Ejemplo de una topologa estrella.

Obtenida de http://www.edrawsoft.com/Network-Topologies.php

36

Figura 2-14. Ejemplo de una topologa punto a punto.

Obtenida de http://msdn.microsoft.com/en-us/library/bb756997.aspx

37

3 CAPTULO III: Equipo


3.1 Interfaz Zigbee
3.1.1 Mdulo Xbee con Antena de cobre de 1mW
Existen diversos mdulos Xbee pero este captulo estar enfocado en el que se va a usar en el proyecto el cual es el Modulo Xbee Serie 1. La principal razn por la cual se us este mdulo es por el hecho que es el ms simple, y la aplicacin que se est buscando es igual de simple. Si fuese necesario construir una red ms compleja como una red mesh, sera necesario conseguir los mdulos de serie 2 o 2.5. En pocas palabras, lo que busca la serie 1 de Xbees es reemplazar una conexin con cables, es ms, es como decir una conexin inalmbrica UART.

Figura 3-1. Fotografa del mdulo Xbee Serie 1 con Antena de 1mW de Digi.

Entre algunas de las caractersticas del mdulo se encuentran:

38

Trabaja a una frecuencia de 2.4 GHz. Es producido por Digi. Utilizan la pila base de ZigBee (protocolo 802.15.4). Trabaja a una tensin de alimentacin de 3.3 V con un consumo mximo de 50 mA. Mxima tasa de datos es de 250 kbps. Tiene una potencia de salida de 1mW. Rango mximo de alcance es de 100m. Tiene una antena de cable. Tiene 6 pines para CAD de 10 bits. 8 pines digitales para IO. Tiene una encriptacin de 128 bits para seguridad. Puede usar el set de comandos AT o API [2.9]. La principal diferencia entre las versiones estndar y Pro es que los mdulos Xbee

Pro son un poco ms grandes, consumen mucho ms potencia, son ms caros pero tienen un alcance mucho mayor. A diferencia entre la serie 1 y la serie 2 y 2.5, las versiones estndar o pro de una misma serie si se pueden mezclar en una misma red [3.6]. Otra ventaja que tiene esta serie es que permiten indicar el direccionamiento de la informacin, o sea, si uno desea enviar la informacin solamente a un destino en especfico o a todos. Como se mencion anteriormente, estos mdulos son como la versin inalmbrica de una conexin UART. Rpidamente se explicar cmo funciona esta conexin. En la

39

Figura 3-2 se puede observar la secuencia normal de este tipo de conexin. Cuando no se estn enviando datos, la conexin est en idle lo cual implica que la seal est en alto. Luego, para indicar que viene un byte de datos, la seal se baja indicando que se empieza a recibir el dato. Luego se reciben los 8 bits del dato del menos significativo al ms significativo y al final se pone en alto para indicar que se termin de enviar el dato.

[3.6]
Figura 3-2. Modo de envo de datos en una conexin UART.

Existen dos formas de operar el mdulo. Debido a la simpleza de la necesidad en la aplicacin a crear, se utiliza la operacin transparente. Esta operacin, como se ha mencionado anteriormente, es como reemplazar una conexin serial, o sea, todo dato recibido en el pin DI (Rx) es almacenado en un bfer y luego, cuando est listo para enviarse, ste se manda al pin DO (Tx). La otra forma de operacin es API, el cual es ms complejo pero permite mayor maniobrabilidad en la comunicacin [3.6].

40

3.1.2 Xbee Explorer


A grandes rasgos, el Xbee Explorer es un chip que se usa como mediador entre el conector USB y la base serial para los mdulos Xbee. Utiliza el convertidor FT232RL y tambin un regulador de voltaje de 3.3 V, de manera que se alimenta con 5 V pero puede alimentar el mdulo Xbee que utiliza 3.3 V. Es compatible con los mdulos Xbee Serie 1 y Serie 2.5, tanto la versin estndar como la versin Pro [2.7].

Figura 3-3. Fotografa del Xbee Explorer de Sparkfun.

3.1.3 Xbee Shield para Arduino


El Xbee Shield simplifica el trabajo que se necesita para conectar un mdulo Xbee con un Arduino. Este modelo funciona con todos los mdulos Xbees incluyendo las serie 1 y 2.5, tanto la versin estndar como la Pro. Incluye un interruptor para escoger si el modulo se conecte al Arduino por el puerto UART 0 o por los pines digitales 3 y 2. Entre algunas caractersticas que tiene este chip, son los siguientes: Tiene LEDs para indicar activada en los pines del mdulo DIN, DOUT, RSSI y en DIO5, al igual que un LED para indicar encendido.

41

Originalmente no incluye los conectores que se tienen que ubicar en donde van los pines (pero el paquete que se compr si los inclua).

Tiene un regulador de tensin de 3.3 V. Tiene una pequea parte con huecos de 0.1 para hacer pequeos circuitos.

Figura 3-4. Fotografa del Xbee Shield de Sparkfun.

3.2 Sensores
El IMU utilizado en este proyecto es el Atomic IMU 6 Degrees of Freedom Xbee Ready de Sparkfun. ste se caracteriza principalmente por tener todo lo necesario para construir un sistema de sensores debido a que este incluye 1 acelermetro en los 3 ejes y un giroscopio para cada eje. Adems de estos sensores, tambin incluye un ATMega 328p corriendo a 10 MHz con 6 canales CAD dedicados a las seales de salida de los sensores [3.4].

42

Figura 3-5. Fotografa del sensor Atomic IMU 6 Degrees of Freedom Xbee Ready de Sparfun.

Entre otras caractersticas, tambin se encuentra lo siguiente: LED indicador de encendido. Interruptor de encendido. Interruptor de Reset para el ATMega. Puerto serial de 0-3.3V con un baud rate de 115 200. Puerto de programador para el ATMega. Conectores opcionales para el mdulo Xbee del cual se describieron anteriormente [3.4].

Otra ventaja que tiene es que viene con un bootloader (programa instalado en el ATMega) el cual est listo para usarse. Esto significa que viene todo configurado para

43

usarse a travs del USB, ya sea utilizando un una conexin ZigBee o conectado directamente utilizando un convertidor FTDI. Sin importar que conexin se use para comunicarse con el sensor, a travs de una interfaz Serial, es posible configurar el sensor como uno desea. Existen 2 estados en los que puede inicializar el sensor, en idle o en auto -run. Primero analizaremos cuando empieza en idle [3.4]. Por lo general, especialmente si es la primera vez que se usa el sensor, ste comenzar en el estado de idle. Aqu, e l espera a que se le mande un comando. A continuacin se muestra una tabla de los comandos que se le pueden mandar:

Tabla 3-1. Bytes que se pueden mandar al Sensor en el estado de idle. Byte Funcin

% , ASCII 37 & , ASCII 38 (apstrofe), ASCII 39 ( , ASCII 40 ) , ASCII 41 * , ASCII 42 + , ASCII 43 , , ASCII 44 - , ASCII 45 # , ASCII 35 (espacio), ASCII 32

Ajusta la sensibilidad del acelermetro en 1.5G Ajusta la sensibilidad del acelermetro en 2G Ajusta la sensibilidad del acelermetro en 4G Ajusta la sensibilidad del acelermetro en 6G Ajusta la frecuencia de muestreo a 50 Hz Ajusta la frecuencia de muestreo a 100 Hz Ajusta la frecuencia de muestreo a 150 Hz Ajusta la frecuencia de muestreo a 200 Hz Ajusta la frecuencia de muestreo a 250 Hz Empieza la unidad corriendo en modo binario (ms sobre esto, ms adelante) Detiene la unidad y lo regresa al estado de idle. En caso de estar en idle, saca el me n de configuracin (ms sobre esto, ms adelante)

44

La configuracin dada por el uso de los comandos anteriores no ser guardada en memoria, mientras que si se usa el men de configuracin, esa configuracin s se guardar. A continuacin se muestra el resultado de mandar el espacio cuando el sensor est en idle (men de configuracin) [3.4]: 6DOF Atomic setup, version 1.0 ================================ 1) View/edit active channel list 2) Change output mode, currently binary 3) Set Auto run mode, currently off 4) Set accelerometer sensitivity, currently 1.5g 5) Set output frequency, currently 100 9) Save settings and run unit Este men es muy fcil de usar debido a que es hacer exactamente lo que sale en l para poder configurarlo. Por ejemplo, si uno oprime 1 y lo enva, a continuacin le sale otro men como el siguiente [3.4]: 1) Accel X = on 2) Accel Y = on 3) Accel Z = on 4) Pitch = on 5) Roll = on 6) Yaw = on En este men, uno puede escoger oprimiendo el nmero necesario, si se quiere que dicho canal este activado o no. De estar activado, el sensor enviar la informacin especfica a la medicin que se hace en el canal, por ejemplo, el valor del acelermetro en el eje x.

45

Volviendo al men principal, si se oprime el 2, cambia la forma de enviar los datos entre binario y ASCII. En ASCII, los datos los envan en cdigo ASCII, de manera que si uno utiliza un monitor serial, los datos se leern fcilmente. En el caso de binario [3.4], los datos son enviados de la siguiente manera: 1. A (ASCII 65): indica comienzo de la secuencia. 2. MSB-count: indica el Byte ms significativo de count el cual es un contador que va de 0 a 32767 que indica por cual valor va. 3. LSB-count: indica el Byte menos significativo de count. 4. MSB-AX: indica el Byte ms significativo del acelermetro en el eje x. 5. LSB-AX: indica el Byte menos significativo del acelermetro en el eje x. 6. MSB-AY: indica el Byte ms significativo del acelermetro en el eje y. 7. LSB-AY: indica el Byte menos significativo del acelermetro en el eje y. 8. MSB-AZ: indica el Byte ms significativo del acelermetro en el eje z. 9. LSB-AZ: indica el Byte menos significativo del acelermetro en el eje z. 10. MSB-GX: indica el Byte ms significativo del giroscopio en el eje x. 11. LSB-GX: indica el Byte menos significativo del giroscopio en el eje x. 12. MSB-GY: indica el Byte ms significativo del giroscopio en el eje y. 13. LSB-GY: indica el Byte menos significativo del giroscopio en el eje y. 14. MSB-GZ: indica el Byte ms significativo del giroscopio en el eje z. 15. LSB-GZ: indica el Byte menos significativo del giroscopio en el eje z. 16. Z (ASCII 90): indica el final de la secuencia.

46

Para un total de 16 Bytes enviados. Cabe resaltar que los valores mandados por los sensores van a ir de 0 1023 debido a que son los valores que salen directamente del CAD que es de 10 bits [3.4]. Tambin, en el caso de que haya algn canal que no fue activado en el men mencionado anteriormente, el valor de ste no ser mandado a travs del medio de comunicacin. Por ejemplo, si los 3 canales del acelermetro estn desactivados, el total de bytes mandados ser de 10 en lugar de 16, en el mismo orden indicado en la lista anterior, simplemente excluyendo los bytes de los canales desactivados. Regresando al men principal, en la opcin 3. Uno al enviar un 3 puede activar o desactivar la opcin de automtico. Lo que hace esta opcin es que si est activada, siempre al encender el IMU, empezar inmediatamente a enviar datos en el formato especificado en la opcin 2 del men principal. En el caso de la opcin 4 del men, aparece un men adicional como el siguiente donde uno escoge la sensibilidad que se quiere que tenga el acelermetro. Set to: 1) 1.5g 2) 2g 3) 4g 4) 6g En la opcin 5, lo que permite es cambiar la frecuencia de muestreo hecha por el sensor. Enviando una i incrementa la frecuencia mientras que una d decrementa la frecuencia. La frecuencia mnima es de 10 Hz y no hay una frecuencia mxima [3.4]. Dicho esto, es recomendable no aumentar mucho la frecuencia de muestreo debido a que cada

47

sensor tiene sus frecuencias de trabajo mximas (de las cuales se hablar ms adelante) y lo mejor es no sobrepasar estos valores. Por ltimo, la opcin 9 simplemente guarda los cambios hechos en la configuracin y regresa a su estado de idle o de auto-run dependiendo que se haya puesto en la configuracin.

3.2.1 Acelermetro MMA7260Q


El acelermetro MMA7260Q es de bajo costo, mide en los 3 ejes, y utiliza una tecnologa micro-mecnica capacitiva [3.1]. Entre sus caractersticas principales se encuentran: Sensibilidad ajustable (1,5G/2G/4G/6G) Bajo consumo de corriente: 500 uA Opcin de Sleep en el cual consume 3 uA Baja tensin de operacin: 2.2 V a 3.6 V Tamao pequeo Sensibilidad alta (1,5G) Filtros paso-bajos Compensacin de temperatura, entre otros. [3.1]

48

Figura 3-6. Fotografa ejemplar del acelermetro MMA7260Q de Sparkfun.

Este dispositivo consiste en dos celdas sensibles a la capacitancia (G-cell) y un ASIC para condicionar seales en un solo empaquetado. El G-cell es una estructura mecnica formada por materiales semiconductores (polisilicon). Su funcionamiento bsico se muestra en la Figura 3-7, donde se puede apreciar como la capacitancia entre las dos placas vara segn la aceleracin que recibe en ese eje. Se puede decir que la conversin de esta aceleracin a capacitancia es lineal, siempre que se est dentro de los valores razonables de temperatura y de tensin de alimentacin. [3.1]

[3.1]
Figura 3-7. Funcionamiento bsico del acelermetro MMA7260Q.

49

La ecuacin que describe este comportamiento est dada por: (7)

Donde C representa la capacitancia, A el rea de la superficie de la placa, D la distancia entre las placas (varia) y representa la constante dielctrica del material entre las placas. Teniendo esto, el ASIC utiliza una tcnica de capacitores conmutados para medir las capacitancias de los G-cells y poder extraer la informacin de la aceleracin por la diferencia de los 2 capacitores. Por medio de esto mismo, tambin se logra obtener una salida de tensin alta y proporcional a dicha aceleracin. [3.1]

3.2.2 Giroscopio LISY300AL


El giroscopio LISY300AL es un giroscopio de solamente un eje (de manera que para efectos del proyecto, es necesario la utilizacin de 3 de estos) que puede medir una velocidad de giro de hasta +- 300 /s [3.5]. Entre sus principales caractersticas se encuentran: Tensin de operacin de 2.7 V a 3.6 V Bajo consumo Tension analgica como salida Filtros Paso-bajos integrados

50

Incluye un Auto-prueba para comprobar que el funcionamiento est bien. Resiste altos impactos Compatible con ECOPACK RoHS and Green [3.5].

Figura 3-8. Fotografa ejemplar del giroscopio LISY300AL de Sparkfun.

Este sensor incluye el elemento sensante y un IC de interfaz capaz de proveer una medicin de la velocidad de rotacin a travs de una seal de tensin analgica de salida [3.5]. El elemento que se utiliza para sensar dicha velocidad es construido por un proceso de micro-mquinas desarrollado por ST para producir sensores y actuadores en silicn. La interfaz IC es manufacturada en CMOS. Este sensor es capaz de medir una velocidad angular de hasta +-300/s como se mencion anteriormente, con un ancho de banda de hasta 88 Hz [3.5].

51

3.3 Micro-controlador
3.3.1 Arduino Mega 2560
El Arduino Mega 2560 es un micro-controlador basado en el ATmega2560 [2.1]. Entre sus principales caractersticas se encuentran: 54 DIOP de los cuales 14 se pueden usar para PWM 16 Pines de entradas analgicas 4 puertos de comunicacin UART Reloj de 16 MHz Conexin USB Conexin de poder Conector ICSP Voltaje de entrada de 7 a 12 V 256 KB de memoria de los cuales 8 KB se usan para el bootloader 8 KB de SRAM 4 KB de EEPROM, entre otros [2.1]. Su principal diferencia con los otros micro-controladores Arduino es que no utiliza el driver chip FTDI USB-a-Serial, en cambio, utiliza el ATMega 8U2 programado como un convertidor de USB-a-serial [2.1].

52

Tiene pines relacionados a poder como lo son VIN (tensin de entrada), 5 V y 3.3 V (salida de tensin) y GND (tierra). Es muy fcil de programar ya que se utiliza el ambiente creado por Arduino para programar sus micro-controladores, de manera que es usar las libreras que ellos ofrecen y programar en C o C++ [2.1]. Este programa tambin contiene un monitor Serial el cual permite comunicarse con cualquier puerto COM, ya sea un micro-controlador Arduino o, por ejemplo, un Xbee Explorer.

Figura 3-9. Fotografa ejemplar del Arduino Mega 2560.

53

4 CAPTULO IV: Aplicacin


4.1 Configuracin de la red de comunicacin ZigBee.
Para realizar dicha configuracin fue necesario utilizar el Xbee Explorer y el software X-CTU. Esta parte fue realizada segn el tutorial [4.2] con unos pequeos cambios. Dicho procedimiento es realizado en Windows.

4.1.1 Procedimiento
1. Conectar el primer Xbee Module al Xbee Explorer. ste ser el Xbee que se conecta al sensor. 2. Conectar el Xbee Explorer a la computadora. Si es la primera vez, puede ser que sea necesario instalar los drivers de la conexin serial FTDI. 3. Ir al Manejador de dispositivos (Device Manager) en el panel de control del sistema operativo. O tambin se puede ejecutar devmgmt.msc desde ejecutar (run) en el men de inicio. 4. Ir a la tabulacin que dice Puertos (PORTS (COM & LPT)) y buscar el puerto que dice USB Serial Port. Asegurarse que el COM tenga un valor menor a 5 para que los programas funcionen correctamente. De ser el caso, ir a properties - port settings advanced y escoger un nmero para el puerto COM menor a 5. 5. Abrir X-CTU y asegurarse de escoger el puerto COM correcto. 6. Probar la conexin con dicho puerto, usando la opcin en PC Settings que dice Test / Query. Es muy importante tomar en cuenta que si es la primera vez que se

54

usa el Xbee Module, el Baud Rate hay que ponerlo a 9600bps, de lo contrario no funcionar la conexin. Si ya se han configurado anteriormente y no se recuerdan que valor de Baud Rate se le haba puesto, tienen que probar uno por uno hasta que el Xbee responda correctamente. 7. Una vez que probaron la conexin y funcionaba, abrir la tabulacin que dice Modem Configuration y le dan el botn de Read. 8. En todo caso, siempre es recomendable instalar el firmware ms nuevo que haya por lo que antes de continuar, es mejor descargar todas las versiones ms nuevas. Esto es necesario hacerlo una vez nada ms. De esta manera ambos Xbee Modules que se van a utilizar estn actualizados. 9. Ahora s, configuramos el Xbee de la siguiente manera: a. Networking & Security i. Pan ID: 1234. Nada ms asegurarse que este nmero tiene que ser el mismo que el del otro Xbee Module para que se logren comunicar entre ellos. b. Serial Interfacing i. BD - Interface Data Rate: 7 115200. Es para que el sensor funcione correctamente ya que est configurado para funcionar con esa velocidad. c. I/O Settings i. D3 DIO3 Configuration: 5 DO HIGH. ii. IU I/O Output Enable: 0 Disabled.

55

d. I/O Line Passing i. IA I/O Input Address: FFFF. 10. Una vez finalizado la configuracin, darle Write y luego asegurarse de que se haya guardado la configuracin correctamente. 11. Remover el Xbee Explorer del USB, y remover el Xbee Module que estaba en l y conectar el otro Xbee Module. 12. Para el nuevo mdulo, hay que repetir los pasos 5 al 8. 13. Luego, configuramos ste mdulo de la siguiente manera: a. Networking & Security i. Pan ID: 1234. Tiene que ser igual al del otro Xbee Module. b. Serial Interfacing i. BD - Interface Data Rate: 7 115200. c. I/O Settings i. D3 DIO3 Configuration: 3 DI. ii. IC DIO Change Detect: 8. 14. Listo, se ha terminado de configurar los mdulos que se usaran en el proyecto. Por ahora, el ltimo mdulo se mantendr en el Xbee Explorer.

56

4.2 Utilizacin del sensor Atomic IMU - 6DOF de Sparkfun


Para comprobar el funcionamiento correcto del IMU es necesario saber que el ATMega en el sensor ya contiene el programa por defecto que viene descrito en el manual de manera que se puede proceder a conectar el sensor utilizando los mdulos Xbee y el Xbee Explorer directamente a la computadora y utilizar los comandos descritos para configurar el sensor. Primeramente procederemos a utilizar una herramienta que ofrece Sparkfun llamada Atomic Mixer. Es un programa muy simple que se usa para comunicarse con el Sensor y mostrar grficamente en la pantalla los valores de los sensores. Es tan simple como ejecutar el programa, escoger el puerto COM correspondiente, la frecuencia que se desea y la sensibilidad del acelermetro que se desea, y listo. A continuacin se muestra una figura con el programa corriendo, y los valores que se obtienen del sensor.

57

Figura 4-1. Imagen del programa Atomic Mixer con el sensor en reposo, comunicndose a travs de la conexin ZigBee.

Figura 4-2. Imagen del programa Atomic Mixer con el sensor movindose y girando aleatoriamente.

58

Luego de cerciorarse que el sensor funciona bien, podemos proceder a utilizar un monitor Serial como el del software del Arduino, para configurar el sensor como deseamos. Lo primero que hay que hacer es abrir el programa del Arduino. Luego escoger en Tools el puerto COM 2 (o el que tenga asignado el Xbee Explorer en este caso) y luego darle click en el Serial Monitor. Es indispensable poner el valor del baud rate a 115200 para que funcione bien la comunicacin. Esto se hace poniendo el valor en el men que sale en la esquina derecha - abajo en dicho valor. Originalmente, el sensor esta en el estado de idle de manera que al abrir dicha consola, sta estar en blanco. Al escribir un espacio ( ) en la consola y enviarlo, aparecer el siguiente men:

Figura 4-3. Men de configuracin del Atomic IMU 6DOF utilizando la consola Serial del software del Arduino.

59

Debido a que anteriormente se explic cmo se usa este men, no se proceder a explicarlo de nuevo, si no, ms bien se mostrar el resultado al configurarlo de la siguiente manera: Todos los canales activados Output mode en ASCII Auto Run encendido Sensibilidad del acelermetro en 1.5G Frecuencia de muestreo en 10 Hz

Figura 4-4. Imagen de la consola serial al configurar el sensor y los valores que imprime en la pantalla.

Para efectos de este proyecto, ser necesario configurar el sensor con el Output Mode en binario y el Auto Run puede estar activado o no.

60

4.3 Utilizacin del Arduino Mega 2560 con el Xbee Shield de Sparkfun
Una de las ventajas de utilizar el Arduino Mega es que ste viene con 4 interfaces de comunicacin UART. En el caso del Xbee Shield a usar, este se conecta sobre el Arduino Mega al puerto de comunicacin 0. El problema es que este mismo puerto es el que se usa para la comunicacin con la computadora. Para evitar conflictos y posibles daos al microcontrolador, es necesario retirar los pines que se conectan a dicho puerto y conectarlos por medio de cables extras al puerto 1. Esto se puede observar en las siguientes figuras. Al hacer esto no solo podemos comunicarnos y estar programando el Arduino Mega mientras el sensor esta encendido (mayor rapidez a la hora de corregir errores de cdigo), si no que podemos comunicarnos tambin con el sensor directamente a travs del Arduino Mega.

Figura 4-5. Fotografa ejemplar del cambio que se le realiza al Xbee Shield.

61

Figura 4-6. Otra fotografa ejemplar del cambio que se le realiza al Xbee Shield.

4.3.1 Configurando el Arduino Mega 2560 para usarlo como una interfaz de comunicacin serial.
El objetivo de esta conexin es que el Arduino Mega tenga el mismo funcionamiento que el Xbee Explorer. Con esto, se ahorra mucho tiempo al no tener que estar desconectando y conectando el mdulo Xbee y el Xbee Explorer ya que puede generar problemas, y eventualmente se podra daar el dispositivo. El cdigo necesario para que esto funcin es muy simple. Lo que el Arduino tiene que hacer es, si le entra algo por el puerto 0 (USB, usuario) lo manda al puerto 1 (sensor), y viceversa. En el apndice 1 se puede observar el cdigo que se implementa en el Arduino para cumplir este objetivo. Este cdigo fue obtenido de uno de los ejemplos encontrados en

62

la pgina de Arduino ya que mostraba el uso de los puertos seriales con el Arduino Mega y era exactamente lo que necesitbamos. El resultado de esta prueba es el mismo que el de la primera prueba donde se conecta el sensor a la computadora directamente. A diferencia que de vez en cuando no se enviaban correctamente los datos. Por ejemplo, en ciertas ocasiones, al enviar un espacio, el sensor no reacciona y haba que enviarlo de nuevo.

4.3.2 Configurando el Arduino Mega 2560 para procesar la informacin del sensor y enviarla a la computadora.

En esta prueba, el objetivo es que el Arduino reciba la informacin del sensor, la convierta a valores tangibles, y los enve a la computadora. Para poder realizar esto es necesario comprender como es enviada la informacin desde el sensor cuando est el output mode en binario. A continuacin se enlista como se envan estos datos. 1. A (ASCII 65): indica comienzo de la secuencia. 2. MSB-count: indica el Byte ms significativo de count el cual es un contador que va de 0 a 32767 que indica por cual valor va. 3. LSB-count: indica el Byte menos significativo de count. 4. MSB-AX: indica el Byte ms significativo del acelermetro en el eje x.

63

5. LSB-AX: indica el Byte menos significativo del acelermetro en el eje x. 6. MSB-AY: indica el Byte ms significativo del acelermetro en el eje y. 7. LSB-AY: indica el Byte menos significativo del acelermetro en el eje y. 8. MSB-AZ: indica el Byte ms significativo del acelermetro en el eje z. 9. LSB-AZ: indica el Byte menos significativo del acelermetro en el eje z. 10. MSB-GX: indica el Byte ms significativo del giroscopio en el eje x. 11. LSB-GX: indica el Byte menos significativo del giroscopio en el eje x. 12. MSB-GY: indica el Byte ms significativo del giroscopio en el eje y. 13. LSB-GY: indica el Byte menos significativo del giroscopio en el eje y. 14. MSB-GZ: indica el Byte ms significativo del giroscopio en el eje z. 15. LSB-GZ: indica el Byte menos significativo del giroscopio en el eje z. 16. Z (ASCII 90): indica el final de la secuencia. Al saber esto, es necesario definir cuando estamos en la secuencia de envi de datos o no. En este caso, el programa es similar al pasado. O sea, est recibiendo informacin en un puerto y envindolo al otro, pero si recibe una A (comienzo de la secuencia) se alista para recibir el siguiente byte. Si este byte es una 't', 'u', 'S' o 'c' significa que recibi una A pero que est en el men de configuracin, de manera que no est en la secuencia, y regresa a recibir y mandar. En caso contrario, como ya se sabe cul es el orden de la secuencia, nada ms se van guardando los valores en diferentes variables. En el ltimo instante de la secuencia (recibimos una Z) se procede a realizar las conversiones, y se envan a la computadora.

64

Debido a que el cdigo de este programa es un poco ms extenso, a continuacin se muestra un diagrama de flujos para representar lo que el cdigo hace y una imagen de cuando se est usando en el Arduino.

Figura 4-7. Diagrama de flujo del cdigo implementado en la prueba de conversin simple.

65

Figura 4-8. Imagen demostrativa de la salida de la prueba del convertidor simple.

4.4 Aplicacin: Carro a control remoto


4.4.1 Control
El objetivo central del control implementado en este experimento es obtener dos ngulos, y segn el valor de estos ngulos controlar la intensidad a la que se mueve un carro a control remoto. En este caso, el control remoto es solamente el sensor conectado usando los mdulos Xbee y la configuracin usada en el captulo 4.1. Luego, el Arduino Mega 2560

66

recibe la informacin que este sensor enva y la procesa. Este procesamiento de la informacin se basa en el filtro Kalman implementado en la referencia [4.6]. 4.4.1.1 Calibracin La primera etapa del sistema es el proceso de calibracin. Cuando se encuentra en este estado, el sistema recibe 100 datos del sensor para sacar un promedio del valor Zero de cada seal. Este procedimiento es basado en el cdigo de la referencia [4.6]. Algo que hay que tomar en cuenta es que para poder entrar a la funcin de calibracin, es necesario que el sensor est en estado activo, enviando datos en forma binaria para que funcione correctamente. Tambin es necesario que el sensor este quieto en toda esta etapa debido a que puede afectar los clculos hechos, y debido a que son 100 datos recibidos a una frecuencia de 50 Hz, son 2 s en este estado. Esta etapa se podra evitar usando los valores para los ceros dados por el fabricante de los sensores pero esto conlleva a muchas imprecisiones. Otra forma puede ser que uno calcule de ante mano el valor promedio y nada ms lo utiliza, pero nunca se sabe el estado de los sensores por lo que este promedio puede ser diferente cada vez. 4.4.1.2 Filtro Kalman Este filtro es exactamente el mismo utilizado en la referencia [4.6]. Debido a la complejidad del filtro Kalman, fue decidido utilizar esta funcin ya que se saba que daba resultados satisfactorios, y se evitaba tener que implementar el filtro por cuenta propia, lo cual hubiera sido un esfuerzo innecesario.

67

Lo que hace esta funcin es recibir (por cada eje) el ngulo calculado por el acelermetro, la velocidad calculada por el giroscopio y el periodo de tiempo en milisegundos. Con esto hace una estimacin segn clculos pasados y los nuevos valores recibidos para estimar el ngulo de la mejor manera posible. 4.4.1.3 Control del carro El automvil contiene dos motores, estos son controlados por un puente H del cual se mencionar su funcionamiento en el siguiente segmento. Estos puentes H reciben 2 seales cada uno. Estas seales son salidas del Arduino Mega. Debido a que las salidas del filtro Kalman nos ofrecen ngulos muy certeros, utilizamos estos mismos datos para controlar los motores. Este control se basa en el PWM. El PWM es un mtodo muy simple para controlar la velocidad de un motor. Funciona bsicamente con pulsos definidos. Imaginemos que se quiere que el motor revolucione a mxima velocidad, la tensin tiene que ser la mxima que se le puede ofrecer. Pero por ejemplo, se quiere que el motor rote a una velocidad media, por medio del PWM se simplifica mucho este control ya que lo que se controla es el ciclo de trabajo de la seal (pulse width en la figura). De manera que, como se puede observar en la figura, entre ms cercana a 1 es la relacin entre pulse width y period, mayor es la tensin promedio, por lo que el motor girar ms rpido.

68

Figura 4-9. Seales de PWM con distintos ciclos de trabajo (pulse width).

Ahora bien, los dos ngulos que se usarn en este control son los relacionados con el eje x para la direccin, y el eje y para la aceleracin. Primero se explicar el control de la aceleracin del carro, y luego la direccin. En el caso de la aceleracin es muy simple debido a que nada ms es necesario convertir este ngulo a un valor de 0 a 255 debido a que el PWM que tiene el Arduino Mega es de 8 bits. Para esta conversin se utiliza el seno ya que convierte el rango del ngulo [-90 , 90] a un rango de [-1 , 1] de una manera no lineal. Se utiliza esta no linealidad debido a que el PWM no resulta muy eficiente cuando se usa con un ancho del pulso muy pequeo ya que despus de cierto valor, el motor nada mas no gira. La siguiente tabla muestra el valor de las seales que se usan para controlar el motor.

Obtenida de http://meteoyelectronica.blogspot.com/2010/12/pwm-una-manera-sencilla-de-controlar-un.html

69

Tabla 4-1. Valores posibles para las seales de control del motor encargado de la aceleracin. Resultado de la conversin Caso 1: X > 0.1 Caso 2: -0.1 < X < 0 .1 Caso 3: X < -0.1 Seal 0 X*255 0 0 Seal 1 0 0 175

En el caso de X > 0, la seal cero tendr un valor de ~0 a 255 segn la proporcionalidad mencionada anteriormente. Al poner la seal 0 con ste pulso y la seal 1 en 0, esto indica que el motor girar hacia adelante. En el segundo caso, se dejan ambas seales en 0 para dejar un rango en donde el motor est quieto por si existe mucho ruido. Este rango es de +- 6 grados. En el ltimo caso el motor gira en reversa. No se puso la misma proporcionalidad que en el primer caso debido a la incomodidad que se presenta girar el sensor a una posicin donde se puede maniobrar y a la misma vez controlar la aceleracin en reversa. Debido a esto se puso un valor fijo de manera que despus de girar el sensor -6 grados, el carro ya entra en reversa a una velocidad fija. El caso de la direccin del carro es un poco ms complejo y se usa el ngulo calculado en el eje x. Para hacer este control no solo basta el PWM, tambin es necesario utilizar un potencimetro. Dicho potencimetro esta adherido al sistema de giro de las llantas de manera que cuando las llantas estn completamente hacia la derecha, este potencimetro tendr un valor X y cuando las llantas estn completamente hacia la izquierda, este potencimetro tendr un valor Y donde Y es menor que X.

70

Este sistema ya viene implementado en el carro que se utiliza como prueba. En otras palabras, este potencimetro se usa para poder identificar la direccin exacta que tienen las llantas. Luego, este valor es ledo por el Arduino Mega a travs de una de las entradas analgicas para utilizar el CAD y convertir la tensin en el potencimetro a un valor digital. Tambin es de suma importancia saber cules son los valores que tiene este potencimetro cuando las llantas estn completamente giradas tanto hacia la derecha como hacia la izquierda. Esto se puede lograr de 2 maneras, registrando el valor desde antes ya que es un valor que no va a cambiar, o hacerlo como parte de la funcin de calibracin mencionada anteriormente. Con estos datos ya se puede proceder a realizar el control de la direccin transformando el ngulo de la misma manera que se hizo para el motor de la aceleracin. Este valor se usa de una manera similar al del motor de la aceleracin con la diferencia que en vez de usar el valor de la conversin directamente en la seal, se compara este valor con la posicin de las llantas (potencimetro) (a una misma proporcin) y no sale del ciclo hasta que el valor del potencimetro llegue a tener un valor similar al que tcnicamente tiene que tener. El cdigo de esta prueba se puede observar en los anexos.

4.4.2 Puente H
Un puente H, como se mencion anteriormente, es un circuito electrnico que se utiliza para controlar la direccin de motores de corriente directa. A pesar de que est

71

disponible en forma de circuito integrado, es posible armar fcilmente un puente H usando componentes discretos. El nombre de este circuito proviene de su tpica representacin grfica, como la que se muestra en la Figura 4-10. Los interruptores que se muestran en el esquemtico pueden ser de distintas formas, entre ellas interruptores mecnicos como rels; o con transistores, como es el caso de este proyecto.

Figura 4-10. Esquemtico general de un puente H.

Segn se aprecia en la figura anterior, si se cierran S1 y S4 y se mantienen abiertos S2 y S3, se aplica una tensin elctrica positiva al motor M, mientras que si stos ltimos se cierran y se abren los primeros la tensin ser negativa y el sentido de giro del motor opuesto al primero. Es importante notar que no se deben cerrar al mismo tiempo S1 y S2 (o bien S3 y S4), pues esto hara que la fuente quede en cortocircuito. La mejor forma de implementar un puente H es usando transistores como interruptores (en corte y saturacin), y no
4

Puente H. Sitio: Wikipedia, la enciclopedia libre. Visitado el 14 de febrero de 2010. Disponible en: http://es.wikipedia.org/wiki/Puente_H_(electr%C3%B3nica)

72

interruptores mecnicos, pues estos no tienen buenas frecuencias de conmutacin y su vida til es ms baja. Para este proyecto se utilizaran transistores BJT en corte y saturacin para la configuracin del puente H. De ah la necesidad de exponer con brevedad el funcionamiento bsico de un transistor bipolar de unin en corte o en saturacin. Para utilizar un transistor como un interruptor, ste debe funcionar alternando entre sus regiones de corte y saturacin. Un transistor est en corte cuando su corriente de colector es mnima, cercana a cero, y su tensin de colector-emisor es mxima, cercana a la tensin de alimentacin. Si el transistor est en saturacin, entonces la corriente de colector es mxima y la diferencia de potencial entre el colector y el emisor es de aproximadamente 0 volts. Para los efectos de este experimento, se disear de modo que con tener una pequea corriente en la base de un transistor de control, sea suficiente para que los transistores de potencia se saturen. A continuacin se muestra el esquemtico a utilizar para los dos puentes H.

73

+ U5 5

R2 1k
D1 1N4001

R3 1k T3 2N3906
D2 1N4001

T4 2N3906

R1 1k T5 2N2222
D3 1N4001

DCM1 5
+ -

R4 1k T6 2N2222

T1 2N2222

D4 1N4001

T2 2N2222

U3 SN7404 Izquierda
2

1 2 1 H a usar para el motor de la direccin. Figura 4-11. Esquemtico del Puente 3

U1 SN7408

Derecha U4 SN7404
1 2 1 2

U2 SN7408
3

No se entrar en detalles matemticos de diseo, puesto que dado la simpleza del diseo, no se requieren clculos de resistencias ni nada por el estilo. Lo nico que se calcula a continuacin es la potencia disipada por los transistores por donde fluye la corriente del motor, esto con el fin de elegir los adecuados y no quemarlos. Para estos clculos se tomar una corriente nominal del motor de 350 mA, y una tensin de saturacin de los transistores de 1 volt (segn la hoja del fabricante del 2N2222). La potencia total disipada por los transistores es de aproximadamente 350mW, y de acuerdo a la hoja del fabricante del 2N2222, este se encuentra habilitado para disipar hasta 500mW sin disipador de calor. Por lo tanto nos encontramos dentro del rango normal de operacin del transistor.

74

Debido a que las entradas del puente H no pueden estar al mismo tiempo en alto, el control del puente necesariamente tiene que evitar que esto ocurra, de manera que el Arduino se encargue de que no pase. Para el motor de la aceleracin se hicieron varios intentos para implementar el diseo anterior, haciendo mejoras y algunos cambios pero no funcionaron. Debido a esto se decidi implementar un diseo nuevo mostrado a continuacin:

Figura 4-12. Esquemtico del Puente H a usar para el motor de la aceleracin.

Obtenido en la pgina http://www.angelfire.com/co2/piel/puenteh.html

75

Este diseo funciona prcticamente igual al anterior a diferencia que se utilizan transistores Darlington. Estos transistores son como dos transistores BJT puestos en una configuracin de manera que la corriente que pueden conducir es muy superior a la corriente de un solo BJT. Esta es la gran ventaja con respecto al otro diseo debido a que el motor usado para la aceleracin es ms grande, de manera que necesita una mayor potencia que el otro. La nica desventaja con este diseo es que estos transistores tienen una tensin de colector-emisor ms alta que un solo BJT de manera que es necesario que la tensin de entrada sea mayor para compensar por esto. Debido a esto, este puente se conecta directamente a la tensin de la batera mientras que el otro puente H se conecta a la salida de un LM7805 el cual es una tensin regulada de 5V.

4.4.3 Pruebas
Al comienzo de la elaboracin del circuito y del carro en general, el funcionamiento del cdigo, y en especial la parte del direccionamiento, solo se poda comprobar con el sistema completo instalado de manera que resultaba ms difcil el debugueo. Los puentes H fueron ms fciles de corroborar debido a que solamente era necesario comprobar las salidas del puente hacia el motor, cambiando las seales de control. Ambos puentes funcionaban a la perfeccin cuando no estn sometidos a una carga como lo es el motor. Por ejemplo, al poner una configuracin de 0-0 en las entradas, las terminales donde va el motor haba una tensin de 0 V, cuando se usaba la configuracin 0-

76

1 haba una tensin de -5 V (-10.41 V para el otro puente) y para la configuracin 1-0 haba una tensin de 5 V (10.41 V para el otro puente). La configuracin 1-1 no se prob debido a que ocasionara un cortocircuito en la fuente y quemara todo el sistema. Al comienzo del proyecto, el problema con los puentes H fue que al poner el motor, dejaron de funcionar. Ambos motores si funcionan correctamente a la tensin de salida correspondiente a cada puente H, pero el puente no era capaz de entregar la corriente necesaria de manera que la tensin en el motor disminua y ya no era suficiente para poder mover el motor. Para arreglar dicho problema para el motor de la direccin, lo que se hizo fue disminuir el valor de la resistencia en las seales de control de manera que la corriente en la base aumentaba. Con esto fue suficiente para que dicho puente funcionara correctamente. Luego para el otro motor, despus de intentar varios cambios se tuvo que implementar el puente H mostrado en la seccin anterior el cual funcion correctamente desde el principio. Una vez que los puentes H funcionaban correctamente, se procedi a hacer las pruebas correspondientes para corroborar el funcionamiento del cdigo que se estaba implementando. Luego de varias pruebas se hicieron algunas modificaciones en el cdigo para que funcionara de una mejor manera. Algunos de estos cambios fueron: Se implementaron unos LEDs para indicar cuando se est en el estado de calibracin (rojo encendido), cuando se est en el estado normal (verde encendido), y cuando se deja de recibir datos (rojo encendido de nuevo).

77

Se hicieron algunas modificaciones en los rangos usados para controlar las salidas de PWM ya que se not que no eran rangos muy tiles debido a que aun as se senta mucho el ruido causado de movimientos bruscos.

Se encontr un error en la implementacin de los filtros Kalman utilizados. Estos reciban el valor del giroscopio correspondiente para el eje en cuestin. El problema fue que esta medicin es ortogonal al ngulo que se est midiendo de manera que no tienen ninguna incidencia en dicho valor. Debido a esto se cambi a que recibiera el valor del giroscopio del eje contrario y funcion mucho mejor que antes.

Se elimin el uso de la salida PWM proporcional a la distancia que haba entre la posicin actual y la posicin destino para el motor de la direccin por una salida PWM fija, debido a que era irrelevante ese uso ya que la parte mecnica no permita que se pudiera sacarle provecho a ese uso.

Se agreg la opcin de poder encender el carro sin encender primero el sensor por medio de una extensin en el cdigo que se implement a la hora de obtener los datos tanto en la etapa de calibracin, como en la etapa normal. Con esto lo que se hace es que si pasa ms de 500 ms sin recibir informacin (significa que el sensor o est muy lejos o est apagado) se encienda el LED rojo, todos los motores se apaguen y espera hasta empezar a recibir datos de nuevo. Lo de los motores era de suma importancia debido a que poda ocurrir que el carro est en movimiento y el sensor se apaga, el carro seguir movindose en esa direccin de manera que era necesario que el carro se detuviera en esta circunstancia.

78

4.5 Aplicacin: Medicin de distancia.


Esta aplicacin consiste en obtener los valores de las distancias recorridas del sensor dado una posicin inicial. Dicho esto, esta aplicacin no dio resultados satisfactorios ya que el cdigo implementado dependa en gran medida de la precisin de los sensores, la cual no es buena. Aun as, igualmente se intent de la mejor manera posible. Esta aplicacin no depende de otro Hardware ms que el sensor, el Arduino y una computadora. En este caso, se program el Arduino Mega para recibir la informacin del sensor y en vez de slo calcular los ngulos, tambin se calculaban todas las fuerzas junto al desplazamiento y la velocidad en cada eje. Para lograr esto se utilizan 7 vectores de 3 componentes (X, Y y Z). Estos vectores son:
Tabla 4-2. Vectores usados en la aplicacin para calcular la distancia.

Nombre Fuerza_G Fuerza_T

Funcin Vector de la fuerza de la gravedad Vector de la fuerza total ejercida en el sensor

Fuerza_R

Vector de la fuerza resultante (toda fuerza externa que no es la gravedad).

Desplazamiento

Desplazamiento final

79

Desplazamiento_c DesplazamientoI VelocidadI

Desplazamiento final en centmetros Desplazamiento inicial Velocidad inicial

Al igual que en la aplicacin anterior, aqu se utiliza una calibracin para el sensor. Luego de la calibracin, se procede a hacer todos los clculos relacionados con los ngulos y tambin se hace uso del filtro Kalman. Para calcular las fuerzas primero se calcula la Fuerza_G. Debido a que la magnitud de esta fuerza es conocida (1), el componente x se obtiene sacando el seno del ngulo calculado por el filtro Kalman. Esto mismo se hace para el componente y, ya que en teora este componente se obtendra multiplicando la magnitud del vector por el seno del ngulo en donde la magnitud del vector es 1. En el caso del componente z, este se calcula utilizando Pitgoras. Y por ltimo, para obtener la direccin de este componente se usa el valor del ngulo z. En el caso de la fuerza_T se utiliza un procedimiento idntico a diferencia que los componentes x y y se sacan utilizando los valores del acelermetro (tomando en cuenta como si fueran valores confiables). Luego la fuerza_R se obtiene restando estos valores. Luego, el desplazamiento se calcula utilizando la ecuacin: (8)

80

Donde di es la distancia inicial, vi es la velocidad inicial, t es el tiempo y a es la aceleracin. En este caso, debido a que es una ecuacin que se recorre constantemente, di tendr el valor de la distancia calculada en el tiempo t - 1, vi tendr el valor de la velocidad en el tiempo t 1, y a tendr el valor del componente de la fuerza resultante multiplicado por 9.81.

4.6 Inconvenientes en la ejecucin del proyecto


A continuacin se enlista algunos de los problemas que se tuvieron en el transcurso del proyecto. Cuando se estuvo manejando por primera vez los mdulos Xbee, se tuvieron diversos problemas al configurarlos. Todo se deba a un mal uso del procedimiento de la comunicacin con el mdulo, en especial, el baud rate, el cual es muy importante tener el valor correcto asignado o si no, no se lograr comunicar con el mdulo correctamente. Otra complicacin que se tuvo fue con el sensor ya que originalmente se quera modificar el cdigo que trae el sensor para poder implementar unas mejoras en el sistema, pero al final no se logr imponer un nuevo cdigo en el ATMega que trae el sensor. Tambin fue difcil poder decodificar los datos que venan del sensor ya que, por ms que se tena el orden en el que venan los datos, no se lograba obtener un valor

81

congruente hasta que se hicieron los cambios necesarios, como por ejemplo, lo fue agregar la multiplicacin del byte entrante por 256 cuando era la parte ms significativa del dato. Con la aplicacin del carro a control remoto, uno de los problemas que no se pudieron eliminar fue que al incrementar un ngulo afectaba el valor del otro ngulo, en especial cuando deban ser valores sumamente altos en ambos casos. Por ejemplo, cuando se acelera al mximo (ngulo en el eje y en 90 grados), el sensor tiene que estar completamente inclinado hacia el usuario pero cuando se decide girar el sensor hacia la derecha o la izquierda, el ngulo en el eje x aumenta, pero por ms que se mantenga el sensor en la misma direccin del eje y, este ngulo comenzar a disminuir conforme el del eje x aumenta. Otro problema con esta aplicacin fue que debido a que no se pudo modificar el programa en el sensor, el sensor definitivamente se tiene que encender antes que el Arduino Mega debido a que el Arduino est programado para enviar un # en caso de que el sensor empiece en el estado de idle pero si el sensor se enciende despus, no recibe este dato y se queda en ese estado indefinidamente hasta que se reinicie el Arduino Mega. Pero luego esto se logr corregir en el cdigo implementado en el Arduino Otro problema que se encontr fue lo sensibles que eran los sensores a vibraciones. En especial a vibraciones causadas por la friccin. Por ejemplo, al poner el sensor

82

en una mesa y arrastrarlo, los sensores empezaban a dar valores completamente errticos. Como se mencion anteriormente, otro de los problemas ms graves fue que los sensores, al ser baratos, no eran muy precisos lo cual afectaba el funcionamiento en las aplicaciones. Otro problema que se encontr fue con el puente H. El puente H funcionaba perfectamente cuando solo est conectado al Arduino Mega pero se conectaba el motor al puente y dejaba de funcionar.

83

5 CAPTULO V: Conclusiones y Recomendaciones


5.1 Conclusiones
Se logr disear e implementar un sistema de sensores de movimiento y rotacin. Esto fue logrado utilizando un IMU de Sparkfun el cual contena los sensores y un ATMega necesarios y listos para poder manejarse. Se decidi usar esta propuesta debido a que la otra opcin resultaba ser ms costosa. Se pudo implementar un sistema de comunicacin inalmbrica bajo el protocolo ZigBee utilizando los mdulos Xbee de Digi y otras herramientas para lograr comunicar los sensores con el Arduino Mega. Se cre una etapa de procesamiento y control programando un micro controlador Arduino el cual se encargaba de recibir los datos de los sensores y transformar esa informacin en ngulos entre el plano horizontal y los eje x y y del sensor. Se dise y se implement una aplicacin para este sistema el cual consista en conducir un carro a control remoto por medio del movimiento que se le daba al sensor.

84

5.2 Recomendaciones
Este proyecto puede tener diversos usos debido a que estos sensores resultan de gran utilidad, en especial cuando se usan juntos. Se intent darle otra aplicacin que era medir distancia en los tres ejes, pero debido a falta de tiempo no se logr. Esto conllevara a grandes usos debido a que, por ejemplo, con solo medir la altura, se podran utilizar para saber qu tan alto llega un globo climtico, o por ejemplo, si se guardan los datos en una computadora, se podra poner el IMU en una boya y medir la altura que puede llevar una ola de manera que luego se podra calcular el caudal y la velocidad que lleva, o inclusive se podra utilizar como un sensor de temblores, de manera que registre cuando hay una fuerza horizontal aplicada, entre otros. Uno de los mayores problemas que se obtuvieron con este proyecto fue que los sensores utilizados eran muy bsicos, los cuales presentaban variaciones significativas con respecto a los valores reales (ruido). A causa de esto, si se desea hacer un proyecto en el cual se implementen sensores similares, el hecho que se utilicen sensores de mejor calidad hara que la informacin de los sensores sea ms confiable. Al trabajar en un proyecto que en parte es trabajada en hardware y otra parte en software, es recomendable trabajar por partes. Ir poco a poco trabajando la parte fsica y la parte programada ya que difcilmente ocurrir que se armen todos los circuitos y que funcionen correctamente, al igual que con un programa.

85

Si se desea personalizar de mejor manera el proyecto, se podra disear e implementar el sistema de sensores sin utilizar un IMU, de manera que uno tenga que crear dicho sistema, comprando los sensores por aparte y el micro controlador junto a todo lo que se necesita para que funcione. Esto permitira agregar otras aplicaciones como botones por ejemplo, o algn tipo de indicador extra.

86

6 REFERENCIAS
6.1 Libros
[1.1] Faludi, Robert. Building Wireless Sensor Networks. OReilly. 2011. [1.2] Farahani, Shahin. ZigBee Wireless Networks and Transceivers. Newnes. 2008. [1.3] Fraden, Jacob. Handbook of Modern Sensors: Physics, Designs and Applications, cuarta edicin. Springer. 2010. [1.4] L nn, Jogan; Olsson Jonas. Zigbee for wirless networking. Proyecto de maestria. Link pings University. Department of Science and Technology 2005. [1.5] Ripka, Pavel; Tipek, Alois. Modern Sensors Handbook. 2007. [1.6] Solera R, lvaro. El Filtro Kalman. Nota Tcnica. Banco Central de Costa Rica, Divisin Econmica. 2003. [1.7] Montenegro G, lvaro. Introduccin al Filtro Kalman. Documentos de Economa. Pontificia Universidad Javeriana, Facultad de Ciencias Econmicas y Administrativas. 2005.

87

6.2 Pginas Web


[2.1] Arduino. Arduino Mega 2560 Arduino. Italia. 2010. http://arduino.cc/en/Main/ArduinoBoardMega2560 [2.2] Carletti, Eduardo. Sensores Girscopos: Descripcin y funcionamiento. 2009. http://robots-argentina.com.ar/Sensores_giroscopos.htm [2.3] Definicion.de Definicin de sensor. http://definicion.de/sensor/ [2.4] Hackmann, Greg. 802.15 Personal Area Networks. http://www1.cse.wustl.edu/~jain/cse574-06/ftp/wpans/index.html [2.5] Miller. Abbe Error. http://personal.uncc.edu/jamiller/terms/ABBE_ERROR.htm [2.6] Musinski, Dan. Displacement-measuring interferometers provide precise metrology. 2003 http://www.optoiq.com/index/photonics-technologies-applications/lfwdisplay/lfw-article-display/195375/articles/laser-focus-world/volume-39/issue12/features/position-sensors/displacement-measuring-interferometers-provide-precisemetrology.html [2.7] Sparkfun. Xbee Explorer USB. Sparkfun Electronics. 2010 . http://www.sparkfun.com/products/8687 [2.8] Sparkfun. Xbee Shield. Sparkfun Electronics. http://www.sparkfun.com/products/9588

88

[2.9] Sparkfun. Xbee 1mW Wire Antenna. Sparkfun Electronics. http://www.sparkfun.com/products/8665 [2.10] Wexler, Joanie. Bluetooth and ZigBee: Compare and Contrast. TECHWORLD. 2005. http://features.techworld.com/mobile-wireless/1261/bluetooth-and-zigbee-compareand-contrast/ [2.11] Wikipedia. Foucaults Gyroscope. Wikipedia Foundation. 2008. http://en.wikipedia.org/wiki/File:Foucault%27s_gyroscope.jpg [2.12] Wikipedia. Gyroscope. Wikipedia Foundation. 2011. http://en.wikipedia.org/wiki/Gyroscope [2.13] Wikipedia. Inertial Measurement Unit. Wikipedia Foundation. 2011. http://en.wikipedia.org/wiki/Inertial_measurement_unit [2.14] Wikipedia. Modelo OSI. Wikipedia Foundation. 2011. http://es.wikipedia.org/wiki/Modelo_OSI [2.15] Wikipedia. Navegacin a estima. Wikipedia Foundation. 2010. http://es.wikipedia.org/wiki/Navegaci%C3%B3n_a_estima

89

6.3 Hojas de datos


[3.1] 1.5g 6g Three Axis Low-g Micromachined Accelerometer. MMA7260Q. Freescale Semiconductor. 2005. [3.2] 3 Ejes Giroscopio de Cuarzo INN-107. Bricett. [3.3] 8-bit AVR Microcontroller with 4/8/16/32K Bytes In-System Programmable Flash. ATmega 328p. ATMEL. 2010. [3.4] Atomic IMU 6 Degrees of Freedom Xbee Ready. Sparkfun Electronics. 2009. [3.5] MEMS inertial sensor: single-axis +- 300 /s analog output yaw rate gyroscope. LISY300AL. ST. 2008 [3.6] Xbee / Xbee PRO RF Modules. Digi International. 2009.

6.4 Manuales o tutoriales


[4.1] Faludi, Robert. Programming Arduino Wirelessly. http://www.faludi.com/itp_coursework/meshnetworking/XBee/XBee_program_Arduino_w ireless.html [4.2] Nathan. Wireless Bootloading for ATmega168/ATmega328. Sparkfun. 2009. http://www.sparkfun.com/tutorials/122

90

[4.3] Nathan. Beginning Embedded Electronics - 2. Sparkfun. 2008. http://www.sparkfun.com/tutorials/93 [4.4] Nmcclana. Accelerometer And Gyro Tutorial. Instructables. 2010. http://www.instructables.com/id/Accelerometer-Gyro-Tutorial/ [4.5] Otaviousp. Arduino, Gyroscope and Processing. Instructables. 2009. http://www.instructables.com/id/ArduinoGyroscopeProcessing/ [4.6] Lauszus, Kristian. Guide to gyro and accelerometer with Arduino including Kalman filtering. 2011. http://arduino.cc/forum/index.php/topic,58048.0.html

91

7 APNDICES
A.1 Cdigo del Arduino para usarlo como un mediador entre el usuario y el sensor. void setup() { Serial.begin(115200); Serial1.begin(115200); } void loop() { // read from port 0, send to port 1: if (Serial.available()) { int inByte = Serial.read(); Serial1.print(inByte, BYTE); } // read from port 1, send to port 0: if (Serial1.available()) { int inByte = Serial1.read(); Serial.print(inByte, BYTE); } } A.2 Cdigo del Arduino para usarlo como un convertidor simple. #include <stdio.h> #include <math.h>

int count = 0; int ax = 0, ay = 0, az = 0; int p = 0, r = 0, y = 0; int st_seq = 0; float Acel_x; float Acel_y; float Acel_z;

92

float Giro_p; float Giro_r; float Giro_y; float Vref = 3.3; float VceroG = 1.65; float Sensitividad_A = 0.800; //Para el giroscopio float VceroR = 1.65; float Sensitividad_G = 0.0033; int precision = 0; void setup() { Serial.begin(115200); Serial1.begin(115200); } void loop() { if (Serial.available()) { int inByte = Serial.read(); Serial1.print(inByte, BYTE); } if (Serial1.available()>0) { int inByte = Serial1.read(); switch (st_seq){ case 0: Serial.print(inByte, BYTE); break; case 1: if(inByte == 't' || inByte == 'u' || inByte == 'S' || inByte == 'c') st_seq = 0; if(st_seq == 0) { Serial.print(inByte, BYTE); } else { count = inByte*256; st_seq++; } break; case 2: //Recibimos LSB de count count = count + inByte; st_seq++; break;

93

case 3:

//Recibimos MSB de AccelX ax = inByte*256; st_seq++; break; case 4: //Recibimos LSB de AccelX ax = ax + inByte; st_seq++; break; case 5: //Recibimos MSB de AccelY ay = inByte*256; st_seq++; break; case 6: //Recibimos LSB de AccelY ay = ay + inByte; st_seq++; break; case 7: //Recibimos MSB de AccelZ az = inByte*256; st_seq++; break; case 8: //Recibimos LSB de AccelZ az = az + inByte; st_seq++; break; case 9: //Recibimos MSB de Pitch p = inByte*256; st_seq++; break; case 10: //Recibimos LSB de Pitch p = p + inByte; st_seq++; break; case 11: //Recibimos MSB de Roll r = inByte*256; st_seq++; break; case 12: //Recibimos LSB de Roll r = r + inByte; st_seq++; break; case 13: //Recibimos MSB de Yaw

94

y = inByte*256; st_seq++; break; case 14: //Recibimos LSB de Yaw y = y + inByte; st_seq++; break; case 15: st_seq = 0; Acel_x = ( (ax * Vref / 1023 - VceroG) / Sensitividad_A ) - 0.062; //offset notado Acel_y = ( (ay * Vref / 1023 - VceroG) / Sensitividad_A ) + 0.052; //offset notado Acel_z = ( (az * Vref / 1023 - VceroG) / Sensitividad_A ) + 0 ; Giro_p = ( (p * Vref / 1023 - VceroR) / Sensitividad_G ) + 14.17; Giro_r = ( (r * Vref / 1023 - VceroR) / Sensitividad_G ) - 0.488; Giro_y = ( (y * Vref / 1023 - VceroR) / Sensitividad_G ) - 14.17; Serial.print("\t Ax="); Serial.print(Acel_x, precision); Serial.print("\t Ay="); Serial.print(Acel_y, precision); Serial.print("\t Az="); Serial.print(Acel_z, precision); Serial.print("\t Gp="); Serial.print(Giro_p, precision); Serial.print("\t Gr="); Serial.print(Giro_r, precision); Serial.print("\t Gy="); Serial.print(Giro_y, precision); Serial.print("\n"); break; default: break; } if (inByte == 'A'){ st_seq = 1; } } } A.3 Cdigo del Arduino para el carro a control remoto. Base #include <stdio.h> #include <math.h> #define RAD_TO_DEG 57.295779513082320876798154814105

95

#define FRECUENCIA 10 //Tiene que ser igual al valor en la configuracion #define SENS_ACEL 1.5 //Tiene que ser igual al valor en la configuracion //Puertos (pines del Arduino Mega) //Puertos de control para motores del carro (PWM) y el potenciometro int Direccion0 = 13; int Direccion1 = 12; int Aceleracion0 = 42; int Aceleracion1 = 43; int pot = 3; //conectar cable blanco a este pin analogico //Puertos para LEDs para indicar funcionamiento int LED_V = 9; int LED_R = 8; //Valores iniciales (para la calibracion) int gyroCeroX = 0; int gyroCeroY = 0; int gyroCeroZ = 0; int accCeroX = 0; int accCeroY = 0; int accCeroZ = 0; //Valores medidos de los sensores float gyroXadc = 0; float gyroYadc = 0; float gyroZadc = 0; float accXadc = 0; float accYadc = 0; float accZadc = 0; //Valores convertidos float gyroXrate = 0; float gyroYrate = 0; float gyroZrate = 0; float accXval = 0; float accYval = 0; float accZval = 0; //Valores calculados float gyroXangle = 0; float gyroYangle = 0; float gyroZangle = 0; float accXangle = 0; float accYangle = 0; float accZangle = 0;

96

//Datos de hojas del fabricante float Vref = 3.3; float Sensibilidad_Acc = 1.2 / SENS_ACEL; float Sensibilidad_Giro = 0.0033; // Constante //Frecuencia de muestreo float dt = 0.02; // 1 / FRECUENCIA; //Datos para la direccion del carro int Vdc = 5; //Salida del arduino, necesario, para usar el analogReference como default float limite_dir_der_v = 0; float limite_dir_izq_v = 0; float Vcentro = 0; float Posicion_actual = 0; float Posicion_destino = 0; int proporcional = 0; //Resultados finales float R = 0; float xAngle = 0; float yAngle = 0; float zAngle = 0; //Declaracion de funciones void Obtener_dato(); void Calibrar(); void Carro(); void kalmanCalculateX (); void kalmanCalculateY (); void setup() { Serial.begin(115200); Serial1.begin(115200); delay(100); pinMode (LED_R, OUTPUT); pinMode (LED_V, OUTPUT); analogWrite (Direccion1,0); analogWrite (Direccion0,0); analogWrite (Aceleracion1,0); analogWrite (Aceleracion0,0); Calibrar();

97

Serial1.print('#', BYTE); } void loop() { Obtener_dato(); gyroXrate = ( gyroXadc - gyroCeroX ) * Vref / ( Sensibilidad_Giro * 1023 ); gyroYrate = ( gyroYadc - gyroCeroY ) * Vref / ( Sensibilidad_Giro * 1023 ); gyroZrate = ( gyroZadc - gyroCeroZ ) * Vref / ( Sensibilidad_Giro * 1023 ); accXval = (accXadc-accCeroX) * Vref / ( Sensibilidad_Acc * 1023 ); accYval = (accYadc-accCeroY) * Vref / ( Sensibilidad_Acc * 1023 ); accZval = (accZadc-accCeroZ) * Vref / ( Sensibilidad_Acc * 1023 ); accZval++; //compensacion de 1 gravedad por lo de calibrar al principio Carro (); } void Obtener_dato(){ float tiempoI = millis(); float tiempoA = 0; for ( int st_seq = 0 ; st_seq < 16 ; st_seq++ ){ if ( Serial1.available() > 0 ) { digitalWrite (LED_R, LOW); digitalWrite (LED_V, HIGH); int inByte = Serial1.read(); switch ( st_seq ){ case 0: //Recibimos la 'A' (irrelevante) case 1: //Recibimos MSB de count (irrelevante) case 2: break; //Recibimos LSB de count (irrelevante) case 3: //Recibimos MSB de AcelX accXadc = inByte*256; break; case 4: //Recibimos LSB de AcelX accXadc = accXadc + inByte; break; case 5: //Recibimos MSB de AcelY accYadc = inByte*256; break; case 6: //Recibimos LSB de AcelY accYadc = accYadc + inByte; break;

98

case 7: //Recibimos MSB de AcelZ accZadc = inByte*256; break; case 8: //Recibimos LSB de AcelZ accZadc = accZadc + inByte; break; case 9: //Recibimos MSB de GiroX gyroXadc = inByte*256; break; case 10: //Recibimos LSB de GiroX gyroXadc = gyroXadc + inByte; break; case 11: //Recibimos MSB de GiroY gyroYadc = inByte*256; break; case 12: //Recibimos LSB de GiroY gyroYadc = gyroYadc + inByte; break; case 13: //Recibimos MSB de GiroZ gyroZadc = inByte*256; break; case 14: //Recibimos LSB de GiroZ gyroZadc = gyroZadc + inByte; break; case 15: break; //Recibimos 'Z' (irrelevante) } tiempoI = millis(); } else { st_seq--; //todavia no ha llegado el dato, entncs para que se quede en el valor de //st_seq, se le resta 1 porque el for le suma 1 tiempoA = millis(); if(tiempoA-tiempoI > 500){ analogWrite (Aceleracion1,0); analogWrite (Aceleracion0,0); analogWrite (Direccion1,0); analogWrite (Direccion0,0); digitalWrite (LED_R, HIGH); digitalWrite (LED_V, LOW); Serial1.print('#', BYTE); st_seq = -1; } } } } Calibrar

99

void Calibrar() { //Variables a usar: //giroscopio long gx = 0; long gy = 0; long gz = 0; //acelerometro long ax = 0; long ay = 0; long az = 0; //Indican que esta en calibracion digitalWrite (LED_R, HIGH); digitalWrite (LED_V, LOW); float tiempoI = millis(); float tiempoA = 0; Serial1.print(')', BYTE); Serial1.print('#', BYTE); //Similar al metodo "obtener dato" for( int i = 0 ; i < 100 ; i++ ){ for( int st_seq = 0 ; st_seq < 16 ; st_seq++ ){ if ( Serial1.available() > 0 ) { int inByte = Serial1.read(); switch (st_seq){ case 0: //Recibimos la 'A' (irrelevante) case 1: //Recibimos MSB de count (irrelevante) case 2: break; //Recibimos LSB de count (irrelevante) case 3: //Recibimos MSB de AcelX ax = ax + inByte*256; break; case 4: //Recibimos LSB de AcelX ax = ax + inByte; break; case 5: //Recibimos MSB de AcelY ay = ay + inByte*256; break; case 6: //Recibimos LSB de AcelY ay = ay + inByte; break; case 7: //Recibimos MSB de AcelZ az = az + inByte*256; break; case 8: //Recibimos LSB de AcelZ

100

az = az + inByte; break; case 9: //Recibimos MSB de GiroX gx = gx + inByte*256; break; case 10: //Recibimos LSB de GiroX gx = gx + inByte; break; case 11: //Recibimos MSB de GiroY gy = gy + inByte*256; break; case 12: //Recibimos LSB de GiroY gy = gy + inByte; break; case 13: //Recibimos MSB de GiroZ gz = gz + inByte*256; break; case 14: //Recibimos LSB de GiroZ gz = gz + inByte; break; case 15: break; //Recibimos 'Z' (irrelevante) } tiempoI = millis(); } else { st_seq--; //todavia no ha llegado el dato, entncs para que se quede en el valor de //st_seq, se le resta 1 porque el for le suma 1 tiempoA = millis(); if(tiempoA-tiempoI > 500){ Serial1.print('#', BYTE); st_seq = -1; } } } } Serial1.print(' ', BYTE); //Se obtiene el promedio gyroCeroX = gx/100; gyroCeroY = gy/100; gyroCeroZ = gz/100; accCeroX = ax/100; accCeroY = ay/100; accCeroZ = az/100;

101

//Calibrar los valores de la direccion del carro (verde tierra, blanco centro, amarillo Vdc para el potenciometro) analogWrite (Direccion0,0); analogWrite (Direccion1,255); delay(2500); //llantas apuntan hacia la derecha limite_dir_der_v = analogRead(pot) * Vdc / 1023; analogWrite (Direccion1,0); analogWrite (Direccion0,255); delay(2500); //llantas apuntan hacia la izquierda limite_dir_izq_v = analogRead(pot) * Vdc / 1023; analogWrite (Direccion1,0); analogWrite (Direccion0,0); Vcentro = ( limite_dir_der_v + limite_dir_izq_v ) / 2 ; Posicion_destino = Vcentro; do { Posicion_actual = analogRead (pot) * Vdc / 1023; if( Posicion_actual > ( Posicion_destino + 0.4 )){ proporcional = Posicion_actual - Posicion_destino / Posicion_actual * 255; if (proporcional < 150) proporcional = 150; //FIXME: Puede quedarse enciclado si el PWM es muy pequeo (no se mueve) analogWrite (Direccion0,0); analogWrite (Direccion1,proporcional); delay (100); } if( Posicion_actual < ( Posicion_destino - 0.4 )){ proporcional = Posicion_destino - Posicion_actual / Posicion_destino * 255; if (proporcional < 150) proporcional = 150; //FIXME: Puede quedarse enciclado si el PWM es muy pequeo (no se mueve) analogWrite (Direccion1,0); analogWrite (Direccion0,proporcional); delay (100); } analogWrite (Direccion0,0); analogWrite (Direccion1,0); } while ( Posicion_actual > ( Posicion_destino + 1 ) || Posicion_actual < ( Posicion_destino 1 ) ); //Indican que se termino la calibracion

102

digitalWrite (LED_R, LOW); digitalWrite (LED_V, HIGH); } Kalman float Q_angleX = 0.001; float Q_angleY = 0.001; float Q_gyroX = 0.003; float Q_gyroY = 0.003; float R_angleX = 0.03; float R_angleY = 0.03; float x_angle = 0; float y_angle = 0; float x_bias = 0; float y_bias = 0; float PX_00 = 0, PX_01 = 0, PX_10 = 0, PX_11 = 0; float PY_00 = 0, PY_01 = 0, PY_10 = 0, PY_11 = 0; float dtX, yX, SX; float dtY, yY, SY; float KY_0, KY_1; float KX_0, KX_1; float kalmanCalculateX(float newAngle, float newRate,int looptime) { dtX = float(looptime)/1000; x_angle += dtX * (newRate - x_bias); PX_00 += - dtX * (PX_10 + PX_01) + Q_angleX * dtX; PX_01 += - dtX * PX_11; PX_10 += - dtX * PX_11; PX_11 += + Q_gyroX * dtX; yX = newAngle - x_angle; SX = PX_00 + R_angleX; KX_0 = PX_00 / SX; KX_1 = PX_10 / SX; x_angle += KX_0 * yX; x_bias += KX_1 * yX; PX_00 -= KX_0 * PX_00; PX_01 -= KX_0 * PX_01; PX_10 -= KX_1 * PX_00;

103

PX_11 -= KX_1 * PX_01; return x_angle; } float kalmanCalculateY(float newAngle, float newRate,int looptime) { dtY = float(looptime)/1000; y_angle += dtY * (newRate - y_bias); PY_00 += - dtY * (PY_10 + PY_01) + Q_angleY * dtY; PY_01 += - dtY * PY_11; PY_10 += - dtY * PY_11; PY_11 += + Q_gyroY * dtY; yY = newAngle - y_angle; SY = PY_00 + R_angleY; KY_0 = PY_00 / SY; KY_1 = PY_10 / SY; y_angle += KY_0 * yY; y_bias += KY_1 * yY; PY_00 -= KY_0 * PY_00; PY_01 -= KY_0 * PY_01; PY_10 -= KY_1 * PY_00; PY_11 -= KY_1 * PY_01; return y_angle; } Funcin para el control del Carro void Carro (){ R = sqrt( pow( accXval , 2 ) + pow( accYval , 2 ) + pow( accZval , 2 )); accXangle = acos( accXval / R ) * RAD_TO_DEG - 90; accYangle = acos( accYval / R ) * RAD_TO_DEG - 90; xAngle = kalmanCalculateX ( accXangle , gyroYrate , dt*1000 ); yAngle = kalmanCalculateY ( accYangle , gyroXrate , dt*1000 ); double carrox = sin(xAngle / RAD_TO_DEG ); // Rango = [ -1 , 1 ] double carroy = sin(yAngle / RAD_TO_DEG ); // Rango = [ -1 , 1 ] analogWrite (Direccion0,0); analogWrite (Direccion1,0);

104

if ( carrox > 0.4 ) Posicion_destino = limite_dir_izq_v*carrox; else { if (carrox < -0.4) Posicion_destino = -limite_dir_der_v*carrox; else Posicion_destino = Vcentro; } Posicion_actual = analogRead (pot) * Vdc / 1023; if( Posicion_actual > ( Posicion_destino + 0.2 )){ analogWrite (Direccion0,0); analogWrite (Direccion1,240); } else { if( Posicion_actual < ( Posicion_destino - 0.2 )){ analogWrite (Direccion1,0); analogWrite (Direccion0,240); } } analogWrite (Aceleracion1,0); analogWrite (Aceleracion0,0); if ( carroy > 0.2 ){ analogWrite (Aceleracion1, 0); analogWrite (Aceleracion0, carroy*255); } else { if ( carroy < -0.5 ){ analogWrite (Aceleracion0,0); analogWrite (Aceleracion1,175); } } } A.4 Cdigo del Arduino para el clculo de la distancia. Solo la funcin principal double Fuerza_G_mag = 1; double Fuerza_G[3] = { 0 , 0 , 0 }; double Fuerza_T[3] = { 0 , 0 , 0 }; double Fuerza_R[3] = { 0 , 0 , 0 }; double Desplazamiento[3] = { 0 , 0 , 0 }; double Desplazamiento_c[3] = { 0 , 0 , 0 }; double DesplazamientoI[3] = { 0 , 0 , 0 }; double VelocidadI[3] = { 0 , 0 , 0 }; double temp = 0; double altura = 0; void Distancia() {

105

R = sqrt( pow( accXval , 2 ) + pow( accYval , 2 ) + pow( accZval , 2 )); accXangle = acos( accXval / R ) * RAD_TO_DEG - 90; accYangle = acos( accYval / R ) * RAD_TO_DEG - 90; accZangle = acos( accZval / R ) * RAD_TO_DEG; xAngle = kalmanCalculateX ( accXangle , gyroXrate , dt*1000 ); yAngle = kalmanCalculateY ( accYangle , gyroYrate , dt*1000 ); zAngle = kalmanCalculateZ ( accZangle , gyroZrate , dt*1000 ); //Calculo de direccion de gravedad Fuerza_G[0] = sin( xAngle / RAD_TO_DEG ); Fuerza_G[1] = sin( yAngle / RAD_TO_DEG ); temp = Fuerza_G_mag - pow( Fuerza_G[0] , 2 ) - pow( Fuerza_G[1] , 2 ); if(temp > 0) Fuerza_G[2] = sqrt( temp ); if(temp < 0.01) Fuerza_G[2] = 0; if(zAngle < 90 ) Fuerza_G[2] = -Fuerza_G[2]; //Calculo de direccion de fuerza total Fuerza_T[0] = accXval; Fuerza_T[1] = accYval; temp = pow( R , 2 ) - pow( Fuerza_T[0] , 2 ) - pow( Fuerza_T[1] , 2 ); if(temp > 0) Fuerza_T[2] = sqrt( temp ); if(temp < 0.01) Fuerza_T[2] = 0; if(zAngle < 90 ) Fuerza_T[2] = -Fuerza_T[2]; //Calculo de direccion de fuerza externa aplicada for (int i = 0 ; i < 3 ; i++){ Fuerza_R[i] = Fuerza_T[i] - Fuerza_G[i]; } //Calculo de desplazamiento for (int i = 0 ; i < 3 ; i++){ Desplazamiento [i] = DesplazamientoI[i] 0.5*Fuerza_R[i]*9.81*pow(dt, 2); DesplazamientoI [i] = Desplazamiento[i]; VelocidadI [i] = Fuerza_R[i]*9.81*dt; Desplazamiento_c[i] = Desplazamiento[i]*100; Serial.print("d = "); Serial.print(Desplazamiento_c[i], 2); Serial.print("\t"); } Serial.print("\n"); }

VelocidadI[i]*dt

106