Está en la página 1de 109

Desarrollo e implementacin utilizando Arduino y

Zigbee con un sensor ultrasnico para control de nivel de


llenado

TITULACIN: Ingeniera Tcnica Industrial en Electricidad

AUTOR: Juan Jess Almansa Madrigal


DIRECTOR: Antonio Lzaro

FECHA: Septiembre del 2013.

1
El presente proyecto tiene informacin confidencial, es una versin ntegra de un
proyecto realizado en una empresa, por lo que hay datos que no sern pblicos.
ndice
Seccin 1: Objetivos, alcance y antecedentes del proyecto .............................................................. 6
1.1 Objetivo del proyecto......................................................................................................... 6
1.2 Alcance ............................................................................................................................... 6
1.3 Antecedentes ..................................................................................................................... 6
Seccin 2: Introduccin terica.......................................................................................................... 7
2.1 Fundamentos de Radio ...................................................................................................... 7
2.1.1 Espectro Electromagntico ........................................................................................ 7
2.1.2 Ecuacin de transmisin en espacio libre .................................................................. 8
2.1.3 RSSI ............................................................................................................................. 9
2.2 Redes de sensores inalmbricas WSN.............................................................................. 10
2.3 Motas ..................................................................................................................................... 11
2.3.1 Elementos bsicos de una Mota .............................................................................. 11
2.4 Introduccin a Zigbee....................................................................................................... 12
2.4.1 Historia y curiosidades ............................................................................................. 13
2.4.2 Caractersticas tcnicas 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 Topologas 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 inalmbricas ......................................................................... 23
2.4.4 El futuro de Zigbee ................................................................................................... 24
2.5 Introduccin 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 Cmo obtener una placa Arduino? ........................................................................ 31

2
2.6.6 Eleccin de placa Arduino: El Arduino UNO............................................................. 31
2.6.6.1 El porqu de la eleccin ....................................................................................... 31
2.6.6.2 Caractersticas ...................................................................................................... 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 aplicacin 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 programacin Arduino................................................................................. 43
2.8.1 Introduccin e historia ............................................................................................. 43
2.8.2 Funciones bsicas 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 libreras......................................................................................................... 49
2.8.3.1 Libreras Estndar................................................................................................. 49
2.8.3.2 Libreras de terceros............................................................................................. 50
Seccin 3: Memoria descriptiva ....................................................................................................... 52
3.1 Hardware: Componentes de un sensor inalmbrico ....................................................... 52
3.1.1 Antenas y transceptores Zigbee............................................................................... 52
3.1.1.1 Mdulos Xbee ...................................................................................................... 53
3.1.1.2 Datos E/S .............................................................................................................. 56
3.1.1.3 Eleccin 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 Eleccin de los componentes............................................................................... 63
3.1.3.3 Descripcin del sensor elegido............................................................................. 63
3.1.3.4 Caractersticas tcnicas ........................................................................................ 66
3.1.3.5 Conexionado......................................................................................................... 66

3
3.1.3.6 Ajustes .................................................................................................................. 67
3.1.3.7 Aplicaciones.......................................................................................................... 67
3.1.4 Bateras..................................................................................................................... 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 Programacin de los mdulos Xbee: X-CTU............................................................. 72
3.2.2 Procesado de datos: MySQL..................................................................................... 75
3.2.2.1 Aplicaciones.......................................................................................................... 75
3.2.2.2 Lenguajes de programacin ................................................................................. 75
3.2.2.3 Caractersticas adicionales ................................................................................... 75
3.2.3 Aplicacin Visual:...................................................................................................... 77
3.3 Implementacin de hardware y software........................................................................ 77
Seccin 4. Memoria de Clculo ........................................................................................................ 79
4.1 Diagramas de flujo del software ...................................................................................... 79
4.2 Potencia consumida ......................................................................................................... 81
Seccin 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 ultrasnico...................................................................... 83
5.3 Lectura del RSSI: Outdoor ................................................................................................ 83
5.4 Comunicacin emisor-receptor Xbee............................................................................... 85
Seccin 6: Planos.............................................................................................................................. 87
6.1 Plano placa Arduino ......................................................................................................... 88
6.2 Fotografa placa base (interior End Device) ..................................................................... 89
6.3 Plano Pila.......................................................................................................................... 90
6.4 Fotografa del mdulo Coordinador................................................................................. 91
6.5 Planos Xbee Explorer USB ................................................................................................ 92
6.6 Fotografa caja comunicacin .......................................................................................... 93
6.7 Plano caja de comunicacin ............................................................................................. 94
Seccin 7: Presupuesto .................................................................................................................... 95
7.1 Precios unitarios............................................................................................................... 95
7.2 Precios descompuestos.................................................................................................... 96
7.2.1 Captulo 1: Estudios previos ..................................................................................... 96

4
7.2.2 Captulo 2: Diseo y montaje del hardware............................................................. 96
7.3 Resumen del presupuesto................................................................................................ 97
Seccin 8: Conclusiones ................................................................................................................... 98
Seccin 9: Bibliografa .................................................................................................................... 101
Seccin 10: Anexo .......................................................................................................................... 103
10.1 Cdigo fuente................................................................................................................. 103
10.2 Cdigo fuente ejemplo para probar sensor ultrasnico SRF05 ..................................... 106

5
Seccin 1: Objetivos, alcance y antecedentes del proyecto

1.1 Objetivo del proyecto

El presente proyecto tiene la finalidad de mostrar la viabilidad de utilizacin de un


micro-controlador Atmel de Arduino, un sensor ultrasnico y un sistema de
comunicacin sin hilos basado en protocolo Zigbee, con el objetivo final de controlar el
nivel de llenado de los contenedores situados en la calle de forma remota, permitiendo as
una gestin de recogida de residuos ptima y eficiente. Se detallar la tecnologa
empleada para la construccin de un primer prototipo, con comparaciones y pruebas
realizadas, as como la recepcin y registro de datos mediante una caja de comunicacin.
En primer lugar, el proyecto se centrar en describir dos grandes bloques que lo
componen, como son Arduino y Zigbee. Se har un estudio terico sobre sus
caractersticas, as como el funcionamiento en el entorno de programacin y configuracin
de los mismos.
Seguidamente, se describirn el hardware y el software utilizado en todas las fases
del proyecto, as como su implementacin.
Finalmente, se explican una serie de casos experimentales, como la lectura del
consumo en diferentes ciclos de trabajo (dormido o despierto), lecturas de la seal de
potencia recibida (RSSI) y distancias de comunicacin inhalmbrica, y se adjuntan planos
y fotografas de las partes fundamentales del proyecto, as como un presupuesto resumido.

1.2 Alcance

El alcance del proyecto es la realizacin de un circuito impreso, que conectada al


sensor ultrasnico colocado en el techo del contenedor, sea capaz de medir y procesar las
distancias de llenado, y a la vez de comunicarse inalmbricamente con un receptor de
radiofrecuencia o coordinador conectado a un PC situado en una caja de comunicaciones
remota.

1.3 Antecedentes

La empresa IGS Software tiene cierta experiencia en el desarrollo e investigacin en


hardware y software, habiendo fabricado algn prototipo anterior para otro tipo de
proyecto, basado en Arduino. Se trabaja desde el diseo PCB y correspondiente soldado de
componentes, hasta el software cargado al micro-controlador, en este caso uno del
fabricante Atmel.
En el proyecto actual se ha escogido los mdulos Xbee para el envo y recepcin
datos, integrndolo con sensor ultrasnico y un micro-controlador en una nica PCB.

6
Seccin 2: Introduccin terica

2.1 Fundamentos de Radio

2.1.1 Espectro Electromagntico

Las ondas de radio son una porcin del espectro electromagntico.

Sucede que la energa que transporta una onda electromagntica depende de la


constante de Planck. La constante de Planck relaciona la energa de los fotones con la
frecuencia de la onda lumnica segn la frmula:

E=h c (1)

Donde c= 299.272.458 m/s; h6.626 Js.

Figura 1. Clasificacin del espectro de radiofrecuencia.

Dentro del espectro electromagntico tenemos los rayos gamma de alta potencia
que llegan de las supernovas, los rayos X, los microondas para cocinar nuestros alimentos,
los infrarrojos que nos producen una sensacin de calor, la luz visible que nos sirve para
poder captar informacin y procesarla en el cerebro y tambin las ondas de radio. Las
ondas de radio son mucho ms largas que las ondas de luz y muchas pueden viajar a travs
de materiales tales como: ropa, muebles o paredes.

Las ondas de radio se pueden propagar muy bien por el vaco y por lo tanto son
ideales para las comunicaciones en las que las conexiones con cable no son tan prcticas.

Dentro del espectro electromagntico podemos ver que las frecuencias de ondas de
radio ocupan la porcin energtica situada entre 3 kHz y 300 GHz. Dentro de este amplio
espectro, podemos subdividir la radio en varias bandas de frecuencias:

7
Tabla 1. Clasificacin del espectro de radiofrecuencia.

2.1.2 Ecuacin de transmisin en espacio libre

La problemtica de las comunicaciones con radio es que requieren de mucha


potencia en comparacin con aquellas que viajan a travs de cable. La razn de esto es
fcil de entender. Como la radio irradia desde una fuente hacia el espacio, gran cantidad de
energa se atena, sin que esta energa haya sido utilizada. Una buena comparacin con
esta idea podran ser las ondas que se dispersan cuando tiramos una piedra en un estanque.
Pasa lo mismo con el sonido, ya que slo podemos entender un susurro desde una cierta
distancia, pero nos es imposible entenderlo si estamos a varios metros. Como ventaja los
sistemas radio requieren menos infraestructura, y pueden desplegarse y configurarse ms
rpidamente que los sistemas basados en comunicaciones por hilos.

8
Estos fenmenos se pueden explicar con la ecuacin de transmisin en espacio libre.
Esta ley dice que, para fenmenos ondulatorios tales como el sonido y la luz, la intensidad
disminuye con el cuadrado de la distancia con respecto al punto en donde se origina. Dicho
de otra forma, cada vez que se dobla la distancia desde la fuente, se requieren cuatro veces
la cantidad de energa para mantener la seal.

Figura 2. La ley del cuadrado inverso.

Esta ley puede ser explicada por la ecuacin:


( )= ( )
(2)

Dnde Gt y Gr son las ganancias de cada antena, es la longitud de onda y d la


distancia que hay entre las dos antenas.

De hecho, las redes en malla Zigbee estn diseadas pensando en la ecuacin de


transmisin en espacio libre. Los dispositivos Zigbee no tienen bateras de alta capacidad
para hacer llegar seales a grandes distancias, sino que en realidad hay muchos
dispositivos en malla y cada uno de ellos hace de repetidor del siguiente para llegar al
destinatario final, con objeto de no desintegrar la seal de la fuente.
De esta forma utilizando una red zigbee se pueden conseguir alcances grandes sin
necesidad de utilizar elevadas potencias de transmisin que seran inviables por normativa
y por consumo.

2.1.3 RSSI

El RSSI (de las siglas Received Signal Strength Indicator en ingls) es un


parmetro que da idea de la potencia de recepcin de seales de radio. En realidad es una
medida de la potencia recibida por el receptor. Dependiendo del dispositivo se devuelve de
diferentes formas, por ejemplo expresada en dBm o en niveles.

La relacin entre el RSSI y la distancia se puede determinar de acuerdo con la


siguiente expresin basada en la ecuacin en espacio libre:

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

9
Dnde cada parmetro es:
- n: La pendiente de la seal.
- 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 lo


tanto, en este ltimo caso la seal de recepcin 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 inalmbricas WSN

Los entornos inteligentes representan el siguiente paso en la evolucin de los


servicios en edificios, hogar o sistemas automticos de transporte. Mark Weiser lo describe
como un mundo fsico que es rico e invisible, con sensores, actuadores, pantallas y
elementos computacionales, integrados perfectamente en los objetos cotidianos de nuestras
vidas [19].

Figura 3. Esquema tpico de una WSN

Las posibilidades de esta tecnologa yacen tanto en la realizacin de aplicaciones


nuevas dnde la tirada de cable es complicada ya sea por el coste o las dificultades
tcnicas, como en las aplicaciones ya existentes, pero en el que la tecnologa inalmbrica

10
puede ofrecer un valor aadido. De esta forma podemos tener aplicaciones tan variadas
como control medioambiental o control de espacios inteligentes.

Algunas caractersticas de las redes de sensores inalmbricas son:

- Patrn de flujo de datos: Peridicamente cada nodo enva sus lecturas a un


almacn central de datos. Estos almacenes pueden estar distribuidos, de forma que
tendramos una arquitectura de almacenes distribuida.

- Restricciones energticas: Uno de los grandes desafos de esta tecnologa est en


la alimentacin de los nodos. Los nodos estn diseados para tener tanto un bajo consumo
como reducidos ciclos de trabajo. La fiabilidad de la red depender en gran medida de este
factor.

Las redes de sensores inalmbricas (Wireless Sensor Networks en ingls) prometen


cambiar la forma de obtener la informacin a nivel global. Se prev que las redes de
sensores estarn formadas por miles de nodos sensoriales diminutos. Las redes de sensores
inalmbricas no sern redes cerradas que harn aplicaciones concretas, sino que
seguramente estarn conectadas a Internet.

2.3 Motas

Aunque el concepto de sensores inalmbricos ya hace mucho tiempo que existe, el


concepto de motas podramos decir que es relativamente nuevo.
La idea de las motas proviene de los Estados Unidos y se refiere a dispositivos
extremadamente pequeos (de aqu el nombre), conectados inalmbricamente unos con
otros y pasndose informacin del tipo: temperaturas, humedades, almacenaje de sus
bateras, etc.

2.3.1 Elementos bsicos de una Mota

En una mota podemos diferenciar los siguientes componentes:

Figura 4. Esquema bsico de una mota.

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

11
Memoria Externa: Almacenamiento de datos del nodo. En general, la cantidad de
memoria necesaria depende de cada aplicacin.

Sensor: Es el dispositivo que es capaz de producir alguna seal elctrica a un cambio


fsico como por ejemplo temperatura o humedad.

Batera: Aporta la energa al nodo para su funcionamiento, tanto cuando est dormido
como cuando est activo.

Figura 5. Aporte de energa de la batera a los diferentes mdulos.

Transceptor: Es el encargado de funciones tanto de transmisin como de recepcin de


datos. En la figura 6 podemos ver el diagrama de bloques de un transceptor conectado a un
sensor.

Figura 6. Esquema del transceptor y su conexin con un sensor.

2.4 Introduccin a Zigbee

En el desarrollo del proyecto utilizaremos Zigbee como protocolo de comunicaciones


para la implementacin de los sensores inalmbricos que veremos ms adelante. A
continuacin se realizarn una serie de consideraciones relativas a este protocolo de
comunicacin.

12
2.4.1 Historia y curiosidades

El nombre de Zigbee deriva de los patrones errticos comunicativos que tienen las
abejas (bees) entre las flores durante la recogida de polen. Los zumbidos de las abejas
evocan en redes inalmbricas invisibles.
Zigbee surge de la necesidad de desarrollar una tecnologa inalmbrica fiable, pero
de no muy alta transferencia de datos. De esta forma, en 1998, un conjunto de empresas se
asociaron para desarrollar un estndar de comunicaciones que complementara a Wi-fi y
Bluetooth. Fue terminado y publicado por el IEEE en Mayo de 2003.

Desde el punto de vista del Hardware, podemos decir que Zigbee ha sido
cuidadosamente optimizado para el bajo coste a gran escala. Tiene pocas partes analgicas
y utiliza circuitos digitales siempre que sea posible.

Desde el punto de vista tcnico, Zigbee es un estndar que define un conjunto de


protocolos de comunicacin de baja velocidad de datos de corto alcance de redes
inalmbricas [1]. Zigbee est basado en dispositivos inalmbricos que operan a 868 MHz,
915 MHz y 2.4 GHz.

La tcnica de modulacin es Direct Sequence Spread Spectrum (DSSS), que tiene


un mximo rango de velocidad de unos 250 kbit /s.

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

- Basado en el estndar 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.
- Instalacin fcil y barata.
- Redes flexibles y extensibles.

Seguidamente podemos ver un cuadro de comparacin entre WiFi, Bluetooth y


Zigbee:

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

En resumenMientras la tecnologa Bluetooth est orientada a la movilidad del


usuario y a eliminar el cableado entre los dispositivos de corta distancia, Zigbee est
orientado hacia el control remoto y a la automatizacin. Bluetooth por lo tanto tiene por
objetivo eliminar los cables entre dispositivos que estn muy cerca entre s, como por
ejemplo entre el telfono mvil y un ordenador porttil, mientras que Zigbee podra ser una
red de sensores inalmbricos que se conecten sin cables a una estacin de control.

2.4.2 Caractersticas tcnicas de Zigbee [3]

2.4.2.1 Frecuencias de trabajo y rango de velocidades

En el estndar Zigbee se definen tres bandas de frecuencia distintas:

- 868868.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 y
915 MHz se usan en Europa y Amrica del Norte respectivamente. Esto otorga a los
diseadores libertad para tomar sus propias decisiones sobre qu bandas de frecuencia son
mejores para sus aplicaciones.
En general, podemos decir que las aplicaciones de 2.4 GHz permiten un ancho de
banda ms grande y ms canales. Sin embargo, la coexistencia con otros sistemas que
funcionan con 2.4 GHz como WLAN y Bluetooth debe ser tenida en cuenta. El tamao de
las antenas en sistemas de 2.4 GHz es tambin menor respecto a las otras dos bandas de
frecuencias.

14
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, IEEE
802.15.4 define el FFD (de Full Function Device en ingls), que es un dispositivo de
funcionalidad completo. A su vez, este tipo de dispositivos pueden funcionar como
coordinadores de rea (PAN) o dispositivos normales. Por otro lado, tambin define los
RFD (de reduced-function device en ingls), que son dispositivos de funcionalidad
reducida.

La figura 8 nos permite ver las clasificaciones Zigbee e IEEE 802.15.4 y sus
analogas.

Figura 7. Tipos de dispositivos Zigbee / IEEE 802.15.4

Zigbee Coordinator: Es el dispositivo ms completo. Controla el ruteado y la


administracin de la red. Hay uno por red.

15
Zigbee Router: Se encarga de interconectar los dispositivos mediante tcnicas de
encaminamiento y direccionamiento.

Zigbee End Device: Es un elemento pasivo de la red, ya que no transmite


informacin de manera autnoma; simplemente dispone de la funcionalidad mnima para
ser capaz de responder a peticiones de dispositivos superiores (coordinador o router).
Gracias a esto y a la poca memoria que necesita es muy econmico. Adems, su batera
puede durar aos debido a que se pasa dormido la mayor parte del tiempo.

2.4.2.3 Topologas de red

Zigbee permite tres topologas de red:

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

Star: En esta topologa el coordinador es el centro de la red y es el que se conecta


en crculo con los dems dispositivos (End devices). Por lo tanto, todos los mensajes deben
pasar por el coordinador. Dos end devices no pueden comunicarse entre s directamente.

Figura 8. Topologas de red.

Mesh: La configuracin cuenta con nodos router y con un nodo coordinador. Se


trata de una topologa no jerrquica en el sentido de que cualquier dispositivo puede
interactuar con cualquier otro.

16
Este tipo de topologa permite que, si en un momento un nodo o camino fallan en la
comunicacin, sta pueda seguir rehaciendo los caminos. La gestin de los caminos es
tarea del coordinador.

Cluster Tree: Es una variacin de la topologa malla, por lo que no la


consideramos realmente como una cuarta topologa. En este diseo, los routers forman una
columna vertebral con los dispositivos finales, que estn agrupados en torno a los routers.
De todas las topologas antes analizadas, la ms ventajosa y caracterstica del protocolo
Zigbee es la Mesh. El poder hacer routing dinmico permite a este tipo de topologa ganar
sobre todo en fiabilidad en las comunicaciones.

Figura 9. Enrutado de topologa Mesh.

Figura 10. Ventajas de enrutado de topologa Mesh.

Es adecuado destacar la importancia de actuar como un equipo. En baloncesto los


jugadores necesitan coordinarse entre ellos. En Zigbee pasa un poco lo mismo. Los
dispositivos pueden conectarse de muchas formas diferentes para dar fuerza a la red.

2.4.2.4 Capas de Zigbee

Las capas del protocolo Zigbee estn basadas en el modelo OSI (Open Systems
Interconnection). Aunque el modelo OSI especfica siete capas, Zigbee utiliza cuatro capas.
17
La ventaja de dividir un protocolo en capas es que, si el protocolo cambia, es ms fcil
cambiar una capa que el protocolo entero.

Figura 11. Capas del protocolo Zigbee.

El estndar Zigbee define slo las capas de red, aplicacin y seguridad, y adopta del
estndar IEEE 802.15.4 las capas PHY y MAC. El estndar fue desarrollado por el comit
802 del IEEE y fue inicialmente lanzado en el 2003.

Capa PHY
Es la capa ms cercana al hardware y es donde tiene lugar el control y las
comunicaciones del transceptor. Esta capa es la responsable de activar la transmisin y
recepcin de paquetes del sistema. Adems, tambin selecciona el canal de frecuencia y se
asegura que ste no es usado por otros dispositivos de la red.

Capa MAC
La capa MAC tiene la misin de proveer servicios a las capas superiores para que
stas se encarguen tanto del manejo de los datos que son transferidos en una red WSN
como de las primitivas para que un sistema operativo administre estas dos capas (capa
fsica y de enlace de datos).

Los servicios que la capa MAC ofrece son dos:

MAC Data Service.

MAC Management Service.


18
Estos dos servicios tambin 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 asociacin.

Capa NWK
La capa NWK hace de interfaz entre la capa MAC y la capa APL y es la
responsable de gestionar la formacin de redes y del routing. El routing es el proceso de
seleccionar el camino a travs del cual el mensaje ser lanzado hasta la destinacin del
dispositivo al que va dirigido. En esta capa se brindan los mtodos necesarios para: iniciar
la red, unirse a la red, enrutar paquetes dirigidos a otros nodos en la red y proporcionar los
medios para garantizar la entrega del paquete al destinatario final.
El Zigbee Coordinator y los routers son los responsables de este proceso. El coordinador
Zigbee tambin asigna en la capa NWK las direcciones a los dispositivos en su red.

Capa APL
Esta es la capa ms alta del protocolo en una red inalmbrica Zigbee y alberga los
objetos de la aplicacin. Los fabricantes creadores de Zigbee desarrollaron esta capa para
poder personalizar un mismo dispositivo para varias aplicaciones, por lo que podemos
decir que esta capa es la que hace a los dispositivos verstiles. Adems, puede haber hasta
240 objetos de aplicacin en un nico dispositivo.
El estndar Zigbee ofrece la opcin de utilizar perfiles en el desarrollo de la aplicacin. Un
perfil de aplicacin permite la interoperabilidad entre productos desarrollados por
diferentes fabricantes. Por ejemplo, si dos fabricantes utilizan el mismo perfil de aplicacin,
sus productos sern capaces de interactuar como si hubieran sido fabricados por el mismo
fabricante.
La capa de aplicacin de Zigbee determina varias caractersticas de dispositivos,
incluyendo la funcionalidad requerida para los dispositivos. La estructura general de la
capa se muestra en la figura 14:

19
Figura 13. Descripcin de la capa de aplicacin.

La estructura de la capa de aplicacin se divide en dos componentes: descripcin de


dispositivos y clusters.

Por un lado, los clusters son un conjunto de atributos agrupados, cada cluster es un
nmero de 16 bits, llamado cluster identifier, que a su vez tiene una pila dnde puede
almacenar atributos, tales como el valor actual de temperatura, si el sensor est dormido,
etc.

Por otro lado, la descripcin de dispositivos ofrece informacin ms ligada a


Zigbee, tal como si el dispositivo es un Router o un End Device, frecuencia de operacin,
energa de la batera, etc.

Clusters y Device Description agrupados forman la capa de aplicacin, que es un


nmero de 16 bits llamado profile identifier. La Zigbee Alliance define los profile
identifier mostrados en la figura 15:

20
Figura 14. Perfiles definidos por la Zigbee Alliance.

Adems de estos pueden existir perfiles privados definidos por un fabricante


determinado.

El perfil Smart Energy, por ejemplo, define varios tipos de dispositivos incluyendo
un portal de servicios energticos, pantallas en el hogar, etc., definiendo una funcionalidad
requerida para cada dispositivo.

2.4.2.5 Seguridad de red

La seguridad en las comunicaciones inalmbricas es una preocupacin normal para


los consumidores. stas las podramos dividir en dos aspectos: por un lado, la
confidencialidad de datos y por otro, la autenticacin de datos.

Para resolver el problema de la confidencialidad, el estndar IEEE 802.15.4 soporta


el uso del Advanced Encryption System (AES), para codificar el mensaje. El AES consiste
bsicamente en un algoritmo de cifrado que modifica un mensaje con una cadena de bits

21
conocida como la clave de seguridad, y slo el destinatario ser capaz de recuperar el
mensaje original.

Figura 15. Ejemplo de radio intrusin.

Por lo que respecta a la autenticacin de datos, en criptografa, un cdigo de


autenticacin de mensajes (MIC), es una pequea pieza de informacin que se utiliza para
autenticar un mensaje.

2.4.2.5 Profundidad de red

La profundidad de un dispositivo en una red se define como el nmero mnimo de


saltos necesarios para alcanzar el coordinador ZigBee. Por lo tanto, la profundidad mxima
de la red es entonces el nmero de saltos del Coordinador al dispositivo ms alejado de la
red.

Figura 16. Nmero de capas de un Zigbee.

En la figura 17 vemos el nmero de capas de profundidad ZigBee. En ella vemos


como 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 realidad
por tres parmetros:

- La profundidad de red.
- El nmero mximo de hijos que un padre puede aceptar.
- La profundidad que ocupa el dispositivo en la propia red.

22
2.4.3 Coexistencia de redes inalmbricas

La tecnologa inalmbrica est cada vez ms presente en nuestras vidas, con


tecnologas como WiFi, Bluetooth, y ahora Zigbee.

Todas estas tecnologas operan en la banda de 2.4 GHz. Para el desarrollo de estas
tecnologas en el mercado competitivo e innovador de los dispositivos inalmbricos, es
crucial la coexistencia pacfica de las tecnologas que permitan a cada usuario cumplir con
los objetivos de la comunicacin.

En este apartado hacemos una evaluacin de la coexistencia entre WiFi y Zigbee.


En la figura 19 se ve como Zigbee (estndar IEEE 802.15.4), WiFi (estndar 802.11b) y
Bluetooth se solapan.

El estndar IEEE 802.15.4 divide la banda de 2.4 GHz en 16 canales de 2 MHz de


ancho y 5 MHz de separacin, tal como se muestra en la figura 18:

Figura 17. Espectro de 2.4 GHz del estndar IEEE 802.15.4

Por otro lado, Bluetooth usa 79 canales de 1 MHz cada uno, de forma que tampoco hay
solapamiento entre sus canales y la seal que modulan en cada uno de ellos.

Figura 18. Coexistencia entre WiFi y Zigbee.

23
Una va para evitar interferencias puede ser la de seleccionar canales que no se
superpongan. En concreto, los canales 15, 16, 21 y 22 del estndar IEEE 802.15.4 no se
superponen con los canales 1, 7 y 13 del estndar 802.11b. Por lo tanto, es en estos canales
dnde tendramos 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 vaya
creciendo con el tiempo.

Zig-bee tiene muchos puntos a su favor como estndar gestionado diseado para
ofrecer robustas caractersticas de seguridad, permitir muchos nodos, y soportar
interoperabilidad e independencia de los distribuidores. Tambin incorpora caractersticas
que permiten un rendimiento sobresaliente con un consumo de energa relativamente bajo.

Un ejemplo de las aplicaciones con las que puede tener futuro Zigbee puede ser la
aplicacin que hizo la empresa JPM ingenieros de La Rioja, que desarroll un sistema para
mantener el control de los viedos mediante redes de sensores Zigbee. Este sistema tiene
un coste de implantacin muy bajo comparado con la instalacin de una estacin
meteorolgica tradicional, que necesita una gran inversin. La hace especialmente
adecuada para agricultores con pequeas extensiones de terreno o para aquellos que las
tienen separadas entre s.

Como puntos negativos, sin embargo, podemos decir citar por ejemplo la no
interoperabilidad entre fabricantes, lo que va a dificultar mucho una implementacin del
estndar a gran escala. Adems, aunque el protocolo fue lanzado hace ya unos aos,
todava no ha tenido el auge que se le esperaba, y hoy en da la mayor parte del negocio
Zigbee se centra en kits de desarrollo para ingenieros de RF.

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

24
2.5 Introduccin a Arduino

La mayor parte de esta seccin es una recopilacin de la informacin disponible en la


pgina web del proyecto Arduino y de la entrada de la Wikipedia que hace referencia a
Arduino, la otra parte pertenece a la siguiente referencia[6].

2.5.1 Qu es Arduino?

Arduino es una plataforma de electrnica abierta para la creacin de prototipos


basada en software y hardware flexibles y fciles de usar. Se cre para artistas, diseadores,
aficionados y cualquiera interesado en crear entornos u objetos interactivos.(Pgina
principal 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 varios


puertos de entrada/salida, tanto digitales como analgicos, as como salidas PWM y de
comunicaciones, para el control de objetos fsicos (LEDs, servos, botones, etc.).

Los micro-controladores ms usados son el ATmega328 y el ATmega168 para las


placas bsicas, el ATmega1280 para la de mayor capacidad y el ATmega8 para las placas
ms antiguas. Todos estos micro-controladores incluyen un cargador de arranque
(bootloader) de manera que sea lo ms simple posible empezar a trabajar con ellos.

El micro-controlador en la placa Arduino se programa mediante el lenguaje de


programacin 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 los


principios y metodologas del software libre y de cdigo abierto.

Algunos de los principios que se pretenden promover para considerar productos


fsicos como open hardware son los siguientes:

Publicar la documentacin, incluyendo los archivos de los diseos mismos, que


debe permitir su modificacin y distribucin.
Especificar que porcin del diseo es abierta en caso de que no se liberen todos
sus componentes.
Ofrecer el software para el visionado de los archivos de diseo y de la
documentacin, para que se pueda escribir el cdigo open-source fcilmente.
Ofrecer una licencia que permita producir derivados y modificaciones, adems de
su re-distribucin bajo la licencia original, as como su venta y manufactura.
La licencia no debe restringir que se venda o comparta la documentacin
necesaria. No pide una tarifa por su venta o la de sus derivados.
La licencia no debe discriminar a ningn grupo o persona.

25
La licencia no debe de restringir a ningn campo o actividad el uso de la obra. Es
decir, no se puede limitar su uso nicamente para negocios o prohibir sea utilizado
para investigacin 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 puede
insistir en que otros componentes de hardware o software externos a los
dispositivos sean tambin open-source.
La licencia tiene que ser neutral, ninguna disposicin de la misma debe de basarse
en una tecnologa especfica, parte o componente, material o interfaz para su uso.
Cumpliendo con estas premisas, los diseos y esquemas de Arduino se distribuyen
bajo licencia Creative Commons Attribution-ShareAlike 2.5[5].

Al seguir este tipo de licencias, donde toda la informacin es pblica, todas las
placas pueden ser construidas por uno mismo o bien comprarlas ya montadas. El software
puede ser descargado de forma gratuita. Los ficheros de diseo de referencia (CAD), al
estar disponibles bajo una licencia abierta, pueden ser libremente adaptados a las
necesidades particulares.

2.5.3 Por qu Arduino?

Hay distintas soluciones comerciales que facilitan el trabajo de programar un


micro-controlador y poder interactuar con ellos, como podran ser Parallax Basic Stamp[6],
BX-24 de Netmedia[7], Phidgets[8] o Handyboard del MIT[9] por citar algunos.
Arduino, adems de simplificar este proceso intenta ofrecer otras ventajas:

Asequible - Las placas Arduino son ms asequibles comparadas con otras


plataformas de micro-controladores. La versin ms cara de un mdulo de Arduino puede
ser montada a mano, e incluso ya montada cuesta bastante menos de 60 .

Multi-Plataforma - El software de Arduino funciona en los sistemas operativos


Windows, Macintosh OSX y Linux. La mayora de los entornos para micro-controladores
estn limitados a Windows.

Entorno de programacin simple y directo - El entorno de programacin de


Arduino es fcil de usar para principiantes y lo suficientemente flexible para los usuarios
avanzados.

Software ampliable y de cdigo abierto - El software Arduino est publicado


bajo una licencia libre, y preparado para ser ampliado por programadores experimentados.
El lenguaje puede ampliarse a travs de libreras de C++, y si se est interesado en
profundizar en los detalles tcnicos, se puede dar el salto a la programacin en el lenguaje
C en el que est basado. De igual modo se puede aadir directamente cdigo en C en los
programas.

Hardware ampliable y de Cdigo abierto - Arduino est basado en los


micro-controladores ATMEGA168, ATMEGA328 y ATMEGA1280. Los planos de los
mdulos estn publicados bajo licencia Creative Commons, por lo que diseadores de
circuitos con experiencia pueden hacer su propia versin del mdulo, amplindolo u

26
optimizndolo. Incluso usuarios relativamente inexpertos pueden construir la versin para
placa de desarrollo para entender cmo 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, alojado


en 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 Arduino


que pueden ser totalmente compatibles con este, o que han sufrido ligeras modificaciones,
ya sea para hacerlas especficas para ciertos trabajos o bien para reducir su coste.

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

Algunos de estos freeduinos seran 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 da de hoy son [12]:

Arduino UNO.
Es una placa Arduino que se conecta al PC a travs de un cable USB estndar.

27
A travs de esta conexin la alimentacin y, adems, permite programarla y
utilizarla.
Arduino UNO es la ltima revisin de este tipo de placas que se conectan al
USB. Entre las mltiples revisiones que se han hecho encontraramos la
Duemilanove, Diecimila, NG (Nuova Generazione) o Extreme.

Arduino Mega
Es una placa Arduino similar a la USB, pero ms grande y potente. La ltima
revisin posee el chip ATmega2560. Tiene mayor nmero de pines de entradas y
salidas digitales, ms pines PWM, entradas analgicas, etc.

Arduino Mega ADK


El Arduino ADK es una placa similar al Arduino Mega, pero con una interface
USB para conectar con telfonos basados en Android.

Arduino Pro
Es una placa similar al Arduino UNO, pero diseada con la intencin de
instalaciones semipermanentes. La placa se entrega sin los distintos conectores o
headers, es compatible con las distintas extensiones de Arduino, y existe una
versin de 3.3V para ser alimentado con bateras.

Arduino Ethernet
Similar al Arduino UNO, sin soporte USB, pero con un conector RJ-45 para dar
soporte Ethernet. Existe la posibilidad de tomar la alimentacin de la propia
Ethernet.

Arduino Fio
Un Arduino orientado para usarlo como nodo inalmbrico. Posee conectores para
un mdulo Xbee (mdulo inalmbrico)[13], un conector para una batera
LiPo (Polmeros de litio), y un circuito para cargar la batera.

Arduino LilyPad
Una placa Arduino circular, reducida al mximo, diseada para ser cosida a la ropa
o a otro tipo de soporte flexible. Necesita un adaptador adicional para comunicarse
con el PC.

Arduino BT
El Arduino BT contiene un mdulo bluetooth integrado para las comunicaciones
mviles.

Arduino Nano
El Arduino Nano es un todo-en-uno, diseo compacto para usar en una placa de
prototipo.

Arduino Serial

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

Arduino Mini
El Arduino Mini es la placa compacta de Arduino. Para reducir espacio, la
comunicacin con el PC se hace a travs de un adaptador de USB a Arduino
Mini.

Arduino Pro Mini


Igual que el Arduino Mini, pero sin los headers ni lo conectores montados, con la
intencin de tenerlo en instalaciones semipermanentes o permanentes.
Arduino Single-Sided Serial
Tambin conocido como "Severino". Esta es la versin de la placa Arduino de una
sola cara, hacindola fcil de hacer a mano. No fue manufacturada, sino que fue
publicada en la web de Arduino para que la gente se la pudiese hacer ellos mismos
a modo de aprendizaje de todo el proceso de grabacin de PCB.

El objetivo de Arduino y sus placas es ofrecer a la gente la posibilidad de seguir la


filosofa 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 amplan una nueva
funcin para que sea controlada desde Arduino, para controlar diferentes aparatos, adquirir
datos, etc.

Figura 21. Arduino con tres "shields"

A continuacin se citan las shields oficiales de Arduino, pero existe multitud de


shields de terceros.

Arduino Ethernet Shield


Esta shield permite a una placa Arduino conectarse a una red Ethernet y tener acceso a y
desde Internet.

Arduino Wireless Proto Shield

29
Esta shield le da a una placa Arduino la posibilidad de comunicarse de manera inalmbrica
basndose en los mdulos Xbee[13], y ofrece al usuario una pequea rea para soldar
componentes (prototipage).

Arduino Wireless SD Shield


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

Arduino Motor Shield


Esta shield permite a Arduino controlar motores elctricos de corriente continua, servos y
motores paso a paso, y leer encoders.

Arduino Proto Shield


Esta 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 pgina web http://shieldlist.org/ intenta mantener una lista de
todas las shields de Arduino, tanto las oficiales como las no oficiales.

A parte de las shields existe un buen nmero de plataformas que estn listas para
ser controladas por una placa Arduino. Entre estas plataformas, quizs una de las ms
vistosas seria:

RobotShop Rover
Es una pequea plataforma mvil diseada entorno a Arduino. Los usuarios pueden
personalizar su mvil aadiendo funcionalidad.

Figura 22. RobotShop Rover

2.6.4 Construir nuestro propio Arduino

Al ser OSHW puede montarse los distintos mdulos uno mismo. La placa Arduino
Single-Sided Serial (cara simple y mono capa) o Severino ha sido diseada para que sea
especialmente fcil de grabar el PCB y montar los distintos componentes.

30
Figura 23. Arduino Single-Sided Serial o Severino

Se puede encontrar una extensa documentacin, incluyendo un detallado manual,


en la pgina web oficial [21].

2.6.5 Cmo obtener una placa Arduino?

Se puede adquirir una placa Arduino desde uno de los distribuidores oficiales, o a
travs de mltiples tiendas online de electrnica.

En la pgina principal de Arduino se puede encontrar una extensa lista de


distribuidores en funcin del pas o regin.

Despus de evaluar la mayora de ellos por variedad, disponibilidad, precio y gastos


de envo, me inclino por recomendar las siguientes:

Tienda BricoGeek.com [24]


ELECTAN Electrnica y Robtica [25]

2.6.6 Eleccin de placa Arduino: El Arduino UNO

2.6.6.1 El porqu de la eleccin

Uno de los principales objetivos de este proyecto es evaluar las capacidades de


Arduino a travs de la realizacin de un pequeo proyecto.

Para lograr este objetivo se deba trabajar con un mdulo real, pero no era el caso
de estudio el montaje ni la depuracin de los posibles errores del hardware, con lo que se
opt por la compra de mdulo ya montado.
Como punto de partida, teniendo en cuenta que no necesitbamos gran cantidad de
entradas y salidas, se decidi usar una placa Arduino que tuviera todo lo necesario para
empezar a trabajar al coste ms acotado posible. La actual revisin que mejor encaja con
estas caractersticas es el Arduino UNO.

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

2.6.6.2 Caractersticas

La descripcin completa del Arduino UNO se puede encontrar en su pgina web


oficial. Este es un resumen de las principales caractersticas:

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 analgica 6
Intensidad mxima 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 de
arranque (boot loader)
SRAM 2 KB (ATmega328)
EEPROM 1 KB (ATmega328)
Velocidad de reloj 16 Mhz

El Arduino UNO puede ser alimentado va la conexin USB o con una fuente de
alimentacin externa. El origen de la alimentacin se selecciona automticamente.

Adems, algunos de los pines tienen funciones especializadas:


Serie: Pin 0 (RX) y 1 (TX). Usados para recibir (RX) y transmitir (TX) datos a
travs de puerto serie TTL. Estos pines estn conectados a los pines
correspondientes del chip de FTDI responsable de la conversin USB-to-
TTL.

Interrupciones Externas: Pin 2 y 3. Estos pines se pueden configurar para que


interrumpan la ejecucin del programa al detectar un flanco o un nivel.

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

32
modulation, modulacin por ancho de pulsos) con temporizadores de 8 bits de
resolucin.

SPI: Pin 10 (CS/SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estos pines proporcionan


comunicacin 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 tiene
un valor LOW(0V) el LED se apaga.

6 entradas analgicas, cada una de ellas proporciona una resolucin de 10bits


(1024 valores). Por defecto se mide de tierra a 5 voltios, aunque es posible cambiar
la 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 analgicas.

Reset. Si en este pin se suministra un valor bajo (0V) se reinicia el


microcontrolador.
El ATmega328 en las placas Arduino UNO viene precargado con un gestor de
arranque (boot loader) que permite cargar nuevo cdigo sin necesidad de un
programador por hardware externo. La carga de un nuevo cdigo se realiza a travs
del entorno de desarrollo Arduino y la conexin serie/USB.
Tambin es posible saltar el gestor de arranque y programar directamente el
microcontrolador a travs del puerto ICSP (In Circuit Serial Programming). En tal
caso, se debe utilizar un programador externo.

2.6.6.3 Esquema y pines

Los esquemas completos del Arduino UNO se pueden encontrar en su pgina web oficial.
En la siguiente imagen se puede ver la correspondencia de pines entre el
ATmega168/328 y Arduino.

33
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. Vamos
a describir brevemente este proceso en un entorno Windows.

Existe gran cantidad de guas acerca de cmo realizar este proceso, incluyendo una
explicacin en la propia pgina del proyecto Arduino[22].

Debo indicar que este proyecto se ha realizado con la versin 1.0 del entorno de
programacin Arduino. Esta es la primera versin no Alfa del entorno Arduino, y
presenta grandes cambios en comparacin de las anteriores. La mayora de cambios son a
nivel esttico (distribucin de iconos en las barra de herramientas, esquema de colores,),
pero hay un gran cambio a nivel funcional, los ficheros Arduino han pasado de tener
extensin .pde a extensin .ino

Estos ltimos cambios implican que la mayor parte de la documentacin que se


encuentra en internet a da de hoy es incorrecta o desfasada con la revisin actual del
entorno software de Arduino.

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

La descarga:
Descargamos la ltima versin del software Arduino de la pgina 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 asegurndonos que
mantenemos la estructura de subcarpetas.

Los controladores (drivers):


Seguiremos instalando los drivers de nuestro Arduino. Para realizar este
paso necesitaremos conectar el Arduino a nuestro PC, simplemente con un cable
USB tipo A-B (el comnmente usado por las impresoras).

Los drivers necesarios para utilizar la placa Arduino junto con su entorno se
encuentran en la subcarpeta \drivers del paquete que acabamos de extraer. Una vez
conectemos nuestra placa Arduino en nuestro PC, deberemos indicarle a
Windows que debe buscarlos en esta carpeta.

Dependiendo de la versin de Windows usada, y de la variante de la placa


Arduino, 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:

34
Figura 27. Arduino en el administrador de dispositivos de Windows

En este caso, nos dirigiremos al dispositivo desconocido, el Arduino Uno.


Con el botn derecho actualizaremos el software del controlador indicndole la ruta donde
hemos extrado el software de Arduino\drivers. Deberemos aceptar la advertencia de que
este software no est firmado por Microsoft.

Una vez finalizado este proceso, deberamos ver un nuevo puerto de


comunicaciones, en nuestro caso el COM3, que ser nuestro Arduino, ya que este driver se
comporta como un puerto serie en el PC, con lo que nos aade uno nuevo sobre el ltimo.

El IDE (Integrated Development Environment o "entorno de desarrollo


integrado"):

Ya tenemos nuestro PC y nuestra placa Arduino listos para trabajar.


En la raz de la carpeta donde hemos extrado el software Arduino deberamos
encontrar 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 debera ver algo como esto:

35
Figura 28. Entorno SW de Arduino

Antes que nada debemos saber que un sketch, o boceto, es el nombre que usa
Arduino para un programa. Es la unidad de cdigo que se sube y se ejecuta en la placa
Arduino. El concepto de sketch o boceto, sera el equivalente a proyecto.

Un sketch puede contener mltiples archivos (pestaas). Cuando un sketch es


compilado, todas las pestaas sern concatenadas juntas para formar el archivo principal
del sketch.

Arduino puede utilizar libreras y cdigo C/C++. Las pestaas .c o .cpp se


compilaran por separado y debern ser incluidas en el sketch usando #include.

Es importante configurar correctamente la placa Arduino que vamos a utilizar, y a


travs de qu puerto de comunicaciones estar conectada. Para tal efecto, debemos ir al
men Tools escoger el submen Board e indicar la placa que usaremos, en nuestro
caso Arduino Uno. En el mismo men Tools, submen Serial Port, seleccionaremos
el puerto correspondiente, en nuestro caso COM3.

La barra de herramientas nos proporciona un acceso rpido a las siguientes


funciones:

36
2.7.2 Descargar y ejecutar un ejemplo de aplicacin Arduino

Tenemos conectado la placa Arduino en nuestro PC. Hemos instalado los drivers y
ejecutado el IDE de Arduino. Conocemos los conceptos bsicos acerca de los bocetos de
Arduino. 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 bien


directamente, el icono Open ) y dentro de 1.Basics seleccionaremos el boceto
(sketch) Blink.

37
Figura 29. Acceso a los ejemplos a travs del men

Figura 30. Acceso a los ejemplos a travs de la barra de herramientas

Esto nos abrir una nueva ventana con el cdigo de este boceto, el objetivo del cual
no es ms que encender y apagar el LED de test, montado en la placa Arduino, cada
segundo (secuencia infinita de un segundo encendido, un segundo apagando. Blink).

38
Figura 31. Ejemplo de cdigo Arduino

2.7.2.2 Compilador

Como se puede observar en la Ilustracin 13: Ejemplo de cdigo Arduino, el


cdigo necesario para realizar tal accin es bastante simple. Ahora solo falta comprobar
que realmente es correcto.

Para tal cosa, simplemente pulsando sobre el icono Verify , el IDE de Arduino va
a verificar y compilar el cdigo escrito en la ventana activa. El entorno Arduino siempre
compila el cdigo de las pestaas de la ventana activa como un nico boceto.

El resultado debera ser correcto y lo veremos en el rea de estado o de


notificaciones:

Aqu nos indica el estado del proceso, el tamao de memoria usada y la disponible
en la placa Arduino.

Figura 32. Resultado de verificacin correcto.

39
Si modificamos el cdigo del ejemplo para forzar un error en la fase de
verificacin/compilacin, nos encontraramos con esto:

Figura 32. Resultado de verificacin incorrecto.

Hemos remplazado la llamada a la funcin PinMode por PinModo, y hemos


eliminado el ; del final de la llamada a la funcin delay(1000).

Al compilar, el entorno Arduino nos advierte de estos errores en la zona de estado,


indicando los errores detectados, as como las lneas en que se encuentran.

2.7.2.3 Cargar y depurar

Si volvemos al cdigo original, y lo compilamos, ya solo nos falta un paso para


poder probarlo en nuestra placa Arduino: Cargar el cdigo.

Con la placa Arduino conectada al PC a travs del puerto USB, y teniendo


configurado correctamente en el entorno nuestra placa Arduino y el puerto de
comunicaciones, pulsaremos sobre el icono Upload.

En breves instante, la barra de estado se completar y nos indicar que el proceso


ha finalizado. En ese momento, el entorno genera un reset a la placa Arduino, y el
cdigo empieza a ejecutarse. En nuestro caso, veremos como el LED de test montado en la
placa Arduino empieza a encenderse y apagarse cada segundo.

Para poder depurar el cdigo, y as ver en qu punto de la ejecucin se encuentra,


Arduino nos brinda un gran herramienta: el monitor serie. El monitor serie sirve para que
nos podamos comunicar entre el PC y nuestra placa Arduino. Las posibilidades de este
pueden ser enormes, pero de momento lo usaremos de la forma ms simple posible.

Modificaremos el cdigo del ejemplo de Blink aadiendo unas llamadas al


monitor serie, de manera que durante la ejecucin podremos ver en el PC qu punto del
cdigo se est ejecutando en la placa Arduino.

Cdigo Blink original Cdigo Blink con depuracin a travs del monitor serie.

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

40
}
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 cdigo 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 funcin correspondiente.

Figura 33. Monitor de comunicacin serie integrado en el entorno Arduino

2.7.2.4 Compilar con Atmel AVRISP mkII

Figura 34. Compilador Atmel AVRISP mkII conectado a Arduino

41
Esta herramienta se utiliza para las actualizaciones de los microcontroladores Atmel
8 bits AVR, con interfaz ISP o PDI. Utilizando el software incluido AVR Studio , los
diseadores pueden programar dispositivos megaAVR utilizando la interfaz del proveedor
de Internet, los dispositivos tinyAVR utilizando la interfaz de TPI y dispositivos XMEGA
AVR utilizando la interfaz de PDI y tiny AVR. La ayuda en lnea de AVR Studio contiene
la informacin ms 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 mdulo End Device,
utilizando el siguiente conector, y conectando los pines al micro anteriormente citado:

Figura 35. Conector donde acoplaremos compilador AVRISP mkII.

A continuacin vemos como se clasifica cada pin del conector para programacin:

Figura 36. Pines de conexin en conector ISP 6 pin.

42
Antes de cargar el software, debemos seleccionar el compilador utilizado en Tools, como
vemos seguidamente, a la vez que hay que seleccionar Cargar usando programador en el
momento de compilar:

Figura 37. Entorno Arduino para seleccionador compilador.

2.8 Lenguaje de programacin Arduino

2.8.1 Introduccin e historia

La plataforma Arduino se programa mediante el uso de un lenguaje propio basado


en el lenguaje de programacin de alto nivel Processing[3], este a su vez est basado en
Java.
El compilador usado por la plataforma de Arduino es el GNU AVR, bajo Windows
es el WinAVR [27]. Este compilador est dedicado para los procesadores AVR y est
configurado para compilar C y C++. Las libreras del estndar C implementadas en este
compilador son avr-libc[15] y estn optimizadas para los procesadores AVR.

43
Adicionalmente Arduino tiene un gran conjunto de funciones ya implementadas
para realizar de un modo fcil tareas comunes como hacer una espera activa, leer un puerto
digital o escribir en l, entre muchas otras.

2.8.2 Funciones bsicas y operadores

Todo programa Arduino debe contener, de manera obligatoria, al menos dos


funciones bsica: setup() y loop().

La funcin setup() se ejecuta cuando se inicia un boceto (el programa o sketch). Se


emplea para iniciar variables, establecer el estado de las entradas y salidas, inicializar
libreras, etc. Esta funcin se ejecutar una nica vez despus de que se conecte la placa
Arduino a la fuente de alimentacin, o cuando se pulse el botn de reinicio de la placa.

Despus de ejecutar la funcin setup(), la funcin loop() se ejecuta de manera


consecutiva e ininterrumpida. Cuando se llega al final de esta funcin, se vuelve a ejecutar
desde el principio hasta que se vuelva a reiniciar la placa. En el interior de esta funcin es
donde se pone el cdigo para controlar de forma activa la placa Arduino.

Los siguientes subapartados tienen el objetivo de dar una visin rpida acerca del
lenguaje de programacin Arduino, pero no se pretende entrar en el detalle del lenguaje de
programacin. Para tal efecto hay multitud de manuales disponibles por la red, entre ellos y
por citar algunos:

Pgina de referencia del lenguaje del proyecto Arduino [28]


Seccin 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 muy
similares a ellos y entre ellos.

Sintaxis bsica
; (punto y coma. Delimitador de lnea de cdigo)
{} (llaves. Delimitador de bloques de cdigo)
// (comentarios en una lnea)
/* */ (comentarios en mltiples lneas)
#define (definicin de precompilador)
#include (inclusin de cdigo externo)

Estructuras de control
if (comparador si-entonces)
if...else (comparador si...si no)
for (bucle con contador)
switch case (comparador mltiple)
while (bucle por comparacin booleana)

44
do... while (bucle por comparacin booleana)
break (salida de bloque de cdigo)
continue (continuacin en bloque de cdigo)
return (devuelve valor a programa)
goto (salta a una etiqueta)

Operadores Aritmticos
= (asignacin)
+ (suma)
- (resta)
* (multiplicacin)
/ (divisin)
% (resto)
++ (incremento en uno)
-- (decremento en uno)
+= (suma y asignacin)
-= (resta y asignacin)
*= (multiplicacin y asignacin)
/= (divisin y asignacin)

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

Operadores Booleanos
&& (y)
|| (o)
! (negacin)

Operadores de acceso a punteros


* operador de indireccin
& 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 asignacin)
|= (or - 'o' a nivel de bits y asignacin)

45
2.8.2.2 Variables

Los tipos de los datos, su uso y declaracin, es muy similar a otros lenguajes de
programacin, como el C o Java.

Constantes
Las constantes que vienen predefinidas en el lenguaje de Arduino se usan para
facilitar 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 lgico)

Tipos de Datos
Las 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 (Carcter. Almacena un nico ASCII, tiene signo y ocupa 8 bits en memoria)
unsigned char (Carcter 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 que
consumen mucho tiempo de CPU, espacio de cdigo y pueden ocasionar problemas
en comparaciones, ya que por ejemplo 6.0 dividido por 3.0 puede no ser igual a 2.0
1)
double (En Arduino, es lo mismo que float)
array (Vector de elementos)
void (Vaco)
String (Des de la versin 0019 existe la clase String() que permite manipular
cadenas de caracteres de un modo sencillo, permitiendo concatenaciones o gestin
automtica del fin de cadena. Hasta ese momento el uso de string se limitaba a
vectores de caracteres sobre los cuales se deba tener en cuenta el final de cadena /0
para poder usarlo con funciones tipo print()).

1Se debe tener en cuenta que el uso de float se realiza a travs de libreras sw, y que adems la propia
codificacin IEEE-754 que usa el tipo float tiene limitaciones.

Conversin
Estas son una serie de funciones que permiten el cambio entre tipos.
char(x) Convierte el valor de tipo x a carcter.
byte(x) Convierte el valor de tipo x a byte.
int(x) Convierte el valor de tipo x a int.
46
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 programacin usado por Arduino, al igual que el C,


tienen una propiedad llamada mbito. Al contrario de lo que pasa en lenguajes como
BASIC en los que todas las variables son globales. En Arduino solo las declaradas fuera de
una funcin son globales. En el caso de declararse dentro de una seccin de cdigo
delimitada por llaves {}, como el caso de una funcin, la variable se libera al salir de
esta seccin y se vuelve a crear con el valor inicial al volver a entrar en esta seccin. Esto
se debe tener especialmente en cuenta al declarar variables dentro de la funcin loop().

static Esttica Las variables que se declaran como estticas slo se crearan e
inicializarn la primera vez que se ejecute el bloque de cdigo en el que estn
contenidas.

volatile Voltil Una variable debe ser declarada volatile siempre que su valor
pueda ser modificado por algo ms all de la seccin del cdigo en el que aparece.
En Arduino, el nico lugar en el que se podra dar el caso es en secciones de cdigo
asociadas a interrupciones.

const Constante Es un calificador de variable que modifica el comportamiento


de la misma, haciendo una variable de "slo-lectura". Sera equivalente a utilizar
#define.

2.8.2.3 Funciones

Aqu se muestran muchas funciones ya implementadas en el entorno Arduino para


simplificar la tarea de desarrollo para problemas comunes. Muchas de ellas estn limitadas
a ser usadas en pines concretos y pueden necesitar de argumentos que no se detallan en
este apartado. Para informacin adicional se puede consultar la pgina de referencia del
lenguaje del proyecto Arduino [28].

E/S Digital
pinMode(pin, modo) configura el pin a modo de entrada o salida
digitalWrite(pin, valor) - escritura digital
digitalRead(pin) devuelve una lectura digital

E/S Analgica
analogReference(tipo) configura el tipo de referencia analgica
analogRead(pin) devuelve una lectura analgica
analogWrite(pin, valor) escritura analgica. Generar una onda cuadrada con
el ciclo de trabajo que se le indique como parmetro (0-255 implica un ciclo de
trabajo de 0 a 100%). La frecuencia de la seal PWM ser de 490 Hz por diseo de
Arduino. Proporciona una manera simple de implementar un control de intensidad
luminosa sobre un LED.

47
E/S Avanzada
tone(pin, frecuencia) - Genera una onda cuadrada de la frecuencia en Hz
especificada. Opcionalmente se puede definir la duracin del tono en ms.
noTone(pin) Deja de generar el tono en el pin especificado
shiftOut(pinDatos, pinReloj, ordenBits, valor) - Desplaza un byte de datos bit a
bit a travs del SPI.
pulseIn(pin, value) - Devuelve la anchura de un pulso en microsegundos
empezando 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.

Clculo
min(x, y) Devuelve el mnimo de dos nmeros.
max(x, y) Devuelve el mximo de dos nmeros.
abs(x) - Devuelve el valor absoluto
constrain(x, a, b) Devuelve x siempre que este entre a y b. En caso contrario
devuelve los lmites 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 escala
de un valor de 0 a 1024 a un rango de 0 a 255.
pow(base, exponente) Devuelve el valor de un nmero elevado a otro nmero.
sqrt(x) Devuelve la raz cuadrada

Trigonometra
sin(rad) Devuelve el seno
cos(rad) - Devuelve el coseno
tan(rad) - Devuelve la tangente

Nmeros aleatorios
randomSeed(seed) Inicializa el generador de nmeros pseudoaleatorios.
Se puede usar como semilla una entrada mnimamente aleatoria como
analogRead() en un pin desconectado.
random() Devuelve un valor pseudoaleatorio.

Bits y Bytes
lowByte(x) Devuelve el byte de menor peso (big-endian, el de ms al derecha)
de una variable
highByte(x) - Devuelve el byte de mayor peso (big-endian, el de ms al izquierda)
de una variable
bitRead(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.
48
bitClear(x, n) Pone a 0 el bit n de x.
bit(n) Devuelve un byte con sus bits a cero a excepcin del bit n. Por ejemplo,
bit(0) devolvera un 1 en decimal, bit(1) un 2, bit(2) un 4 en decimal.

Interrupciones externas
attachInterrupt(inter, funcion, modo) Con el parmetro inter indicamos que ISR
externa vamos a configurar. Con el parmetro modo indicamos el motivo que la va
a disparar (CHANGE, LOW, RISING o FALLING) y con el parmetro funcin, la
funcin que va a ejecutarse al ser disparada.
detachInterrupt(inter) Desactiva la interrupcin inter

Interrupciones
interrupts() - Habilita las interrupciones
noInterrupts() - Desactiva las interrupciones

Comunicacin (estas dos son clases, con lo que no se pueden invocar directamente,
sino que se debe invocar el mtodo que necesitemos)

Serial

Stream

2.8.3 Uso de libreras

El propio entorno Arduino contiene una serie de libreras integradas que facilitan
enormemente las tareas ms comunes en el mundo del hobby electrnico.

Las Libreras proveen funcionalidad extra a nuestro sketch al trabajar con hardware
o al manipular datos. Para usar una librera dentro de un sketch, puedes seleccionarla desde
Sketch > Import Library (Importar Librera)[16].

2.8.3.1 Libreras Estndar

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 como


servidor (host) usando el protocolo Firmata.

LiquidCrystal - Para controlar Displays de cristal lquido (LCD)

Servo - Para controlar servomotores.

SoftwareSerial - Para la comunicacin seria utilizando cualquier pin digital.

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

49
Wire - Interfaz de dos cables, Two Wire Interface (TWI/I2C), para enviar y
recibir datos a travs de una red de dispositivos y sensores.

2.8.3.2 Libreras de terceros

Si se desean usar libreras que no vienen junto con Arduino, es necesario instalarlas.
Las libreras suelen entregarse en un fichero comprimido y suelen contener una carpeta
propia 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 debera encontrar dentro de la carpeta sketchbook de Arduino. Al
reiniciar el IDE de Arduino debera aparecer la nueva librera en el men Sketch > Import
Library.

Estas son algunas de las libreras que se pueden encontrar y que estn referenciadas
en la propia pgina web del proyecto Arduino [16]. Tambin se puede encontrar una lista
alternativa en la Wiki de Arduino [31].

Comunicacin (networking y protocolos):


Messenger - Para procesar mensajes de texto mandados des del PC.
NewSoftSerial - Versin mejorada de la librera SoftwareSerial.
OneWire - Controla dispositivos (de Dallas Semiconductor) que usan el protocolo
One Wire.
PS2Keyboard - Lee caracteres de un teclado PS2.
Simple Message System - Enva mensajes entre Arduino y la computadora.
SSerial2Mobile - Enva mensajes de texto o emails usando un telfono mvil
(va comandos AT a travs de SoftwareSerial)
Webduino - Librera de web server extensible (para usar con Arduino
Ethernet Shield)
X10 - Para enviar seales X10 a travs de lneas de corriente AC.
XBee - Para comunicaciones entre XBees en modo API.
SerialControl - Para controlar remotamente otras Arduino a travs de una
conexin serial.

Sensores:
Capacitive Sensing Implementa un sensor tctil capacitivo uniendo un pin de
escritura con una resistencia relativamente alta (100kOhm 50MOhm), una lamina
de metal o cable y un condensador pequeo (20 - 400 pF) a un pin de lectura,
detectando cambios en este al acercarse o tocar la lmina con el dedo.
Debounce - Para una lectura filtrada de entradas digitales con rebotes
(tpicamente las entradas conectadas a botones).
Displays y LEDs:
Improved LCD library - Arregla errores de inicializacin del LCD de la librera
LCD oficial de Arduino.
GLCD - Rutinas grficas para LCDs basados en el chipset KS0108 o equivalentes.

50
LedControl - Para controlar matrices de LEDs o displays de siete segmentos con
MAX7221 o MAX7219.
LedDisplay - Control para marquesina de LED HCMS-29xx.
Matrix - Librera para manipular displays de matrices de LED bsicas.
Sprite - Librera bsica para manipulacin de sprites para usar en animaciones con
matrices de LEDs.
Motores y PWM:
TLC5940 - Manejador para el chip TLC5940 de Texas Instruments
implementando el control de hasta 16 servomotores a la vez.

Medicin de Tiempo:
DateTime - Librera para llevar registro de fecha y hora actual en el software.
Metro - til para cronometrar acciones en intervalos regulares.
MsTimer2 - Utiliza la interrupcin del temporizador 2 para disparar una accin
cada N milisegundos.

Utilidades de cadenas de texto:


TextString, PString, Streaming Implementan mtodos de salida ms completos
para cadenas de texto.

Adicionalmente, muchos de los desarrolladores y distribuidores de shields generan


sus propias libreras para utilizar las shields, de modo que la cantidad de libreras
disponibles es enrome.

Adems, nosotros podemos crear nuestras propias libreras y utilizarlas para


nuestros proyectos e incluso distribuirlas.

A raz del cambio mayor de versin (de alfa a 1.0) en el entorno de programacin
Arduino, muchas de las libreras de terceros han quedado obsoletas/desactualizadas por la
inclusin de ficheros de encabezados (.h) que han sido renombrados en esta nueva versin,
entre ellos Wprogram.h ha sido renombrado a Arduino.h, con lo que nos obligar a
modificar el cdigo de estas libreras incluyendo el nuevo fichero.

51
Seccin 3: Memoria descriptiva

3.1 Hardware: Componentes de un sensor inalmbrico

Para la construccin de un sensor inalmbrico deberemos conectar nuestro sensor a


un mdulo Xbee, que a su vez deber tener una alimentacin.

Figura 38. Conexin Sensor y modulo Xbee.

3.1.1 Antenas y transceptores Zigbee

La eleccin de la antena para la implementacin del proyecto resulta clave. El


criterio que elijamos depende de mltiples factores tales como el precio, ya que no
podemos justificar pagar ms por mdulos que no ofrecen caractersticas ventajosas
respecto a otros ms baratos, pero tambin de la facilidad que ofrezcan al programar
porque nos facilitar enormemente el desarrollo del proyecto. Otro aspecto tambin puede
ser cun aceptados estn en el mercado.

Estos dos ltimos factores grado de aceptacin en el mercado y facilidad de


programacin-, los podemos verificar fcilmente discutiendo en foros de internet con
usuarios con experiencia.

En este apartado abordamos la eleccin de nuestra antena, evaluando algunos de los


mdulos Zigbee disponibles en el mercado en la actualidad.

Cirronet ZMN2405/HP: Este es un mdulo que ya ha sido utilizado en otros


proyectos 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 integracin
de un puerto USB. La principal desventaja es la dificultad que supone programar el
mdulo.

Figura 39. Mdulo ZMN2405-E.

Jennic: Este fabricante dispone de dos familias de mdulos, el JN5121 y el actual


JN5139. Comparado con otros mdulos, ofrecen ms perifricos y mayor sensibilidad.
En cuanto a los precios, el kit de programacin cuesta unos 580 dependiendo de dnde
compremos.

52
Xbee: La principal ventaja de este mdulo es el precio, que es el ms barato de
todos al no ser necesaria la compra de un kit de desarrollo-, adems tambin es el ms
extendido entre el pblico, lo que da la posibilidad de poder conseguir y compartir mucha
informacin con usuarios. Como desventajas, en cambio, no dispone de microcontrolador.

Tabla 4. Comparacin entre mdulos.

*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 ms
limitadas tcnicamente por no disponer de micro-controlador, son mucho econmicas al no
necesitar un kit de desarrollo para poderlas programar (el software para programarlas es
gratuito desde la pgina http://www.digi.com/es/. Adems hemos comprobado que en
Internet hay mucha bibliografa e informacin en foros, etc.

El inconveniente del Xbee PRO es el mayor consumo en transmisin, siendo de 295


mA, mientras que en los otros mdulos no pasa de 34 mA. El consumo en Tx depende de
la potencia de salida, siendo de -10 dB en mdulos de bajo consumo/corta distancia)

3.1.1.1 Mdulos Xbee

Los mdulos Xbee son fabricados por la empresa Digi, proporcionan conectividad
inalmbrica con otro dispositivo de la misma serie por un precio relativamente econmico
comparado con el de otros fabricantes.

Digi ofrece dos series diferentes, la serie 1 y la serie 2, tambin conocida como
Znet 2.5.

Los mdulos de la Serie 1 y la Serie 2 tienen el mismo pin-out, sin embargo no son
compatibles 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 redes
punto a punto y punto a multipunto. Los mdulos de la Serie 2 estn basados en el chipset

53
de Ember, y estn diseados para ser utilizados en aplicaciones que requieren repetidores o
una red mesh. Ambos mdulos pueden ser utilizados en los modos AT y API.

Con estos mdulos se pueden disear aplicaciones de comunicacin inalmbrica de


bajo consumo energtico, como las requeridas por el proyecto en el que nos embarcamos.

La figura 22 ilustra cmo fluyen los bits de datos a travs del mdulo Xbee.

Figura 40. Conexiones mnimas para conectar Xbee.

Los datos entran en el mdulo UART a travs de la patilla DIN (pin 3) como una
seal asncrona y se almacenan en un buffer. Lo mismo sucede cundo se quieren
transmitir datos por DOUT (pin 4).

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

Hay bsicamente 3 modos de operacin de Xbee: Transparente, Comandos y API.

3.1.1.1.1 Modo comando

Este modo permite ingresar comandos AT al mdulo Xbee, para configurar, ajustar
o modificar parmetros. Permite ajustar parmetros como la direccin propia o la de
destino, as como su modo de operacin entre otros aspectos. Para poder ingresar los
comandos AT es necesario utilizar el Hyperterminal de Windows, el programa XCTU o
algn micro-controlador que maneje UART y tenga los comandos guardados en memoria o
los adquiera de alguna otra forma.

54
Figura 42. Ejemplo de comando AT.

3.1.1.1.2 Modo Transparente

Este modo est destinado principalmente a la comunicacin punto a punto, donde


no es necesario ningn punto de control. Tambin se usa para reemplazar alguna conexin
serie por cable, ya que es la configuracin ms sencilla posible y no requiere una mayor
configuracin. Esta es la conexin que viene por defecto y es la ms sencilla forma de
configurar el mdem. Bsicamente todo lo que pasa por el puerto UART (DIN, pin 3), es
enviado al mdulo deseado, y lo que llega al mdulo, es enviado de vuelta por el mismo
puerto UART (DOUT, pin 2). Existen bsicamente 4 tipos de conexin transparente. La
diferencia principal radica en el nmero de nodos o puntos de acceso, y la forma en cmo
stos interactan entre s.

3.1.1.1.3 Modo de operacin API

Este modo es ms complejo, pero permite el uso de tramas con cabeceras que
aseguran la entrega de los datos, al estilo TCP. Extiende el nivel en el cual la aplicacin del
cliente, puede interactuar con las capacidades de red del mdulo.
Cuando el mdulo Xbee se encuentra en este modo, toda la informacin que entra y sale,
es empaquetada en tramas, que definen operaciones y eventos dentro del mdulo.

As, una trama de Transmisin de Informacin (informacin recibida por el pin 3 o


DIN) incluye:
- Trama de informacin RF transmitida.
- Trama de comandos (equivalente a comandos AT).
Mientras que una trama de Recepcin de Informacin incluye:
- Trama de informacin RF recibida.
- Comando de respuesta.
- Notificaciones de eventos como Reset, Associate, Disassociate, etc.
Entre las opciones que permite la API, se tienen:
- Transmitir informacin a mltiples destinatarios, sin entrar al modo de
Comandos.
- Recibir estado de xito/falla de cada paquete RF transmitido.
- Identificar la direccin de origen de cada paquete recibido.
Trama API:

55
Figura 43. Ejemplo de comando AT.

El primer byte 0x7E indica el comienzo de la trama. Los dos bytes siguientes
indican solamente la longitud de la trama de Datos (Data Frame) (es decir, toda la trama
sin contar ni el byte 0x7E, ni el largo-Length, ni el byte Checksum). La estructura API que
viene despus se compone segn vemos en la figura 26:

Figura 44.Trama Xbee.

Se ha visto que los mdulos Xbee pueden ser configurados de dos formas diferentes
adems del modo comando, que son el modo transparente AT y el modo API. En el modo
AT slo nos permite la comunicacin punto a punto entre dos Xbees.
En el modo API, podemos enviar y recibir desde el Coordinador o cualquier
elemento de red, la informacin que viene en cada trama es mucho ms detallada.
El modo API a la prctica nos permite tener ms control de la red, ya que por ejemplo si la
comunicacin falla obtendremos un cdigo de error.

Entre las opciones que permite API se tienen:


- Transmitir informacin a mltiples destinatarios, sin entrar al modo de
Comandos.
- Recibir estado de xito/falla de cada paquete RF transmitido.
- Identificar la direccin de origen de cada paquete recibido.

3.1.1.2 Datos E/S

3.1.1.2.1 Conversores A/D

Para muestrear seales los mdulos Xbee estn equipados con conversores A/ D de
10 bits.

Otra caracterstica importante es el tiempo de muestreo que se puede modificar con


el comando IR y las unidades en ms. Por ejemplo para pedir un tiempo de muestreo de 10
ms programaremos ATIR= 0x0A. Otra caracterstica importante es el nmero de muestras
que queremos tomar antes de enviar datos Esto se puede cambiar con el comando AT,
teniendo en cuenta que podemos almacenar un mximo de 93 bytes y que cada muestra

56
ocupa 2 bytes, podremos llegar a tomar 43 muestras antes de enviar. El mximo tiempo de
muestreo 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 nmero
de muestras que son mandadas. Los ltimos 2 bytes de la trama definen qu entradas estn
activas, ya que cada bit representa cada IO y ADC.

Figura 45. I/O Data

Un ejemplo de trama que hemos obtenido durante el proyecto sera:


7E 00 14 92 00 13 A2 00 40 6C 52 65 7C D0 01 01 00 00 81 01 BD 09 58 67
0x7E: Inicio de la trama.
0x00: Numero de bytes (MSB entre la longitud y el checksum)
0x14: Numero de bytes (LSB)
0x92: tipo de trama IO
0x00-0x65: Direccin 64-bits del remitente.
0x7C-0xD0: Direccin 16-bits del remitente.
0x01: Modo recepcin activado. (Se aceptan paquetes)
0x01: Numero de muestras (en este caso una)
0x00-0x00: Mscara del canal digital
0x81: Mscara de canal analgico.
0x01-0xBD: Muestras analgicas
0x09-0x58: Muestra Vss
0x67: checksum
Por lo tanto tenemos un valor de tensin (0x0958): 2.8V. La frmula para obtener los
valores analgicos de la trama se puede obtener de la siguiente forma:

Muestra_AD
Valor= 1024
1200 mV (4)

3.1.1.3 Eleccin de la antena Xbee

Se comenzaron a hacer las pruebas iniciales con una antena o mdulo XBee de
1mW de potencia, serie 1, con conector a antena por U.fl, ya que era la disponible en la
empresa y, adems la ms econmica, su precio oscila los 17 .

Una vez comprobado que la combinacin Arduino-Xbee-sensor daban buenos


resultados, y stos se ajustaban a las exigencias presentadas, procedimos a las pruebas de
distancia en la transmisin-recepcin de datos sin hilos, donde se vio que tendramos que
recurrir a una antena de mayor alcance. Se saba que haba un modelo superior a ste y,

57
evidentemente, de mayor coste, el XBee Pro (su precio oscila los 28 ), con el cual
comparamos a continuacin:

Tabla 5. Comparativa de prestaciones entre Xbee.

En la tabla 6 vemos las prestaciones que ofrecen ambos mdulos. Las Xbee Pro ganan en
cuanto al alcance en la transmisin al tener una potencia de salida bastante mayor. En
cuanto a velocidades de transmisin, ambas son semejantes a 250 kbps.

Por otro lado, por lo que se refiere a las caractersticas tcnicas, podemos ver como
las Xbee Pro tienen como desventaja, su mayor consumo (295 mA en la transmisin de
datos de las Xbee Pro frente a unos 45 mA en las Xbee, y 55 mA en la recepcin para las
Xbee Pro frente a 50 mA en las Xbee), esto hace que el tiempo de vida de las bateras en
las Xbee Pro sea mucho menor.

58
Los factores de programacin de cada antena no condicionan la eleccin, ya que
ambas se programan exactamente igual desde X-CTU. Tampoco es un problema el
disponer tanto de las libreras como de la interfaz grfica, ya que ambos modelos utilizan
las mismas.

Considerando que nuestra prioridad era un mayor alcance en el envo de datos, y no


nos bastaba con la primera, nos decantamos por las XBee 60mW U.FL Connection Series
1(802.15.4), siendo ms complicada la eleccin de una batera adecuada.

3.1.2 Arduino Uno

La placa Arduino Uno la utilizaremos para conectar con el mdulo Xbee End
Device y el
Sensor ultrasnico, gracias a las placas adaptadoras de Libelium que veremos a
continuacin, y as poder enviar el volumen de llenado del contenedor por RF. Esto
permitir tener otro Cordinador como receptor en una caja de comunicaciones, y poder
controlar desde un PC el estado de los contenedores.

En este apartado hacemos un breve resumen de la placa que, en realidad, tiene ms


aplicaciones que las utilizadas en este proyecto.

Arduino Uno es una placa basada en micro-controlador ATMEL AVR ATmega


328, con varias entradas y salidas tanto digitales como analgicas y con conexin USB.
Adems dispone de un entorno de desarrollo propio. Est pensada para fomentar y facilitar
el uso de la electrnica para el pblico en general, desde escuelas hasta aficionados a la
electrnica.
La placa puede comunicarse con el PC bien mediante su propio entorno, bien utilizando
otros tales como Processing o Macromedia Flash.

El lenguaje de programacin del micro-controlador est basado en C / C++, por lo


que posee funciones de E/S analgica y digital, funciones aritmticas, manejo de
interrupciones, comunicaciones por el puerto serie, etc. Las variables pueden ser, como en
C, tipo int, char, word, long o float. Las instrucciones de control tambin 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 puede


ser usada libremente para cualquier proyecto sin tener que pagar licencia para ello.
Las caractersticas bsicas de la placa son:

Parmetro Dato
Voltaje operativo 5V
Voltaje de entrada recomendado 7-12 V
Voltaje de entrada lmite 6-20 V
Pines de entrada y salida digital 14 (6 proporcionan PWM)
Pines de entrada analgica 6
Intensidad de corriente 40 mA
Memoria Flash 32KB (2KB reservados para el bootloader)

59
SRAM 2 KB
EEPROM 1 KB
Frecuencia de reloj 16 MHz

Tabla 6. Caractersticas tcnicas de Arduino.

En la figura 28 vemos el esquemtico del Hardware del equipo:

Microcontrolador Botn de Reset

Port B digital Port D digital

Port C analog Conector de potencia

Figura 46. Esquema Hardware de la placa Arduino Uno.

Las caractersticas tcnicas de la placa son:

Microcontrolador
Atmel ATmega328P
8-bit AVR CPU
RISC instruction set (assembly)
32KB of program memory
20 MHz max. freq. (Usually 16 MHz) Peripherals voltages ranging from 0V-3.3V
Timers, Counters, Watch dog
6 PWM channels
Serial USART Digital
SPI/I2C communication
Analog-to-Digital Converter (ADC)

Port B Port D
6 usable pins 8 usable pins

60
Digital Port -> only binary 3 can be PWM 3 can be PWM
Digital
Port C
6 usable pins
Analog Port -> can write/read
voltages ranging from 0V-3.3V

3.1.2.1 Conexin con modulo Xbee

Figura 47. Conexin Arduino con Xbee Pro

3.1.3 Sensor de ultrasonidos

La mayora de los sensores de ultrasonido que podemos encontrarnos en el mercado


tienen la funcin de detectar un objeto a la distancia a travs de un sistema de onda
sonora en la cual se mide el tiempo que transcurre la emisin de dicho sonido y la
percepcin del eco correspondiente la cual es la que determina la distancia a la cual se
encuentra un intruso.

Uno de los mejores ejemplos que podemos citar para que podamos entender en una
forma ms clara el funcionamiento de los sensores de ultrasonido es el vuelo de los
murcilagos, ya que despus de todo, el sistema est inspirado en estos pequeos
mamferos. Como ya sabemos todos, los murcilagos son ciegos por ello deben desplazarse
a travs del eco de sus sonidos; de esta manera debemos decir que el murcilago, para
detectar el lugar en el cual se encuentra un obstculo y no chocar contra l, emite una serie
de sonidos cuyo eco rebota en dicho obstculo y de esta manera, al recibir el eco, lo
detectan y pueden esquivarlo.

El sensor con el que trabajaremos es un medidor de distancias de bajo costo por


ultrasonidos, donde la deteccin del objeto se consigue midiendo el tiempo que tarda en
rebotar un haz de ultrasonidos sobre la superficie de un objeto.

Uno de los enemigos que tiene este sistema de sensores de ultrasonido es el falso
eco, el cual se produce, cuando el objeto en donde el disparo se supone que tiene que
rebotar en forma de eco, cambia de lugar. Suele pasar en entornos metlicos tambin, que

61
se produzcan falsas medidas, hay que buscar la posicin ptima del sensor para que este
fenmeno no se produzca.

3.1.3.1 Requerimientos iniciales

La idea principal de nuestro proyecto es conocer el nivel de llenado de los


contenedores de basura ubicados en la calle, para lo que barajamos varias opciones con el
objetivo de poder ser lo ms exactos posible en la medida de ese nivel, y luego poder
informar a los camiones o a un centro de control.
Lo primero que haba que hacer es encontrar el sensor ms adecuado para nuestro
proyecto, entonces encontramos que haba una primera idea de cmo funcionara el
sistema 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 sensores


volumtricos mediante ultrasonidos (sensor ultrasnico) 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 deba encontrar la manera


ms exacta y eficiente para nuestra medida de nivel de llenado, ya fuera utilizando los dos
a la vez (cosa que supondra un mayor gasto econmico), o decidindose por uno de ellos.

Se analizaron las ventajas e inconvenientes y se decidi por empezar a probar, y


consecuentemente desarrollar, el sensor de ultrasonidos, ya que pensamos que nos podra
dar una lectura ms exacta, o menos errnea que el sensor infrarrojos, el cual al ir colocado
a los lados nos podra dar ms lecturas falsas.

62
3.1.3.2 Eleccin de los componentes

Para la realizacin de este proyecto, se ha partido de la placa Arduino UNO; la ms


bsica, pero no por ellos menos verstil, de las placas Arduino. Tambin disponemos en la
oficina de placas Arduino Duemilanove, las cules nos permiten extraer el micro-
controlador Atmel manualmente, y poder trabajar con l en una protoboard o placa de
pruebas.

Como ya disponamos de esta placa controladora, tenamos que implementarla con


el sensor, el cual decidimos que sera de ultrasonidos; vimos que haba ejemplos de uso
con Arduino, y nos decidimos a empezar a probar con los ms econmicos, el de un solo
cilindro(SRF02) y el de 2 cilindros(SRF05).

Por ltimo, una vez comprobado que el micro-controlador recibe las medidas
correctas del sensor ultrasonidos, falta conseguir que estas lecturas se enven de manera
inhalmbrica desde el sensor hacia un receptor colocado a una cierta distancia del
contenedor. La solucin ms cercana de la que se dispona son los mdulos Xbee de Digi,
que funcionan a una frecuencia de 2,4 GHz y pensamos que en relacin calidad-precio era
lo ms apropiado.

Empezamos con el Xbee Serie 1, para comprobar que se envan las medidas
correctamente, y as fue, pero vemos que al querer transmitir a ms distancia se nos queda
corto, por lo que acabamos utilizando un Xbee Pro S1 60mW, de mucha ms potencia que
el anterior, aunque tambin mayor consumo, cosa muy importante ya que la vida del sensor
depende de una batera, no va conectado a la red ni panel solar.

Una vez conseguido nuestro objetivo, tenemos que conseguir que el gasto del
proyecto sea el mnimo, a la vez que el tamao del prototipo, cosa que en el caso del sensor
y del Xbee no es posible, ya que son circuitos ya integrados y hay que acoplarlos as a
Arduino.

Por lo tanto, hay que escoger de todo el conjunto de la placa Arduino, nicamente
los componentes necesarios para que, conectados al sensor y a Xbee, nos funcione con la
misma eficiencia y exactitud que en un principio. La diferencia sera que, en vez de
gastarnos ms de 20 en una placa Arduino, nos gastemos 5 en los componentes
imprescindibles.

3.1.3.3 Descripcin del sensor elegido

Consiste en un medidor ultrasnico de distancias de bajo costo desarrollado por la


firma DEVANTECH Ltd. El mdulo SRF05 es una evolucin del mdulo SRF04 y est
diseado para aumentar la flexibilidad, aumentar el rango de medida y reducir costes. Es
totalmente compatible con el SRF04 y el rango de medida se incrementa de 3 a 4 metros.
Se muestra en la figura 1.

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

Dispone de un nuevo modo de operacin que se selecciona simplemente


conectando el pin Mode a GND. Dicho modo permite al SRF05 emplear un nico pin de
E/S que sirve tanto para dar la orden de inicio o disparo, como para obtener al medida
realizada (ECO).

Cuando el pin de Modo no se emplea y se deja sin conectar, el SRF05 trabaja de


la misma manera que el SRF04. Esto es, la seal de disparo y la salida de ECO se realizan
por pines diferentes.

El SRF05 incluye una pequea temporizacin tras el pulso ECO de salida, que
permite que controladores lentos como Basic Stamp y Picaxe puedan ejecutar sus
correspondientes instrucciones.

Modo 1, Compatibilidad con SRF04


Este modo emplea patillas separadas, una para aplicar el pulso de inicio o Trigger y
otra para leer la anchura del pulso del ECO medido. Todos los programas realizados para
el SRF04 deben funcionar perfectamente en este modo, que se selecciona simplemente
dejando 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 empleo
es muy sencillo. Externamente se aplica, por parte del usuario, un pulso de disparo o
trigger de 10 S de duracin mnima. Se inicia la secuencia. El mdulo transmite un tren
de pulsos o burst de 8 ciclos a 40KHz. En ese momento la seal de salida ECO pasa a
nivel 1. Cuando la cpsula receptora recibe la seal transmitida como consecuencia de
haber rebotado en un objeto (eco), esta salida pasa de nuevo a nivel 0. El usuario debe
medir la duracin del pulso de esta seal, es decir, el tiempo en que la seal eco se
mantiene a 1.

64
Figura 50. Diagrama de tiempos en el modo1

Con objeto de que el mdulo se estabilice, se debe dejar un lapsus de tiempo de


unos 20mS mnimo entre el momento en que la seal de eco pasa a 0 y un nuevo pulso
de disparo que inicie el siguiente ciclo o medida. Esto permite realizar medidas cada 50mS
o lo que es igual a 20 medidas por segundo.

La duracin del pulso eco de salida vara entre 100S y 25mS, en funcin de la
distancia entre las cpsulas del mdulo 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.30S/cm.
As pues el rango mnimo que se puede medir es de 1.7 cm (100S/58) y el mximo d e 431
cm (25mS/58).

Modo 2, Patilla nica para trigger y ECO


Este modo permite emplear una nica patilla para generar la seal de disparo o
trigger y tambin para realizar la medida de la anchura del pulso de salida del ECO, lo que
ahorra patillas en el micro-controlador central. Para emplear este modo basta con conectar
la patilla Mode con GND. La seal de ECO aparecer entonces en la misma patilla por la
que se aplic la seal de trigger. Esa patilla se debe configurar primero como salida para
generar el disparo y luego como entrada para leer la duracin del ECO. La sentencia
PULSIN de los controladores mas populares realiza esta reconfiguracin de forma
automtica. Ver la figura 30.

65
Figura 51. Diagrama de tiempos en el modo2

3.1.3.4 Caractersticas tcnicas

3.1.3.5 Conexionado
El mdulo emplea tan slo 5 conexiones que se pueden realizar soldando
directamente 5 cables o bien mediante un conector de 5 vas con paso de 2.54mm. Estas se
muestran en la figura 31.

Figura 52. Conexiones SRF05

66
Figura 53. Conexiones SRF05 con Arduino

3.1.3.6 Ajustes
El mdulo SRF05 viene perfectamente ajustado y calibrado de fbrica, por lo que
no necesita de ningn tipo de ajuste. Su funcionamiento se puede verificar aplicando una
serie de pulsos por la entrada de disparo. Con ayuda de un osciloscopio se puede medir la
anchura de la seal eco de salida. Esta anchura, representada en S y dividida entre 58.30
nos permite calcular la distancia del objeto.

3.1.3.7 Aplicaciones
El mdulo SRF05 es capaz de generar una seal lgica de salida cuya duracin
determina la distancia de un objeto. Las aplicaciones son numerosas, citamos unas cuantas
a modos de ejemplo:
Aplicaciones de control conde se deba actuar en funcin de la
distancia o tamao de objetos diversos.
Alarmas activadas cuando el intruso se aproxima a una
determinada distancia.
Microbtica en donde es necesario que se acte en funcin de la distancia
que separa al robot de cualquier otro objeto.

3.1.4 Bateras

Las bateras son uno de los elementos fundamentales en el diseo de nuestro sensor
inalmbrico, tanto por el diseo de la propia placa como la capacidad de otorgar autonoma
a nuestro sensor.

En este apartado hacemos un breve resumen de los parmetros a tener en cuenta en


nuestra eleccin, comparamos las bateras disponibles y finalmente seleccionamos la ms
idnea para nuestra aplicacin.

- La tensin que aporta: Los requerimientos de diseo imponen que nuestra batera
presente una alimentacin entre 2.8 V y 3.4 V, que es el rango de tensiones de
alimentacin de las Xbee.
67
- La capacidad de la batera, que la medimos en mAh. Este es un factor de vital
importancia ya que de esta manera podemos medir la vida que tendr la aplicacin. Por
ejemplo, si la batera tiene una capacidad de 250 mAh, y provee una corriente media de 2
mA a la carga, en teora la batera podra otorgar una vida de 125 horas a nuestro equipo.

- El diseo en la placa base: la batera no debe ocupar demasiado espacio y al


mismo tiempo debe poder integrarse bien con el resto del hardware.

- El modo en que consume energa el sensor. Si el sensor consume un determinado


valor de corriente continuamente no es lo mismo que hacerlo a picos.

Figura 54. Ejemplo del modo de funcionamiento.

En cuanto al tipo de bateras las podemos clasificar segn diversos criterios:


capacidad, voltaje, etc. En nuestro caso tanto el tamao como la capacidad de la batera
resultan esenciales, ya que se supone que el espacio ocupado por el sensor ser pequeo,
pero sobretodo se desea que su autonoma sea la mayor posible. Entre las diferentes formas
de batera tenemos: pilas de botn, pilas cilndricas y pilas rectangulares. De todas ellas
elegimos las pilas cilndricas de litio, ya que son las que ms capacidad de carga nos
ofrecen, a pesar de ser las de mayor tamao.

Finalmente la pila seleccionada ER34615T, 3.6V, 19 Ah, es la mejor en cuanto a la


relacin capacidad / precio. Se han hecho pruebas de vida de la batera, a la vez que los
clculos correspondientes expuestos en el presente proyecto, y se han cumplido con creces
las exigencias de durabilidad de la pila, durando ms de 4 aos para el funcionamiento que
nosotros queremos darle al sensor.

Figura 55. Pila cilndrica seleccionada.

68
3.1.5 Adaptador Xbee a placa protoboard de Sparkfun
La separacin de los pines de los mdulos Xbee se rige por el sistema mtrico
(concretamente es de 2mm), por lo que no pueden ser puestos directamente sobre una placa
protoboard, cuya separacin se basa en el sistema imperial (pulgadas). El fabricante
Sparkfun ofrece estas pequeas placas que adaptan la separacin de las patas para poder
ser 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 pequeas placas adaptadoras es poder trabajar con
las Xbee en la fase de diseo para poderlas adaptar a nuestra placa protoboard, antes de
adaptarlas a la placa PCB.

3.1.6 Adaptador Xbee Shield

Uno de los problemas que tenamos que afrontar en el desarrollo del proyecto era
poder acoplar los mdulos Xbee al PC para poder leer los datos. La Xbee Shield, acoplada
a una placa Arduino permite solventar este problema.
Esta placa, creada por la empresa Libelium permite la comunicacin de los mdulos Xbee
con el micro de Arduino, tanto para aplicaciones remotas (por ejemplo si queremos montar
un router inalmbrico con microcontrolador) como para aplicaciones locales con PC (que
es nuestro caso, ya que la queremos usar para el Coordinador). Dispone adems de pines
digitales (pin 2 a 7) y pines analgicos.

La Xbee Shield tiene dos jumpers que determinan como se conecta el mdulo Xbee
a la placa Arduino. Existen dos posiciones posibles, la posicin Xbee y la posicin USB.
La posicin Xbee conecta el pin DOUT del mdulo Xbee al pin Rx del microcontrolador
del Arduino, y el pin DIN est conectado al TX. Notar que los pines RX y TX del

69
Micro-controlador estn todava conectados a los pines TX y RX respectivamente. Sin
embargo, en esta posicin el micro-controlador slo ser capaz de recibir datos desde el
mdulo Xbee y no desde el USB del ordenador.

La posicin USB conecta el pin DOUT del mdulo Xbee al pin RX del chip FTDI,
y el pin DIN del mdulo Xbee al pin TX del chip FTDI. Por lo tanto, en esta posicin
podemos conectar directamente el mdulo Xbee al ordenador. Un punto importante es que
deber quitarse el micro-controlador del mdulo Arduino.

Figura 57. Adaptador Xbee Shield de Libelium.

Una de las desventajas de la placa es que no permite una comunicacin con


Arduino al PC directamente, ya que es preciso extraer el micro-controlador. Otro problema
es que el botn de reset no puede resetear los mdulos Xbee, que en ocasiones podra
resultar una opcin ms que interesante.

En cuanto a las ventajas, aunque en el mercado se ofrecen otras placas de similares


caractersticas, la ms extendida y, seguramente ms cmoda, es sta, por lo que la hemos
elegido para nuestro proyecto, ya que tiene ms fcil manejo que las otras.

70
3.1.7 Caja de Control:

La Caja de Control realiza la funcin de recibir los datos correspondientes a los


sensores de contenedor.
Recibe los datos y gestiona stos para que puedan ser visualizados posteriormente por el
usuario encargado de la gestin.

La Caja de Control puede albergar la Base de Datos aunque se recomienda que sta
se encuentre no fsicamente en el Punto de Control sino en las Oficinas o Instalaciones del
usuario de Gestin.

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

Se alimenta gracias a la corriente de una farola o gracias a alimentacin por Placa


Solar ya que su funcionamiento requiere un sistema de alimentacin seguro al transmitir la
informacin cada hora va GPRS, M2M, WI-FI o Ethernet a la Sala de Control.

Principales Caractersticas de la Caja de Control:


- Permite Controlar un Mximo 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 calefaccin interna).

Figura 58. Esquema ejemplo de comunicacin de caja control con contenedores.

71
3.2 Software

3.2.1 Programacin de los mdulos Xbee: X-CTU

X-CTU es el software oficial para programar radios Xbee. Este software permite al
usuario la posibilidad de bajar nuevo firmware de la pgina de Digi, programar parmetros
a la radio o testear la comunicacin fcilmente. En este apartado repasamos de forma
rpida como funciona para centrarnos ms adelante en la programacin de una radio en
modo Sleep.

Bsicamente, el programa se compone de una serie de funciones muy tiles que


repasamos a continuacin. Cuando abrimos el programa X-CTU, veremos que tenemos
cuatro pestaas:

- PC Settings: Ofrece la posibilidad de seleccionar el puerto COM a travs del que


ir conectada nuestra radio, as como los ajustes tpicos de la comunicacin serie
(Baudrate, Flow Control, Data Bits, Parity y Stop Bits). Ofrece tambin la
posibilidad de habilitar el modo API y el response timeout.

Figura 59. Pestaa PC Settings.

72
- Range Test: Tras establecer los parmetros de comunicacin en la pestaa PC
Settings y que el Xbee est comunicando con otro, la opcin del Range Test puede
dar idea de cuan fuerte llega la seal y la tasa de fiabilidad en la comunicacin
visualizando el nmero de paquetes correctos y errneos que llegan.
- Terminal: Esta pestaa permite leer y escribir las tramas que llegan al mdulo
Xbee. Permite leerlas en modo hexadecimal para poderlas interpretar.

Figura 60. Pestaa Terminal.

- Modem Configuration: Esta es la interfaz para leer / escribir parmetros de un


Xbee. Desde esta pestaa tambin es posible actualizar el firmware disponible
desde la pgina de Digi.

73
Figura 61. Pestaa Modem Configuration.

Las pestaas ms tiles son PC Settings y Modem Configuration. Range Test y


Terminal tambin pueden ayudarnos en casos en los que queramos chequear la
comunicacin.

74
3.2.2 Procesado de datos: MySQL

3.2.2.1 Aplicaciones
MySQL es muy utilizado en aplicaciones web, como Drupal o phpBB, en
plataformas (Linux/Windows-Apache-MySQL-PHP/Perl/Python), y por herramientas de
seguimiento de errores como Bugzilla. Su popularidad como aplicacin web est muy
ligada a PHP, que a menudo aparece en combinacin con MySQL.
MySQL es una base de datos muy rpida en la lectura cuando utiliza el motor no
transaccional MyISAM, pero puede provocar problemas de integridad en entornos de alta
concurrencia en la modificacin. En aplicaciones web hay baja concurrencia en la
modificacin de datos y en cambio el entorno es intensivo en lectura de datos, lo que hace
a MySQL ideal para este tipo de aplicaciones. Sea cual sea el entorno en el que va a
utilizar MySQL, es importante monitorizar de antemano el rendimiento para detectar y
corregir errores tanto de SQL como de programacin.

3.2.2.2 Lenguajes de programacin


Existen varias interfaces de programacin de aplicaciones que permiten, a
aplicaciones escritas en diversos lenguajes de programacin, acceder a las bases de datos
MySQL, incluyendo C, C++, Pascal, Delphi (via dbExpress), Eiffel, Smalltalk, Java (con
una implementacin nativa del driver de Java), Lisp, Perl, PHP, Python, Ruby, Gambas,
REALbasic (Mac y Linux), (x)Harbour (Eagle1), FreeBASIC y Tcl; cada uno de estos
utiliza una interfaz de programacin de aplicaciones especfica. Tambin existe una
interfaz ODBC, llamado MyODBC que permite a cualquier lenguaje de programacin que
soporte ODBC comunicarse con las bases de datos MySQL. Tambin se puede acceder
desde el sistema SAP, lenguaje ABAP.

3.2.2.3 Caractersticas adicionales

Inicialmente, MySQL careca de elementos considerados esenciales en las bases de


datos relacionales, tales como integridad referencial y transacciones. A pesar de ello, atrajo
a los desarrolladores de pginas web con contenido dinmico, justamente por su
simplicidad.
Poco a poco los elementos de los que careca MySQL estn siendo incorporados
tanto por desarrollos internos, como por desarrolladores de software libre. Entre las
caractersticas 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 seleccin de mecanismos de almacenamiento que ofrecen diferente
velocidad de operacin, soporte fsico, capacidad, distribucin geogrfica,
transacciones...
Transacciones y claves forneas.
Conectividad segura.

75
Replicacin.
Bsqueda e indexacin de campos de texto.

MySQL es un sistema de administracin de bases de datos. Una base de datos es


una coleccin estructurada de tablas que contienen datos. Esta puede ser desde una simple
lista de compras a una galera de pinturas o el vasto volumen de informacin en una red
corporativa. Para agregar, acceder a y procesar datos guardados en un computador, usted
necesita un administrador como MySQL Server. Dado que los computadores son muy
buenos manejando grandes cantidades de informacin, los administradores de bases de
datos juegan un papel central en computacin, como aplicaciones independientes o como
parte de otras aplicaciones.
MySQL es un sistema de administracin relacional de bases de datos. Una base de
datos relacional archiva datos en tablas separadas en vez de colocar todos los datos en un
gran archivo. Esto permite velocidad y flexibilidad. Las tablas estn conectadas por
relaciones definidas que hacen posible combinar datos de diferentes tablas sobre pedido.
MySQL es software de fuente abierta. Fuente abierta significa que es posible para
cualquier persona usarlo y modificarlo. Cualquier persona puede bajar el cdigo fuente de
MySQL y usarlo sin pagar. Cualquier interesado puede estudiar el cdigo fuente y ajustarlo
a 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 se
ajusta al GPL o requiere introducir cdigo MySQL en aplicaciones comerciales, usted
puede comprar una versin comercial licenciada.

Las siguientes caractersticas son implementadas nicamente por MySQL:

Permite escoger entre mltiples motores de almacenamiento para cada tabla. En


MySQL 5.0 stos deban aadirse en tiempo de compilacin, a partir de MySQL 5.1 se
pueden aadir dinmicamente en tiempo de ejecucin:
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 tambin a Oracle
Desarrollados por la comunidad como memcache, httpd, PBXT y Revision

Agrupacin de transacciones, reuniendo mltiples transacciones de varias conexiones


para incrementar el nmero de transacciones por segundo.

76
3.2.3 Aplicacin Visual:

La Aplicacin Visual se instala en un Servidor externo al sistema y permite


monitorizar 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, Localizacin (Si se ofrecen previamente).

Permite la posibilidad de visualizar los datos en un entorno Web, sin necesidad de


ubicar la aplicacin en una estacin de trabajo fsicamente.

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

Es integrable con aplicaciones terceras para Smartphones tipo ANDROID o IOS ya


sea en formato de nueva aplicacin o en aplicacin Web.

Figura 62. Ejemplo aplicacin visual.

3.3 Implementacin de hardware y software

Funcionamiento:
El funcionamiento bsico del Sensor consiste en detectar el estado del contenedor y
transmitir sta informacin que podr determinar una variacin de estado en %:

Esta informacin se transmite por el sensor cada 60 minutos (secuencia


parametrizable) y se recibe por la unidad de control, situada a una distancia no superior a
100m.

La Unidad de Control recibe el estado del sensor y lo convierte en informacin


visible para el usuario, enviando sta a travs de Wi-Fi o GPRS.

77
Figura 63. Ejemplo ejemplo sistema de control de llenado.

Los Contenedores envan la informacin va Radiofrecuencia, sta se recibe en la


Caja de Control) y se transmite va GPRS o WI-FI a la Sala de Control donde se gestiona.

La informacin queda almacenada en la Base de Datos de acceso libre tipo MySQL.

La informacin de los Sensores podr ser empleada para mostrarse en la Aplicacin


Visual, dnde podr consultarse el estado de cada uno de los Sensores.

Podrn generarse Informes posteriormente a travs de la Base de Datos ya sea por:


Localizacin (Calle, Zona, Ciudad)/ Location Data
Contenedor /Cointainer Data
Estado / ContainerState Data

Los informes podrn generarse combinando cualquier de los datos anteriores con la
variable Tiempo (Ejemplo Estado Contenedores en fecha: 12.12.12)

La informacin de cada Unidad de Control es recogida en un punto tercero


mostrando un mapa completo de la ciudad o ciudades controladas y el total de
contenedores monitorizados.

78
Seccin 4. Memoria de Clculo

La memoria de clculo se basa en los elementos explicados en la memoria descriptiva.


Por lo tanto, en esta parte de la memoria veremos los clculos realizados tanto para los
elementos hardware como el software, esto es, clculo de componentes, el desarrollo de la
interfaz grfica, etc.

4.1 Diagramas de flujo del software

En esta seccin mostramos los diagramas de flujo que gobiernan el sistema de


monitorizacin y guardado de datos que corre en el PC.

Esquema bsico del software del PC

Figura 64. Esquema general del software en PC Raspberry

79
Esquema bsico del software del sensor

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

80
4.2 Potencia consumida

Para la alimentacin del mdulo se ha escogido una batera de 3.6V, 19A, de litio
tipo cilndrica.

Teniendo en cuenta las caractersticas de la pila, los clculos de la vida de sta son:

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

Tcm = Tiempo consumo normal


Tcd = Tiempo consumo dormido
Icm = Intensidad consumo normal
Icd = 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 batera de 19 A/h, la vida de la batera


sera:

Vida batera = 19000 / 0,476 = 39915,97 h 1663 das 4,5 aos

81
Seccin 5: Casos experimentales

En otros proyectos que se centran en Zigbee principalmente, suelen hacer pruebas para
medir el RSSI (Receive Signal Strength Indication), que indica la fuerza o potencia de la
seal recibida. En nuestro proyecto no hemos entrado a medir este parmetro, ya que
tenemos ejemplos anteriores donde vemos la relacin de distancia y nivel de RSSI, por lo
que he decidido quedarme con estas demostraciones o conclusiones, sin necesidad de hacer
nuevas pruebas, sino probar hasta que distancia hay comunicacin entre emisor y receptor
RF y que no se pierdan datos o medidas.

Antes de hacer estas pruebas de comunicacin, se hicieron las pruebas de medidas del
sensor de ultrasonidos, tanto fuera del contenedor como dentro de l, ya que en el interior
del contenedor podramos tener problemas de rebote del eco, y consecuentemente obtener
falsas 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 utilizado
un multmetro Fluke. Hemos programado el micro-controlador para que el sensor enve
una seal cada 10 segundos, y el resto del tiempo est descansando, cosa que en el futuro
cambiar, ya que nos interesar que enve una medida cada hora aproximadamente, por el
tema de la vida de la pila o batera, y no es necesario estar sabiendo cada segundo o minuto
el estado de los contenedores.

Para medir la intensidad de corriente, debemos poner el multmetro en modo


ampermetro, colocando las pinzas donde toque y eligiendo la escala ms adecuada. A
continuacin, se abre el circuito para permitir conectar el multmetro en serie, como en el
siguiente esquema:

Figura 66. Colocacin ampermetro en el circuito Figura 67. Multmetro Fluke

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

Por lo tanto, aplicando la ecuacin 5, podemos determinar en esta configuracin


cul ser el tiempo estimado de la batera:

82
, ,
= = 0,476 mA

Vida batera = 19000 / 0,476 = 39915,97 h 1663 das 4,5 aos

5.2 Lectura de medidas del sensor ultrasnico

Para saber que sensor ultrasnico utilizar en el presente proyecto, se comprob que
stos daban medidas suficientemente exactas para cumplir con futuras exigencias puestas
en saber el nivel de llenado del contenedor. Se compararon dos de los ms econmicos, el
SRF02 (un cilindro) y el SRF05 (dos cilindros), viendo que el ltimo es el ms exacto y
estable en la medida.
Gracias a las placas Arduino, se pudo conectar el sensor ultrasnico a los dos pines
de alimentacin y datos para que el micro procese los datos recibidos por el mismo sensor,
cargando un software de ejemplo bsico, el cual ordena al sensor que entregue una medida
cada tanto tiempo [apartado 10.2].
Acoplando una Shield o placa adaptadora para unir los mdulos Xbee a una placa
Arduino, 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 travs
del programa X-Ctu.

5.3 Lectura del RSSI: Outdoor

[18] RSSI es la abreviatura en ingls de Receive Signal Strength Indication


(Indicador de fuerza de la seal recibida). Es un parmetro muy til en comunicaciones
inalmbricas ya que mide el nivel de potencia de las seales de comunicacin. El RSSI se
mide en dBm.

Los valores RSSI ledos por las Xbee Pro oscilan entre -36 a -100 dBm mientras que
los de las Xbee lo hacen entre -23 y -92 dBm.

Experimentos realizados en un proyecto anterior de la universidad que profundiza en el


tema de comunicacin inhalmbrica Zigbee, llamado Red de sensores Zigbee [18]:

1) Medida de RSSI en el exterior:

El estudio llevado a cabo se basa en la recoleccin de muestras del RSSI a diferentes


distancias. Se han tomado 140 muestras en cada punto, desde distancias de 1m a 23 m
espaciadas con un paso 1 m entre cada toma de muestra.

83
Tabla 14. Tabla resumen del experimento.

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

La media en funcin de la distancia, se muestra en la figura 62.

84
Figura 68. RSSI vs distancia.

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

Por otro lado, como era de esperar la potencia de la seal recibida (RSSI) va
disminuyendo con respecto a la distancia. La curva de la figura 62 representa la media de
los valores RSSI en una cierta distancia en funcin de la distancia.

En resumen, el RSSI es un buen parmetro para seguir tendencias de la seal.

Las conclusiones extradas de este experimento son:


- Se pone de manifiesto que un valor de RSSI obtenido en un instante puntual no es
un valor fiable (por ejemplo si con ello quisiramos calcular la distancia a la que nos
encontramos del mdulo), pero en cambio es un buen indicador para seguir la
tendencia de la seal.

5.4 Comunicacin emisor-receptor Xbee

En este apartado se veremos las pruebas de distancia que se han realizado entre
emisor y receptor de radiofrecuencia, para saber si es suficiente para el tipo de proyecto
que queremos realizar. En las especificaciones tcnicas de la antena o mdulo Xbee Pro S1
que utilizamos, nos dice que esta distancia llega a ser hasta 1 Km, cosa que pensamos que
no es del todo cierta, ya que depende de varios factores esta comunicacin.

Uno de los factores sera el meteorolgico, siendo lo ms favorable un tiempo


despejado y sin viento. Al intervenir factores como viento o lluvia la comunicacin vara
considerablemente.

Otro factor a tener muy cuenta despus de las pruebas realizadas, es la posicin del
receptor, cuanto ms elevado est respecto el emisor o emisores mejor, tiene ms alcance.

85
Destacar que las pruebas realizadas son en exterior, con rboles, naturaleza y algn
coche entre emisor y receptor, pudiendo decir que es una comunicacin en campo abierto,
sin edificios ni grandes muros entre medio.

86
Seccin 6: Planos

La relacin de planos de elementos para el mdulo End Device es el siguiente:

Plano Descripcin
Plano 1 Planos de la placa Arduino Uno
Plano 2 Fotografa del mdulo End Device
Plano 3 Planos de la pila

La relacin de planos de elementos para el mdulo Coordinador es el siguiente:

Plano Descripcin
Plano 4 Planos placa Xbee Explorer Usb
Plano 5 Fotografas del mdulo Coordinador

La relacin de planos de la caja de comunicaciones es el siguiente:

Plano Descripcin
Plano 6 Fotografa caja de comunicacin
Plano 7 Plano de la caja de comunicacin

87
6.1 Plano placa Arduino

Figura 69. Plano de la placa Arduino Uno.

88
6.2 Fotografa placa base (interior End Device)

L
IA
C
EN
D
FI
N
O
C

Figura 70. Placa Base para el mdulo End Device.

En la figura 71 vemos las partes bsicas de las que se compone un mdulo


End device:

- Xbee.
- Placa base con jumper de conexin y pistas de interconexionado a los diferentes
submdulos.
- Sensor de ultrasonidos.
- Pila.

89
6.3 Plano Pila

Figura 71. Planos de la pila.

90
6.4 Fotografa del mdulo Coordinador

Figura 72. Fotografa del diseo del Coordinador.

En la figura 70 vemos las partes bsicas de las que se compone un mdulo


coordinador:

- 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

91
6.5 Planos Xbee Explorer USB

Figura 73. Circuito de la placa Xbee Explorer USB

92
6.6 Fotografa caja comunicacin

Figura 74. Fotografa interior caja de comunicacin.

93
6.7 Plano caja de comunicacin

L
IA
C
EN
D
FI
N
O
C

Figura 75. Plano de caja de comunicaciones.

94
Seccin 7: Presupuesto
En este presupuesto se pretende mostrar el coste de la realizacin del proyecto en s mismo,
dedicado a los estudios previos y al diseo del hardware.

7.1 Precios unitarios

CDIGO UD DESCRIPCIN PRECIO


IT001 h Ingeniero Tcnico Industrial 10,00 DIEZ EUROS
HW001 u Arduino UNO con ATMega328 21,90 VENTIN EUROS
con NOVENTA
cntimos
HW002 u Xbee shield 19,50 DIECINUEVE
EUROS con
CINCUENTA
cntimos
HW003 u Xbee Pro s1 60 mW u.fl 28,72 VEINTIOCHO

L
connection(802.15.4) EUROS con
SETENTA Y DOS

IA
cntimos
HW004 u Xbee Explorer Usb 18,88 DIECIOCHO EUROS
C con OCHENTA y
OCHO cntimos
EN
HW005 u Low cost Ultrasonic Ranger 14,79 CATORCE EUROS
con SETENTA Y
NUEVE cntimos
D

HW006 u Atmega328P-AU 2,83 DOS EUROS con


OCHENTA Y TRES
FI

cntimos
HW007 u Crystal 32.768KHz 0,54 CINCUENTA Y
N

CUATRO cntimos
HW008 u Resistencia SMD 1K 0.125W 0,01 UN cntimo
O

HW009 u Condensador cermico SMD 0,038 TRES con OCHO


22pF, 50V cntimos
C

HW010 u Condensador cermico 0.1uF, 0,052 CINCO con DOS


25V cntimos
HW011 u Regulador de tensin 3.3V, 1A 0,75 SETENTA Y CINCO
cntimos
HW012 u Conector hembra 2.54mm,5 vas 0,15 QUINCE cntimos
HW013 u AVRisp mkII 32,25 TREINTA Y DOS
EUROS con
VEINTICINCO
cntimos
HW014 u Pila-batera 15,04 QUINCE EUROS con
CUATRO cntimos
HW015 u Antena para Xbee 6,55 SEIS EUROS con
CINCUENTA Y
CINCO cntimos
HW016 u Caja de comunicaciones con 290,00 DOSCIENTOS
GPRS NOVENTA EUROS

95
7.2 Precios descompuestos

7.2.1 Captulo 1: Estudios previos

CDIGO UD DESCRIPCION CANTIDAD PRECIO SUBTOTAL


IT001 h Ingeniero Tcnico Industrial 50,00 10 500,00
recopilando informacin acerca
de Arduino y su entorno de
programacin
IT001 h Ingeniero Tcnico Industrial 70,00 10 700,00
recopilando informacin acerca
de sensores
volumtricos(ultrasonidos e
infrarrojos)

IT001 Ingeniero Tcnico Industrial 80,00 10 800,00


recopilando informacin acerca

L
de ATmega328P

IA
IT001 Ingeniero Tcnico Industrial 80,00 10 800,00
recopilando informacin acerca C
de Zigbee
EN

Suma de la partida 2.800,00


D

2,00 % Costes Indirectos 56,00


FI

TOTAL PARTIDA 2856,00


N

7.2.2 Captulo 2: Diseo y montaje del hardware


O

CDIGO UD DESCRIPCIN CANTIDAD PRECIO SUBTOTAL


C

IT001 h Ingeniero Tcnico Industrial 40 10,00 400,00


HW001 u Arduino UNO con 1,00 21,90 21,90
ATmega328
HW002 u Xbee shield 1,00 19,50 19,50
HW003 u Xbee Pro s1 60 mW u.fl 2,00 28,72 57,44
connection(802.15.4)
HW004 u Xbee Explorer Usb 1,00 18,88 18,88
HW005 u Low cost Ultrasonic Ranger 1,00 14,79 14,79
HW006 u Atmega328P-AU 1,00 2,83 2,83
HW007 u Crystal 32.768KHz 1,00 0,54 0,54
HW008 u Resistencia SMD 1K 1,00 0,01 0,01
0.125W
HW009 u Condensador cermico 2,00 0,038 0,076
SMD 22pF, 50V
HW010 u Condensador cermico 2,00 0,052 0,104

96
0.1uF, 25V
HW011 u Regulador de tensin 3.3V, 1,00 0,75 0,75
1A
HW012 u Conector hembra 2.54mm,5 1,00 0,15 0,15
vas
HW013 u Programador Atmel AVRisp 1,00 32,25
mkII
HW014 u Pila-batera cilndrica de 1,00 15,04 15,04
litio 3.6V, 19Ah
HW015 u Antena para Xbee 1,00 6,55 6,55
HW016 u Caja de comunicaciones 1,00 290,00 290,00
(con GPRS incluido)

Suma de la partida 848,56

Envo y manipulacin 10,00

L
IA
TOTAL PARTIDA 858,56

7.3 Resumen del presupuesto


C
EN
CAPTULO RESUMEN IMPORTE
Captulo 1 Estudios previos 2856,00
Captulo 2 Diseo y montaje del hardware 858,56
D

TOTAL EJECUCIN MATERIAL 3714,56


FI

13 % Gastos Generales 482,89


N

6% Beneficio Industrial 22,29


O
C

TOTAL EJECUCIN POR CONTRATO 4219,74

18 % IVA 759,55

TOTAL PRESUPUESTO LICITACIN 4979,29

97
Seccin 8: Conclusiones

El objetivo principal de este proyecto ha sido el estudio de los sensores inalmbricos


en sus diferentes fases, desde el diseo a su modo de funcionamiento con Arduino, as
como el estudio del protocolo de comunicacin Zigbee, tanto en lo referente al estudio
terico de las tramas de comunicacin hasta las pruebas prcticas llevadas a cabo en
diferentes entornos, con la finalidad de conseguir la monitorizacin del nivel de llenado de
contenedores.

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

La primera fase se ha dedicado al funcionamiento y posterior diseo de nuestro


sensor inhalmbrico, compuesto por: un sensor ultrasnico, una placa Arduino y una
antena o mdulo Xbee.
Una vez encontrado el sensor adecuado, se conectan los pines correspondientes a la placa
Arduino, la cual interconectamos mediante una placa Xbee Shield al mdulo Xbee(End
Device) para transmitir los datos enviados por el sensor. El micro-controlador Atmel de
Arduino se encarga de procesar stos datos y Xbee de enviar por radiofrecuencia, para ms
tarde ser recibidos por otro receptor Xbee (Coordinator), el cual est conectado mediante
USB a un PC donde podemos controlar el estado del sensor.
sta era la parte fcil, ya que se disponen de adaptadores como los que hemos nombrado
anteriormente, foros donde nos dan ayuda en las conexiones, y ejemplos de cdigos
fuentes para comprobar el correcto funcionamiento del sensor; pero nuestro objetivo era
tener un prototipo montado sobre una PCB, el cual deba ser lo ms econmico y reducido
posible, en cuanto a componentes, tamao y consumo, por lo que tenamos que
experimentar sobre protoboard, y encontrar el montaje deseado.

La segunda fase se ha dedicado a montar el circuito deseado en una protoboard,


donde podemos aadir y extraer los componentes necesarios, individual y fcilmente en la
mayora de casos.
Tenemos el mdulo Xbee y el sensor ultrasnico, los cuales se conectarn
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 los
componentes que nos interesaran para la realizacin de nuestro sensor inhalmbrico.
En un proyecto anterior realizado en la empresa, ya se tuvo que recurrir al proceso de
escoger nicamente los componentes necesarios de la placa Arduino, en montaje
superficial 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 mdulo de comunicacin inhalmbrica
Xbee tiene un rango aproximado de 2,8V a 3,6V.
El problema era que en las especificaciones tcnicas de nuestro sensor ultrasnico
SRF05 dice que se alimenta a 5V, por lo que vemos que deberemos trabajar con 2
tensiones distintas, debiendo as hacer uso de 2 reguladores de tensin. Esto no ayudaba al
tema de reducir el consumo, ya que el regulador de tensin es de los componentes que ms
consume en el circuito.
Entonces probamos de alimentar nuestro sensor ultrasonidos a 3,3V y comprobar
que las medidas recibidas por Xbee en nuestro PC eran correctas o se vean afectadas por
la falta de tensin porque, tanto nuestro micro-controlador Atmel de la placa Arduino
como la antena Xbee pueden funcionar a 3,3V, siempre que el micro vaya acompaado de
un clock o cristal de una frecuencia adecuada(a menos frecuencia, ms rango de tensin se
engloba).

98
Y con suerte, nuestro sensor funciona a sta tensin tambin, por lo que podemos
utilizar un solo regulador de tensin.
Despus de realizar las pruebas necesarias, cambindole el software al micro-controlador
una y otra vez para conseguir las medidas del sensor en el tiempo deseado, durmiendo el
Xbee para que no se active hasta que el sensor enve la medida, etc., hay que adaptarlo a
una PCB para su posterior encapsulado y montaje en el contenedor, a la vez que hay que
tener una caja de comunicacin para la recepcin y tratamiento de datos.

En la tercera fase se ha diseado una placa base, que conectada a Xbee y a un


sensor ultrasnico, nos constituye un mdulo End Device, instalado en el techo del
contenedor. ste enviar los datos a un coordinador, situado en una caja de
comunicaciones que recibir los datos y los procesar mediante una CPU, a la vez que
habr una base de datos registrando el nmero y estado del contenedor.

La curva de aprendizaje de Arduino es realmente rpida. Dispone de gran cantidad


de documentacin oficial y no oficial. La comunidad de usuarios es muy grande, accesible
y colaborativa. Hay gran cantidad de ejemplos de uso y proyectos hechos con licencia
abierta, cosa que permite reaprovechar todo lo que ya funciona.

El hecho de haber definido una manera estndar de crear extensiones, las shields,
ha permitido crear una gran cantidad de placas accesorias para cubrir la mayora de
necesidades habituales en proyectos de electrnica. Estas extensiones se consiguen a travs
de los mismos canales de distribucin. Estas suelen entregarse con ejemplos de uso o
incluso libreras de cdigo integrables en el entorno Arduino, con lo que amplifican mucho
el potencial de la plataforma.

El nivel de abstraccin de cmo funcionan los circuitos electrnicos o como se


deben programar los dispositivos es muy alto. Esto permite realizar operaciones complejas
sin gran esfuerzo. En contra, estas limitado al comportamiento proporcionado por las
libreras o por la funcionalidad de la circuitera de la que dispones.

El desempeo de estas libreras o extensiones no siempre es el ms ptimo y hay


veces que es necesario realizar modificaciones. Pero incluso en estos casos el soporte que
se puede encontrar en la comunidad de usuarios es muy grande y no debe suponer un gran
escollo para la realizacin del proyecto. En cualquier caso, siempre podemos crear nuestras
propias libreras, dando as soporte a nuevas funcionalidades o mejoras de rendimiento. En
estos casos s que es necesario un mayor nivel de conocimientos de electrnica o de
programacin, pero el alcanzar este nivel puede hacerse de un modo muy progresivo.
Enlazando con el segundo objetivo que nos habamos marcado en la realizacin de este
PFC, podemos decir que las capacidades lectivas o formativas de la plataforma
Arduino son muy grandes.

El hecho de interactuar con el mundo real de un modo directo, puede generar una
mayor curiosidad en el alumnado. Esto permite adquirir unos conocimientos de electrnica
o programacin de un modo muy ameno.

99
El hecho que el coste de una placa sea razonablemente bajo, y el hardware muy
robusto, puede facilitar el acceso a este por gran parte de centros, permitiendo su uso
durante un largo camino formativo. Se podra decir que tiene un bajo coste por el
rendimiento que puede ofrecer.

100
Seccin 9: Bibliografa

Referencias y webs consultadas:

[1] ZigBee Multi Profile ZigFest, Home


http://www.zigbee.org/

[2] Arduino, Home Page


http://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 aplicacin con Arduino: medida de caudal,


Ingeniera Tcnica Industrial en Electrnica Industrial.
Autor: Josep Fernndez Daroca; Director: Jos Lus Ramrez Falo

[7] Xbee Explorer Usb


XBee Pro 60mW U.FL Connection - Series 1 (802.15.4)
http://sparkfun.com/

[8] Software programa de diseo de circuitos impresos PCB


http://www.designspark. com/

[9] Sensores ultrasonidos SRF02 y SRF05


http://www.robot-electronics.co.uk/es.farnell.com/

[10] Datasheet EVE - ER34615T - BATTERY, LITHIUM, 3.6V, D, TABS


es.farnell.com/

[11] Datasheets components integrados en PCB


es.rs-online.com/

[12] Datasheets components integrados en PCB


es.mouser.com

[13] Antena 2.4GHZ RP-SMA


http://www.bricogeek.com

[14] Diseo y montaje en protoboard con Arduino.


http://www.instructables.com

[15] Programming with Arduino IDE & AVRISP MKII


http://www.stevenjohal.com

[16] Datasheet programador Atmel AVRISP mkII


http://www.atmel.com

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

[18] PFC Red de sensores Zigbee, Ingeniera en Automtica y Electrnica Industrial


Autor: Antn Girod Fortuo; Director: Ramn Villarino Villarino.

[19] Wireless Sensor Networks - A Market Research Report


http://blogs.dolcera.com/blog/2009/08/02/wireless-sensor-networks-a-report/

[20] Freeduino, Home Artculo digital


<http://www.freeduino.org/>

[21] Arduino team. Placa Arduino monocapa


<http://arduino.cc/es/Main/ArduinoBoardSerialSingleSided3>

[22] BricoGeek, Tienda, Artculo digital


http://www.bricogeek.com/shop/

[23] Electan, electrnica y robtica, Home


http://www.electan.com

[24] Proyecto Arduino, Download the Arduino Software


http://arduino.cc/en/Main/Software

102
Seccin 10: Anexo
10.1 Cdigo 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 byte
byte addDL = 4; //no permite 1 en ninguna posicion del byte

// configuarci connexi SFR05


int ecoPin = 2; // SB ECO pin digital 2

L
int disparoPin = 3; // SB Disparo pin digital
3

IA
unsigned long pulseTime = 0; // stores the pulse in
Micro Seconds
unsigned long distance = 0; // variable for storing
the distance(mm)
int alsensor= 9;
C // pin de alimentacion al
EN
sensor

// Configuraci Sleep
int tdespertar = 0; // tiempo a
desboradar timer2
D

int tiempo = 1; // tiempo a


despertar el uC 17-- 1 minut
FI

int wakexbee = 10;


int entrada = 0;
int numconte = 99;
N

// Clock externo de 32,686kHz


O

SIGNAL(TIMER2_OVF_vect){
tdespertar++; //augmentamos el tiempo a
C

despertar
}

void setup()
{

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


output
pinMode(ecoPin, INPUT); // set ecoPin 2 as input
pinMode(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

103
TCCR2A = 0x00;
TCCR2B = (1<<CS22)|(1<<CS21)|(1<<CS20); //Set CLK/1024 or overflow
interrupt every 8s
ASSR = (1<<AS2); //Enable asynchronous operation
TIMSK2 = (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 XBee
digitalWrite (wakexbee, LOW);
}

L
if (entrada==1)

IA
{
contador=contador+1;
digitalWrite(alsensor, HIGH); // habilita la
alimentacion del pin del sensor
while (comprobar==0)
C // Finalitzaci del
EN
Periode de lectures
{
digitalWrite(disparoPin, HIGH); // envia un pols de XX
microsegons
delayMicroseconds(30); // espera XX microsegons
D

abans d'aturar-lo
digitalWrite(disparoPin, LOW); // atura el pols
FI

pulseTime = pulseIn(ecoPin, HIGH); // Look for a return


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

/ 58 to convert to cm.
delay(1000);
O

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


microsegons
C

delayMicroseconds(30); // espera XX microsegons


abans d'aturar-lo
digitalWrite(disparoPin, LOW); // atura el pols
pulseTime = pulseIn(ecoPin, HIGH); // Look for a return
pulse, it should be high as the pulse goes low-high-low
distb = 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;
}

104
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
nmero ...
tx = tx - (cx * 100); // y se lo restamos
dx = tx / 10; // Calculamos cuantas decenas tiene nuestro
nmero ...
tx = tx - (dx * 10); // y se lo restamos
ux = tx / 1; // Y por ltimo calculamos cuantas unidades
tiene nuestro nmero.

Serial.write(byte(cx + 0x30));

L
Serial.write(byte(dx + 0x30));

IA
Serial.write(byte(ux + 0x30));

Serial.write(byte(lowByte(1+addDH + addDL + cx+0x30 + dx+0x30 +


ux+0x30)|2));
// Serial.write(byte (13));
C
EN
//Serial.print(distfinal,DEC); // Escriu la
distancia mitjana
//Serial.print(" cm"); // Indica les unitats*/
//Serial.println(""); //imprime salto de linea
D

delay(500);
FI

digitalWrite(alsensor, LOW);
tdespertar=0;
N

entrada=0;
comprobar=0;
O

// Poner el XBee dormir


digitalWrite (wakexbee, HIGH);
C

}
}

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

105
* 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 mcucr


register
// 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:

L
// disable sleep...

IA
} // Executa el programa

C
10.2 Cdigo fuente ejemplo para probar sensor ultrasnico SRF05
EN
//Sensor Brossa SB Prova 1.0

const int numOfReadings = 10; // nombre de


lectures per periode
D

int readings[numOfReadings]; // vector de


FI

lectures
N

int arrayIndex = 0; // index del vector


<= nombre de lectures
O

int total = 0; // acumulaci total


C

int distfinal = 0; // distncia mitjana


de les lectures

// configuarci connexi SFR05

int ecoPin = 2; // SB ECO pin


digital 2

int disparoPin = 3; // SB Disparo pin


digital 3

unsigned long pulseTime = 0; // stores the pulse


in Micro Seconds

unsigned long distance = 0; // variable for


storing the distance(mm)

// Configuraci LED Indicador opcional

106
int redLEDPin = 9; // Red LED,
connected to digital PWM pin 9

int redLEDValue = 255; // stores the value


of brightness for the LED (0 = fully off, 255 = fully on)

// Setup lectures

void setup()

pinMode(redLEDPin, OUTPUT); // sets pin 9 as


output

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


as output

pinMode(ecoPin, INPUT); // set ecoPin 2 as


input

L
IA
// create array loop
to iterate over every item in the array
C
for (int thisReading = 0; thisReading < numOfReadings; thisReading++)
EN
{

readings[thisReading] = 0;
D

Serial.begin(9600); // initialize the


FI

serial port, lets you view the distances being pinged if connected to
computer
N

}
O

// Executa el
programa
C

void loop()

digitalWrite(disparoPin, HIGH); // envia un pols de


XX microsegons

delayMicroseconds(30); // espera XX
microsegons abans d'aturar-lo

digitalWrite(disparoPin, LOW); // atura el pols

pulseTime = pulseIn(ecoPin, HIGH); // Look for a return


pulse, it should be high as the pulse goes low-high-low

distance = pulseTime/58; // Distance = pulse


time / 58 to convert to cm.

107
total= total - readings[arrayIndex]; // extreu la lectura
antiga del total

readings[arrayIndex] = distance; // guarda la nova


lectura

total= total + readings[arrayIndex]; // afegeix la nova


lecutra al total

arrayIndex = arrayIndex + 1; // Passa a la


segent lectura

delay(3); // Espera YY
milisegons per la segent lectura (SEGURETAT)

if (arrayIndex >= numOfReadings) // Finalitzaci del


Periode de lectures

L
arrayIndex = 0; // Inicialitza

IA
l'index de mesures

distfinal = total / numOfReadings; // Calcula la


distancia mitjana
C
EN

Serial.print(distfinal,DEC); // Escriu la
distancia mitjana
D

Serial.println(" cm"); // Indica les


FI

unitats

delay(10000); // Temps de repos


N

del lector (MODIFICABLE: 5min =300.000 miliseconds!!))


O

}
C

108

También podría gustarte