109
1 Desarrollo e implementación utilizando Arduino y Zigbee con un sensor ultrasónico para control de nivel de llenado TITULACIÓN: Ingeniería Técnica Industrial en Electricidad AUTOR: Juan Jesús Almansa Madrigal DIRECTOR: Antonio Lázaro FECHA: Septiembre del 2013.

Desarrollo e implementación utilizando Arduino y Zigbee con un

  • Upload
    dohuong

  • View
    220

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Desarrollo e implementación utilizando Arduino y Zigbee con un

1

Desarrollo e implementación utilizando Arduino yZigbee con un sensor ultrasónico para control de nivel de

llenado

TITULACIÓN: Ingeniería Técnica Industrial en Electricidad

AUTOR: Juan Jesús Almansa MadrigalDIRECTOR: Antonio Lázaro

FECHA: Septiembre del 2013.

Page 2: Desarrollo e implementación utilizando Arduino y Zigbee con un

El presente proyecto tiene información confidencial, es una versión íntegra de un proyecto realizado en una empresa, por lo que hay datos que no serán públicos.

Page 3: Desarrollo e implementación utilizando Arduino y Zigbee con un

2

ÍndiceSección 1: Objetivos, alcance y antecedentes del proyecto .............................................................. 6

1.1 Objetivo del proyecto......................................................................................................... 6

1.2 Alcance ............................................................................................................................... 6

1.3 Antecedentes ..................................................................................................................... 6

Sección 2: Introducción teórica.......................................................................................................... 7

2.1 Fundamentos de Radio ...................................................................................................... 7

2.1.1 Espectro Electromagnético ........................................................................................ 7

2.1.2 Ecuación de transmisión en espacio libre .................................................................. 8

2.1.3 RSSI ............................................................................................................................. 9

2.2 Redes de sensores inalámbricas WSN.............................................................................. 10

2.3 Motas ..................................................................................................................................... 11

2.3.1 Elementos básicos de una Mota .............................................................................. 11

2.4 Introducción a Zigbee....................................................................................................... 12

2.4.1 Historia y curiosidades ............................................................................................. 13

2.4.2 Características técnicas de Zigbee [3] ...................................................................... 14

2.4.2.1 Frecuencias de trabajo y rango de velocidades ....................................................... 14

2.4.2.2 Tipos de dispositivos ............................................................................................ 15

2.4.2.3 Topologías de red................................................................................................. 16

2.4.2.4 Capas de Zigbee.................................................................................................... 17

2.4.2.5 Seguridad de red ...................................................................................................... 21

2.4.2.5 Profundidad de red .............................................................................................. 22

2.4.3 Coexistencia de redes inalámbricas ......................................................................... 23

2.4.4 El futuro de Zigbee ................................................................................................... 24

2.5 Introducción a Arduino .................................................................................................... 25

2.5.1 ¿Qué es Arduino? ..................................................................................................... 25

2.5.2 ¿Qué significa que Arduino sea Open Hardware?[4]............................................... 25

2.5.3 ¿Por qué Arduino?.................................................................................................... 26

2.6 Las placas Arduino............................................................................................................ 27

2.6.1 ¿Qué significa que una placa sea Arduino?.............................................................. 27

2.6.2 Placas de entradas y salidas ..................................................................................... 27

2.6.3 "Shields" y otras placas de terceros ......................................................................... 29

2.6.4 Construir nuestro propio Arduino............................................................................ 30

2.6.5 ¿Cómo obtener una placa Arduino? ........................................................................ 31

Page 4: Desarrollo e implementación utilizando Arduino y Zigbee con un

3

2.6.6 Elección de placa Arduino: El Arduino UNO............................................................. 31

2.6.6.1 El porqué de la elección ....................................................................................... 31

2.6.6.2 Características ...................................................................................................... 32

2.6.6.3 Esquema y pines................................................................................................... 33

2.7 El entorno de trabajo ....................................................................................................... 34

2.7.1 El entorno de desarrollo y los drivers de la placa para Windows ............................ 34

2.7.2 Descargar y ejecutar un ejemplo de aplicación Arduino ......................................... 37

2.7.2.1 Editor .................................................................................................................... 37

2.7.2.2 Compilador........................................................................................................... 39

2.7.2.3 Cargar y depurar................................................................................................... 40

2.7.2.4 Compilar con Atmel AVRISP mkII ......................................................................... 41

2.8 Lenguaje de programación Arduino................................................................................. 43

2.8.1 Introducción e historia ............................................................................................. 43

2.8.2 Funciones básicas y operadores............................................................................... 44

2.8.2.1 Estructuras ........................................................................................................... 44

2.8.2.2 Variables............................................................................................................... 46

2.8.2.3 Funciones ............................................................................................................. 47

2.8.3 Uso de librerías......................................................................................................... 49

2.8.3.1 Librerías Estándar................................................................................................. 49

2.8.3.2 Librerías de terceros............................................................................................. 50

Sección 3: Memoria descriptiva ....................................................................................................... 52

3.1 Hardware: Componentes de un sensor inalámbrico ....................................................... 52

3.1.1 Antenas y transceptores Zigbee............................................................................... 52

3.1.1.1 Módulos Xbee ...................................................................................................... 53

3.1.1.2 Datos E/S .............................................................................................................. 56

3.1.1.3 Elección de la antena Xbee .................................................................................. 57

3.1.2 Arduino Uno ............................................................................................................. 59

3.1.2.1................................................................................................................................... 59

3.1.3 Sensor de ultrasonidos............................................................................................. 61

3.1.3.1 Requerimientos iniciales ...................................................................................... 62

3.1.3.2 Elección de los componentes............................................................................... 63

3.1.3.3 Descripción del sensor elegido............................................................................. 63

3.1.3.4 Características técnicas ........................................................................................ 66

3.1.3.5 Conexionado......................................................................................................... 66

Page 5: Desarrollo e implementación utilizando Arduino y Zigbee con un

4

3.1.3.6 Ajustes .................................................................................................................. 67

3.1.3.7 Aplicaciones.......................................................................................................... 67

3.1.4 Baterías..................................................................................................................... 67

3.1.5 Adaptador Xbee a placa protoboard de Sparkfun ................................................... 69

3.1.6 Adaptador Xbee Shield............................................................................................. 69

3.1.7 Caja de Control:........................................................................................................ 71

3.2 Software ........................................................................................................................... 72

3.2.1 Programación de los módulos Xbee: X-CTU............................................................. 72

3.2.2 Procesado de datos: MySQL..................................................................................... 75

3.2.2.1 Aplicaciones.......................................................................................................... 75

3.2.2.2 Lenguajes de programación ................................................................................. 75

3.2.2.3 Características adicionales ................................................................................... 75

3.2.3 Aplicación Visual:...................................................................................................... 77

3.3 Implementación de hardware y software........................................................................ 77

Sección 4. Memoria de Cálculo ........................................................................................................ 79

4.1 Diagramas de flujo del software ...................................................................................... 79

4.2 Potencia consumida ......................................................................................................... 81

Sección 5: Casos experimentales ..................................................................................................... 82

5.1 Lectura de la corriente consumida en los diferentes ciclos de trabajo ........................... 82

5.2 Lectura de medidas del sensor ultrasónico...................................................................... 83

5.3 Lectura del RSSI: Outdoor ................................................................................................ 83

5.4 Comunicación emisor-receptor Xbee............................................................................... 85

Sección 6: Planos.............................................................................................................................. 87

6.1 Plano placa Arduino ......................................................................................................... 88

6.2 Fotografía placa base (interior End Device) ..................................................................... 89

6.3 Plano Pila .......................................................................................................................... 90

6.4 Fotografía del módulo Coordinador................................................................................. 91

6.5 Planos Xbee Explorer USB ................................................................................................ 92

6.6 Fotografía caja comunicación .......................................................................................... 93

6.7 Plano caja de comunicación............................................................................................. 94

Sección 7: Presupuesto .................................................................................................................... 95

7.1 Precios unitarios............................................................................................................... 95

7.2 Precios descompuestos.................................................................................................... 96

7.2.1 Capítulo 1: Estudios previos ..................................................................................... 96

Page 6: Desarrollo e implementación utilizando Arduino y Zigbee con un

5

7.2.2 Capítulo 2: Diseño y montaje del hardware............................................................. 96

7.3 Resumen del presupuesto................................................................................................ 97

Sección 8: Conclusiones ................................................................................................................... 98

Sección 9: Bibliografía .................................................................................................................... 101

Sección 10: Anexo .......................................................................................................................... 103

10.1 Código fuente................................................................................................................. 103

10.2 Código fuente ejemplo para probar sensor ultrasónico SRF05 ..................................... 106

Page 7: Desarrollo e implementación utilizando Arduino y Zigbee con un

6

Sección 1: Objetivos, alcance y antecedentes del proyecto

1.1 Objetivo del proyecto

El presente proyecto tiene la finalidad de mostrar la viabilidad de utilización de unmicro-controlador Atmel de Arduino, un sensor ultrasónico y un sistema decomunicación sin hilos basado en protocolo Zigbee, con el objetivo final de controlar elnivel de llenado de los contenedores situados en la calle de forma remota, permitiendo asíuna gestión de recogida de residuos óptima y eficiente. Se detallará la tecnologíaempleada para la construcción de un primer prototipo, con comparaciones y pruebasrealizadas, así como la recepción y registro de datos mediante una caja de comunicación.

En primer lugar, el proyecto se centrará en describir dos grandes bloques que locomponen, como son Arduino y Zigbee. Se hará un estudio teórico sobre suscaracterísticas, así como el funcionamiento en el entorno de programación y configuraciónde los mismos.

Seguidamente, se describirán el hardware y el software utilizado en todas las fasesdel proyecto, así como su implementación.

Finalmente, se explican una serie de casos experimentales, como la lectura delconsumo en diferentes ciclos de trabajo (dormido o despierto), lecturas de la señal depotencia recibida (RSSI) y distancias de comunicación inhalámbrica, y se adjuntan planosy fotografías de las partes fundamentales del proyecto, así como un presupuesto resumido.

1.2 Alcance

El alcance del proyecto es la realización de un circuito impreso, que conectada alsensor ultrasónico colocado en el techo del contenedor, sea capaz de medir y procesar lasdistancias de llenado, y a la vez de comunicarse inalámbricamente con un receptor deradiofrecuencia o coordinador conectado a un PC situado en una caja de comunicacionesremota.

1.3 Antecedentes

La empresa IGS Software tiene cierta experiencia en el desarrollo e investigación enhardware y software, habiendo fabricado algún prototipo anterior para otro tipo deproyecto, basado en Arduino. Se trabaja desde el diseño PCB y correspondiente soldado decomponentes, hasta el software cargado al micro-controlador, en este caso uno delfabricante Atmel.

En el proyecto actual se ha escogido los módulos Xbee para el envío y recepcióndatos, integrándolo con sensor ultrasónico y un micro-controlador en una única PCB.

Page 8: Desarrollo e implementación utilizando Arduino y Zigbee con un

7

Sección 2: Introducción teórica

2.1 Fundamentos de Radio

2.1.1 Espectro Electromagnético

Las ondas de radio son una porción del “espectro electromagnético”.

Sucede que la energía que transporta una onda electromagnética depende de laconstante de Planck. La constante de Planck relaciona la energía de los fotones con lafrecuencia de la onda lumínica según la fórmula:

E = h · c (1)

Donde c= 299.272.458 m/s; h≈6.626 J·s.

Figura 1. Clasificación del espectro de radiofrecuencia.

Dentro del espectro electromagnético tenemos los rayos gamma de alta potenciaque llegan de las supernovas, los rayos X, los microondas para cocinar nuestros alimentos,los infrarrojos que nos producen una sensación de calor, la luz visible que nos sirve parapoder captar información y procesarla en el cerebro y también las ondas de radio. Lasondas de radio son mucho más largas que las ondas de luz y muchas pueden viajar a travésde materiales tales como: ropa, muebles o paredes.

Las ondas de radio se pueden propagar muy bien por el vacío y por lo tanto sonideales para las comunicaciones en las que las conexiones con cable no son tan prácticas.

Dentro del espectro electromagnético podemos ver que las frecuencias de ondas deradio ocupan la porción energética situada entre 3 kHz y 300 GHz. Dentro de este amplioespectro, podemos subdividir la radio en varias bandas de frecuencias:

Page 9: Desarrollo e implementación utilizando Arduino y Zigbee con un

8

Tabla 1. Clasificación del espectro de radiofrecuencia.

2.1.2 Ecuación de transmisión en espacio libre

La problemática de las comunicaciones con radio es que requieren de muchapotencia en comparación con aquellas que viajan a través de cable. La razón de esto esfácil de entender. Como la radio irradia desde una fuente hacia el espacio, gran cantidad deenergía se atenúa, sin que esta energía haya sido utilizada. Una buena comparación conesta idea podrían ser las ondas que se dispersan cuando tiramos una piedra en un estanque.Pasa lo mismo con el sonido, ya que sólo podemos entender un susurro desde una ciertadistancia, pero nos es imposible entenderlo si estamos a varios metros. Como ventaja lossistemas radio requieren menos infraestructura, y pueden desplegarse y configurarse másrápidamente que los sistemas basados en comunicaciones por hilos.

Page 10: Desarrollo e implementación utilizando Arduino y Zigbee con un

9

Estos fenómenos se pueden explicar con la ecuación de transmisión en espacio libre.Esta ley dice que, para fenómenos ondulatorios tales como el sonido y la luz, la intensidaddisminuye con el cuadrado de la distancia con respecto al punto en donde se origina. Dichode otra forma, cada vez que se dobla la distancia desde la fuente, se requieren cuatro vecesla cantidad de energía para mantener la señal.

Figura 2. La ley del cuadrado inverso.

Esta ley puede ser explicada por la ecuación:( ) = · · · ²( ) · ² (2)

Dónde Gt y Gr son las ganancias de cada antena, λ es la longitud de onda y d ladistancia que hay entre las dos antenas.

De hecho, las redes en malla Zigbee están diseñadas pensando en la ecuación detransmisión en espacio libre. Los dispositivos Zigbee no tienen baterías de alta capacidadpara hacer llegar señales a grandes distancias, sino que en realidad hay muchosdispositivos en malla y cada uno de ellos hace de repetidor del siguiente para llegar aldestinatario final, con objeto de “no desintegrar” la señal de la fuente.

De esta forma utilizando una red zigbee se pueden conseguir alcances grandes sinnecesidad de utilizar elevadas potencias de transmisión que serían inviables por normativay por consumo.

2.1.3 RSSI

El RSSI (de las siglas Received Signal Strength Indicator en inglés) es unparámetro que da idea de la potencia de recepción de señales de radio. En realidad es unamedida de la potencia recibida por el receptor. Dependiendo del dispositivo se devuelve dediferentes formas, por ejemplo expresada en dBm o en niveles.

La relación entre el RSSI y la distancia se puede determinar de acuerdo con lasiguiente expresión basada en la ecuación en espacio libre:

RSSI [dBm] = -(10·n· log10(d)+A) (3)

Page 11: Desarrollo e implementación utilizando Arduino y Zigbee con un

10

Dónde cada parámetro es:- n: La pendiente de la señal.- A: El valor absoluto del RSSI a 1 m de distancia.- d: La distancia entre antenas.

En Xbee el rango de valores posibles de RSSI va de -40 dBm a -95dBm. Por lotanto, en este último caso la señal de recepción en wattios valdrá:

-95 = 10 ·log (P / 1mW)�P = 3.16 ·10-10 mW = 31.6 pW

Lo que da idea de la sensibilidad de estos receptores.

2.2 Redes de sensores inalámbricas WSN

Los entornos inteligentes representan el siguiente paso en la evolución de losservicios en edificios, hogar o sistemas automáticos de transporte. Mark Weiser lo describecomo “un mundo físico que es rico e invisible, con sensores, actuadores, pantallas yelementos computacionales, integrados perfectamente en los objetos cotidianos de nuestrasvidas” [19].

Figura 3. Esquema típico de una WSN

Las posibilidades de esta tecnología yacen tanto en la realización de aplicaciones“nuevas” dónde la tirada de cable es complicada ya sea por el coste o las dificultadestécnicas, como en las aplicaciones ya existentes, pero en el que la tecnología inalámbrica

Page 12: Desarrollo e implementación utilizando Arduino y Zigbee con un

11

puede ofrecer un valor añadido. De esta forma podemos tener aplicaciones tan variadascomo control medioambiental o control de espacios inteligentes.

Algunas características de las redes de sensores inalámbricas son:

- Patrón de flujo de datos: Periódicamente cada nodo envía sus lecturas a unalmacén central de datos. Estos almacenes pueden estar distribuidos, de forma quetendríamos una arquitectura de almacenes distribuida.

- Restricciones energéticas: Uno de los grandes desafíos de esta tecnología está enla alimentación de los nodos. Los nodos están diseñados para tener tanto un bajo consumocomo reducidos ciclos de trabajo. La fiabilidad de la red dependerá en gran medida de estefactor.

Las redes de sensores inalámbricas (Wireless Sensor Networks en inglés) prometencambiar la forma de obtener la información a nivel global. Se prevé que las redes desensores estarán formadas por miles de nodos sensoriales diminutos. Las redes de sensoresinalámbricas no serán redes cerradas que harán aplicaciones concretas, sino queseguramente estarán conectadas a Internet.

2.3 Motas

Aunque el concepto de sensores inalámbricos ya hace mucho tiempo que existe, elconcepto de motas podríamos decir que es relativamente nuevo.La idea de las “motas” proviene de los Estados Unidos y se refiere a dispositivosextremadamente pequeños (de aquí el nombre), conectados inalámbricamente unos conotros y pasándose información del tipo: temperaturas, humedades, almacenaje de susbaterías, etc.

2.3.1 Elementos básicos de una Mota

En una mota podemos diferenciar los siguientes componentes:

Figura 4. Esquema básico de una mota.

Micro controlador: Es el elemento que procesa los datos recogidos por los sensores ycontrola la funcionalidad del nodo.

Page 13: Desarrollo e implementación utilizando Arduino y Zigbee con un

12

Memoria Externa: Almacenamiento de datos del nodo. En general, la cantidad dememoria necesaria depende de cada aplicación.

Sensor: Es el dispositivo que es capaz de producir alguna señal eléctrica a un cambiofísico como por ejemplo temperatura o humedad.

Batería: Aporta la energía al nodo para su funcionamiento, tanto cuando está dormidocomo cuando está activo.

Figura 5. Aporte de energía de la batería a los diferentes módulos.

Transceptor: Es el encargado de funciones tanto de transmisión como de recepción dedatos. En la figura 6 podemos ver el diagrama de bloques de un transceptor conectado a unsensor.

Figura 6. Esquema del transceptor y su conexión con un sensor.

2.4 Introducción a Zigbee

En el desarrollo del proyecto utilizaremos Zigbee como protocolo de comunicacionespara la implementación de los sensores inalámbricos que veremos más adelante. Acontinuación se realizarán una serie de consideraciones relativas a este protocolo decomunicación.

Page 14: Desarrollo e implementación utilizando Arduino y Zigbee con un

13

2.4.1 Historia y curiosidades

El nombre de Zigbee deriva de los patrones erráticos comunicativos que tienen lasabejas (bees) entre las flores durante la recogida de polen. Los zumbidos de las abejasevocan en redes inalámbricas invisibles.

Zigbee surge de la necesidad de desarrollar una tecnología inalámbrica fiable, perode no muy alta transferencia de datos. De esta forma, en 1998, un conjunto de empresas seasociaron para desarrollar un estándar de comunicaciones que complementara a Wi-fi yBluetooth. Fue terminado y publicado por el IEEE en Mayo de 2003.

Desde el punto de vista del Hardware, podemos decir que Zigbee ha sidocuidadosamente optimizado para el bajo coste a gran escala. Tiene pocas partes analógicasy utiliza circuitos digitales siempre que sea posible.

Desde el punto de vista técnico, Zigbee es un estándar que define un conjunto deprotocolos de comunicación de baja velocidad de datos de corto alcance de redesinalámbricas [1]. Zigbee está basado en dispositivos inalámbricos que operan a 868 MHz,915 MHz y 2.4 GHz.

La técnica de modulación es Direct Sequence Spread Spectrum (DSSS), que tieneun máximo rango de velocidad de unos 250 kbit /s.

Por lo tanto, a modo resumen podemos catalogar a Zigbee como un protocolo:

- Basado en el estándar 802.15.4.

- Con aplicaciones WPAN (Wireless Personal Area Network)

- Con gran soporte desde la industria: Honeywell, Mitsubishi Electric, Motorola,Philips, Samsung, etc.

- Bajo coste.

- Bajo consumo.

- Instalación fácil y barata.

- Redes flexibles y extensibles.

Seguidamente podemos ver un cuadro de comparación entre WiFi, Bluetooth yZigbee:

Page 15: Desarrollo e implementación utilizando Arduino y Zigbee con un

14

Tabla 2. Cuadro comparativo entre WiFi, Bluetooth y Zigbee.

En resumen…Mientras la tecnología Bluetooth está orientada a la movilidad delusuario y a eliminar el cableado entre los dispositivos de corta distancia, Zigbee estáorientado hacia el control remoto y a la automatización. Bluetooth por lo tanto tiene porobjetivo eliminar los cables entre dispositivos que están muy cerca entre sí, como porejemplo entre el teléfono móvil y un ordenador portátil, mientras que Zigbee podría ser unared de sensores inalámbricos que se conecten sin cables a una estación de control.

2.4.2 Características técnicas de Zigbee [3]

2.4.2.1 Frecuencias de trabajo y rango de velocidades

En el estándar Zigbee se definen tres bandas de frecuencia distintas:

- 868–868.6 MHz (banda de 868 MHz)- 902- 928 MHz (banda de 915 MHz)- 2400 – 2483.5 MHz (banda de 2.4 GHz)

La banda de 2.4 GHz es usada en el mundo entero mientras que las de 868 MHz y915 MHz se usan en Europa y América del Norte respectivamente. Esto otorga a losdiseñadores libertad para tomar sus propias decisiones sobre qué bandas de frecuencia sonmejores para sus aplicaciones.

En general, podemos decir que las aplicaciones de 2.4 GHz permiten un ancho debanda más grande y más canales. Sin embargo, la coexistencia con otros sistemas quefuncionan con 2.4 GHz como WLAN y Bluetooth debe ser tenida en cuenta. El tamaño delas antenas en sistemas de 2.4 GHz es también menor respecto a las otras dos bandas defrecuencias.

Page 16: Desarrollo e implementación utilizando Arduino y Zigbee con un

15

Tabla 3. Bandas de frecuencia en Zigbee.

2.4.2.2 Tipos de dispositivos

IEEE 802.15.4 y Zigbee definen diferentes tipos de dispositivos. Por un lado, IEEE802.15.4 define el FFD (de Full Function Device en inglés), que es un dispositivo defuncionalidad completo. A su vez, este tipo de dispositivos pueden funcionar comocoordinadores de área (PAN) o dispositivos normales. Por otro lado, también define losRFD (de reduced-function device en inglés), que son dispositivos de funcionalidadreducida.

La figura 8 nos permite ver las clasificaciones Zigbee e IEEE 802.15.4 y susanalogías.

Figura 7. Tipos de dispositivos Zigbee / IEEE 802.15.4

Zigbee Coordinator: Es el dispositivo más completo. Controla el ruteado y laadministración de la red. Hay uno por red.

Page 17: Desarrollo e implementación utilizando Arduino y Zigbee con un

16

Zigbee Router: Se encarga de interconectar los dispositivos mediante técnicas deencaminamiento y direccionamiento.

Zigbee End Device: Es un elemento pasivo de la red, ya que no transmiteinformación de manera autónoma; simplemente dispone de la funcionalidad mínima paraser capaz de responder a peticiones de dispositivos superiores (coordinador o router).Gracias a esto y a la poca memoria que necesita es muy económico. Además, su bateríapuede durar años debido a que se pasa dormido la mayor parte del tiempo.

2.4.2.3 Topologías de red

Zigbee permite tres topologías de red:

Pair: La forma más sencilla de la red es con dos nodos. Uno de ellos debe ser uncoordinador. El otro puede ser bien un router o bien un end device.

Star: En esta topología el coordinador es el centro de la red y es el que se conectaen círculo con los demás dispositivos (End devices). Por lo tanto, todos los mensajes debenpasar por el coordinador. Dos end devices no pueden comunicarse entre sí directamente.

Figura 8. Topologías de red.

Mesh: La configuración cuenta con nodos router y con un nodo coordinador. Setrata de una topología no jerárquica en el sentido de que cualquier dispositivo puedeinteractuar con cualquier otro.

Page 18: Desarrollo e implementación utilizando Arduino y Zigbee con un

17

Este tipo de topología permite que, si en un momento un nodo o camino fallan en lacomunicación, ésta pueda seguir rehaciendo los caminos. La gestión de los caminos estarea del coordinador.

Cluster Tree: Es una variación de la topología malla, por lo que no laconsideramos realmente como una cuarta topología. En este diseño, los routers forman unacolumna vertebral con los dispositivos finales, que están agrupados en torno a los routers.De todas las topologías antes analizadas, la más ventajosa y característica del protocoloZigbee es la Mesh. El poder hacer routing dinámico permite a este tipo de topología ganarsobre todo en fiabilidad en las comunicaciones.

Figura 9. Enrutado de topología Mesh.

Figura 10. Ventajas de enrutado de topología Mesh.

Es adecuado destacar la importancia de actuar como un equipo. En baloncesto losjugadores necesitan coordinarse entre ellos. En Zigbee pasa un poco lo mismo. Losdispositivos pueden conectarse de muchas formas diferentes para dar “fuerza” a la red.

2.4.2.4 Capas de Zigbee

Las capas del protocolo Zigbee están basadas en el modelo OSI (Open SystemsInterconnection). Aunque el modelo OSI específica siete capas, Zigbee utiliza cuatro capas.

Page 19: Desarrollo e implementación utilizando Arduino y Zigbee con un

18

La ventaja de dividir un protocolo en capas es que, si el protocolo cambia, es más fácilcambiar una capa que el protocolo entero.

Figura 11. Capas del protocolo Zigbee.

El estándar Zigbee define sólo las capas de red, aplicación y seguridad, y adopta delestándar IEEE 802.15.4 las capas PHY y MAC. El estándar fue desarrollado por el comité802 del IEEE y fue inicialmente lanzado en el 2003.

Capa PHY

Es la capa más cercana al hardware y es donde tiene lugar el control y lascomunicaciones del transceptor. Esta capa es la responsable de activar la transmisión yrecepción de paquetes del sistema. Además, también selecciona el canal de frecuencia y seasegura que éste no es usado por otros dispositivos de la red.

Capa MAC

La capa MAC tiene la misión de proveer servicios a las capas superiores para queéstas se encarguen tanto del manejo de los datos que son transferidos en una red WSNcomo de las primitivas para que un sistema operativo administre estas dos capas (capafísica y de enlace de datos).

Los servicios que la capa MAC ofrece son dos:

• MAC Data Service.

• MAC Management Service.

Page 20: Desarrollo e implementación utilizando Arduino y Zigbee con un

19

Estos dos servicios también son llamados MAC sublayer management entity(MLME) y son accedidos por MAC common part sublayer service access point(MCPSSAP), y la MAC management access point (MLME-SAP) respectivamente.

Figura 12. Proceso de asociación.

Capa NWK

La capa NWK hace de interfaz entre la capa MAC y la capa APL y es laresponsable de gestionar la formación de redes y del routing. El routing es el proceso deseleccionar el camino a través del cual el mensaje será lanzado hasta la destinación deldispositivo al que va dirigido. En esta capa se brindan los métodos necesarios para: iniciarla red, unirse a la red, enrutar paquetes dirigidos a otros nodos en la red y proporcionar losmedios para garantizar la entrega del paquete al destinatario final.El Zigbee Coordinator y los routers son los responsables de este proceso. El coordinadorZigbee también asigna en la capa NWK las direcciones a los dispositivos en su red.

Capa APL

Esta es la capa más alta del protocolo en una red inalámbrica Zigbee y alberga losobjetos de la aplicación. Los fabricantes creadores de Zigbee desarrollaron esta capa parapoder personalizar un mismo dispositivo para varias aplicaciones, por lo que podemosdecir que esta capa es la que hace a los dispositivos versátiles. Además, puede haber hasta240 objetos de aplicación en un único dispositivo.El estándar Zigbee ofrece la opción de utilizar perfiles en el desarrollo de la aplicación. Unperfil de aplicación permite la interoperabilidad entre productos desarrollados pordiferentes fabricantes. Por ejemplo, si dos fabricantes utilizan el mismo perfil de aplicación,sus productos serán capaces de interactuar como si hubieran sido fabricados por el mismofabricante.La capa de aplicación de Zigbee determina varias características de dispositivos,incluyendo la funcionalidad requerida para los dispositivos. La estructura general de lacapa se muestra en la figura 14:

Page 21: Desarrollo e implementación utilizando Arduino y Zigbee con un

20

Figura 13. Descripción de la capa de aplicación.

La estructura de la capa de aplicación se divide en dos componentes: descripción dedispositivos y clusters.

Por un lado, los clusters son un conjunto de atributos agrupados, cada cluster es unnúmero de 16 bits, llamado “cluster identifier”, que a su vez tiene una pila dónde puedealmacenar atributos, tales como el valor actual de temperatura, si el sensor está dormido,etc.

Por otro lado, la descripción de dispositivos ofrece información más ligada aZigbee, tal como si el dispositivo es un Router o un End Device, frecuencia de operación,energía de la batería, etc.

Clusters y Device Description agrupados forman la capa de aplicación, que es unnúmero de 16 bits llamado “profile identifier”. La Zigbee Alliance define los “profileidentifier” mostrados en la figura 15:

Page 22: Desarrollo e implementación utilizando Arduino y Zigbee con un

21

Figura 14. Perfiles definidos por la Zigbee Alliance.

Además de estos pueden existir perfiles privados definidos por un fabricantedeterminado.

El perfil Smart Energy, por ejemplo, define varios tipos de dispositivos incluyendoun portal de servicios energéticos, pantallas en el hogar, etc., definiendo una funcionalidadrequerida para cada dispositivo.

2.4.2.5 Seguridad de red

La seguridad en las comunicaciones inalámbricas es una preocupación normal paralos consumidores. Éstas las podríamos dividir en dos aspectos: por un lado, laconfidencialidad de datos y por otro, la autenticación de datos.

Para resolver el problema de la confidencialidad, el estándar IEEE 802.15.4 soportael uso del Advanced Encryption System (AES), para codificar el mensaje. El AES consistebásicamente en un algoritmo de cifrado que modifica un mensaje con una cadena de bits

Page 23: Desarrollo e implementación utilizando Arduino y Zigbee con un

22

conocida como la clave de seguridad, y sólo el destinatario será capaz de recuperar elmensaje original.

Figura 15. Ejemplo de radio intrusión.

Por lo que respecta a la autenticación de datos, en criptografía, un código deautenticación de mensajes (MIC), es una pequeña pieza de información que se utiliza paraautenticar un mensaje.

2.4.2.5 Profundidad de red

La profundidad de un dispositivo en una red se define como el número mínimo desaltos necesarios para alcanzar el coordinador ZigBee. Por lo tanto, la profundidad máximade la red es entonces el número de saltos del Coordinador al dispositivo más alejado de lared.

Figura 16. Número de capas de un Zigbee.

En la figura 17 vemos el número de capas de profundidad ZigBee. En ella vemoscomo tenemos el coordinador del que dependen los diferentes routers de la red. A la vez,de los routers cuelgan los End Device. Lo que caracteriza una red se determina en realidadpor tres parámetros:

- La profundidad de red.

- El número máximo de “hijos” que un “padre” puede aceptar.

- La profundidad que ocupa el dispositivo en la propia red.

Page 24: Desarrollo e implementación utilizando Arduino y Zigbee con un

23

2.4.3 Coexistencia de redes inalámbricas

La tecnología inalámbrica está cada vez más presente en nuestras vidas, contecnologías como WiFi, Bluetooth, y ahora Zigbee.

Todas estas tecnologías operan en la banda de 2.4 GHz. Para el desarrollo de estastecnologías en el mercado competitivo e innovador de los dispositivos inalámbricos, escrucial la coexistencia pacífica de las tecnologías que permitan a cada usuario cumplir conlos objetivos de la comunicación.

En este apartado hacemos una evaluación de la coexistencia entre WiFi y Zigbee.En la figura 19 se ve como Zigbee (estándar IEEE 802.15.4), WiFi (estándar 802.11b) yBluetooth se solapan.

El estándar IEEE 802.15.4 divide la banda de 2.4 GHz en 16 canales de 2 MHz deancho y 5 MHz de separación, tal como se muestra en la figura 18:

Figura 17. Espectro de 2.4 GHz del estándar IEEE 802.15.4

Por otro lado, Bluetooth usa 79 canales de 1 MHz cada uno, de forma que tampoco haysolapamiento entre sus canales y la señal que modulan en cada uno de ellos.

Figura 18. Coexistencia entre WiFi y Zigbee.

Page 25: Desarrollo e implementación utilizando Arduino y Zigbee con un

24

Una vía para evitar interferencias puede ser la de seleccionar canales que no sesuperpongan. En concreto, los canales 15, 16, 21 y 22 del estándar IEEE 802.15.4 no sesuperponen con los canales 1, 7 y 13 del estándar 802.11b. Por lo tanto, es en estos canalesdónde tendríamos la menor interferencia posible con los canales de WiFi.

2.4.4 El futuro de Zigbee

Es probable que el rol que Zigbee jugará en el futuro de las comunicaciones vayacreciendo con el tiempo.

Zig-bee tiene muchos puntos a su favor como estándar gestionado diseñado paraofrecer robustas características de seguridad, permitir muchos nodos, y soportarinteroperabilidad e independencia de los distribuidores. También incorpora característicasque permiten un rendimiento sobresaliente con un consumo de energía relativamente bajo.

Un ejemplo de las aplicaciones con las que puede tener futuro Zigbee puede ser laaplicación que hizo la empresa JPM ingenieros de La Rioja, que desarrolló un sistema paramantener el control de los viñedos mediante redes de sensores Zigbee. Este sistema tieneun coste de implantación muy bajo comparado con la instalación de una estaciónmeteorológica tradicional, que necesita una gran inversión. La hace especialmenteadecuada para agricultores con pequeñas extensiones de terreno o para aquellos que lastienen separadas entre sí.

Como puntos negativos, sin embargo, podemos decir citar por ejemplo la nointeroperabilidad entre fabricantes, lo que va a dificultar mucho una implementación delestándar a gran escala. Además, aunque el protocolo fue lanzado hace ya unos años,todavía no ha tenido el auge que se le esperaba, y hoy en día la mayor parte del negocioZigbee se centra en kits de desarrollo para ingenieros de RF.

Los mercados potenciales son diversos y tienden a ser de un valor total inferior.

Page 26: Desarrollo e implementación utilizando Arduino y Zigbee con un

25

2.5 Introducción a Arduino

La mayor parte de esta sección es una recopilación de la información disponible en lapágina web del proyecto Arduino y de la entrada de la Wikipedia que hace referencia aArduino, la otra parte pertenece a la siguiente referencia[6].

2.5.1 ¿Qué es Arduino?

“Arduino es una plataforma de electrónica abierta para la creación de prototiposbasada en software y hardware flexibles y fáciles de usar. Se creó para artistas, diseñadores,aficionados y cualquiera interesado en crear entornos u objetos interactivos.”(Páginaprincipal de la web del proyecto Arduino [2]).

Arduino es una plataforma de hardware libre (Open Source Hardware, OSHW)basada en una placa con un micro-controlador y un entorno de desarrollo.

El hardware consiste en una placa con un micro-controlador Atmel AVR y variospuertos de entrada/salida, tanto digitales como analógicos, así como salidas PWM y decomunicaciones, para el control de objetos físicos (LEDs, servos, botones, etc.).

Los micro-controladores más usados son el ATmega328 y el ATmega168 para lasplacas básicas, el ATmega1280 para la de mayor capacidad y el ATmega8 para las placasmás antiguas. Todos estos micro-controladores incluyen un cargador de arranque(bootloader) de manera que sea lo más simple posible empezar a trabajar con ellos.

El micro-controlador en la placa Arduino se programa mediante el lenguaje deprogramación Arduino (basado en Wiring[2]).

2.5.2 ¿Qué significa que Arduino sea Open Hardware?[4]

El hardware open-source (de fuente abierta o libre) comparte muchos de losprincipios y metodologías del software libre y de código abierto.

Algunos de los principios que se pretenden promover para considerar productosfísicos como open hardware son los siguientes:

Publicar la documentación, incluyendo los archivos de los diseños mismos, quedebe permitir su modificación y distribución.Especificar que porción del diseño es abierta en caso de que no se liberen todossus componentes.Ofrecer el software para el visionado de los archivos de diseño y de ladocumentación, para que se pueda escribir el código open-source fácilmente.Ofrecer una licencia que permita producir derivados y modificaciones, además desu re-distribución bajo la licencia original, así como su venta y manufactura.La licencia no debe restringir que se venda o comparta la documentaciónnecesaria. No pide una tarifa por su venta o la de sus derivados.La licencia no debe discriminar a ningún grupo o persona.

Page 27: Desarrollo e implementación utilizando Arduino y Zigbee con un

26

La licencia no debe de restringir a ningún campo o actividad el uso de la obra. Esdecir, no se puede limitar su uso únicamente para negocios o prohibir sea utilizadopara investigación nuclear.El licenciamiento de la obra no puede depender de un producto en particular.La licencia no debe restringir otro hardware o software, es decir que no puedeinsistir en que otros componentes de hardware o software externos a losdispositivos sean también open-source.La licencia tiene que ser neutral, ninguna disposición de la misma debe de basarseen una tecnología específica, parte o componente, material o interfaz para su uso.Cumpliendo con estas premisas, los diseños y esquemas de Arduino se distribuyenbajo licencia “Creative Commons Attribution-ShareAlike 2.5”[5].

Al seguir este tipo de licencias, donde toda la información es pública, todas lasplacas pueden ser construidas por uno mismo o bien comprarlas ya montadas. El softwarepuede ser descargado de forma gratuita. Los ficheros de diseño de referencia (CAD), alestar disponibles bajo una licencia abierta, pueden ser libremente adaptados a lasnecesidades particulares.

2.5.3 ¿Por qué Arduino?

Hay distintas soluciones comerciales que facilitan el trabajo de programar unmicro-controlador y poder interactuar con ellos, como podrían ser Parallax Basic Stamp[6],BX-24 de Netmedia[7], Phidgets[8] o Handyboard del MIT[9] por citar algunos.Arduino, además de simplificar este proceso intenta ofrecer otras ventajas:

Asequible - Las placas Arduino son más asequibles comparadas con otrasplataformas de micro-controladores. La versión más cara de un módulo de Arduino puedeser montada a mano, e incluso ya montada cuesta bastante menos de 60€ .

Multi-Plataforma - El software de Arduino funciona en los sistemas operativosWindows, Macintosh OSX y Linux. La mayoría de los entornos para micro-controladoresestán limitados a Windows.

Entorno de programación simple y directo - El entorno de programación deArduino es fácil de usar para principiantes y lo suficientemente flexible para los usuariosavanzados.

Software ampliable y de código abierto - El software Arduino está publicadobajo una licencia libre, y preparado para ser ampliado por programadores experimentados.El lenguaje puede ampliarse a través de librerías de C++, y si se está interesado enprofundizar en los detalles técnicos, se puede dar el salto a la programación en el lenguajeC en el que está basado. De igual modo se puede añadir directamente código en C en losprogramas.

Hardware ampliable y de Código abierto - Arduino está basado en losmicro-controladores ATMEGA168, ATMEGA328 y ATMEGA1280. Los planos de losmódulos están publicados bajo licencia Creative Commons, por lo que diseñadores decircuitos con experiencia pueden hacer su propia versión del módulo, ampliándolo u

Page 28: Desarrollo e implementación utilizando Arduino y Zigbee con un

27

optimizándolo. Incluso usuarios relativamente inexpertos pueden construir la versión paraplaca de desarrollo para entender cómo funciona y ahorrar algo de dinero.

2.6 Las placas Arduino

2.6.1 ¿Qué significa que una placa sea Arduino?

Figura 19. Logo oficial de Arduino

“Arduino” es el nombre del proyecto “micro-controlador Arduino oficial”, alojadoen http://arduino.cc. Aunque el nombre "Arduino" no está oficialmente registrado,generalmente es respetado por la comunidad como propiedad del equipo Arduino.

Al tratarse de OSHW existen multitud de proyectos y placas basadas en Arduinoque pueden ser totalmente compatibles con este, o que han sufrido ligeras modificaciones,ya sea para hacerlas específicas para ciertos trabajos o bien para reducir su coste.

"Freeduino"[10] es un nombre que identifica las variantes del proyecto Arduino queno fueron creadas por el equipo oficial de desarrollo Arduino.

Algunos de estos freeduinos serían Boarduino, uDUINO, iDuino, ArduPilot,...[20]

2.6.2 Placas de entradas y salidas

Existe una gran variedad de placas Arduino, y de todas ellas se han hecho varias revisiones.

Figura 20. En la parte superior Arduino MEGA y en la inferior Arduino UNO

Las placas Arduino oficiales a día de hoy son [12]:

Arduino UNO.Es una placa Arduino que se conecta al PC a través de un cable USB estándar.

Page 29: Desarrollo e implementación utilizando Arduino y Zigbee con un

28

A través de esta conexión la alimentación y, además, permite programarla yutilizarla.Arduino UNO es la última revisión de este tipo de placas que se conectan alUSB. Entre las múltiples revisiones que se han hecho encontraríamos laDuemilanove, Diecimila, NG (Nuova Generazione) o Extreme.

Arduino Mega

Es una placa Arduino similar a la USB, pero más grande y potente. La últimarevisión posee el chip ATmega2560. Tiene mayor número de pines de entradas ysalidas digitales, más pines PWM, entradas analógicas, etc.

Arduino Mega ADK

El Arduino ADK es una placa similar al Arduino Mega, pero con una interfaceUSB para conectar con teléfonos basados en Android.

Arduino Pro

Es una placa similar al Arduino UNO, pero diseñada con la intención deinstalaciones semipermanentes. La placa se entrega sin los distintos conectores o“headers”, es compatible con las distintas extensiones de Arduino, y existe unaversión de 3.3V para ser alimentado con baterías.

Arduino Ethernet

Similar al Arduino UNO, sin soporte USB, pero con un conector RJ-45 para darsoporte Ethernet. Existe la posibilidad de tomar la alimentación de la propiaEthernet.

Arduino Fio

Un Arduino orientado para usarlo como nodo inalámbrico. Posee conectores paraun módulo Xbee (módulo inalámbrico)[13], un conector para una bateríaLiPo (Polímeros de litio), y un circuito para cargar la batería.

Arduino LilyPad

Una placa Arduino circular, reducida al máximo, diseñada para ser cosida a la ropao a otro tipo de soporte flexible. Necesita un adaptador adicional para comunicarsecon el PC.

Arduino BT

El Arduino BT contiene un módulo bluetooth integrado para las comunicacionesmóviles.

Arduino Nano

El Arduino Nano es un todo-en-uno, diseño compacto para usar en una placa deprototipo.

Arduino Serial

Page 30: Desarrollo e implementación utilizando Arduino y Zigbee con un

29

Las versiones serial de Arduino se vendieron principalmente como kits noensamblados o solo PCBs para que lo montara uno mismo, ya sea a modo deaprendizaje o para reducir costes.

Arduino Mini

El Arduino Mini es la placa compacta de Arduino. Para reducir espacio, lacomunicación con el PC se hace a través de un adaptador de USB a ArduinoMini.

Arduino Pro Mini

Igual que el Arduino Mini, pero sin los “headers” ni lo conectores montados, con laintención de tenerlo en instalaciones semipermanentes o permanentes.Arduino Single-Sided Serial

También conocido como "Severino". Esta es la versión de la placa Arduino de unasola cara, haciéndola fácil de hacer a mano. No fue manufacturada, sino que fuepublicada en la web de Arduino para que la gente se la pudiese hacer ellos mismosa modo de aprendizaje de todo el proceso de grabación de PCB.

El objetivo de Arduino y sus placas es ofrecer a la gente la posibilidad de seguir lafilosofía DIY (Do it yourself).

2.6.3 "Shields" y otras placas de terceros

Las shields son placas que se colocan encima de la placa Arduino y que amplían una nuevafunción para que sea controlada desde Arduino, para controlar diferentes aparatos, adquirirdatos, etc.

Figura 21. Arduino con tres "shields"

A continuación se citan las shields oficiales de Arduino, pero existe multitud deshields de terceros.

Arduino Ethernet ShieldEsta shield permite a una placa Arduino conectarse a una red Ethernet y tener acceso a ydesde Internet.

Arduino Wireless Proto Shield

Page 31: Desarrollo e implementación utilizando Arduino y Zigbee con un

30

Esta shield le da a una placa Arduino la posibilidad de comunicarse de manera inalámbricabasándose en los módulos Xbee[13], y ofrece al usuario una pequeña área para soldarcomponentes (prototipage).

Arduino Wireless SD ShieldIgual que la anterior, pero dando soporte para acceder a una tarjeta de memoria tipo SD.

Arduino Motor ShieldEsta shield permite a Arduino controlar motores eléctricos de corriente continua, servos ymotores paso a paso, y leer encoders.

Arduino Proto ShieldEsta shield ofrece al usuario un área para soldar componentes.

Uno de los principales distribuidores y desarrolladores de shields es Sparkfun,aunque no el único. Esta página web “http://shieldlist.org/” intenta mantener una lista detodas las shields de Arduino, tanto las oficiales como las no oficiales.

A parte de las shields existe un buen número de plataformas que están listas paraser controladas por una placa Arduino. Entre estas plataformas, quizás una de las másvistosas seria:

RobotShop RoverEs una pequeña plataforma móvil diseñada entorno a Arduino. Los usuarios puedenpersonalizar su móvil añadiendo funcionalidad.

Figura 22. RobotShop Rover

2.6.4 Construir nuestro propio Arduino

Al ser OSHW puede montarse los distintos módulos uno mismo. La placa ArduinoSingle-Sided Serial (cara simple y mono capa) o Severino ha sido diseñada para que seaespecialmente fácil de grabar el PCB y montar los distintos componentes.

Page 32: Desarrollo e implementación utilizando Arduino y Zigbee con un

31

Figura 23. Arduino Single-Sided Serial o Severino

Se puede encontrar una extensa documentación, incluyendo un detallado manual,en la página web oficial [21].

2.6.5 ¿Cómo obtener una placa Arduino?

Se puede adquirir una placa Arduino desde uno de los distribuidores oficiales, o através de múltiples tiendas online de electrónica.

En la página principal de Arduino se puede encontrar una extensa lista dedistribuidores en función del país o región.

Después de evaluar la mayoría de ellos por variedad, disponibilidad, precio y gastosde envío, me inclino por recomendar las siguientes:

Tienda BricoGeek.com [24]ELECTAN Electrónica y Robótica [25]

2.6.6 Elección de placa Arduino: El Arduino UNO

2.6.6.1 El porqué de la elección

Uno de los principales objetivos de este proyecto es evaluar las capacidades deArduino a través de la realización de un pequeño proyecto.

Para lograr este objetivo se debía trabajar con un módulo real, pero no era el casode estudio el montaje ni la depuración de los posibles errores del hardware, con lo que seoptó por la compra de módulo ya montado.

Como punto de partida, teniendo en cuenta que no necesitábamos gran cantidad deentradas y salidas, se decidió usar una placa Arduino que tuviera todo lo necesario paraempezar a trabajar al coste más acotado posible. La actual revisión que mejor encaja conestas características es el Arduino UNO.

Page 33: Desarrollo e implementación utilizando Arduino y Zigbee con un

32

Figura 24. Arduino UNO, vista frontal Figura 25. Arduino UNO, vista trasera

2.6.6.2 Características

La descripción completa del Arduino UNO se puede encontrar en su página weboficial. Este es un resumen de las principales características:

Micro controlador ATmega328

Voltaje de funcionamiento 5V

Voltaje de entrada (recomendado) 7-12V

Voltaje de entrada (limite) 6-20V

Pines E/S digitales 14 (6 proporcionan salida PWM)

Pines de entrada analógica 6

Intensidad máxima por pin 40 mA

Intensidad en pin 3.3V 50 mA

Memoria Flash 32 KB (ATmega328) de las cuales 0,5 KB las usa el gestor dearranque (boot loader)SRAM 2 KB (ATmega328)

EEPROM 1 KB (ATmega328)

Velocidad de reloj 16 Mhz

El Arduino UNO puede ser alimentado vía la conexión USB o con una fuente dealimentación externa. El origen de la alimentación se selecciona automáticamente.

Además, algunos de los pines tienen funciones especializadas:

Serie: Pin 0 (RX) y 1 (TX). Usados para recibir (RX) y transmitir (TX) datos através de puerto serie TTL. Estos pines están conectados a los pinescorrespondientes del chip de FTDI responsable de la conversión USB-to-TTL.

Interrupciones Externas: Pin 2 y 3. Estos pines se pueden configurar para queinterrumpan la ejecución del programa al detectar un flanco o un nivel.

PWM: Pin 3, 5, 6, 9, 10, y 11. Proporciona una salida PWM (Pulse-width

Page 34: Desarrollo e implementación utilizando Arduino y Zigbee con un

33

modulation, modulación por ancho de pulsos) con temporizadores de 8 bits deresolución.

SPI: Pin 10 (CS/SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estos pines proporcionancomunicación SPI (Serial Peripheral Interface).

LED: Pin 13. Hay un LED integrado en la placa conectado al pin digital 13,cuando este pin tiene un valor HIGH(5V) el LED se enciende y cuando este tieneun valor LOW(0V) el LED se apaga.

6 entradas analógicas, cada una de ellas proporciona una resolución de 10bits(1024 valores). Por defecto se mide de tierra a 5 voltios, aunque es posible cambiarla cota superior de este rango usando el pin AREF.

I2C: Pin 4 (SDA) y 5 (SCL). Soporte del protocolo de comunicaciones I2C/TWI.

AREF. Este pin proporciona un voltaje de referencia para las entradas analógicas.

Reset. Si en este pin se suministra un valor bajo (0V) se reinicia elmicrocontrolador.El ATmega328 en las placas Arduino UNO viene precargado con un gestor dearranque (boot loader) que permite cargar nuevo código sin necesidad de unprogramador por hardware externo. La carga de un nuevo código se realiza a travésdel entorno de desarrollo Arduino y la conexión serie/USB.También es posible saltar el gestor de arranque y programar directamente elmicrocontrolador a través del puerto ICSP (In Circuit Serial Programming). En talcaso, se debe utilizar un programador externo.

2.6.6.3 Esquema y pines

Los esquemas completos del Arduino UNO se pueden encontrar en su página web oficial.En la siguiente imagen se puede ver la correspondencia de pines entre elATmega168/328 y Arduino.

Page 35: Desarrollo e implementación utilizando Arduino y Zigbee con un

34

Figura 26. Pines de Arduino contra ATmega328

2.7 El entorno de trabajo

Para empezar a trabajar debemos instalar todo el entorno necesario en el PC. Vamosa describir brevemente este proceso en un entorno Windows.

Existe gran cantidad de guías acerca de cómo realizar este proceso, incluyendo unaexplicación en la propia página del proyecto Arduino[22].

Debo indicar que este proyecto se ha realizado con la versión 1.0 del entorno deprogramación Arduino. Esta es la primera versión no “Alfa” del entorno Arduino, ypresenta grandes cambios en comparación de las anteriores. La mayoría de cambios son anivel estético (distribución de iconos en las barra de herramientas, esquema de colores,…),pero hay un gran cambio a nivel funcional, los ficheros Arduino han pasado de tenerextensión .pde a extensión .ino

Estos últimos cambios implican que la mayor parte de la documentación que seencuentra en internet a día de hoy es incorrecta o desfasada con la revisión actual delentorno software de Arduino.

2.7.1 El entorno de desarrollo y los drivers de la placa para Windows

La descarga:

Descargamos la última versión del software Arduino de la página oficial[26].El paquete de software Arduino está contenido en un único fichero comprimido. No

es necesario instalarlo, simplemente lo extraemos en la carpeta deseada asegurándonos quemantenemos la estructura de subcarpetas.

Los controladores (drivers):

Seguiremos instalando los drivers de nuestro Arduino. Para realizar estepaso necesitaremos conectar el Arduino a nuestro PC, simplemente con un cableUSB tipo A-B (el comúnmente usado por las impresoras).

Los drivers necesarios para utilizar la placa Arduino junto con su entorno seencuentran en la subcarpeta “\drivers” del paquete que acabamos de extraer. Una vezconectemos nuestra placa Arduino en nuestro PC, deberemos indicarle aWindows que debe buscarlos en esta carpeta.

Dependiendo de la versión de Windows usada, y de la variante de la placaArduino, este proceso puede variar e incluso no funcionar del modo esperado(especialmente Windows 7). En tal caso, nos dirigimos al “Administrador de dispositivos”y veremos algo parecido a esto:

Page 36: Desarrollo e implementación utilizando Arduino y Zigbee con un

35

Figura 27. Arduino en el administrador de dispositivos de Windows

En este caso, nos dirigiremos al dispositivo desconocido, el Arduino Uno.Con el botón derecho actualizaremos el software del controlador indicándole la ruta dondehemos extraído el software de Arduino\drivers. Deberemos aceptar la advertencia de queeste software no está firmado por Microsoft.

Una vez finalizado este proceso, deberíamos ver un nuevo puerto decomunicaciones, en nuestro caso el COM3, que será nuestro Arduino, ya que este driver secomporta como un puerto serie en el PC, con lo que nos añade uno nuevo sobre el último.

El IDE (“Integrated Development Environment” o "entorno de desarrollointegrado"):

Ya tenemos nuestro PC y nuestra placa Arduino listos para trabajar.En la raíz de la carpeta donde hemos extraído el software Arduino deberíamosencontrar un “arduino.exe”, lo ejecutamos y nos abrirá el entorno de trabajo: el IDE.Para facilitar futuros accesos podemos crear un “acceso directo”.

Una vez abierto el entorno Arduino se debería ver algo como esto:

Page 37: Desarrollo e implementación utilizando Arduino y Zigbee con un

36

Figura 28. Entorno SW de Arduino

Antes que nada debemos saber que un “sketch”, o boceto, es el nombre que usaArduino para un programa. Es la unidad de código que se sube y se ejecuta en la placaArduino. El concepto de sketch o boceto, sería el equivalente a proyecto.

Un “sketch” puede contener múltiples archivos (pestañas). Cuando un sketch escompilado, todas las pestañas serán concatenadas juntas para formar el archivo principaldel sketch.

Arduino puede utilizar librerías y código C/C++. Las pestañas .c o .cpp secompilaran por separado y deberán ser incluidas en el sketch usando #include.

Es importante configurar correctamente la placa Arduino que vamos a utilizar, y através de qué puerto de comunicaciones estará conectada. Para tal efecto, debemos ir almenú “Tools” escoger el submenú “Board” e indicar la placa que usaremos, en nuestrocaso “Arduino Uno”. En el mismo menú “Tools”, submenú ”Serial Port”, seleccionaremosel puerto correspondiente, en nuestro caso “COM3”.

La barra de herramientas nos proporciona un acceso rápido a las siguientesfunciones:

Page 38: Desarrollo e implementación utilizando Arduino y Zigbee con un

37

2.7.2 Descargar y ejecutar un ejemplo de aplicación Arduino

Tenemos conectado la placa Arduino en nuestro PC. Hemos instalado los drivers yejecutado el IDE de Arduino. Conocemos los conceptos básicos acerca de los bocetos deArduino. Verifiquemos ahora que nuestra placa y el PC funcionan correctamente.

2.7.2.1 Editor

En el IDE Arduino, seleccionaremos el menú “File”, submenú “Examples” (o biendirectamente, el icono “Open ”) y dentro de “1.Basics” seleccionaremos el boceto(“sketch”) “Blink”.

Page 39: Desarrollo e implementación utilizando Arduino y Zigbee con un

38

Figura 29. Acceso a los ejemplos a través del menú

Figura 30. Acceso a los ejemplos a través de la barra de herramientas

Esto nos abrirá una nueva ventana con el código de este boceto, el objetivo del cualno es más que encender y apagar el LED de test, montado en la placa Arduino, cadasegundo (secuencia infinita de un segundo encendido, un segundo apagando. Blink).

Page 40: Desarrollo e implementación utilizando Arduino y Zigbee con un

39

Figura 31. Ejemplo de código Arduino

2.7.2.2 Compilador

Como se puede observar en la “Ilustración 13: Ejemplo de código Arduino“, elcódigo necesario para realizar tal acción es bastante simple. Ahora solo falta comprobarque realmente es correcto.

Para tal cosa, simplemente pulsando sobre el icono “Verify” , el IDE de Arduino vaa verificar y compilar el código escrito en la ventana activa. El entorno Arduino siemprecompila el código de las pestañas de la ventana activa como un único boceto.

El resultado debería ser correcto y lo veremos en el “área de estado” o de“notificaciones”:

Aquí nos indica el estado del proceso, el tamaño de memoria usada y la disponibleen la placa Arduino.

Figura 32. Resultado de verificación correcto.

Page 41: Desarrollo e implementación utilizando Arduino y Zigbee con un

40

Si modificamos el código del ejemplo para forzar un error en la fase deverificación/compilación, nos encontraríamos con esto:

Figura 32. Resultado de verificación incorrecto.

Hemos remplazado la llamada a la función “PinMode” por “PinModo”, y hemoseliminado el “;” del final de la llamada a la función “delay(1000)”.

Al compilar, el entorno Arduino nos advierte de estos errores en la zona de estado,indicando los errores detectados, así como las líneas en que se encuentran.

2.7.2.3 Cargar y depurar

Si volvemos al código original, y lo compilamos, ya solo nos falta un paso parapoder probarlo en nuestra placa Arduino: Cargar el código.

Con la placa Arduino conectada al PC a través del puerto USB, y teniendoconfigurado correctamente en el entorno nuestra placa Arduino y el puerto decomunicaciones, pulsaremos sobre el icono “Upload”.

En breves instante, la barra de estado se completará y nos indicará que el procesoha finalizado. En ese momento, el entorno genera un “reset” a la placa Arduino, y elcódigo empieza a ejecutarse. En nuestro caso, veremos como el LED de test montado en laplaca Arduino empieza a encenderse y apagarse cada segundo.

Para poder depurar el código, y así ver en qué punto de la ejecución se encuentra,Arduino nos brinda un gran herramienta: el “monitor serie”. El monitor serie sirve para quenos podamos comunicar entre el PC y nuestra placa Arduino. Las posibilidades de estepueden ser enormes, pero de momento lo usaremos de la forma más simple posible.

Modificaremos el código del ejemplo de “Blink” añadiendo unas llamadas almonitor serie, de manera que durante la ejecución podremos ver en el PC qué punto delcódigo se está ejecutando en la placa Arduino.

Código “Blink” original Código “Blink” con depuración a través del monitor serie.

void setup() {pinMode(13, OUTPUT);}void loop() {digitalWrite(13, HIGH);delay(1000);digitalWrite(13, LOW);delay(1000);

Page 42: Desarrollo e implementación utilizando Arduino y Zigbee con un

41

}void setup() {pinMode(13, OUTPUT);Serial.begin(9600);}void loop() {digitalWrite(13, HIGH);Serial.println(HIGH);delay(1000);digitalWrite(13, LOW);Serial.println(LOW);delay(1000);}

Compilamos y cargamos el código de nuevo, y ahora pulsamos sobre el icono del“serial monitor”.

Esto nos ha abierto el monitor serie y, en él, podemos ver como escribe un “1” o un“0” al ejecutar la función correspondiente.

Figura 33. Monitor de comunicación serie integrado en el entorno Arduino

2.7.2.4 Compilar con Atmel AVRISP mkII

Figura 34. Compilador Atmel AVRISP mkII conectado a Arduino

Page 43: Desarrollo e implementación utilizando Arduino y Zigbee con un

42

Esta herramienta se utiliza para las actualizaciones de los microcontroladores Atmel8 bits AVR, con interfaz ISP o PDI. Utilizando el software incluido AVR Studio ®, losdiseñadores pueden programar dispositivos megaAVR utilizando la interfaz del proveedorde Internet, los dispositivos tinyAVR utilizando la interfaz de TPI y dispositivos XMEGAAVR utilizando la interfaz de PDI y tiny AVR. La ayuda en línea de AVR Studio contienela información más actual y una lista completa de los dispositivos compatibles.

Es la herramienta utilizada por nosotros para cargar el software a nuestro micro-controlador “Atmega328P-AU”, situado en la placa base del módulo “End Device”,utilizando el siguiente conector, y conectando los pines al micro anteriormente citado:

Figura 35. Conector donde acoplaremos compilador AVRISP mkII.

A continuación vemos como se clasifica cada pin del conector para programación:

Figura 36. Pines de conexión en conector ISP 6 pin.

Page 44: Desarrollo e implementación utilizando Arduino y Zigbee con un

43

Antes de cargar el software, debemos seleccionar el compilador utilizado en “Tools”, comovemos seguidamente, a la vez que hay que seleccionar “Cargar usando programador” en elmomento de compilar:

Figura 37. Entorno Arduino para seleccionador compilador.

2.8 Lenguaje de programación Arduino

2.8.1 Introducción e historia

La plataforma Arduino se programa mediante el uso de un lenguaje propio basadoen el lenguaje de programación de alto nivel Processing[3], este a su vez está basado enJava.

El compilador usado por la plataforma de Arduino es el GNU AVR, bajo Windowses el WinAVR [27]. Este compilador está dedicado para los procesadores AVR y estáconfigurado para compilar C y C++. Las librerías del estándar C implementadas en estecompilador son avr-libc[15] y están optimizadas para los procesadores AVR.

Page 45: Desarrollo e implementación utilizando Arduino y Zigbee con un

44

Adicionalmente Arduino tiene un gran conjunto de funciones ya implementadaspara realizar de un modo fácil tareas comunes como hacer una espera activa, leer un puertodigital o escribir en él, entre muchas otras.

2.8.2 Funciones básicas y operadores

Todo programa Arduino debe contener, de manera obligatoria, al menos dosfunciones básica: setup() y loop().

La función setup() se ejecuta cuando se inicia un boceto (el programa o sketch). Seemplea para iniciar variables, establecer el estado de las entradas y salidas, inicializarlibrerías, etc. Esta función se ejecutará una única vez después de que se conecte la placaArduino a la fuente de alimentación, o cuando se pulse el botón de reinicio de la placa.

Después de ejecutar la función setup(), la función loop() se ejecuta de maneraconsecutiva e ininterrumpida. Cuando se llega al final de esta función, se vuelve a ejecutardesde el principio hasta que se vuelva a reiniciar la placa. En el interior de esta función esdonde se pone el código para controlar de forma activa la placa Arduino.

Los siguientes subapartados tienen el objetivo de dar una visión rápida acerca dellenguaje de programación Arduino, pero no se pretende entrar en el detalle del lenguaje deprogramación. Para tal efecto hay multitud de manuales disponibles por la red, entre ellos ypor citar algunos:

Página de referencia del lenguaje del proyecto Arduino [28]Sección de tutoriales de TronixStuff [29]Manual del “Starter Kit” de Earthshine Electronics. [30]

2.8.2.1 Estructuras

Al estar basado en Processing, Java y/o C, las estructuras de control son muysimilares a ellos y entre ellos.

Sintaxis básica

; (punto y coma. Delimitador de línea de código){} (llaves. Delimitador de bloques de código)// (comentarios en una línea)/* */ (comentarios en múltiples líneas)#define (definición de precompilador)#include (inclusión de código externo)

Estructuras de control

if (comparador si-entonces)if...else (comparador si...si no)for (bucle con contador)switch case (comparador múltiple)while (bucle por comparación booleana)

Page 46: Desarrollo e implementación utilizando Arduino y Zigbee con un

45

do... while (bucle por comparación booleana)break (salida de bloque de código)continue (continuación en bloque de código)return (devuelve valor a programa)goto (salta a una etiqueta)

Operadores Aritméticos

= (asignación)+ (suma)- (resta)* (multiplicación)/ (división)% (resto)++ (incremento en uno)-- (decremento en uno)+= (suma y asignación)-= (resta y asignación)*= (multiplicación y asignación)/= (división y asignación)

Operadores de comparación

== (igual a)!= (distinto de)< (menor que)> (mayor que)<= (menor o igual que)>= (mayor o igual que)

Operadores Booleanos&& (y)|| (o)! (negación)

Operadores de acceso a punteros

* operador de indirección& operador de referencia

Operaciones a nivel de bits

& (and - 'y' a nivel de bits)| (or - 'o' a nivel de bits)^ (xor a nivel de bits)~ (not a nivel de bits)<< (desplazamiento de bits a la izquierda)>> (desplazamiento de bits a la derecha)&= (and - 'y' a nivel de bits y asignación)|= (or - 'o' a nivel de bits y asignación)

Page 47: Desarrollo e implementación utilizando Arduino y Zigbee con un

46

2.8.2.2 Variables

Los tipos de los datos, su uso y declaración, es muy similar a otros lenguajes deprogramación, como el C o Java.

Constantes

Las constantes que vienen predefinidas en el lenguaje de Arduino se usan parafacilitar la lectura de los programas.

HIGH | LOW (estado de un pin de E/S digital)INPUT | OUTPUT (comportamiento de un pin de E/S digital)true | false (estado de un resultado lógico)

Tipos de DatosLas variables pueden ser declaradas en cualquier punto del programa y, si no se

indica lo contrario, valen cero.

boolean (Booleano. Puede ser cierto o falso. Ocupa 8 bits en memoria)char (Carácter. Almacena un único ASCII, tiene signo y ocupa 8 bits en memoria)unsigned char (Carácter sin signo).byte (Dato de 8 bits, sin signo)int (Entero de 16 bits, con signo)unsigned int (Entero de 16 bits, sin signo)word (Palabra. Equivalente a unsigned int)long (Entero de 32 bits con signo)unsigned long (Entero de 32 bits sin signo)float (Valor en coma flotante de 32 bits. Se debe evitar usar estos tipos ya queconsumen mucho tiempo de CPU, espacio de código y pueden ocasionar problemasen comparaciones, ya que por ejemplo 6.0 dividido por 3.0 puede no ser igual a 2.01)double (En Arduino, es lo mismo que float)array (Vector de elementos)void (Vacío)String (Des de la versión 0019 existe la clase String() que permite manipularcadenas de caracteres de un modo sencillo, permitiendo concatenaciones o gestiónautomática del fin de cadena. Hasta ese momento el uso de string se limitaba avectores de caracteres sobre los cuales se debía tener en cuenta el final de cadena /0para poder usarlo con funciones tipo print()).

1 Se debe tener en cuenta que el uso de float se realiza a través de librerías sw, y que además la propiacodificación IEEE-754 que usa el tipo float tiene limitaciones.

Conversión

Estas son una serie de funciones que permiten el cambio entre tipos.char(x) – Convierte el valor de tipo x a carácter.byte(x) – Convierte el valor de tipo x a byte.int(x) – Convierte el valor de tipo x a int.

Page 48: Desarrollo e implementación utilizando Arduino y Zigbee con un

47

long(x) – Convierte el valor de tipo x a long.float(x) – Convierte el valor de tipo x a float.

Ámbito de las variables y calificadores

Las variables en el lenguaje de programación usado por Arduino, al igual que el C,tienen una propiedad llamada ámbito. Al contrario de lo que pasa en lenguajes comoBASIC en los que todas las variables son globales. En Arduino solo las declaradas fuera deuna función son globales. En el caso de declararse dentro de una sección de códigodelimitada por llaves “{…}”, como el caso de una función, la variable se libera al salir deesta sección y se vuelve a crear con el valor inicial al volver a entrar en esta sección. Estose debe tener especialmente en cuenta al declarar variables dentro de la función loop().

static – Estática – Las variables que se declaran como estáticas sólo se crearan einicializarán la primera vez que se ejecute el bloque de código en el que estáncontenidas.

volatile – Volátil – Una variable debe ser declarada volatile siempre que su valorpueda ser modificado por algo más allá de la sección del código en el que aparece.En Arduino, el único lugar en el que se podría dar el caso es en secciones de códigoasociadas a interrupciones.

const – Constante – Es un calificador de variable que modifica el comportamientode la misma, haciendo una variable de "sólo-lectura". Sería equivalente a utilizar#define.

2.8.2.3 Funciones

Aquí se muestran muchas funciones ya implementadas en el entorno Arduino parasimplificar la tarea de desarrollo para problemas comunes. Muchas de ellas están limitadasa ser usadas en pines concretos y pueden necesitar de argumentos que no se detallan eneste apartado. Para información adicional se puede consultar la página de referencia dellenguaje del proyecto Arduino [28].

E/S Digital

pinMode(pin, modo) – configura el pin a modo de entrada o salidadigitalWrite(pin, valor) - escritura digitaldigitalRead(pin) – devuelve una lectura digital

E/S Analógica

analogReference(tipo) – configura el tipo de referencia analógicaanalogRead(pin) – devuelve una lectura analógicaanalogWrite(pin, valor) – “escritura analógica”. Generará una onda cuadrada conel ciclo de trabajo que se le indique como parámetro (0-255 implica un ciclo detrabajo de 0 a 100%). La frecuencia de la señal PWM será de 490 Hz por diseño deArduino. Proporciona una manera simple de implementar un control de intensidadluminosa sobre un LED.

Page 49: Desarrollo e implementación utilizando Arduino y Zigbee con un

48

E/S Avanzada

tone(pin, frecuencia) - Genera una onda cuadrada de la frecuencia en Hzespecificada. Opcionalmente se puede definir la duración del tono en ms.noTone(pin) – Deja de generar el tono en el pin especificadoshiftOut(pinDatos, pinReloj, ordenBits, valor) - Desplaza un byte de datos bit abit a través del SPI.pulseIn(pin, value) - Devuelve la anchura de un pulso en microsegundosempezando a medir cuando el pin se encuentra al nivel definido en value.

Tiempo

millis(). Tiempo des del arranque en ms.micros(). Tiempo des del arranque en us.delay(ms). Espera activa en ms.delayMicroseconds(us). Espera activa en us.

Cálculo

min(x, y) – Devuelve el mínimo de dos números.max(x, y) – Devuelve el máximo de dos números.abs(x) - Devuelve el valor absolutoconstrain(x, a, b) – Devuelve x siempre que este entre a y b. En caso contrariodevuelve los límites a o b.map(value, fromLow, fromHigh, toLow, toHigh) – Devuelve el valor de un“re-mapeo” de un rango hacia otro. Por ejemplo para realizar un cambio de escalade un valor de 0 a 1024 a un rango de 0 a 255.pow(base, exponente) – Devuelve el valor de un número elevado a otro número.sqrt(x) – Devuelve la raíz cuadrada

Trigonometría

sin(rad) – Devuelve el senocos(rad) - Devuelve el cosenotan(rad) - Devuelve la tangente

Números aleatorios

randomSeed(seed) – Inicializa el generador de números pseudoaleatorios.Se puede usar como semilla una entrada mínimamente aleatoria comoanalogRead() en un pin desconectado.random() – Devuelve un valor pseudoaleatorio.

Bits y Bytes

lowByte(x) – Devuelve el byte de menor peso (big-endian, el de más al derecha)de una variablehighByte(x) - Devuelve el byte de mayor peso (big-endian, el de más al izquierda)de una variablebitRead(x, n) – Devuelve el valor del bit n en x.bitWrite(x, n, b) – Escribe b en el bit n de x.bitSet(x, n) – Pone a 1 el bit n de x.

Page 50: Desarrollo e implementación utilizando Arduino y Zigbee con un

49

bitClear(x, n) – Pone a 0 el bit n de x.bit(n) – Devuelve un byte con sus bits a cero a excepción del bit n. Por ejemplo,bit(0) devolvería un 1 en decimal, bit(1) un 2, bit(2) un 4 en decimal.

Interrupciones externasattachInterrupt(inter, funcion, modo) – Con el parámetro inter indicamos que ISRexterna vamos a configurar. Con el parámetro modo indicamos el motivo que la vaa disparar (CHANGE, LOW, RISING o FALLING) y con el parámetro función, lafunción que va a ejecutarse al ser disparada.detachInterrupt(inter) – Desactiva la interrupción inter

Interrupciones

interrupts() - Habilita las interrupcionesnoInterrupts() - Desactiva las interrupciones

Comunicación (estas dos son clases, con lo que no se pueden invocar directamente,sino que se debe invocar el método que necesitemos)

Serial

Stream

2.8.3 Uso de librerías

El propio entorno Arduino contiene una serie de librerías integradas que facilitanenormemente las tareas más comunes en el mundo del “hobby electrónico”.

Las Librerías proveen funcionalidad extra a nuestro sketch al trabajar con hardwareo al manipular datos. Para usar una librería dentro de un sketch, puedes seleccionarla desdeSketch > Import Library (Importar Librería)[16].

2.8.3.1 Librerías Estándar

EEPROM - Para leer y escribir en memorias "permanentes".

Ethernet - Para conectarse a una red usando el shield Ethernet.

Firmata – Para comunicarse con aplicaciones en un PC que se comporta comoservidor (host) usando el protocolo Firmata.

LiquidCrystal - Para controlar Displays de cristal líquido (LCD)

Servo - Para controlar servomotores.

SoftwareSerial - Para la comunicación seria utilizando cualquier pin digital.

Stepper - Para controlar motores paso a paso (Stepper motors).

Page 51: Desarrollo e implementación utilizando Arduino y Zigbee con un

50

Wire - Interfaz de dos cables, ó Two Wire Interface (TWI/I2C), para enviar yrecibir datos a través de una red de dispositivos y sensores.

2.8.3.2 Librerías de terceros

Si se desean usar librerías que no vienen junto con Arduino, es necesario instalarlas.Las librerías suelen entregarse en un fichero comprimido y suelen contener una carpetapropia con dos archivos, uno con sufijo ".h" y otro con sufijo ".cpp".

Para instalarla se debe copiar el contenido del fichero comprimido en la carpeta“libraries” que se debería encontrar dentro de la carpeta sketchbook de Arduino. Alreiniciar el IDE de Arduino debería aparecer la nueva librería en el menú Sketch > ImportLibrary.

Estas son algunas de las librerías que se pueden encontrar y que están referenciadasen la propia página web del proyecto Arduino [16]. También se puede encontrar una listaalternativa en la Wiki de Arduino [31].

Comunicación (networking y protocolos):

Messenger - Para procesar mensajes de texto mandados des del PC.NewSoftSerial - Versión mejorada de la librería SoftwareSerial.OneWire - Controla dispositivos (de Dallas Semiconductor) que usan el protocoloOne Wire.PS2Keyboard - Lee caracteres de un teclado PS2.Simple Message System - Envía mensajes entre Arduino y la computadora.SSerial2Mobile - Envía mensajes de texto o emails usando un teléfono móvil(vía comandos AT a través de SoftwareSerial)Webduino - Librería de web server extensible (para usar con ArduinoEthernet Shield)X10 - Para enviar señales X10 a través de líneas de corriente AC.XBee - Para comunicaciones entre XBees en modo API.SerialControl - Para controlar remotamente otras Arduino a través de unaconexión serial.

Sensores:

Capacitive Sensing – Implementa un sensor táctil capacitivo uniendo un pin deescritura con una resistencia relativamente alta (100kOhm – 50MOhm), una laminade metal o cable y un condensador pequeño (20 - 400 pF) a un pin de lectura,detectando cambios en este al acercarse o tocar la lámina con el dedo.Debounce - Para una lectura filtrada de entradas digitales con rebotes(típicamente las entradas conectadas a botones).Displays y LEDs:Improved LCD library - Arregla errores de inicialización del LCD de la libreríaLCD oficial de Arduino.GLCD - Rutinas gráficas para LCDs basados en el chipset KS0108 o equivalentes.

Page 52: Desarrollo e implementación utilizando Arduino y Zigbee con un

51

LedControl - Para controlar matrices de LEDs o displays de siete segmentos conMAX7221 o MAX7219.LedDisplay - Control para marquesina de LED HCMS-29xx.Matrix - Librería para manipular displays de matrices de LED básicas.Sprite - Librería básica para manipulación de sprites para usar en animaciones conmatrices de LEDs.Motores y PWM:TLC5940 - Manejador para el chip TLC5940 de Texas Instrumentsimplementando el control de hasta 16 servomotores a la vez.

Medición de Tiempo:

DateTime - Librería para llevar registro de fecha y hora actual en el software.Metro - Útil para cronometrar acciones en intervalos regulares.MsTimer2 - Utiliza la interrupción del temporizador 2 para disparar una accióncada N milisegundos.

Utilidades de cadenas de texto:

TextString, PString, Streaming – Implementan métodos de salida más completospara cadenas de texto.

Adicionalmente, muchos de los desarrolladores y distribuidores de shields generansus propias librerías para utilizar las shields, de modo que la cantidad de libreríasdisponibles es enrome.

Además, nosotros podemos crear nuestras propias librerías y utilizarlas paranuestros proyectos e incluso distribuirlas.

A raíz del cambio mayor de versión (de alfa a 1.0) en el entorno de programaciónArduino, muchas de las librerías de terceros han quedado obsoletas/desactualizadas por lainclusión de ficheros de encabezados (.h) que han sido renombrados en esta nueva versión,entre ellos “Wprogram.h” ha sido renombrado a “Arduino.h”, con lo que nos obligará amodificar el código de estas librerías incluyendo el nuevo fichero.

Page 53: Desarrollo e implementación utilizando Arduino y Zigbee con un

52

Sección 3: Memoria descriptiva

3.1 Hardware: Componentes de un sensor inalámbrico

Para la construcción de un sensor inalámbrico deberemos conectar nuestro sensor aun módulo Xbee, que a su vez deberá tener una alimentación.

Figura 38. Conexión Sensor y modulo Xbee.

3.1.1 Antenas y transceptores Zigbee

La elección de la antena para la implementación del proyecto resulta clave. Elcriterio que elijamos depende de múltiples factores tales como el precio, ya que nopodemos justificar pagar más por módulos que no ofrecen características ventajosasrespecto a otros más baratos, pero también de la facilidad que ofrezcan al programarporque nos facilitará enormemente el desarrollo del proyecto. Otro aspecto también puedeser cuán aceptados están en el mercado.

Estos dos últimos factores – grado de aceptación en el mercado y facilidad deprogramación-, los podemos verificar fácilmente discutiendo en foros de internet conusuarios con experiencia.

En este apartado abordamos la elección de nuestra antena, evaluando algunos de losmódulos Zigbee disponibles en el mercado en la actualidad.

Cirronet ZMN2405/HP: Este es un módulo que ya ha sido utilizado en otrosproyectos desarrollados en la escuela, por lo que el departamento conoce este dispositivo.Las ventajas son la experiencia previa del departamento con el dispositivo y la integraciónde un puerto USB. La principal desventaja es la dificultad que supone programar elmódulo.

Figura 39. Módulo ZMN2405-E.

Jennic: Este fabricante dispone de dos familias de módulos, el JN5121 y el actualJN5139. Comparado con otros módulos, ofrecen más periféricos y mayor sensibilidad.En cuanto a los precios, el kit de programación cuesta unos 580 € dependiendo de dóndecompremos.

Page 54: Desarrollo e implementación utilizando Arduino y Zigbee con un

53

Xbee: La principal ventaja de este módulo es el precio, que es el más barato detodos – al no ser necesaria la compra de un kit de desarrollo-, además también es el másextendido entre el público, lo que da la posibilidad de poder conseguir y compartir muchainformación con usuarios. Como desventajas, en cambio, no dispone de microcontrolador.

Tabla 4. Comparación entre módulos.

*Precios basados en http://es.farnell.com/ y http://search.digikey.com

Finalmente decidimos hacer el proyecto con las Xbee Pro, ya que aunque son máslimitadas técnicamente por no disponer de micro-controlador, son mucho económicas al nonecesitar un kit de desarrollo para poderlas programar (el software para programarlas esgratuito desde la página http://www.digi.com/es/. Además hemos comprobado que enInternet hay mucha bibliografía e información en foros, etc.

El inconveniente del Xbee PRO es el mayor consumo en transmisión, siendo de 295mA, mientras que en los otros módulos no pasa de 34 mA. El consumo en Tx depende dela potencia de salida, siendo de -10 dB en módulos de bajo consumo/corta distancia)

3.1.1.1 Módulos Xbee

Los módulos Xbee son fabricados por la empresa Digi, proporcionan conectividadinalámbrica con otro dispositivo de la misma serie por un precio relativamente económicocomparado con el de otros fabricantes.

Digi ofrece dos series diferentes, la serie 1 y la serie 2, también conocida comoZnet 2.5.

Los módulos de la Serie 1 y la Serie 2 tienen el mismo pin-out, sin embargo no soncompatibles entre sí ya que utilizan distintos chipset y trabajan con protocolos diferentes.La serie 1 está basada en el chipset de Freescale y está pensado para ser utilizado en redespunto a punto y punto a multipunto. Los módulos de la Serie 2 están basados en el chipset

Page 55: Desarrollo e implementación utilizando Arduino y Zigbee con un

54

de Ember, y están diseñados para ser utilizados en aplicaciones que requieren repetidores ouna red mesh. Ambos módulos pueden ser utilizados en los modos AT y API.

Con estos módulos se pueden diseñar aplicaciones de comunicación inalámbrica debajo consumo energético, como las requeridas por el proyecto en el que nos embarcamos.

La figura 22 ilustra cómo fluyen los bits de datos a través del módulo Xbee.

Figura 40. Conexiones mínimas para conectar Xbee.

Los datos entran en el módulo UART a través de la patilla DIN (pin 3) como unaseñal asíncrona y se almacenan en un buffer. Lo mismo sucede cuándo se quierentransmitir datos por DOUT (pin 4).

Figura 41. Flujo de datos interno de un modulo Xbee.

Hay básicamente 3 modos de operación de Xbee: Transparente, Comandos y API.

3.1.1.1.1 Modo comando

Este modo permite ingresar comandos AT al módulo Xbee, para configurar, ajustaro modificar parámetros. Permite ajustar parámetros como la dirección propia o la dedestino, así como su modo de operación entre otros aspectos. Para poder ingresar loscomandos AT es necesario utilizar el Hyperterminal de Windows, el programa XCTU oalgún micro-controlador que maneje UART y tenga los comandos guardados en memoria olos adquiera de alguna otra forma.

Page 56: Desarrollo e implementación utilizando Arduino y Zigbee con un

55

Figura 42. Ejemplo de comando AT.

3.1.1.1.2 Modo Transparente

Este modo está destinado principalmente a la comunicación punto a punto, dondeno es necesario ningún punto de control. También se usa para reemplazar alguna conexiónserie por cable, ya que es la configuración más sencilla posible y no requiere una mayorconfiguración. Esta es la conexión que viene por defecto y es la más sencilla forma deconfigurar el módem. Básicamente todo lo que pasa por el puerto UART (DIN, pin 3), esenviado al módulo deseado, y lo que llega al módulo, es enviado de vuelta por el mismopuerto UART (DOUT, pin 2). Existen básicamente 4 tipos de conexión transparente. Ladiferencia principal radica en el número de nodos o puntos de acceso, y la forma en cómoéstos interactúan entre sí.

3.1.1.1.3 Modo de operación API

Este modo es más complejo, pero permite el uso de tramas con cabeceras queaseguran la entrega de los datos, al estilo TCP. Extiende el nivel en el cual la aplicación delcliente, puede interactuar con las capacidades de red del módulo.Cuando el módulo Xbee se encuentra en este modo, toda la información que entra y sale,es empaquetada en tramas, que definen operaciones y eventos dentro del módulo.

Así, una trama de Transmisión de Información (información recibida por el pin 3 oDIN) incluye:

- Trama de información RF transmitida.- Trama de comandos (equivalente a comandos AT).

Mientras que una trama de Recepción de Información incluye:

- Trama de información RF recibida.- Comando de respuesta.- Notificaciones de eventos como Reset, Associate, Disassociate, etc.

Entre las opciones que permite la API, se tienen:

- Transmitir información a múltiples destinatarios, sin entrar al modo deComandos.- Recibir estado de éxito/falla de cada paquete RF transmitido.- Identificar la dirección de origen de cada paquete recibido.

Trama API:

Page 57: Desarrollo e implementación utilizando Arduino y Zigbee con un

56

Figura 43. Ejemplo de comando AT.

El primer byte 0x7E indica el comienzo de la trama. Los dos bytes siguientesindican solamente la longitud de la trama de Datos (Data Frame) (es decir, toda la tramasin contar ni el byte 0x7E, ni el largo-Length, ni el byte Checksum). La estructura API queviene después se compone según vemos en la figura 26:

Figura 44.Trama Xbee.

Se ha visto que los módulos Xbee pueden ser configurados de dos formas diferentesademás del modo comando, que son el modo transparente AT y el modo API. En el modoAT sólo nos permite la comunicación punto a punto entre dos Xbees.

En el modo API, podemos enviar y recibir desde el Coordinador o cualquierelemento de red, la información que viene en cada trama es mucho más detallada.El modo API a la práctica nos permite tener más control de la red, ya que por ejemplo si lacomunicación falla obtendremos un código de error.

Entre las opciones que permite API se tienen:

- Transmitir información a múltiples destinatarios, sin entrar al modo deComandos.- Recibir estado de éxito/falla de cada paquete RF transmitido.- Identificar la dirección de origen de cada paquete recibido.

3.1.1.2 Datos E/S

3.1.1.2.1 Conversores A/D

Para muestrear señales los módulos Xbee están equipados con conversores A/ D de10 bits.

Otra característica importante es el tiempo de muestreo que se puede modificar conel comando IR y las unidades en ms. Por ejemplo para pedir un tiempo de muestreo de 10ms programaremos ATIR= 0x0A. Otra característica importante es el número de muestrasque queremos tomar antes de enviar datos Esto se puede cambiar con el comando AT,teniendo en cuenta que podemos almacenar un máximo de 93 bytes y que cada muestra

Page 58: Desarrollo e implementación utilizando Arduino y Zigbee con un

57

ocupa 2 bytes, podremos llegar a tomar 43 muestras antes de enviar. El máximo tiempo demuestreo es de 1 muestra / ms.

3.1.1.2.2 Trama de Datos de E/S

La trama de datos de E/S comienza con un byte de cabecera que define el númerode muestras que son mandadas. Los últimos 2 bytes de la trama definen qué entradas estánactivas, ya que cada bit representa cada IO y ADC.

Figura 45. I/O Data

Un ejemplo de trama que hemos obtenido durante el proyecto sería:7E 00 14 92 00 13 A2 00 40 6C 52 65 7C D0 01 01 00 00 81 01 BD 09 58 670x7E: Inicio de la trama.0x00: Numero de bytes (MSB entre la longitud y el checksum)0x14: Numero de bytes (LSB)0x92: tipo de trama IO0x00-0x65: Dirección 64-bits del remitente.0x7C-0xD0: Dirección 16-bits del remitente.0x01: Modo recepción activado. (Se aceptan paquetes)0x01: Numero de muestras (en este caso una)0x00-0x00: Máscara del canal digital0x81: Máscara de canal analógico.0x01-0xBD: Muestras analógicas0x09-0x58: Muestra Vss0x67: checksumPor lo tanto tenemos un valor de tensión (0x0958): 2.8V. La fórmula para obtener losvalores analógicos de la trama se puede obtener de la siguiente forma:Valor=Muestra_AD1024 ·1200 mV (4)

3.1.1.3 Elección de la antena Xbee

Se comenzaron a hacer las pruebas iniciales con una antena o módulo XBee de1mW de potencia, serie 1, con conector a antena por U.fl, ya que era la disponible en laempresa y, además la más económica, su precio oscila los 17 €.

Una vez comprobado que la combinación Arduino-Xbee-sensor daban buenosresultados, y éstos se ajustaban a las exigencias presentadas, procedimos a las pruebas dedistancia en la transmisión-recepción de datos sin hilos, donde se vio que tendríamos querecurrir a una antena de mayor alcance. Se sabía que había un modelo superior a éste y,

Page 59: Desarrollo e implementación utilizando Arduino y Zigbee con un

58

evidentemente, de mayor coste, el XBee Pro (su precio oscila los 28 €), con el cualcomparamos a continuación:

Tabla 5. Comparativa de prestaciones entre Xbee.

En la tabla 6 vemos las prestaciones que ofrecen ambos módulos. Las Xbee Pro ganan encuanto al alcance en la transmisión al tener una potencia de salida bastante mayor. Encuanto a velocidades de transmisión, ambas son semejantes a 250 kbps.

Por otro lado, por lo que se refiere a las características técnicas, podemos ver comolas Xbee Pro tienen como desventaja, su mayor consumo (295 mA en la transmisión dedatos de las Xbee Pro frente a unos 45 mA en las Xbee, y 55 mA en la recepción para lasXbee Pro frente a 50 mA en las Xbee), esto hace que el tiempo de vida de las baterías enlas Xbee Pro sea mucho menor.

Page 60: Desarrollo e implementación utilizando Arduino y Zigbee con un

59

Los factores de programación de cada antena no condicionan la elección, ya queambas se programan exactamente igual desde X-CTU. Tampoco es un problema eldisponer tanto de las librerías como de la interfaz gráfica, ya que ambos modelos utilizanlas mismas.

Considerando que nuestra prioridad era un mayor alcance en el envío de datos, y nonos bastaba con la primera, nos decantamos por las XBee 60mW U.FL Connection Series1(802.15.4), siendo más complicada la elección de una batería adecuada.

3.1.2 Arduino Uno

La placa Arduino Uno la utilizaremos para conectar con el módulo Xbee EndDevice y elSensor ultrasónico, gracias a las placas adaptadoras de Libelium que veremos acontinuación, y así poder enviar el volumen de llenado del contenedor por RF. Estopermitirá tener otro Cordinador como receptor en una caja de comunicaciones, y podercontrolar desde un PC el estado de los contenedores.

En este apartado hacemos un breve resumen de la placa que, en realidad, tiene másaplicaciones que las utilizadas en este proyecto.

Arduino Uno es una placa basada en micro-controlador ATMEL AVR ATmega328, con varias entradas y salidas tanto digitales como analógicas y con conexión USB.Además dispone de un entorno de desarrollo propio. Está pensada para fomentar y facilitarel uso de la electrónica para el público en general, desde escuelas hasta aficionados a laelectrónica.La placa puede comunicarse con el PC bien mediante su propio entorno, bien utilizandootros tales como Processing o Macromedia Flash.

El lenguaje de programación del micro-controlador está basado en C / C++, por loque posee funciones de E/S analógica y digital, funciones aritméticas, manejo deinterrupciones, comunicaciones por el puerto serie, etc. Las variables pueden ser, como enC, tipo int, char, word, long o float. Las instrucciones de control también son parecidas(if...else, for, while, etc)

3.1.2.1 Hardware

La principal ventaja de la placa Arduino es que es open-hardware, por lo que puedeser usada libremente para cualquier proyecto sin tener que pagar licencia para ello.Las características básicas de la placa son:

Parámetro DatoVoltaje operativo 5 VVoltaje de entrada recomendado 7-12 VVoltaje de entrada límite 6-20 VPines de entrada y salida digital 14 (6 proporcionan PWM)Pines de entrada analógica 6Intensidad de corriente 40 mAMemoria Flash 32KB (2KB reservados para el bootloader)

Page 61: Desarrollo e implementación utilizando Arduino y Zigbee con un

60

SRAM 2 KBEEPROM 1 KBFrecuencia de reloj 16 MHz

Tabla 6. Características técnicas de Arduino.

En la figura 28 vemos el esquemático del Hardware del equipo:

Microcontrolador Botón de Reset

Port B digital Port D digital

Port C analog Conector de potencia

Figura 46. Esquema Hardware de la placa Arduino Uno.

Las características técnicas de la placa son:

MicrocontroladorAtmel ATmega328P8-bit AVR CPURISC instruction set (assembly)32KB of program memory20 MHz max. freq. (Usually 16 MHz) Peripherals voltages ranging from 0V-3.3VTimers, Counters, Watch dog6 PWM channelsSerial USART DigitalSPI/I2C communicationAnalog-to-Digital Converter (ADC)

Port B Port D6 usable pins 8 usable pins

Page 62: Desarrollo e implementación utilizando Arduino y Zigbee con un

61

‘Digital’ Port -> only binary 3 can be PWM 3 can be PWMDigital

Port C6 usable pins‘Analog’ Port -> can write/readvoltages ranging from 0V-3.3V

3.1.2.1 Conexión con modulo Xbee

Figura 47. Conexión Arduino con Xbee Pro

3.1.3 Sensor de ultrasonidos

La mayoría de los sensores de ultrasonido que podemos encontrarnos en el mercadotienen la función de detectar un objeto a la distancia a través de un sistema de ondasonora en la cual se mide el tiempo que transcurre la emisión de dicho sonido y lapercepción del eco correspondiente la cual es la que determina la distancia a la cual seencuentra un intruso.

Uno de los mejores ejemplos que podemos citar para que podamos entender en unaforma más clara el funcionamiento de los sensores de ultrasonido es el vuelo de losmurciélagos, ya que después de todo, el sistema está inspirado en estos pequeñosmamíferos. Como ya sabemos todos, los murciélagos son ciegos por ello deben desplazarsea través del eco de sus sonidos; de esta manera debemos decir que el murciélago, paradetectar el lugar en el cual se encuentra un obstáculo y no chocar contra él, emite una seriede sonidos cuyo eco rebota en dicho obstáculo y de esta manera, al recibir el eco, lodetectan y pueden esquivarlo.

El sensor con el que trabajaremos es un medidor de distancias de bajo costo porultrasonidos, donde la detección del objeto se consigue midiendo el tiempo que tarda enrebotar un haz de ultrasonidos sobre la superficie de un objeto.

Uno de los enemigos que tiene este sistema de sensores de ultrasonido es el falsoeco, el cual se produce, cuando el objeto en donde el disparo se supone que tiene querebotar en forma de eco, cambia de lugar. Suele pasar en entornos metálicos también, que

Page 63: Desarrollo e implementación utilizando Arduino y Zigbee con un

62

se produzcan falsas medidas, hay que buscar la posición óptima del sensor para que estefenómeno no se produzca.

3.1.3.1 Requerimientos iniciales

La idea principal de nuestro proyecto es conocer el nivel de llenado de loscontenedores de basura ubicados en la calle, para lo que barajamos varias opciones con elobjetivo de poder ser lo más exactos posible en la medida de ese nivel, y luego poderinformar a los camiones o a un centro de control.

Lo primero que había que hacer es encontrar el sensor más adecuado para nuestroproyecto, entonces encontramos que había una primera idea de cómo funcionaría elsistema de recogida de desechos, el cual podemos observar en la siguiente imagen:

Figura 48. Sistema de recogida de deshechos.

Como podemos observar en la anterior imagen, nos informa de sensoresvolumétricos mediante ultrasonidos (sensor ultrasónico) y de sensores de infrarrojos,como si cada uno de ellos sirviera para distintos tipos de contenedor.

Esta idea o conjunto no acababa de valer exactamente, se debía encontrar la maneramás exacta y eficiente para nuestra medida de nivel de llenado, ya fuera utilizando los dosa la vez (cosa que supondría un mayor gasto económico), o decidiéndose por uno de ellos.

Se analizaron las ventajas e inconvenientes y se decidió por empezar a probar, yconsecuentemente desarrollar, el sensor de ultrasonidos, ya que pensamos que nos podríadar una lectura más exacta, o menos errónea que el sensor infrarrojos, el cual al ir colocadoa los lados nos podría dar más lecturas falsas.

Page 64: Desarrollo e implementación utilizando Arduino y Zigbee con un

63

3.1.3.2 Elección de los componentes

Para la realización de este proyecto, se ha partido de la placa Arduino UNO; la másbásica, pero no por ellos menos versátil, de las placas Arduino. También disponemos en laoficina de placas Arduino Duemilanove, las cuáles nos permiten extraer el micro-controlador Atmel manualmente, y poder trabajar con él en una protoboard o placa depruebas.

Como ya disponíamos de esta placa controladora, teníamos que implementarla conel sensor, el cual decidimos que sería de ultrasonidos; vimos que había ejemplos de usocon Arduino, y nos decidimos a empezar a probar con los más económicos, el de un solocilindro(SRF02) y el de 2 cilindros(SRF05).

Por último, una vez comprobado que el micro-controlador recibe las medidascorrectas del sensor ultrasonidos, falta conseguir que estas lecturas se envíen de manerainhalámbrica desde el sensor hacia un receptor colocado a una cierta distancia delcontenedor. La solución más cercana de la que se disponía son los módulos Xbee de Digi,que funcionan a una frecuencia de 2,4 GHz y pensamos que en relación calidad-precio eralo más apropiado.

Empezamos con el Xbee Serie 1, para comprobar que se envían las medidascorrectamente, y así fue, pero vemos que al querer transmitir a más distancia se nos quedacorto, por lo que acabamos utilizando un Xbee Pro S1 60mW, de mucha más potencia queel anterior, aunque también mayor consumo, cosa muy importante ya que la vida del sensordepende de una batería, no va conectado a la red ni panel solar.

Una vez conseguido nuestro objetivo, tenemos que conseguir que el gasto delproyecto sea el mínimo, a la vez que el tamaño del prototipo, cosa que en el caso del sensory del Xbee no es posible, ya que son circuitos ya integrados y hay que acoplarlos así aArduino.

Por lo tanto, hay que escoger de todo el conjunto de la placa Arduino, únicamentelos componentes necesarios para que, conectados al sensor y a Xbee, nos funcione con lamisma eficiencia y exactitud que en un principio. La diferencia sería que, en vez degastarnos más de 20 € en una placa Arduino, nos gastemos 5€ en los componentesimprescindibles.

3.1.3.3 Descripción del sensor elegido

Consiste en un medidor ultrasónico de distancias de bajo costo desarrollado por lafirma DEVANTECH Ltd. El módulo SRF05 es una evolución del módulo SRF04 y estádiseñado para aumentar la flexibilidad, aumentar el rango de medida y reducir costes. Estotalmente compatible con el SRF04 y el rango de medida se incrementa de 3 a 4 metros.Se muestra en la figura 1.

Page 65: Desarrollo e implementación utilizando Arduino y Zigbee con un

64

Figura 49. Esquema Hardware de la placa del sensor SRF05.

Dispone de un nuevo modo de operación que se selecciona simplementeconectando el pin “Mode” a GND. Dicho modo permite al SRF05 emplear un único pin deE/S que sirve tanto para dar la orden de inicio o disparo, como para obtener al medidarealizada (ECO).

Cuando el pin de “Modo” no se emplea y se deja sin conectar, el SRF05 trabaja dela misma manera que el SRF04. Esto es, la señal de disparo y la salida de ECO se realizanpor pines diferentes.

El SRF05 incluye una pequeña temporización tras el pulso ECO de salida, quepermite que controladores lentos como Basic Stamp y Picaxe puedan ejecutar suscorrespondientes instrucciones.

Modo 1, Compatibilidad con SRF04

Este modo emplea patillas separadas, una para aplicar el pulso de inicio o Trigger yotra para leer la anchura del pulso del ECO medido. Todos los programas realizados parael SRF04 deben funcionar perfectamente en este modo, que se selecciona simplementedejando la patilla “Mode” sin conectar (igual que en el SRF04).

Tal y como se muestra en el diagrama de tiempos de la figura 2, el modo de empleoes muy sencillo. Externamente se aplica, por parte del usuario, un pulso de disparo otrigger de 10 μS de duración mínima. Se inicia la secuencia. El módulo transmite un trende pulsos o “burst” de 8 ciclos a 40KHz. En ese momento la señal de salida ECO pasa anivel “1”. Cuando la cápsula receptora recibe la señal transmitida como consecuencia dehaber rebotado en un objeto (eco), esta salida pasa de nuevo a nivel “0”. El usuario debemedir la duración del pulso de esta señal, es decir, el tiempo en que la señal eco semantiene a “1”.

Page 66: Desarrollo e implementación utilizando Arduino y Zigbee con un

65

Figura 50. Diagrama de tiempos en el modo1

Con objeto de que el módulo se estabilice, se debe dejar un lapsus de tiempo deunos 20mS mínimo entre el momento en que la señal de eco pasa a “0” y un nuevo pulsode disparo que inicie el siguiente ciclo o medida. Esto permite realizar medidas cada 50mSo lo que es igual a 20 medidas por segundo.

La duración del pulso eco de salida varía entre 100μS y 25mS, en función de ladistancia entre las cápsulas del módulo y el objeto. La velocidad del sonido es de 29.15μS/cm que, como realiza un recorrido de ida y vuelta, queda establecida en 58.30μS/cm.Así pues el rango mínimo que se puede medir es de 1.7 cm (100μS/58) y el máximo de 431cm (25mS/58).

Modo 2, Patilla única para trigger y ECO

Este modo permite emplear una única patilla para generar la señal de disparo otrigger y también para realizar la medida de la anchura del pulso de salida del ECO, lo queahorra patillas en el micro-controlador central. Para emplear este modo basta con conectarla patilla “Mode” con GND. La señal de ECO aparecerá entonces en la misma patilla por laque se aplicó la señal de trigger. Esa patilla se debe configurar primero como salida paragenerar el disparo y luego como entrada para leer la duración del ECO. La sentenciaPULSIN de los controladores mas populares realiza esta reconfiguración de formaautomática. Ver la figura 30.

Page 67: Desarrollo e implementación utilizando Arduino y Zigbee con un

66

Figura 51. Diagrama de tiempos en el modo2

3.1.3.4 Características técnicas

3.1.3.5 ConexionadoEl módulo emplea tan sólo 5 conexiones que se pueden realizar soldando

directamente 5 cables o bien mediante un conector de 5 vías con paso de 2.54mm. Estas semuestran en la figura 31.

Figura 52. Conexiones SRF05

Page 68: Desarrollo e implementación utilizando Arduino y Zigbee con un

67

Figura 53. Conexiones SRF05 con Arduino

3.1.3.6 Ajustes

El módulo SRF05 viene perfectamente ajustado y calibrado de fábrica, por lo queno necesita de ningún tipo de ajuste. Su funcionamiento se puede verificar aplicando unaserie de pulsos por la entrada de disparo. Con ayuda de un osciloscopio se puede medir laanchura de la señal eco de salida. Esta anchura, representada en μS y dividida entre 58.30nos permite calcular la distancia del objeto.

3.1.3.7 Aplicaciones

El módulo SRF05 es capaz de generar una señal lógica de salida cuya duracióndetermina la distancia de un objeto. Las aplicaciones son numerosas, citamos unas cuantasa modos de ejemplo:

• Aplicaciones de control conde se deba actuar en función de ladistancia o tamaño de objetos diversos.

• Alarmas activadas cuando el intruso se aproxima a unadeterminada distancia.

• Microbótica en donde es necesario que se actúe en función de la distanciaque separa al robot de cualquier otro objeto.

3.1.4 Baterías

Las baterías son uno de los elementos fundamentales en el diseño de nuestro sensorinalámbrico, tanto por el diseño de la propia placa como la capacidad de otorgar autonomíaa nuestro sensor.

En este apartado hacemos un breve resumen de los parámetros a tener en cuenta ennuestra elección, comparamos las baterías disponibles y finalmente seleccionamos la másidónea para nuestra aplicación.

- La tensión que aporta: Los requerimientos de diseño imponen que nuestra bateríapresente una alimentación entre 2.8 V y 3.4 V, que es el rango de tensiones dealimentación de las Xbee.

Page 69: Desarrollo e implementación utilizando Arduino y Zigbee con un

68

- La capacidad de la batería, que la medimos en mAh. Este es un factor de vitalimportancia ya que de esta manera podemos medir la vida que tendrá la aplicación. Porejemplo, si la batería tiene una capacidad de 250 mAh, y provee una corriente media de 2mA a la carga, en teoría la batería podría otorgar una vida de 125 horas a nuestro equipo.

- El diseño en la placa base: la batería no debe ocupar demasiado espacio y almismo tiempo debe poder integrarse bien con el resto del hardware.

- El modo en que consume energía el sensor. Si el sensor consume un determinadovalor de corriente continuamente no es lo mismo que hacerlo a picos.

Figura 54. Ejemplo del modo de funcionamiento.

En cuanto al tipo de baterías las podemos clasificar según diversos criterios:capacidad, voltaje, etc. En nuestro caso tanto el tamaño como la capacidad de la bateríaresultan esenciales, ya que se supone que el espacio ocupado por el sensor será pequeño,pero sobretodo se desea que su autonomía sea la mayor posible. Entre las diferentes formasde batería tenemos: pilas de botón, pilas cilíndricas y pilas rectangulares. De todas ellaselegimos las pilas cilíndricas de litio, ya que son las que más capacidad de carga nosofrecen, a pesar de ser las de mayor tamaño.

Finalmente la pila seleccionada ER34615T, 3.6V, 19 Ah, es la mejor en cuanto a larelación capacidad / precio. Se han hecho pruebas de vida de la batería, a la vez que loscálculos correspondientes expuestos en el presente proyecto, y se han cumplido con creceslas exigencias de durabilidad de la pila, durando más de 4 años para el funcionamiento quenosotros queremos darle al sensor.

Figura 55. Pila cilíndrica seleccionada.

Page 70: Desarrollo e implementación utilizando Arduino y Zigbee con un

69

3.1.5 Adaptador Xbee a placa protoboard de Sparkfun

La separación de los pines de los módulos Xbee se rige por el sistema métrico(concretamente es de 2mm), por lo que no pueden ser puestos directamente sobre una placaprotoboard, cuya separación se basa en el sistema imperial (pulgadas). El fabricanteSparkfun ofrece estas pequeñas placas que adaptan la separación de las patas para poderser acopladas a una placa protoboard (ver figura 36).

Figura 56. Esquema de pines del adaptador a protoboard. Y Regleta de 10 pines.

El motivo de hacernos con estas pequeñas placas adaptadoras es poder trabajar conlas Xbee en la fase de diseño para poderlas adaptar a nuestra placa protoboard, antes deadaptarlas a la placa PCB.

3.1.6 Adaptador Xbee Shield

Uno de los problemas que teníamos que afrontar en el desarrollo del proyecto erapoder acoplar los módulos Xbee al PC para poder leer los datos. La Xbee Shield, acopladaa una placa Arduino permite solventar este problema.Esta placa, creada por la empresa Libelium permite la comunicación de los módulos Xbeecon el micro de Arduino, tanto para aplicaciones remotas (por ejemplo si queremos montarun router inalámbrico con microcontrolador) como para aplicaciones locales con PC (quees nuestro caso, ya que la queremos usar para el Coordinador). Dispone además de pinesdigitales (pin 2 a 7) y pines analógicos.

La Xbee Shield tiene dos jumpers que determinan como se conecta el módulo Xbeea la placa Arduino. Existen dos posiciones posibles, la posición Xbee y la posición USB.La posición Xbee conecta el pin DOUT del módulo Xbee al pin Rx del microcontroladordel Arduino, y el pin DIN está conectado al TX. Notar que los pines RX y TX del

Page 71: Desarrollo e implementación utilizando Arduino y Zigbee con un

70

Micro-controlador están todavía conectados a los pines TX y RX respectivamente. Sinembargo, en esta posición el micro-controlador sólo será capaz de recibir datos desde elmódulo Xbee y no desde el USB del ordenador.

La posición USB conecta el pin DOUT del módulo Xbee al pin RX del chip FTDI,y el pin DIN del módulo Xbee al pin TX del chip FTDI. Por lo tanto, en esta posiciónpodemos conectar directamente el módulo Xbee al ordenador. Un punto importante es quedeberá quitarse el micro-controlador del módulo Arduino.

Figura 57. Adaptador Xbee Shield de Libelium.

Una de las desventajas de la placa es que no permite una comunicación conArduino al PC directamente, ya que es preciso extraer el micro-controlador. Otro problemaes que el botón de reset no puede resetear los módulos Xbee, que en ocasiones podríaresultar una opción más que interesante.

En cuanto a las ventajas, aunque en el mercado se ofrecen otras placas de similarescaracterísticas, la más extendida y, seguramente más cómoda, es ésta, por lo que la hemoselegido para nuestro proyecto, ya que tiene más fácil manejo que las otras.

Page 72: Desarrollo e implementación utilizando Arduino y Zigbee con un

71

3.1.7 Caja de Control:

La Caja de Control realiza la función de recibir los datos correspondientes a lossensores de contenedor.Recibe los datos y gestiona éstos para que puedan ser visualizados posteriormente por elusuario encargado de la gestión.

La Caja de Control puede albergar la Base de Datos aunque se recomienda que éstase encuentre no físicamente en el Punto de Control sino en las Oficinas o Instalaciones delusuario de Gestión.

Cada Unidad o Caja de Control permite controlar un total de 128 sensores siemprey cuando estos se encuentren a un radio no superior a los 200m.

Se alimenta gracias a la corriente de una farola o gracias a alimentación por PlacaSolar ya que su funcionamiento requiere un sistema de alimentación seguro al transmitir lainformación cada hora vía GPRS, M2M, WI-FI o Ethernet a la Sala de Control.

Principales Características de la Caja de Control:- Permite Controlar un Máximo de 128 Sensores- Preparada para su funcionamiento en exterior, IP57 y conectores IP68.- Dispone de Procesador Interno y Modulo GPRS sin Conversores agregados.- Temperatura de Trabajo: de 70 a -30º C (con calefacción interna).

Figura 58. Esquema ejemplo de comunicación de caja control con contenedores.

Page 73: Desarrollo e implementación utilizando Arduino y Zigbee con un

72

3.2 Software

3.2.1 Programación de los módulos Xbee: X-CTU

X-CTU es el software oficial para programar radios Xbee. Este software permite alusuario la posibilidad de bajar nuevo firmware de la página de Digi, programar parámetrosa la radio o testear la comunicación fácilmente. En este apartado repasamos de formarápida como funciona para centrarnos más adelante en la programación de una radio enmodo Sleep.

Básicamente, el programa se compone de una serie de funciones muy útiles querepasamos a continuación. Cuando abrimos el programa X-CTU, veremos que tenemoscuatro pestañas:

- PC Settings: Ofrece la posibilidad de seleccionar el puerto COM a través del queirá conectada nuestra radio, así como los ajustes típicos de la comunicación serie(Baudrate, Flow Control, Data Bits, Parity y Stop Bits). Ofrece también laposibilidad de habilitar el modo API y el response timeout.

Figura 59. Pestaña PC Settings.

Page 74: Desarrollo e implementación utilizando Arduino y Zigbee con un

73

- Range Test: Tras establecer los parámetros de comunicación en la pestaña PCSettings y que el Xbee está comunicando con otro, la opción del Range Test puededar idea de cuan fuerte llega la señal y la tasa de fiabilidad en la comunicaciónvisualizando el número de paquetes correctos y erróneos que llegan.- Terminal: Esta pestaña permite leer y escribir las tramas que llegan al móduloXbee. Permite leerlas en modo hexadecimal para poderlas interpretar.

Figura 60. Pestaña Terminal.

- Modem Configuration: Esta es la interfaz para leer / escribir parámetros de unXbee. Desde esta pestaña también es posible actualizar el firmware disponibledesde la página de Digi.

Page 75: Desarrollo e implementación utilizando Arduino y Zigbee con un

74

Figura 61. Pestaña Modem Configuration.

Las pestañas más útiles son PC Settings y Modem Configuration. Range Test yTerminal también pueden ayudarnos en casos en los que queramos chequear lacomunicación.

Page 76: Desarrollo e implementación utilizando Arduino y Zigbee con un

75

3.2.2 Procesado de datos: MySQL

3.2.2.1 Aplicaciones

MySQL es muy utilizado en aplicaciones web, como Drupal o phpBB, enplataformas (Linux/Windows-Apache-MySQL-PHP/Perl/Python), y por herramientas deseguimiento de errores como Bugzilla. Su popularidad como aplicación web está muyligada a PHP, que a menudo aparece en combinación con MySQL.

MySQL es una base de datos muy rápida en la lectura cuando utiliza el motor notransaccional MyISAM, pero puede provocar problemas de integridad en entornos de altaconcurrencia en la modificación. En aplicaciones web hay baja concurrencia en lamodificación de datos y en cambio el entorno es intensivo en lectura de datos, lo que hacea MySQL ideal para este tipo de aplicaciones. Sea cual sea el entorno en el que va autilizar MySQL, es importante monitorizar de antemano el rendimiento para detectar ycorregir errores tanto de SQL como de programación.

3.2.2.2 Lenguajes de programación

Existen varias interfaces de programación de aplicaciones que permiten, aaplicaciones escritas en diversos lenguajes de programación, acceder a las bases de datosMySQL, incluyendo C, C++, Pascal, Delphi (via dbExpress), Eiffel, Smalltalk, Java (conuna implementación nativa del driver de Java), Lisp, Perl, PHP, Python, Ruby, Gambas,REALbasic (Mac y Linux), (x)Harbour (Eagle1), FreeBASIC y Tcl; cada uno de estosutiliza una interfaz de programación de aplicaciones específica. También existe unainterfaz ODBC, llamado MyODBC que permite a cualquier lenguaje de programación quesoporte ODBC comunicarse con las bases de datos MySQL. También se puede accederdesde el sistema SAP, lenguaje ABAP.

3.2.2.3 Características adicionales

Inicialmente, MySQL carecía de elementos considerados esenciales en las bases dedatos relacionales, tales como integridad referencial y transacciones. A pesar de ello, atrajoa los desarrolladores de páginas web con contenido dinámico, justamente por susimplicidad.

Poco a poco los elementos de los que carecía MySQL están siendo incorporadostanto por desarrollos internos, como por desarrolladores de software libre. Entre lascaracterísticas disponibles en las últimas versiones se puede destacar:

Amplio subconjunto del lenguaje SQL. Algunas extensiones son incluidas igualmente. Disponibilidad en gran cantidad de plataformas y sistemas. Posibilidad de selección de mecanismos de almacenamiento que ofrecen diferente

velocidad de operación, soporte físico, capacidad, distribución geográfica,transacciones...

Transacciones y claves foráneas. Conectividad segura.

Page 77: Desarrollo e implementación utilizando Arduino y Zigbee con un

76

Replicación. Búsqueda e indexación de campos de texto.

MySQL es un sistema de administración de bases de datos. Una base de datos esuna colección estructurada de tablas que contienen datos. Esta puede ser desde una simplelista de compras a una galería de pinturas o el vasto volumen de información en una redcorporativa. Para agregar, acceder a y procesar datos guardados en un computador, ustednecesita un administrador como MySQL Server. Dado que los computadores son muybuenos manejando grandes cantidades de información, los administradores de bases dedatos juegan un papel central en computación, como aplicaciones independientes o comoparte de otras aplicaciones.

MySQL es un sistema de administración relacional de bases de datos. Una base dedatos relacional archiva datos en tablas separadas en vez de colocar todos los datos en ungran archivo. Esto permite velocidad y flexibilidad. Las tablas están conectadas porrelaciones definidas que hacen posible combinar datos de diferentes tablas sobre pedido.

MySQL es software de fuente abierta. Fuente abierta significa que es posible paracualquier persona usarlo y modificarlo. Cualquier persona puede bajar el código fuente deMySQL y usarlo sin pagar. Cualquier interesado puede estudiar el código fuente y ajustarloa sus necesidades. MySQL usa el GPL (GNU General Public License) para definir quépuede hacer y qué no puede hacer con el software en diferentes situaciones. Si usted no seajusta al GPL o requiere introducir código MySQL en aplicaciones comerciales, ustedpuede comprar una versión comercial licenciada.

Las siguientes características son implementadas únicamente por MySQL:

Permite escoger entre múltiples motores de almacenamiento para cada tabla. EnMySQL 5.0 éstos debían añadirse en tiempo de compilación, a partir de MySQL 5.1 sepueden añadir dinámicamente en tiempo de ejecución:

Los hay nativos como MyISAM, Falcon, Merge, InnoDB, BDB,

Memory/heap, MySQL Cluster, Federated, Archive, CSV, Blackhole y Example

Desarrollados por partners como solidDB, NitroEDB, ScaleDB, TokuDB,

Infobright (antes Brighthouse), Kickfire, XtraDB, IBM DB2). InnoDB Estuvo

desarrollado así pero ahora pertenece también a Oracle

Desarrollados por la comunidad como memcache, httpd, PBXT y Revision

Agrupación de transacciones, reuniendo múltiples transacciones de varias conexionespara incrementar el número de transacciones por segundo.

Page 78: Desarrollo e implementación utilizando Arduino y Zigbee con un

77

3.2.3 Aplicación Visual:

La Aplicación Visual se instala en un Servidor externo al sistema y permitemonitorizar los datos referentes a los estados de contenedores.

Podrá visualizarse así cada contenedor, las calles o el estado general sobre el mapa,incluyendo datos como son: Tipo de Contenedor, Localización (Si se ofrecen previamente).

Permite la posibilidad de visualizar los datos en un entorno Web, sin necesidad deubicar la aplicación en una estación de trabajo físicamente.

Permite generar informes gracias a los datos almacenados en la Base de Datos delsistema.

Es integrable con aplicaciones terceras para Smartphones tipo ANDROID o IOS yasea en formato de nueva aplicación o en aplicación Web.

Figura 62. Ejemplo aplicación visual.

3.3 Implementación de hardware y software

Funcionamiento:El funcionamiento básico del Sensor consiste en detectar el estado del contenedor ytransmitir ésta información que podrá determinar una variación de estado en %:

Esta información se transmite por el sensor cada 60 minutos (secuenciaparametrizable) y se recibe por la unidad de control, situada a una distancia no superior a100m.

La Unidad de Control recibe el estado del sensor y lo convierte en informaciónvisible para el usuario, enviando ésta a través de Wi-Fi o GPRS.

Page 79: Desarrollo e implementación utilizando Arduino y Zigbee con un

78

Figura 63. Ejemplo ejemplo sistema de control de llenado.

Los Contenedores envían la información vía Radiofrecuencia, ésta se recibe en laCaja de Control) y se transmite vía GPRS o WI-FI a la Sala de Control donde se gestiona.

La información queda almacenada en la Base de Datos de acceso libre tipo MySQL.

La información de los Sensores podrá ser empleada para mostrarse en la AplicaciónVisual, dónde podrá consultarse el estado de cada uno de los Sensores.

Podrán generarse Informes posteriormente a través de la Base de Datos ya sea por: Localización (Calle, Zona, Ciudad)/ Location Data Contenedor /Cointainer Data Estado / ContainerState Data

Los informes podrán generarse combinando cualquier de los datos anteriores con lavariable Tiempo (Ejemplo Estado Contenedores en fecha: 12.12.12)

La información de cada Unidad de Control es recogida en un punto terceromostrando un mapa completo de la ciudad o ciudades controladas y el total decontenedores monitorizados.

Page 80: Desarrollo e implementación utilizando Arduino y Zigbee con un

79

Sección 4. Memoria de Cálculo

La memoria de cálculo se basa en los elementos explicados en la memoria descriptiva.Por lo tanto, en esta parte de la memoria veremos los cálculos realizados tanto para loselementos hardware como el software, esto es, cálculo de componentes, el desarrollo de lainterfaz gráfica, etc.

4.1 Diagramas de flujo del software

En esta sección mostramos los diagramas de flujo que gobiernan el sistema demonitorización y guardado de datos que corre en el PC.

Esquema básico del software del PC

Figura 64. Esquema general del software en PC Raspberry

Page 81: Desarrollo e implementación utilizando Arduino y Zigbee con un

80

Esquema básico del software del sensor

Figura 65. Esquema general del software en placa base End Device

Page 82: Desarrollo e implementación utilizando Arduino y Zigbee con un

81

4.2 Potencia consumida

Para la alimentación del módulo se ha escogido una batería de 3.6V, 19A, de litiotipo cilíndrica.

Teniendo en cuenta las características de la pila, los cálculos de la vida de ésta son:

Debemos tener en cuenta los ciclos de trabajo de las Xbee. Si definimos:

Tcm = Tiempo consumo normalTcd = Tiempo consumo dormidoIcm = Intensidad consumo normalIcd = Intensidad consumo dormido

Y aplicamos que el consumo es: = · ·(5)

Por ejemplo, para Tcd = 3598s y Tcm = 2s e Icm = 64,04mA y Icd=0,46mA,tendremos que: = · , · , = 0,476 mA

Consumo = 0,476 mA

Si tenemos en cuenta que disponemos de una batería de 19 A/h, la vida de la bateríasería:

Vida batería = 19000 / 0,476 = 39915,97 h ≈ 1663 días ≈ 4,5 años

Page 83: Desarrollo e implementación utilizando Arduino y Zigbee con un

82

Sección 5: Casos experimentales

En otros proyectos que se centran en Zigbee principalmente, suelen hacer pruebas paramedir el RSSI (Receive Signal Strength Indication), que indica la fuerza o potencia de laseñal recibida. En nuestro proyecto no hemos entrado a medir este parámetro, ya quetenemos ejemplos anteriores donde vemos la relación de distancia y nivel de RSSI, por loque he decidido quedarme con estas demostraciones o conclusiones, sin necesidad de hacernuevas pruebas, sino probar hasta que distancia hay comunicación entre emisor y receptorRF y que no se pierdan datos o medidas.

Antes de hacer estas pruebas de comunicación, se hicieron las pruebas de medidas delsensor de ultrasonidos, tanto fuera del contenedor como dentro de él, ya que en el interiordel contenedor podríamos tener problemas de rebote del eco, y consecuentemente obtenerfalsas medidas.

5.1 Lectura de la corriente consumida en los diferentes ciclos de trabajo

Para medir la lectura consumida en los diferentes ciclos de trabajo, hemos utilizadoun multímetro Fluke. Hemos programado el micro-controlador para que el sensor envíeuna señal cada 10 segundos, y el resto del tiempo esté descansando, cosa que en el futurocambiará, ya que nos interesará que envíe una medida cada hora aproximadamente, por eltema de la vida de la pila o batería, y no es necesario estar sabiendo cada segundo o minutoel estado de los contenedores.

Para medir la intensidad de corriente, debemos poner el multímetro en modoamperímetro, colocando las pinzas donde toque y eligiendo la escala más adecuada. Acontinuación, se abre el circuito para permitir conectar el multímetro en serie, como en elsiguiente esquema:

Figura 66. Colocación amperímetro en el circuito Figura 67. Multímetro Fluke

I despierto≈ 64,06mA / I dormido≈ 0,46mA

Por lo tanto, aplicando la ecuación 5, podemos determinar en esta configuracióncuál será el tiempo estimado de la batería:

Page 84: Desarrollo e implementación utilizando Arduino y Zigbee con un

83

= · , · , = 0,476 mA

Vida batería = 19000 / 0,476 = 39915,97 h ≈ 1663 días ≈ 4,5 años

5.2 Lectura de medidas del sensor ultrasónico

Para saber que sensor ultrasónico utilizar en el presente proyecto, se comprobó queéstos daban medidas suficientemente exactas para cumplir con futuras exigencias puestasen saber el nivel de llenado del contenedor. Se compararon dos de los más económicos, elSRF02 (un cilindro) y el SRF05 (dos cilindros), viendo que el último es el más exacto yestable en la medida.

Gracias a las placas Arduino, se pudo conectar el sensor ultrasónico a los dos pinesde alimentación y datos para que el micro procese los datos recibidos por el mismo sensor,cargando un software de ejemplo básico, el cual ordena al sensor que entregue una medidacada tanto tiempo [apartado 10.2].

Acoplando una “Shield” o placa adaptadora para unir los módulos Xbee a una placaArduino, se puede tener un emisor y un receptor, de manera que el coordinador iráconectado al PC mediante USB y se ven las medidas recibidas por el puerto serie a travésdel programa X-Ctu.

5.3 Lectura del RSSI: Outdoor

[18] RSSI es la abreviatura en inglés de Receive Signal Strength Indication(Indicador de fuerza de la señal recibida). Es un parámetro muy útil en comunicacionesinalámbricas ya que mide el nivel de potencia de las señales de comunicación. El RSSI semide en dBm.

Los valores RSSI leídos por las Xbee Pro oscilan entre -36 a -100 dBm mientras quelos de las Xbee lo hacen entre -23 y -92 dBm.

Experimentos realizados en un proyecto anterior de la universidad que profundiza en eltema de comunicación inhalámbrica Zigbee, llamado “Red de sensores Zigbee” [18]:

1) Medida de RSSI en el exterior:

El estudio llevado a cabo se basa en la recolección de muestras del RSSI a diferentesdistancias. Se han tomado 140 muestras en cada punto, desde distancias de 1m a 23 mespaciadas con un paso 1 m entre cada toma de muestra.

Page 85: Desarrollo e implementación utilizando Arduino y Zigbee con un

84

Tabla 14. Tabla resumen del experimento.

En la tabla 14, los valores RSSI mostrados se corresponden con el valor de la mediade las muestras tomadas.

La media en función de la distancia, se muestra en la figura 62.

Page 86: Desarrollo e implementación utilizando Arduino y Zigbee con un

85

Figura 68. RSSI vs distancia.

En la tabla 14, los valores RSSI mostrados se corresponden con el valor de la mediade las muestras tomadas.

Por otro lado, como era de esperar la potencia de la señal recibida (RSSI) vadisminuyendo con respecto a la distancia. La curva de la figura 62 representa la media delos valores RSSI en una cierta distancia en función de la distancia.

En resumen, el RSSI es un buen parámetro para seguir tendencias de la señal.

Las conclusiones extraídas de este experimento son:

- Se pone de manifiesto que un valor de RSSI obtenido en un instante puntual no esun valor fiable (por ejemplo si con ello quisiéramos calcular la distancia a la que nosencontramos del módulo), pero en cambio es un buen indicador para seguir latendencia de la señal.

5.4 Comunicación emisor-receptor Xbee

En este apartado se veremos las pruebas de distancia que se han realizado entreemisor y receptor de radiofrecuencia, para saber si es suficiente para el tipo de proyectoque queremos realizar. En las especificaciones técnicas de la antena o módulo Xbee Pro S1que utilizamos, nos dice que esta distancia llega a ser hasta 1 Km, cosa que pensamos queno es del todo cierta, ya que depende de varios factores esta comunicación.

Uno de los factores sería el meteorológico, siendo lo más favorable un tiempodespejado y sin viento. Al intervenir factores como viento o lluvia la comunicación varíaconsiderablemente.

Otro factor a tener muy cuenta después de las pruebas realizadas, es la posición delreceptor, cuanto más elevado esté respecto el emisor o emisores mejor, tiene más alcance.

Page 87: Desarrollo e implementación utilizando Arduino y Zigbee con un

86

Destacar que las pruebas realizadas son en exterior, con árboles, naturaleza y algúncoche entre emisor y receptor, pudiendo decir que es una comunicación en campo abierto,sin edificios ni grandes muros entre medio.

Page 88: Desarrollo e implementación utilizando Arduino y Zigbee con un

87

Sección 6: Planos

La relación de planos de elementos para el módulo End Device es el siguiente:

Plano DescripciónPlano 1 Planos de la placa Arduino UnoPlano 2 Fotografía del módulo End DevicePlano 3 Planos de la pila

La relación de planos de elementos para el módulo Coordinador es el siguiente:

Plano DescripciónPlano 4 Planos placa Xbee Explorer UsbPlano 5 Fotografías del módulo Coordinador

La relación de planos de la caja de comunicaciones es el siguiente:

Plano DescripciónPlano 6 Fotografía caja de comunicaciónPlano 7 Plano de la caja de comunicación

Page 89: Desarrollo e implementación utilizando Arduino y Zigbee con un

88

6.1 Plano placa Arduino

Figura 69. Plano de la placa Arduino Uno.

Page 90: Desarrollo e implementación utilizando Arduino y Zigbee con un

89

6.2 Fotografía placa base (interior End Device)

Figura 70. Placa Base para el módulo End Device.

En la figura 71 vemos las partes básicas de las que se compone un móduloEnd device:

- Xbee.- Placa base con jumper de conexión y pistas de interconexionado a los diferentessubmódulos.- Sensor de ultrasonidos.- Pila.

CONFIDENCIA

L

Page 91: Desarrollo e implementación utilizando Arduino y Zigbee con un

90

6.3 Plano Pila

Figura 71. Planos de la pila.

Page 92: Desarrollo e implementación utilizando Arduino y Zigbee con un

91

6.4 Fotografía del módulo Coordinador

Figura 72. Fotografía del diseño del Coordinador.

En la figura 70 vemos las partes básicas de las que se compone un módulocoordinador:

- Antena Xbee- Placa Xbee Explorer Usb.- XBee Pro 60mW U.FL Connection - Series 1 (802.15.4)- Cable miniUSB a USB- Latiguillo U.FL a SMA

Page 93: Desarrollo e implementación utilizando Arduino y Zigbee con un

92

6.5 Planos Xbee Explorer USB

Figura 73. Circuito de la placa Xbee Explorer USB

Page 94: Desarrollo e implementación utilizando Arduino y Zigbee con un

93

6.6 Fotografía caja comunicación

Figura 74. Fotografía interior caja de comunicación.

Page 95: Desarrollo e implementación utilizando Arduino y Zigbee con un

94

6.7 Plano caja de comunicación

Figura 75. Plano de caja de comunicaciones.

CONFIDENCIA

L

Page 96: Desarrollo e implementación utilizando Arduino y Zigbee con un

95

Sección 7: Presupuesto

En este presupuesto se pretende mostrar el coste de la realización del proyecto en sí mismo,dedicado a los estudios previos y al diseño del hardware.

7.1 Precios unitarios

CÓDIGO UD DESCRIPCIÓN PRECIOIT001 h Ingeniero Técnico Industrial 10,00 DIEZ EUROSHW001 u Arduino UNO con ATMega328 21,90 VENTIÚN EUROS

con NOVENTAcéntimos

HW002 u Xbee shield 19,50 DIECINUEVEEUROS conCINCUENTAcéntimos

HW003 u Xbee Pro s1 60 mW u.flconnection(802.15.4)

28,72 VEINTIOCHOEUROS conSETENTA Y DOScéntimos

HW004 u Xbee Explorer Usb 18,88 DIECIOCHO EUROScon OCHENTA yOCHO céntimos

HW005 u Low cost Ultrasonic Ranger 14,79 CATORCE EUROScon SETENTA YNUEVE céntimos

HW006 u Atmega328P-AU 2,83 DOS EUROS conOCHENTA Y TREScéntimos

HW007 u Crystal 32.768KHz 0,54 CINCUENTA YCUATRO céntimos

HW008 u Resistencia SMD 1K 0.125W 0,01 UN céntimoHW009 u Condensador cerámico SMD

22pF, 50V0,038 TRES con OCHO

céntimosHW010 u Condensador cerámico 0.1uF,

25V0,052 CINCO con DOS

céntimosHW011 u Regulador de tensión 3.3V, 1A 0,75 SETENTA Y CINCO

céntimosHW012 u Conector hembra 2.54mm,5 vías 0,15 QUINCE céntimosHW013 u AVRisp mkII 32,25 TREINTA Y DOS

EUROS conVEINTICINCOcéntimos

HW014 u Pila-batería 15,04 QUINCE EUROS conCUATRO céntimos

HW015 u Antena para Xbee 6,55 SEIS EUROS conCINCUENTA YCINCO céntimos

HW016 u Caja de comunicaciones conGPRS

290,00 DOSCIENTOSNOVENTA EUROS

CONFIDENCIA

L

Page 97: Desarrollo e implementación utilizando Arduino y Zigbee con un

96

7.2 Precios descompuestos

7.2.1 Capítulo 1: Estudios previos

CÓDIGO UD DESCRIPCION CANTIDAD PRECIO SUBTOTALIT001 h Ingeniero Técnico Industrial

recopilando información acercade Arduino y su entorno deprogramación

50,00 10 500,00

IT001 h Ingeniero Técnico Industrialrecopilando información acercade sensoresvolumétricos(ultrasonidos einfrarrojos)

70,00 10 700,00

IT001 Ingeniero Técnico Industrialrecopilando información acercade ATmega328P

80,00 10 800,00

IT001 Ingeniero Técnico Industrialrecopilando información acercade Zigbee

80,00 10 800,00

Suma de la partida 2.800,00

2,00 % Costes Indirectos 56,00

TOTAL PARTIDA 2856,00

7.2.2 Capítulo 2: Diseño y montaje del hardware

CÓDIGO UD DESCRIPCIÓN CANTIDAD PRECIO SUBTOTALIT001 h Ingeniero Técnico Industrial 40 10,00 400,00HW001 u Arduino UNO con

ATmega3281,00 21,90 21,90

HW002 u Xbee shield 1,00 19,50 19,50HW003 u Xbee Pro s1 60 mW u.fl

connection(802.15.4)2,00 28,72 57,44

HW004 u Xbee Explorer Usb 1,00 18,88 18,88HW005 u Low cost Ultrasonic Ranger 1,00 14,79 14,79HW006 u Atmega328P-AU 1,00 2,83 2,83HW007 u Crystal 32.768KHz 1,00 0,54 0,54HW008 u Resistencia SMD 1K

0.125W1,00 0,01 0,01

HW009 u Condensador cerámicoSMD 22pF, 50V

2,00 0,038 0,076

HW010 u Condensador cerámico 2,00 0,052 0,104

CONFIDENCIA

L

Page 98: Desarrollo e implementación utilizando Arduino y Zigbee con un

97

0.1uF, 25VHW011 u Regulador de tensión 3.3V,

1A1,00 0,75 0,75

HW012 u Conector hembra 2.54mm,5vías

1,00 0,15 0,15

HW013 u Programador Atmel AVRispmkII

1,00 32,25

HW014 u Pila-batería cilíndrica delitio 3.6V, 19Ah

1,00 15,04 15,04

HW015 u Antena para Xbee 1,00 6,55 6,55HW016 u Caja de comunicaciones

(con GPRS incluido)1,00 290,00 290,00

Suma de la partida 848,56

Envío y manipulación 10,00

TOTAL PARTIDA 858,56

7.3 Resumen del presupuesto

CAPÍTULO RESUMEN IMPORTECapítulo 1 Estudios previos 2856,00Capítulo 2 Diseño y montaje del hardware 858,56

TOTAL EJECUCIÓN MATERIAL 3714,56

13 % Gastos Generales 482,89

6% Beneficio Industrial 22,29

TOTAL EJECUCIÓN POR CONTRATO 4219,74

18 % IVA 759,55

TOTAL PRESUPUESTO LICITACIÓN 4979,29

CONFIDENCIA

L

Page 99: Desarrollo e implementación utilizando Arduino y Zigbee con un

98

Sección 8: Conclusiones

El objetivo principal de este proyecto ha sido el estudio de los sensores inalámbricosen sus diferentes fases, desde el diseño a su modo de funcionamiento con Arduino, asícomo el estudio del protocolo de comunicación Zigbee, tanto en lo referente al estudioteórico de las tramas de comunicación hasta las pruebas prácticas llevadas a cabo endiferentes entornos, con la finalidad de conseguir la monitorización del nivel de llenado decontenedores.

Para llevar a cabo los objetivos fijados, hemos dividido el proyecto en tres fases:

La primera fase se ha dedicado al funcionamiento y posterior diseño de nuestrosensor inhalámbrico, compuesto por: un sensor ultrasónico, una placa Arduino y unaantena o módulo Xbee.Una vez encontrado el sensor adecuado, se conectan los pines correspondientes a la placaArduino, la cual interconectamos mediante una placa Xbee Shield al módulo Xbee(EndDevice) para transmitir los datos enviados por el sensor. El micro-controlador Atmel deArduino se encarga de procesar éstos datos y Xbee de enviar por radiofrecuencia, para mástarde ser recibidos por otro receptor Xbee (Coordinator), el cual está conectado medianteUSB a un PC donde podemos controlar el estado del sensor.Ésta era la parte “fácil”, ya que se disponen de adaptadores como los que hemos nombradoanteriormente, foros donde nos dan ayuda en las conexiones, y ejemplos de códigosfuentes para comprobar el correcto funcionamiento del sensor; pero nuestro objetivo eratener un prototipo montado sobre una PCB, el cual debía ser lo más económico y reducidoposible, en cuanto a componentes, tamaño y consumo, por lo que teníamos queexperimentar sobre “protoboard”, y encontrar el montaje deseado.

La segunda fase se ha dedicado a montar el circuito deseado en una “protoboard”,donde podemos añadir y extraer los componentes necesarios, individual y fácilmente en lamayoría de casos.

Tenemos el módulo Xbee y el sensor ultrasónico, los cuales se conectaráníntegramente a la placa PCB definitiva, sin ser reducido ni modificado su aspecto.Pero en el caso de la placa Arduino, es donde debemos centrarnos en escoger loscomponentes que nos interesaran para la realización de nuestro sensor inhalámbrico.En un proyecto anterior realizado en la empresa, ya se tuvo que recurrir al proceso deescoger únicamente los componentes necesarios de la placa Arduino, en montajesuperficial o PCB. Aprovechamos este montaje y nos centramos en reducir el consumo y,en vez de trabajar a 5V, hacerlo a 3,3V, ya que el módulo de comunicación inhalámbricaXbee tiene un rango aproximado de 2,8V a 3,6V.

El problema era que en las especificaciones técnicas de nuestro sensor ultrasónicoSRF05 dice que se alimenta a 5V, por lo que vemos que deberemos trabajar con 2tensiones distintas, debiendo así hacer uso de 2 reguladores de tensión. Esto no ayudaba altema de reducir el consumo, ya que el regulador de tensión es de los componentes que másconsume en el circuito.

Entonces probamos de alimentar nuestro sensor ultrasonidos a 3,3V y comprobarque las medidas recibidas por Xbee en nuestro PC eran correctas o se veían afectadas porla falta de tensión porque, tanto nuestro micro-controlador Atmel de la placa Arduinocomo la antena Xbee pueden funcionar a 3,3V, siempre que el micro vaya acompañado deun clock o cristal de una frecuencia adecuada(a menos frecuencia, más rango de tensión seengloba).

Page 100: Desarrollo e implementación utilizando Arduino y Zigbee con un

99

Y con suerte, nuestro sensor funciona a ésta tensión también, por lo que podemosutilizar un solo regulador de tensión.Después de realizar las pruebas necesarias, cambiándole el software al micro-controladoruna y otra vez para conseguir las medidas del sensor en el tiempo deseado, durmiendo elXbee para que no se active hasta que el sensor envíe la medida, etc., hay que adaptarlo auna PCB para su posterior encapsulado y montaje en el contenedor, a la vez que hay quetener una caja de comunicación para la recepción y tratamiento de datos.

En la tercera fase se ha diseñado una placa base, que conectada a Xbee y a unsensor ultrasónico, nos constituye un módulo End Device, instalado en el techo delcontenedor. Éste enviará los datos a un coordinador, situado en una caja decomunicaciones que recibirá los datos y los procesará mediante una CPU, a la vez quehabrá una base de datos registrando el número y estado del contenedor.

La curva de aprendizaje de Arduino es realmente rápida. Dispone de gran cantidadde documentación oficial y no oficial. La comunidad de usuarios es muy grande, accesibley colaborativa. Hay gran cantidad de ejemplos de uso y proyectos hechos con licenciaabierta, cosa que permite reaprovechar todo lo que ya funciona.

El hecho de haber definido una manera estándar de crear extensiones, las shields,ha permitido crear una gran cantidad de placas accesorias para cubrir la mayoría denecesidades habituales en proyectos de electrónica. Estas extensiones se consiguen a travésde los mismos canales de distribución. Estas suelen entregarse con ejemplos de uso oincluso librerías de código integrables en el entorno Arduino, con lo que amplifican muchoel potencial de la plataforma.

El nivel de abstracción de cómo funcionan los circuitos electrónicos o como sedeben programar los dispositivos es muy alto. Esto permite realizar operaciones complejassin gran esfuerzo. En contra, estas limitado al comportamiento proporcionado por laslibrerías o por la funcionalidad de la circuitería de la que dispones.

El desempeño de estas librerías o extensiones no siempre es el más óptimo y hayveces que es necesario realizar modificaciones. Pero incluso en estos casos el soporte quese puede encontrar en la comunidad de usuarios es muy grande y no debe suponer un granescollo para la realización del proyecto. En cualquier caso, siempre podemos crear nuestraspropias librerías, dando así soporte a nuevas funcionalidades o mejoras de rendimiento. Enestos casos sí que es necesario un mayor nivel de conocimientos de electrónica o deprogramación, pero el alcanzar este nivel puede hacerse de un modo muy progresivo.Enlazando con el segundo objetivo que nos habíamos marcado en la realización de estePFC, podemos decir que las capacidades lectivas o formativas de la plataformaArduino son muy grandes.

El hecho de interactuar con el mundo real de un modo directo, puede generar unamayor curiosidad en el alumnado. Esto permite adquirir unos conocimientos de electrónicao programación de un modo muy ameno.

Page 101: Desarrollo e implementación utilizando Arduino y Zigbee con un

100

El hecho que el coste de una placa sea razonablemente bajo, y el hardware muyrobusto, puede facilitar el acceso a este por gran parte de centros, permitiendo su usodurante un largo camino formativo. Se podría decir que tiene un bajo coste por elrendimiento que puede ofrecer.

Page 102: Desarrollo e implementación utilizando Arduino y Zigbee con un

101

Sección 9: Bibliografía

Referencias y webs consultadas:

[1] ZigBee Multi Profile ZigFest, Homehttp://www.zigbee.org/

[2] Arduino, Home Pagehttp://www.arduino.cc/es/

[3] http://en.wikipedia.org/wiki/ZigBee

[4] http://en.wikipedia.org/wiki/Wireless_sensor_network

[5] http://en.wikipedia.org/wiki/Sensor_node

[6] PFC “Ejemplo de aplicación con Arduino: medida de caudal”,Ingeniería Técnica Industrial en Electrónica Industrial.Autor: Josep Fernández Daroca; Director: José Luís Ramírez Falo

[7] Xbee Explorer UsbXBee Pro 60mW U.FL Connection - Series 1 (802.15.4)http://sparkfun.com/

[8] Software programa de diseño de circuitos impresos PCBhttp://www.designspark. com/

[9] Sensores ultrasonidos SRF02 y SRF05http://www.robot-electronics.co.uk/es.farnell.com/

[10] Datasheet EVE - ER34615T - BATTERY, LITHIUM, 3.6V, D, TABSes.farnell.com/

[11] Datasheets components integrados en PCBes.rs-online.com/

[12] Datasheets components integrados en PCBes.mouser.com

[13] Antena 2.4GHZ RP-SMAhttp://www.bricogeek.com

[14] Diseño y montaje en protoboard con Arduino.http://www.instructables.com

[15] Programming with Arduino IDE & AVRISP MKIIhttp://www.stevenjohal.com

[16] Datasheet programador Atmel AVRISP mkIIhttp://www.atmel.com

Page 103: Desarrollo e implementación utilizando Arduino y Zigbee con un

102

[17] Proyecto Arduino, Download the Arduino Softwarehttp://arduino.cc/en/Main/Software

[18] PFC ”Red de sensores Zigbee”, Ingeniería en Automática y Electrónica IndustrialAutor: Antón Girod Fortuño; Director: Ramón Villarino Villarino.

[19] Wireless Sensor Networks - A Market Research Reporthttp://blogs.dolcera.com/blog/2009/08/02/wireless-sensor-networks-a-report/

[20] Freeduino, Home Artículo digital<http://www.freeduino.org/>

[21] Arduino team. Placa Arduino monocapa<http://arduino.cc/es/Main/ArduinoBoardSerialSingleSided3>

[22] BricoGeek, Tienda, Artículo digitalhttp://www.bricogeek.com/shop/

[23] Electan, electrónica y robótica, Homehttp://www.electan.com

[24] Proyecto Arduino, Download the Arduino Softwarehttp://arduino.cc/en/Main/Software

Page 104: Desarrollo e implementación utilizando Arduino y Zigbee con un

103

Sección 10: Anexo

10.1 Código fuente

#include <avr/sleep.h>#include <avr/power.h>//Sensor Brossa SB Prova 1.0

int dista = 0;int distb = 0;int distfinal = 0;int comprobar = 0;int contador = 0;byte addDH = 0; //no permite 1 en ninguna posicion del bytebyte addDL = 4; //no permite 1 en ninguna posicion del byte

// configuarció connexió SFR05int ecoPin = 2; // SB ECO pin digital 2int disparoPin = 3; // SB Disparo pin digital3unsigned long pulseTime = 0; // stores the pulse inMicro Secondsunsigned long distance = 0; // variable for storingthe distance(mm)int alsensor= 9; // pin de alimentacion alsensor

// Configuració Sleepint tdespertar = 0; // tiempo adesboradar timer2int tiempo = 1; // tiempo adespertar el uC 17-- 1 minutint wakexbee = 10;int entrada = 0;int numconte = 99;

// Clock externo de 32,686kHzSIGNAL(TIMER2_OVF_vect){

tdespertar++; //augmentamos el tiempo adespertar}

void setup(){

pinMode(disparoPin, OUTPUT); // set disparoPin 3 asoutput

pinMode(ecoPin, INPUT); // set ecoPin 2 as inputpinMode(alsensor, OUTPUT); // set pin alsensor como

salida

pinMode (wakexbee, OUTPUT);delay (5000);digitalWrite (wakexbee, HIGH);

Serial.begin(9600); // initialize the serial port,lets you view the distances being pinged if connected to computer

//Setup TIMER2

CONFIDENCIA

L

Page 105: Desarrollo e implementación utilizando Arduino y Zigbee con un

104

TCCR2A = 0x00;TCCR2B = (1<<CS22)|(1<<CS21)|(1<<CS20); //Set CLK/1024 or overflow

interrupt every 8sASSR = (1<<AS2); //Enable asynchronous operationTIMSK2 = (1<<TOIE2); //Enable the timer 2 interrupt

sei(); // Enable global interrupts*/}

void loop(){

if ((tdespertar<tiempo)&&(entrada==0)){

sleepNow();}

if ((tdespertar==tiempo)&&(entrada==0)){entrada = 1;// Activar el XBeedigitalWrite (wakexbee, LOW);

}if (entrada==1)

{contador=contador+1;digitalWrite(alsensor, HIGH); // habilita la

alimentacion del pin del sensorwhile (comprobar==0) // Finalització del

Periode de lectures{digitalWrite(disparoPin, HIGH); // envia un pols de XX

microsegonsdelayMicroseconds(30); // espera XX microsegons

abans d'aturar-lodigitalWrite(disparoPin, LOW); // atura el polspulseTime = pulseIn(ecoPin, HIGH); // Look for a return

pulse, it should be high as the pulse goes low-high-lowdista = pulseTime/58; // Distance = pulse time

/ 58 to convert to cm.delay(1000);digitalWrite(disparoPin, HIGH); // envia un pols de XX

microsegonsdelayMicroseconds(30); // espera XX microsegons

abans d'aturar-lodigitalWrite(disparoPin, LOW); // atura el polspulseTime = pulseIn(ecoPin, HIGH); // Look for a return

pulse, it should be high as the pulse goes low-high-lowdistb = pulseTime/58; // Distance = pulse time

/ 58 to convert to cm.delay(3);if (((distb-dista<=5)||(dista-distb<=5)||(dista==distb)))

{comprobar=1;

}}distfinal = distb; // Calcula la distancia mitjana

if (distfinal>400){

distfinal=0;}

CONFIDENCIA

L

Page 106: Desarrollo e implementación utilizando Arduino y Zigbee con un

105

delay(500);Serial.write(byte(1));Serial.write(byte(addDH));Serial.write(byte(addDL));

//Serial.print(contador,DEC);//Serial.print(" Contenedor:" );//Serial.print(numconte,DEC);//Serial.print(" ");int cx, dx, ux, tx;

tx = distfinal;cx = tx / 100; // Calculamos cuantas centenas tiene nuestro

número ...tx = tx - (cx * 100); // y se lo restamosdx = tx / 10; // Calculamos cuantas decenas tiene nuestro

número ...tx = tx - (dx * 10); // y se lo restamosux = tx / 1; // Y por último calculamos cuantas unidades

tiene nuestro número.

Serial.write(byte(cx + 0x30));Serial.write(byte(dx + 0x30));Serial.write(byte(ux + 0x30));

Serial.write(byte(lowByte(1+addDH + addDL + cx+0x30 + dx+0x30 +ux+0x30)|2));

// Serial.write(byte (13));

//Serial.print(distfinal,DEC); // Escriu ladistancia mitjana

//Serial.print(" cm"); // Indica les unitats*///Serial.println(""); //imprime salto de lineadelay(500);

digitalWrite(alsensor, LOW);tdespertar=0;entrada=0;comprobar=0;// Poner el XBee dormirdigitalWrite (wakexbee, HIGH);

}}

void sleepNow() // here we put the arduino to sleep{

/* Now is the time to set the sleep mode. In the Atmega8 datasheet* http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf on

page 35* there is a list of sleep modes which explains which clocks and* wake up sources are available in which sleep modus.** In the avr/sleep.h file, the call names of these sleep modus are

to be found:** The 5 different modes are:* SLEEP_MODE_IDLE -the least power savings* SLEEP_MODE_ADC* SLEEP_MODE_PWR_SAVE* SLEEP_MODE_STANDBY

CONFIDENCIA

L

Page 107: Desarrollo e implementación utilizando Arduino y Zigbee con un

106

* SLEEP_MODE_PWR_DOWN -the most power savings** For now, we want as much power savings as possible, so we* choose the according* sleep modus: SLEEP_MODE_PWR_DOWN** Timer 2 overflow interrupt is only able to wake up the ATmega in

PWR_SAVE**/

set_sleep_mode(SLEEP_MODE_PWR_SAVE); // sleep mode is set here

sleep_enable(); // enables the sleep bit in the mcucrregister

// so sleep is possible. just a safety pin

sleep_mode(); // here the device is actually put to sleep!!// THE PROGRAM CONTINUES FROM HERE AFTER

WAKING UP

sleep_disable(); // first thing after waking from sleep:// disable sleep...

} // Executa el programa

10.2 Código fuente ejemplo para probar sensor ultrasónico SRF05

//Sensor Brossa SB Prova 1.0

const int numOfReadings = 10; // nombre delectures per periode

int readings[numOfReadings]; // vector delectures

int arrayIndex = 0; // index del vector<= nombre de lectures

int total = 0; // acumulació total

int distfinal = 0; // distància mitjanade les lectures

// configuarció connexió SFR05

int ecoPin = 2; // SB ECO pindigital 2

int disparoPin = 3; // SB Disparo pindigital 3

unsigned long pulseTime = 0; // stores the pulsein Micro Seconds

unsigned long distance = 0; // variable forstoring the distance(mm)

// Configuració LED Indicador opcional

CONFIDENCIA

L

Page 108: Desarrollo e implementación utilizando Arduino y Zigbee con un

107

int redLEDPin = 9; // Red LED,connected to digital PWM pin 9

int redLEDValue = 255; // stores the valueof brightness for the LED (0 = fully off, 255 = fully on)

// Setup lectures

void setup()

{

pinMode(redLEDPin, OUTPUT); // sets pin 9 asoutput

pinMode(disparoPin, OUTPUT); // set disparoPin 3as output

pinMode(ecoPin, INPUT); // set ecoPin 2 asinput

// create array loopto iterate over every item in the array

for (int thisReading = 0; thisReading < numOfReadings; thisReading++)

{

readings[thisReading] = 0;

}

Serial.begin(9600); // initialize theserial port, lets you view the distances being pinged if connected tocomputer

}

// Executa elprograma

void loop()

{

digitalWrite(disparoPin, HIGH); // envia un pols deXX microsegons

delayMicroseconds(30); // espera XXmicrosegons abans d'aturar-lo

digitalWrite(disparoPin, LOW); // atura el pols

pulseTime = pulseIn(ecoPin, HIGH); // Look for a returnpulse, it should be high as the pulse goes low-high-low

distance = pulseTime/58; // Distance = pulsetime / 58 to convert to cm.

CONFIDENCIA

L

Page 109: Desarrollo e implementación utilizando Arduino y Zigbee con un

108

total= total - readings[arrayIndex]; // extreu la lecturaantiga del total

readings[arrayIndex] = distance; // guarda la novalectura

total= total + readings[arrayIndex]; // afegeix la novalecutra al total

arrayIndex = arrayIndex + 1; // Passa a lasegüent lectura

delay(3); // Espera YYmilisegons per la següent lectura (SEGURETAT)

if (arrayIndex >= numOfReadings) // Finalització delPeriode de lectures

{

arrayIndex = 0; // Inicialitzal'index de mesures

distfinal = total / numOfReadings; // Calcula ladistancia mitjana

Serial.print(distfinal,DEC); // Escriu ladistancia mitjana

Serial.println(" cm"); // Indica lesunitats

delay(10000); // Temps de reposdel lector (MODIFICABLE: 5min =300.000 miliseconds!!))

}

} CONFIDENCIA

L