Arduino Uno
Arduino Uno
Arduino Uno
TELECOMUNICACIN
UNIVERSIDAD POLITCNICA DE CARTAGENA
Autor
Directores
E-mail de
directores
[email protected]
[email protected]
Descriptores
Resumen
Diseo e implementacin de una red inalmbrica de sensores de temperatura
y luz capaz de reconfigurarse automticamente al variar la disposicin y/o
disponibilidad de los nodos que la componen. Estos nodos estn formados por
placas Arduino que se comunican entre s mediante la tecnologa ZigBee.
Los datos de los sensores, junto con la ruta que siguen los paquetes dentro de
la red, son recopilados por un nodo coordinador capaz de transmitir dicha
informacin va Bluetooth a un dispositivo Android, donde una aplicacin se
encarga de monitorizar la red, mostrando dicha informacin tanto de forma
grfica como en modo texto.
Titulacin
Departamento
Fecha de
presentacin
09/2013
ndice
1.- Introduccin .......................................................................................................................... 3
1.1.- Planteamiento inicial ..................................................................................................... 3
1.2.- Objetivos ........................................................................................................................ 3
1.3.- Organizacin de la memoria .......................................................................................... 4
2.- Tecnologas ........................................................................................................................... 5
2.1.- Arduino .......................................................................................................................... 5
2.2.- ZigBee ........................................................................................................................... 9
2.3.- Bluetooth ..................................................................................................................... 17
2.4.- Android ........................................................................................................................ 18
3.- Red de Sensores .................................................................................................................. 22
3.1.- Topologa ..................................................................................................................... 22
3.2.- Hardware ..................................................................................................................... 23
3.3.- Configuracin .............................................................................................................. 24
3.4.- Protocolo de comunicacin ......................................................................................... 27
4.- Aplicacin de monitorizacin ............................................................................................. 29
4.1.- Comunicacin Bluetooth ............................................................................................. 30
4.2.- Representacin de la informacin ............................................................................... 31
5.- Conclusiones ....................................................................................................................... 32
5.1.- Problemas encontrados ................................................................................................ 32
5.2.- Lneas futuras .............................................................................................................. 34
Anexo A. Cdigo y flujogramas .............................................................................................. 35
A1.- Coordinador ................................................................................................................. 35
A2.- Router .......................................................................................................................... 40
A3.- Terminal ....................................................................................................................... 43
A4.- MainActivity ................................................................................................................ 47
A5.- AndroidManifest .......................................................................................................... 59
Anexo B. Bibliografa y referencias ........................................................................................ 60
1.- Introduccin
Esta memoria recoge informacin detallada acerca del proceso de diseo, desarrollo e
implementacin del presente Proyecto Fin de Carrera. En este primer punto se expone cul
fue la idea original del proyecto, los objetivos que se pretenden alcanzar y cmo se
estructuran los siguientes captulos de que consta este documento.
2.- Tecnologas
En este apartado se estudian las distintas tecnologas que forman parte del proyecto, tales
como componentes hardware, protocolos de comunicacin, estndares tcnicos o entornos de
programacin.
2.1.- Arduino
Arduino1 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.
Arduino puede tomar informacin del entorno de toda una gama de sensores a travs de sus
pines de entrada y puede afectar aquello que le rodea controlando luces, motores y otros
actuadores. El microcontrolador en la placa Arduino se programa mediante el lenguaje de
programacin Arduino2 (basado en Wiring3) y el entorno de desarrollo Arduino (basado en
Processing4). Los proyectos hechos con Arduino pueden ejecutarse sin necesidad de conectar
a un ordenador, si bien tienen la posibilidad de hacerlo y comunicar con diferentes tipos de
software.
Las placas pueden ser hechas a mano5 o compradas6 montadas de fbrica; el software puede
ser descargado7 de forma gratuita. Los ficheros de diseo de referencia (CAD) estn
disponibles8 bajo una licencia abierta, as pues permite ser adaptado segn las necesidades9.
Existe una amplia gama de placas prefabricadas que se ajustan a las distintas necesidades de
cada proyecto, ofreciendo distintos tamaos, potencias, costes, modelos de microcontrolador,
necesidades de alimentacin, nmero de entradas/salidas analgicas o digitales y otras
prestaciones especficas. Algunos de los modelos oficiales ms utilizados son Uno10,
Leonardo11, Mega ADK12, Pro13, Mini14, Nano15, Fio16, y un largo etc. Adems existe gran
variedad de clones no oficiales.
2.2.- ZigBee
ZigBee19 es un estndar abierto para radiocomunicaciones de baja potencia basado en la
especificacin 802.15.420 de redes inalmbricas de rea personal o WPAN21. Incluye un
robusto y confiable protocolo de red, de bajo consumo y coste, con servicios de seguridad y
capa de aplicacin que garantiza la interoperabilidad entre dispositivos. ZigBee trabaja a una
velocidad de datos de 250 Kbps sobre la banda libre de 2,4 Ghz, aunque tambin soporta las
bandas de 868 y 900 MHz.
El estndar ZigBee es publicado y administrado por un grupo de empresas y fabricantes
denominado ZigBee Alliance22. Por tanto, el trmino ZigBee es en realidad una marca
registrada de este grupo y no un estndar tcnico. Sin embargo, para fines no comerciales, la
especificacin ZigBee se encuentra disponible de forma abierta y libre al pblico. De esta
forma la relacin entre IEEE 802.15.4 y ZigBee Alliance es similar a aquella entre IEEE
802.1123 y Wi-Fi Alliance24.
Una de las caractersticas ms destacables de ZigBee es su soporte a redes malladas o mesh
networking25. En una red mallada los nodos se interconectan entre s de forma que existen
mltiples rutas posibles entre ellos. Las conexiones entre nodos se actualizan dinmicamente
y se optimizan mediante sofisticadas tablas de encaminamiento integradas. Las redes
malladas son descentralizadas; cada nodo es capaz de descubrir la red por s mismo. Adems,
cuando un nodo abandona la red, la topologa en malla permite a los dems nodos
reconfigurar las rutas en funcin de la nueva estructura de la red. Las posibilidades de una
topologa mallada y del enrutamiento ad-hoc proporcionan una mayor estabilidad y
adaptacin a condiciones impredecibles o cada de enlaces y nodos.
Principales caractersticas de ZigBee:
Bajo coste: estndar abierto que hace innecesario el pago de patentes.
Bajo consumo energtico: permite prolongar ampliamente la vida de las bateras.
Sencillez: cuenta con una pila de protocolos de reducido tamao.
Alta confiabilidad: redes malladas con redundancia de enlaces y canales y
posibilidad de enrutamiento alternativo automtico.
Despliegue de red sencillo: fcil de montar y administrar gracias a las redes ad-hoc y
al enrutamiento automtico.
Alta seguridad: proporciona integridad de datos y autenticacin, haciendo uso del
algoritmo de cifrado AES-128.
Compatibilidad: al tratarse de un estndar abierto se garantiza la interoperabilidad
entre dispositivos de diferentes fabricantes.
Baja latencia: los retardos producidos en las distintas tareas de red son muy
reducidos, del orden de milisegundos frente a varios segundos en otras tecnologas.
Gran capacidad: una misma red puede soportar ms de 65000 nodos independientes.
9
Estas caractersticas convierten a ZigBee en la tecnologa ideal para implementar una red de
sensores como la que es objeto de este proyecto. En fases iniciales del diseo se baraj la
posibilidad de emplear otras tecnologas como Wi-Fi o Bluetooth pero, como se puede
apreciar en la figura 5, el elevado consumo de la primera y el escaso alcance y poca
escalabilidad de la segunda provocaron que fuesen descartadas en favor de ZigBee.
10
11
Direccionamiento.
Cada dispositivo ZigBee posee una direccin nica, exclusiva e inmutable de 64 bits
denominada direccin MAC que le distingue de cualquier otro dispositivo a nivel mundial.
Adicionalmente tambin dispone de una direccin de red de 16 bits que le es asignada
dinmicamente por el coordinador al asociarse a la red. Dentro de una PAN cualquier
dispositivo puede ser identificado unvocamente por cualquiera de estas dos direcciones. Por
ltimo, tambin se le puede asignar arbitrariamente un nombre identificativo formado por una
cadena de caracteres, pero este nombre no garantiza su identificacin inequvoca dentro de
una red.
De igual modo, cada red ZigBee posee dos identificadores que permiten distinguirla de
cualquier otra red de su entorno, incluso de las que operan en su mismo canal, permitiendo su
coexistencia en un mismo espacio. El primero de estos identificadores se denomina PAN ID
y es un valor de 16 bits que se establece al crearse la red. El segundo es el llamado Extended
PAN ID, un valor de 64 bits asignado arbitrariamente por el administrador de la red y que es
aadido, junto al PAN ID, en los paquetes beacon de sealizacin para permitir que los nodos
que deseen asociarse puedan identificar de forma unvoca la red.
Adems, dos redes ZigBee que compartan un mismo espacio se pueden diferenciar segn la
frecuencia del canal sobre el que trabajan. Cuando el nodo coordinador crea la red sondea los
canales disponibles en la banda utilizada (2,4 GHz) y elige el ms adecuado. Todos los nodos
que se asocien a la red deben usar este mismo canal. Por defecto, los dispositivos ZigBee se
encargan automticamente de seleccionar el canal adecuado.
Figura 7 Diagrama de Venn que muestra tres redes ZigBee coexistiendo en un mismo espacio gracias a
que pueden ser diferenciadas unvocamente por su PAN ID y el canal de transmisin. De igual modo, los
nodos que las constituyen pueden tener la misma direccin de red que los nodos de las otras redes, puesto
que es un valor local a la PAN.
12
Seguridad.
La tecnologa ZigBee garantiza la seguridad de las comunicaciones mediante el mecanismo
Advanced Encryption Standard26 o AES. Se trata de un fiable, rpido y eficiente algoritmo de
cifrado en bloque que utiliza claves de 128 bits y que proporciona confidencialidad de datos,
integridad en las conexiones, autenticacin de los elementos del sistema y proteccin a la red
frente a ataques malintencionados.
ZigBee soporta dos modos de manejo de claves:
Claves de red: proporcionan seguridad a las comunicaciones entre nodos. Cada
paquete es cifrado y enviado al siguiente nodo de la red donde es descifrado, cifrado
de nuevo y retransmitido al siguiente nodo en ruta hasta su destino.
XBee.
XBee27 es el hardware ZigBee utilizado en el proyecto. Se trata de una gama de mdulos de
radio fabricados por Digi International28 con una amplia variedad de modelos, componentes,
firmware, potencias de transmisin y antenas. Trabajan con un voltaje de operacin de 3,3
voltios y, aunque incorporan hasta 20 pines para distintas operaciones como reinicio o modo
de bajo consumo, pueden funcionar haciendo uso tan slo de sus 4 pines principales:
alimentacin, tierra, y entrada y salida de datos.
Cuentan con un microchip que, adems de ocuparse de las tareas propias de la comunicacin
radio, les permite realizar operaciones con un nivel de lgica muy bsico, como por ejemplo
leer directamente datos de sensores y retransmitirlos sin tener que contar con procesado
externo. Para lgica ms avanzada deben conectarse a otro dispositivo que se encargue de
ello, como un microcontrolador ms complejo.
13
14
Las radios XBee presentan dos modos de funcionamiento, denominados modos AT y API.
Modo AT: se trata de un modo transparente donde la informacin recibida por el pin
de entrada de datos es retransmitida por radio sin ninguna modificacin. Los datos
pueden ser enviados a un nico destinatario (punto a punto) o bien pueden ser
transmitidos a mltiples destinos (broadcast).
Modo API: en este modo, los datos son encapsulados dentro de una trama que
proporciona varias funcionalidades adicionales, tales como direccionamiento,
confirmacin de paquetes y checksum, entre otras. Existen varios tipos de tramas API
y cada una ofrece distintas prestaciones: comandos de configuracin, transmisin de
datos, reconocimiento de mensajes, etc.
Todas las radios XBee empleadas en el proyecto funcionan bajo el modo API, que les ofrece
las funcionalidades necesarias para realizar algunas de las operaciones ms complejas, como
la reconfiguracin automtica de la red, que no seran posibles en el modo AT.
Para programar los mdulos XBee se debe cargar el firmware deseado y modificar el valor de
los distintos parmetros que determinan su comportamiento. Para ello se utiliza un software
distribuido por Digi, denominado X-CTU29 y que se puede descargar de forma gratuita desde
su pgina web30. Este programa, disponible slo para entornos Windows, permite actualizar
el firmware del mdulo, determinar su comportamiento como coordinador, router o terminal,
leer la configuracin actual, realizar pruebas de alcance o facilitar el acceso a las
funcionalidades del modo API, entre otras posibilidades. Basta con conectar el mdulo a un
ordenador haciendo uso de un adaptador USBi y usar el software para programarlo con la
configuracin deseada.
A pesar de que la nica forma de actualizar el firmware de un mdulo XBee es mediante el
software X-CTU, para modificar otras configuraciones se puede hacer uso de cualquier otro
programa terminal serie, entrar en modo comando y reconfigurar el mdulo mediante el envo
de comandos AT31.
i
En caso de no disponer de un adaptador USB especfico, se puede conectar el mdulo XBee a una placa
Arduino a la que previamente se ha borrado su programacin o retirado el microcontrolador, y conectar dicha
placa al ordenador mediante su puerto USB. De esta forma, la placa Arduino acta como adaptador entre PC y
XBee, permitiendo la configuracin de ste ltimo mediante el programa X-CTU.
15
16
2.3.- Bluetooth
Bluetooth32 es una tecnologa de comunicaciones inalmbricas de corto alcance, segura,
simple y ampliamente extendida que soporta canales de voz y datos. Su principal objetivo es
remplazar las conexiones cableadas entre dispositivos conservando un alto grado de
seguridad. Est especficamente diseado para que sus transceptores sean pequeos, baratos y
de bajo consumo, pudiendo ser integrados en cualquier dispositivo.
Bluetooth fue especificado en el estndar 802.15.133 que a da de hoy no se sigue
manteniendo. En su lugar, un grupo de empresas llamado Bluetooth Special Interest Group34,
conocido tambin como Bluetooth SIG, se encarga de administrar el estndar y del desarrollo
de la especificacin.
La tecnologa Bluetooth opera sobre la banda de frecuencias libre de 2,4 GHz utilizando 79
canales de 1 MHz. Emplea la tcnica de espectro ensanchado por salto en frecuencia
(Frequency Hopping Spread Spectrum o FHSS35) que produce un cambio en la frecuencia de
transmisin cada 625 microsegundos, es decir, 1600 saltos por segundo. De esta forma se
minimizan las interferencias con otras comunicaciones inalmbricas que operan en la misma
banda de frecuencias.
Una comunicacin Bluetooth ocurre siempre entre un dispositivo maestro y uno esclavo, que
previamente han negociado las caractersticas de la conexin en un proceso denominado
vinculacin o pairing. Los esclavos pueden comunicarse nicamente con el maestro y slo
cuando ste se lo indique. Sin embargo, los dispositivos Bluetooth son simtricos y pueden
actuar como maestro o esclavo indistintamente. Esto permite formar redes ad-hoc que se
adaptan a las necesidades de la comunicacin.
Los dispositivos Bluetooth forman redes denominadas piconets. Cada piconet consta de un
dispositivo maestro y hasta 7 esclavos. Todos los dispositivos de una piconet comparten la
misma secuencia de salto en frecuencia, que suele denominarse canal FH o Frequency
Hopping. Los maestros se encargan de establecer la red y de controlar el canal FH,
determinando los instantes de salto en funcin de su reloj local. Los esclavos siguen la
secuencia que les marca el maestro, de forma que todos comparten la misma. Cada piconet
utiliza una secuencia de ensanchado distinta, permitiendo as la coexistencia de mltiples
redes en un mismo espacio.
Existen tres clases de mdulos Bluetooth en funcin de su alcance:
Clase 1: hasta 100 metros. Usados principalmente en entornos industriales
Clase 2: hasta 10 metros. Los ms comnmente extendidos en dispositivos mviles.
Clase 3: hasta 1 metro. Su reducido alcance limita sus posibles aplicaciones.
El uso de Bluetooth est muy extendido, lo que se convierte en su principal ventaja. Su
presencia en la inmensa mayora de dispositivos mviles como smartphones, tablets e
infinidad de otros dispositivos, convierte a Bluetooth en una de las tecnologas inalmbricas
de mayor compatibilidad.
17
2.4.- Android
Android36 es un sistema operativo de cdigo abierto basado en Linux37 y distribuido por
Google38 bajo licencia Apache39. Est diseado principalmente para dispositivos mviles de
pantalla tctil, como smartphones o tablets. Su naturaleza de cdigo abierto y lo permisivo de
su licencia hace posible que el software basado en Android sea libremente creado, modificado
y distribuido por cualquier desarrollador. Se facilita completo acceso al kit de desarrollo de
software o SDK40 que proporciona todas las herramientas necesarias para implementar,
probar y depurar aplicaciones, junto con prestaciones adicionales como libreras API,
documentacin, emulador, cdigos de ejemplo y tutoriales. Adems, se permite a los
desarrolladores la libre publicacin de sus creaciones, facilitando su distribucin a travs de
la plataforma Google Play41.
Los programas en entorno Android, denominados comnmente aplicaciones o apps, se
implementan en una versin personalizada del lenguaje de programacin Java42. Para ello se
puede hacer uso de la plataforma libre Eclipse43 que proporciona entornos de desarrollo
integrado tanto para Java como para Android. Adems, recientemente ha sido publicado por
Google un entorno de desarrollo especfico de Android, denominado Android Studio44,
disponible de forma gratuita desde su web. Debido a que Android Studio se encuentra todava
en fases muy iniciales de su desarrollo, todo el software Android implementado en este
proyecto se ha desarrollado mediante la plataforma Eclipse.
18
Actividades.
Una actividad es un componente de una aplicacin Android que proporciona una interfaz con
la que el usuario puede interactuar. Cada actividad dispone de un espacio en el que
representar su interfaz. Normalmente este espacio ocupa toda la pantalla del dispositivo,
aunque puede ser ms pequeo o situarse por encima de otras actividades.
Una aplicacin puede constar de varias actividades vinculadas entre s. Una de estas
actividades es la principal, que es presentada al usuario en el momento de lanzar la
aplicacin. Cada actividad puede iniciar otras actividades para realizar distintas acciones.
Cuando se inicia una nueva actividad la anterior es detenida, pero preservada en una pila de
actividades. Se trata de una pila LIFO (Last In, First Out) que permite volver a la actividad
inmediatamente anterior pulsando el botn Atrs del dispositivo.
Durante la navegacin del usuario por la aplicacin, las actividades transitan entre distintos
estados en lo que se denomina el ciclo de vida de actividad45. Cuando una actividad cambia
de un estado a otro, el sistema llama a determinados mtodos que determinan su
comportamiento al transitar a ese nuevo estado, realizando las acciones correspondientes
como por ejemplo iniciar variables en caso de crearse una nueva actividad o liberar recursos
en caso de detenerse. Estos mtodos pueden ser modificados por los desarrolladores,
personalizando su comportamiento o incluyendo acciones adicionales.
19
Figura 13 Representacin del ciclo de vida de una actividad Android. Se muestran los posibles estados
de la actividad y los mtodos que el sistema utiliza para transitar entre ellos.
Como se puede observar en la figura 13, una actividad puede encontrarse en uno de cinco
estados posibles. Sin embargo slo tres de estos estados son estticos, es decir, la actividad
puede permanecer en ellos por un periodo de tiempo prolongado. Estos estados son:
Ejecutndose (Resumed): en este estado la actividad se encuentra corriendo en
primer plano y el usuario puede interactuar con ella. Si la actividad pasa a segundo
plano, el sistema llama al mtodo onPause().
Pausada (Paused): la actividad se encuentra en segundo plano, oculta parcialmente
por otra actividad que no ocupa toda la pantalla. La actividad pausada no ejecuta
ningn cdigo y no puede interactuar con el usuario. Si vuelve a primer plano se
llama al mtodo onResume() y se vuelve al estado de ejecucin. Si por el contrario la
actividad pasa por completo a segundo plano, el sistema llama a onStop() y transita al
siguiente estado.
Detenida (Stopped): la actividad est completamente oculta en segundo plano y no es
visible por el usuario. Se conserva su instancia y toda la informacin correspondiente,
pero no puede ejecutar cdigo. El sistema llama al mtodo onRestart() si la actividad
vuelve a primer plano, recuperando la informacin guardada. Si la actividad es
cerrada por completo, se ejecuta el mtodo onDestroy().
Los otros dos estados, Creada (Created) e Iniciada (Started), son transitorios y el sistema
avanza rpidamente por ellos para pasar al estado de ejecucin.
20
AndroidManifest
Cada aplicacin debe tener un archivo llamado AndroidManifest.xml46, con ese exacto
nombre, en su directorio raz. Se trata de un archivo XML que, mediante el uso de un sistema
de etiquetas y atributos, describe las caractersticas fundamentales de la aplicacin y define
cada uno de sus componentes. El sistema Android debe disponer de esta informacin antes de
poder ejecutar cualquier cdigo de la aplicacin. Algunas de las funciones que lleva a cabo
este archivo son:
Dar nombre al paquete Java. Este nombre identifica unvocamente la aplicacin.
Describe los distintos componentes de la aplicacin: actividades, servicios, clases, etc.
Determina los permisos que autorizan a la aplicacin para acceder a los distintos
recursos del dispositivo.
Establece la versin mnima del sistema Android que requiere la aplicacin.
En el Anexo A5 del presente documento se puede observar el archivo AndroidManifest de la
aplicacin de monitorizacin desarrollada en este proyecto.
Layouts
Un layout47 define la estructura visual de la interfaz de usuario de la aplicacin. Puede ser
creada de dos formas: mediante la declaracin de los elementos de la interfaz en un archivo
XML o mediante la instanciacin de los componentes del layout durante la ejecucin de la
aplicacin. Tambin se pueden emplear libremente estos dos mtodos en combinacin para
conseguir los resultados deseados.
En el proyecto se usan principalmente dos layouts: uno para la representacin grfica de la
red y otro para presentar los datos en modo texto. Ambos layouts se integran dentro de una
interfaz principal mediante una estructura de vistas denominada ViewFlipper48 que permite
cambiar de una a otra con slo pulsar un botn.
Los principales elementos de que constan los layouts desarrollados son:
TextView49: son campos de texto que presentan la informacin recibida de la red.
ImageView50: estos elementos permiten mostrar una imagen por pantalla.
Drawable51: se trata de un recurso que referencia una imagen para poder ser mostrada
dentro de un ImageView
Button52: botones que, al ser pulsados, permiten que el programa ejecute un cdigo
determinado.
21
Figura 14 Topologa de la red de sensores mostrando todos los posibles enlaces entre los distintos nodos.
22
3.2.- Hardware
Cada nodo de la red, independientemente de su rol dentro de la misma, consta de los
siguientes componentes hardware:
Placa Arduino Uno: es el principal elemento del nodo, al que se conectan todos los
dems componentes. Es su microcontrolador quien determina el comportamiento del
nodo. Las salidas de los sensores se conectan a las entradas analgicas de la placa,
permitindole leer sus datos. Adems, mediante sus dos salidas de alimentacin de
3,3 y 5 voltios, se encarga de suministrar el voltaje de operacin adecuado a cada
componente hardware.
Mdulo XBee serie 2: es el encargado de la comunicacin inalmbrica con los dems
nodos e implementa el protocolo ZigBee, que permite la conexin y reconfiguracin
automtica de la red. Dependiendo de su configuracin actuar como coordinador,
router o terminal.
XBee Shield53: se trata de un adaptador especialmente diseado para conectar una
placa Arduino y un mdulo XBee. Realiza todas las conexiones necesarias entre los
pines de ambos elementos y dota de estabilidad al conjunto. Proporciona fcil acceso
a los conectores libres de la placa, junto con un botn adicional de reinicio del
microcontrolador. Dispone adems de un interruptor que permite seleccionar la salida
serie del mdulo XBee entre radio o USB, lo que facilita su configuracin.
Sensor de temperatura TMP3654: se trata de un pequeo dispositivo con tres patillas:
alimentacin, tierra y una salida de voltaje que vara en funcin de la temperatura. La
placa Arduino lee este valor de voltaje por la entrada analgica A0 y lo convierte en
grados Celsius mediante la frmula:
Temperatura (C) = ([(Vout * Alimentacin * 1000) / 1023] 500) / 10
Fotorresistencia LDR55: una fotorresistencia es un elemento cuya resistividad elctrica
vara en funcin de la luminosidad que detecta. Conectada al divisor de tensin de la
figura 15 acta como un sensor de luz. Mediante el pin analgico A1 la placa lee la
salida Vout, que vara en funcin de la luz presente, y traduce este valor de voltaje a la
magnitud de luminosidad Lux mediante la frmula:
Luminosidad (Lux) = Vout * 10000 / 1023
Figura 15 Divisor de tensin que permite a la fotorresistencia LDR actuar como un sensor de luz.
23
3.3.- Configuracin
Una vez interconectados correctamente los distintos componentes hardware, para que el nodo
presente el comportamiento deseado es necesario configurar mediante software dos de estos
elementos:
En primer lugar es necesario programar el microcontrolador de la placa mediante el IDE
Arduino, conectando el puerto USB de la placa a un PC y cargando el sketch
correspondiente. En la realizacin del proyecto se han desarrollado tres sketches distintos
para los tres tipos de nodo presentes en la red, que dotan a la placa del comportamiento
adecuado en cada caso. En el Anexo A de esta memoria se proporciona los cdigos en
lenguaje Arduino de estos sketches, junto con sus correspondientes diagramas de flujo.
24
Por otro lado, tambin es necesario configurar el mdulo XBee mediante la utilizacin del
software X-CTU. Para conectar el mdulo al ordenador se puede hacer uso de la placa
Arduino a modo de adaptador, borrando previamente el programa cargado en el
microcontrolador y cambiando el interruptor del shield a la posicin USB. De este modo el
mdulo se comunica directamente con el PC y se puede cargar en l el firmware adecuado y
configurar una serie de parmetros, tambin denominados comandos AT, que determinan su
comportamiento y las caractersticas de la comunicacin.
Si bien estos parmetros pueden modificarse mediante la ejecucin de comandos AT desde
cualquier programa terminal serie, para cargar un nuevo firmware en un mdulo XBee es
necesario el uso del programa X-CTU.
25
Algunos de los parmetros ms importantes, y que deben ser configurados en todos los
mdulos XBee que formen parte de la red, son:
ID (Identity): valor de 64 bits que determina el identificador de la red (Extended PAN
ID) a la que pertenece el nodo. La red del proyecto tiene como identificador el valor
1234.
NI (Node Identity): cadena de caracteres usada como identificador del nodo. El
microcontrolador determina dinmicamente la identidad del nodo y el origen de los
mensajes a partir de este valor. Cada nodo de la red est identificado por un carcter
alfanumrico: 0 para el coordinador, del 1 al 9 para los routers y una letra ASCII para
los terminales.
DH (Destination High): valor que representa los 32 bits ms significativos de la
direccin de 64 bits del nodo destino de los mensajes transmitidos. Siempre debe ser
0x00000000.
DL (Destination Low): este valor son los 32 bits menos significativos de la direccin
de 64 bits del nodo destino de los mensajes transmitidos. Para el coordinador este
valor debe ser la direccin broadcast (0x0000FFFF), y para todos los dems nodos
debe ser la direccin por defecto del coordinador (0x00000000).
EE (Encryption Enable): activa (1) o desactiva (0) el algoritmo de cifrado AES para
dotar de seguridad las transmisiones del nodo. Los nodos de la red implementada
tienen activado el cifrado AES.
NK (Netwrok Key): clave de red de hasta 128 bits utilizada para cifrar y descifrar los
mensajes protegidos mediante AES. La clave de red utilizada es ABCD.
PL (Power Level): Establece la potencia de transmisin del nodo. Este valor es un
nmero entero entre 0 (potencia de -8 dBm) y 4 (potencia de +2dBm). Los mdulos
del proyecto estn configurados para usar la mnima potencia para ahorrar energa y
limitar en lo posible el alcance de las transmisiones.
Tambin existen parmetros de slo lectura que ofrecen informacin de diagnstico de la red,
y a los que se puede acceder mediante el software X-CTU o tambin ejecutando los
comandos AT adecuados. Algunos de estos parmetros pueden ser:
MY: direccin de red de 16 bits del nodo, asignada dinmicamente al unirse a la red.
MP: direccin de red de 16 bits del nodo padre. Este valor es esencial para conocer la
ruta que siguen los mensajes dentro de la red.
NC: nmero restante de nodos hijos que pueden tomar a este nodo como padre. Si su
valor es 0 ya no puede aceptar ms nodos hijos.
DB: potencia del ltimo mensaje recibido por el mdulo.
26
27
Identificador de nodo: valor de 1 byte que identifica el nodo origen del mensaje y
que coincide con el parmetro NI. Este valor se establece al configurar el mdulo
XBee y el microcontrolador puede acceder a l mediante el comando AT NI. El
identificador del nodo coordinador es 0, los routers estn numerados por un carcter
numrico del 1 al 9 y los terminales por un carcter alfabtico ASCII. De esta forma
la red puede soportar hasta 60 nodos.
Identificador del nodo padre: valor de 1 byte que determina la identidad del nodo
padre. Mediante la ejecucin del comando AT MP, el microcontrolador obtiene del
mdulo XBee la direccin de red del nodo padre. Una vez obtenida, se sondea a todos
los posibles routers de la red con el comando AT ND, que solicita informacin como
la direccin de red y el identificador NI. Este sondeo es necesario puesto que las
direcciones de red son asignadas dinmicamente por el coordinador y no tienen un
valor fijo. Entonces se compara la direccin recibida de cada nodo con la direccin
del nodo padre obtenida anteriormente y, si alguna coincide, se establece su
identificador NI como el del nodo padre.
Dato de temperatura: float de 4 bytes que contiene el ltimo dato ledo del sensor de
temperatura.
Dato de luz: float de 4 bytes que contiene el ltimo dato ledo del sensor de luz.
Cabe destacar que, en caso de que un nodo caiga, abandone la red o una comunicacin entre
nodos se interrumpa por cualquier motivo, la naturaleza ad-hoc del protocolo ZigBee permite
la reconfiguracin automtica de los enlaces entre los distintos nodos de la red. Esta
restructuracin de la red se produce automticamente cada vez que la ruta entre el
coordinador y cualquier terminal se ve interrumpida y garantiza que la comunicacin se lleve
a cabo siempre que exista un camino posible entre nodo y coordinador,
28
29
30
5.- Conclusiones
El proyecto ha conseguido cumplir el objetivo de disear e implementar una red mallada
inalmbrica de sensores capaz de reconfigurarse automticamente para adaptarse a
condiciones cambiantes tales como desconexin de nodos, modificaciones en su disposicin,
cadas de enlaces o ingreso de nuevos nodos a la red.
Asimismo, mediante la aplicacin Android desarrollada se cuenta con la capacidad de
monitorizar el estado de la red en cada momento, pudiendo observarse de forma inmediata e
intuitiva la situacin de los nodos y de los distintos enlaces entre ellos, as como los valores
ledos por los sensores de luz y temperatura presentes en cada nodo. De esta forma, se cumple
el objetivo didctico que supuso el punto de partida del proyecto.
Otras de las principales conclusiones que se pueden extraer de la realizacin de este proyecto
son las sealadas a continuacin:
Se ha podido evidenciar el potencial de las placas Arduino como elemento hardware
libre de bajo coste. Su versatilidad, la potencia de su lenguaje de programacin y la
gran gama de modelos disponibles, junto con la posibilidad de montar placas
personalizadas bajo licencia abierta, permite a las placas Arduino adaptarse a las
necesidades de cualquier proyecto o prototipo que requiera del uso de un
microcontrolador.
Se han estudiado las principales caractersticas de la tecnologa de comunicacin
inalmbrica ZigBee, entre las que se han destacado su sencillez y eficacia para el
despliegue, configuracin y administracin de redes ad-hoc auto-configurables de
bajo consumo, gran alcance, adaptabilidad frente a condiciones impredecibles y
elevado nmero de nodos. Estas prestaciones convierten a ZigBee en una tecnologa
inalmbrica superior a otras alternativas como Wi-Fi para la realizacin de un
proyecto de esta ndole.
Se ha destacado la gran extensin de la tecnologa inalmbrica Bluetooth y su
presencia en la prctica totalidad de dispositivos mviles de ltima generacin, lo que
la convierte en una de las tecnologas de comunicacin de mayor compatibilidad. Que
el nodo coordinador utilice Bluetooth para comunicarse con el dispositivo encargado
de la monitorizacin del sistema, en lugar de mediante la tecnologa ZigBee ya
presente en la red, garantiza que la gama de dispositivos con los que puede interactuar
sea la mayor posible.
Se ha podido observar cmo la aplicacin de monitorizacin desarrollada en entorno
Android permite convertir cualquier dispositivo mvil que cuente con este sistema
operativo, como puede ser un smartphone o una tablet, en una potente plataforma para
monitorizar o controlar sistemas de forma remota, independientemente de las distintas
tecnologas en que stos se basen. Android ofrece de forma abierta un potente entorno
de programacin y todas las herramientas indispensables para programar aplicaciones
que se adapten a las necesidades de cada proyecto.
32
33
34
Inicio
Obtener datos de
sensores
Declaracin e
inicializacin de
variables
Recibir mensaje
XBee
Leer voltaje de
salida del sensor
setup()
NO
Es un mensaje
de datos vlido?
Configuracin de
pines y puertos
serie
Convertir voltaje en
temperatura o luz
SI
loop()
Identificar origen y
reiniciar su timeout
Se ha recibido
peticin de
actualizacin por
Bluetooth?
SI
Guardar en la
variable
correspondiente
NO
return
Extraer y almacenar
datos del mensaje
Obtener datos
de sensores
Decrementar
timeout de los
nodos activos
35
#include <XBee.h>
#include <SoftwareSerial.h>
#define
#define
#define
#define
const
const
const
const
const
NUM_NODOS 12
NUM_ROUTERS 4
BT_TX 10
BT_RX 11
//Declaracin de constantes
36
if (BluetoothSerial.available()){
if (BluetoothSerial.read() == 'A'){
temp.ftemp = get_temp();
luz.fluz = get_luz();
nodo[0].timeout = NUM_NODOS;
nodo[0].padre = 0;
nodo[0].temperatura = temp.ftemp;
nodo[0].luminosidad = luz.fluz;
enviar_datos();
}
}
xbee.readPacket(1000);
37
}
void parpadeo(int pin, int times, int wait) {
//funcin que controla el parpadeo del led
for (int i = 0; i < times; i++) {
digitalWrite(pin, HIGH);
delay(wait);
digitalWrite(pin, LOW);
if (i + 1 < times) {
delay(wait);
}
}
}
void actualizar_nodos(){
//funcin que reduce el timeout de los nodos
for(i=0; i<NUM_NODOS; i++){
if (nodo[i].timeout > 0){
nodo[i].timeout -= 1;
}
}
}
void enviar_datos(){
//funcion que enva por Bluetooth todos los datos almacenados en el array
de nodos
for(i=0; i<NUM_NODOS; i++){
BluetoothSerial.write(i);
if(nodo[i].timeout > 0){
BluetoothSerial.print("Padre: ");
if(i==0) BluetoothSerial.println("-");
else BluetoothSerial.println(nodo[i].padre);
BluetoothSerial.print("Temp: ");
BluetoothSerial.println(nodo[i].temperatura);
BluetoothSerial.print("Luz: ");
BluetoothSerial.println(nodo[i].luminosidad);
}
else BluetoothSerial.println("Desactivado");
BluetoothSerial.write(0x7f);
38
void mostrar_datos(){
//funcin auxiliar que enva los datos por el monitor serial. No es llamada
durante la ejecucin, pero se conserva para posible depuracin futura.
boolean actividad = false;
Serial.println("Datos de los nodos activos:");
for(i=0; i<NUM_NODOS; i++){
if(nodo[i].timeout > 0){
if(!actividad) actividad = true;
Serial.println("---------------------------------------");
Serial.print("Datos recibidos del sensor numero ");
Serial.println(i);
Serial.print("Cuyo padre es el nodo numero ");
Serial.println(nodo[i].padre);
Serial.print("Temperatura: ");
Serial.print(nodo[i].temperatura);
Serial.println(" C");
Serial.print("Luminosidad: ");
Serial.print(nodo[i].luminosidad);
Serial.println(" lux");
delay(100);
}
}
if(!actividad) Serial.println("No se ha registrado ningn nodo activo");
}
const float get_temp(){
//funcin que lee el sensor de temperatura
const int temp_voltaje = analogRead(PIN_TEMP);
const float t = temp_voltaje * ALIMENTACION / 1023;
return ((t * 1000 - 500) / 10);
}
const float get_luz(){
//funcin que lee el sensor de luz
const int luz_voltaje = analogRead(PIN_LUZ);
const float l = luz_voltaje * ALIMENTACION / 1023;
return (l * (10000 / ALIMENTACION));
}
39
A2.- Router
Inicio
Obtener ID
del nodo
Declaracin e
inicializacin de
variables
Ejecutar comando
AT NI
setup()
Guardar respuesta
como ID
Configuracin de
pines y puertos
serie
return
Obtener ID del
nodo
loop()
Obtener datos de
sensores
Obtener datos
de sensores
Leer voltaje de
salida del sensor
Rellenar el paquete
de datos con la info
obtenida
Convertir voltaje en
temperatura o luz
Envar datos al
coordinador
Guardar en la
variable
correspondiente
Recibir ACK y
retardo de 1
segundo
return
40
#include <XBee.h>
#define COORDINADOR 0x4079c2a9
const
const
const
const
const
//declaracin de constantes
union u_tag1 {
byte t[4];
float ftemp;
} temp;
//declaracin de variables
union u_tag2 {
byte l[4];
float fluz;
} luz;
int i = 0;
byte id = 0xFF;
byte datos[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
XBee xbee = XBee();
XBeeAddress64 direccion = XBeeAddress64(0x0013a200, COORDINADOR);
ZBTxRequest tx = ZBTxRequest(direccion, datos, sizeof(datos));
ZBTxStatusResponse txStatus = ZBTxStatusResponse();
void setup(){
pinMode(LED, OUTPUT);
Serial.begin(BAUD_RATE);
xbee.setSerial(Serial);
obtener_ID();
}
void loop(){
temp.ftemp = get_temp();
luz.fluz = get_luz();
datos[0] = id;
datos[1] = 0;
for(i=0;i<4;i++){
datos[i+2] = temp.t[i];
}
for(i=0;i<4;i++){
datos[i+6] = luz.l[i];
}
xbee.send(tx);
parpadeo(LED, 1, 100);
if (xbee.readPacket(500)) {
41
if (txStatus.getDeliveryStatus() == SUCCESS) {
parpadeo(LED, 5, 50);
} else {
parpadeo(LED, 3, 500);
}
}
delay(1000);
}
}
const float get_temp(){
//funcin que lee el sensor de temperatura y devuelve el dato en grados.
const int temp_voltaje = analogRead(PIN_TEMP);
const float t = temp_voltaje * ALIMENTACION / 1023;
return ((t * 1000 - 500) / 10);
}
const float get_luz(){
//funcin que lee el sensor de luz y devuelve el dato en lux.
const int luz_voltaje = analogRead(PIN_LUZ);
const float l = luz_voltaje * ALIMENTACION / 1023;
return (l * (10000 / ALIMENTACION));
}
void parpadeo(int pin, int times, int wait) {
//funcin que controla el parpadeo del led
for (int i = 0; i < times; i++) {
digitalWrite(pin, HIGH);
delay(wait);
digitalWrite(pin, LOW);
if (i + 1 < times) {
delay(wait);
}
}
}
void obtener_ID(){
//funcin que obtiene el ID del nodo mediante el comando AT NI
byte comando_NI[] = {'N','I'};
AtCommandRequest atRequest = AtCommandRequest(comando_NI);
AtCommandResponse atResponse = AtCommandResponse();
xbee.send(atRequest);
if (xbee.readPacket(5000)) {
if (xbee.getResponse().getApiId() == AT_COMMAND_RESPONSE) {
xbee.getResponse().getAtCommandResponse(atResponse);
if (atResponse.isOk()) {
if (atResponse.getValueLength() > 0) {
id = atResponse.getValue()[0] - '0';
}
}
}
}
}
42
A3.- Terminal
Inicio
Obtener ID
del nodo
Declaracin e
inicializacin de
variables
Ejecutar comando
AT NI
Obtener ID del
nodo padre
Obtener direccin
de red del nodo
padre
(AT MP)
setup()
Configuracin de
pines y puertos
serie
Guardar respuesta
como ID
Sondear a los
posibles routers
solicitando
informacin
(AT ND)
return
Obtener ID del
nodo
NO
Obtener ID del
nodo padre
loop()
Obtener datos de
sensores
Coincide
alguna
direccin?
SI
Establecer el NI de
esa direccin como
ID del padre
Leer voltaje de
salida del sensor
Obtener datos
de sensores
Convertir voltaje en
temperatura o luz
Rellenar el paquete
de datos con la info
obtenida
Guardar en la
variable
correspondiente
Envar datos al
coordinador
return
Recibir ACK y
retardo de 1
segundo
43
SI
return
Es una ID
correcta (0-9)?
NO
Inicio
#include <XBee.h>
#define COORDINADOR 0x4079c2a9
const
const
const
const
const
//declaracin de constantes
union u_tag1 {
byte t[4];
float ftemp;
} temp;
union u_tag2 {
byte l[4];
float fluz;
} luz;
int i = 0;
//declaracin de variables
byte id = 0xFF;
byte id_padre = 0xFF;
byte id_padre_aux = 0xFF;
byte dir_padre[] = { 0xFF, 0xFE };
byte dir_aux[] = { 0xFF, 0xFE };
byte datos[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
XBee xbee = XBee();
XBeeAddress64 direccion = XBeeAddress64(0x0013a200, COORDINADOR);
ZBTxRequest tx = ZBTxRequest(direccion, datos, sizeof(datos));
ZBTxStatusResponse txStatus = ZBTxStatusResponse();
void setup(){
pinMode(LED, OUTPUT);
Serial.begin(BAUD_RATE);
xbee.setSerial(Serial);
delay(1000);
obtener_ID();
buscar_padre();
}
void(* resetFunc) (void) = 0;
void loop(){
temp.ftemp = get_temp();
luz.fluz = get_luz();
datos[0] = id;
datos[1] = id_padre;
for(i=0;i<4;i++){
datos[i+2] = temp.t[i];
}
for(i=0;i<4;i++){
datos[i+6] = luz.l[i];
}
xbee.send(tx);
parpadeo(LED, 1, 100);
44
if (xbee.readPacket(500)) {
45
}
}
}
}
}
delay(100);
}
}
void buscar_padre(){
byte id_aux = '0';
id_padre = 0xFF;
dir_padre[0] = 0xFF;
dir_padre[1] = 0xFE;
46
A4.- MainActivity
Inicio
Declaracin e
inicializacin de
variables
Mostrar interfaz y
referenciar
elementos
Preparar dispositivo
Bluetooth
No
(Des)Conectar
Est conectado
Bluetooth?
SI
Encontrar
coordinador y
conectar
Botn pulsado?
Cambiar
vista
Actualizar
Desconectar
Bluetooth
Envar peticin
de datos
47
Cambiar vista
Encontrar
coordinador
Enviar peticin
de datos
Recorrer lista de
dispositivos
aprendidos
Enviar carcter A
al coordinador
Alguno es el
coordinador?
Mostrar mensaje en
campo de texto
SI
NO
Declarar variables
locales
Almacenar en buffer
datos recibidos
return
Extraer el mensaje e
identificar el nodo
correspondiente
Desconectar
Bluetooth
Cambiar vista
Mostrar el mensaje
en el campo de
texto adecuado
Cerrar streams de
entrada y salida
Cambiar referencias
a elementos de
pantalla
Dibujar el nodo
correspondiente
como encendido o
apagado
Cambiar al otro
layout
Redibujar los
enlaces en funcin
de la ruta seguida
por el mensaje
return coordinador
Informar de error
Conectar
Bluetooth
Conectar a
coordinador
Recibir datos
Desconectar del
coordinador
return
Abrir streams de
entrada y salida
Recibir datos
Resetear elementos
de pantalla
return
return
return
48
package es.upct.monitorredsensores;
import
import
import
import
import
java.io.IOException;
java.io.InputStream;
java.io.OutputStream;
java.util.Set;
java.util.UUID;
import
import
import
import
import
import
import
import
import
import
import
import
import
android.app.Activity;
android.bluetooth.BluetoothAdapter;
android.bluetooth.BluetoothDevice;
android.bluetooth.BluetoothSocket;
android.content.Intent;
android.content.pm.ActivityInfo;
android.os.Bundle;
android.os.Handler;
android.view.View;
android.widget.Button;
android.widget.ImageView;
android.widget.TextView;
android.widget.ViewFlipper;
49
50
51
else
myLabel[0].setText("No encontrado");
}
catch (IOException ex) { }
}
});
//Botn Desconectar
changeButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
cambiarVista();
}
});
}
public void onPause(){
//Mtodo que cierra la comunicacin Bluetooth al cerrar la aplicacin
super.onPause();
if(mmOutputStream!=null){
try
{
closeBT();
}
catch (IOException ex) { }
}
}
void findBT()
{
Set<BluetoothDevice> pairedDevices =
mBluetoothAdapter.getBondedDevices();
if(pairedDevices.size() > 0)
{
for(BluetoothDevice device : pairedDevices)
{
if(device.getName().equals("COORDINADOR"))
{
mmDevice = device;
break;
}
}
}
}
void openBT() throws IOException
{
//Mtodo que conecta al Bluetooth del coordinador
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
mmSocket.connect();
mmOutputStream = mmSocket.getOutputStream();
mmInputStream = mmSocket.getInputStream();
beginListenForData();}
52
void beginListenForData()
{
//Mtodo que recibe los datos de la red y los representa grficamente
final Handler handler = new Handler();
final byte delimiter = 0x7f; //Caracter que marca el fin de la
transmisin
stopWorker = false;
readBufferPosition = 0;
readBuffer = new byte[1024];
workerThread = new Thread(new Runnable()
{
public void run()
{
while(!Thread.currentThread().isInterrupted() && !stopWorker)
{
try
{
int bytesAvailable = mmInputStream.available();
if(bytesAvailable > 0)
{
byte[] packetBytes = new byte[bytesAvailable];
mmInputStream.read(packetBytes);
for(int i=0;i<bytesAvailable;i++)
{
byte b = packetBytes[i];
if(b == delimiter)
{
byte[] encodedBytes = new byte[readBufferPosition];
System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length);
final int id = (int)encodedBytes[0];
final String data;
if(encodedBytes[1]=='P' && !texto){
//si son datos de un nodo y estamos en modo grfico, se extrae lo
importante
data = new String(encodedBytes, 11, encodedBytes.length-11, "USASCII");
padre[id] = (int)(encodedBytes[8] - '0');
}
else{
//si el nodo est desactivado, se guarda el mensaje "Desactivado".
data = new String(encodedBytes, 1, encodedBytes.length-1, "USASCII");
if(encodedBytes[1]!='P') padre[id] = 0;
}
readBufferPosition = 0;
handler.post(new Runnable()
{
public void run()
{
//Se actualiza el campo de texto con los datos recibidos
myLabel[id].setText(data);
//Se muestra el nodo encendido o apagado segn corresponda
if(id>0 && id<12){
if(data.charAt(0) == 'T'){
nodo_img[id].setImageResource(nodo_draw[(2*id)+1]);
activado[id]=true;
53
}
else{
nodo_img[id].setImageResource(nodo_draw[2*id]);
activado[id]=false;
}
//Se dibujan las rutas entre routers y coordinador
if(id==1 || id==2){
if(!activado[1] && !activado[2]){
ruta_img[1].setImageResource(R.drawable.rcr00);}
else if(activado[1] && !activado[2]){
ruta_img[1].setImageResource(R.drawable.rc10);}
else if(!activado[1] && activado[2]){
ruta_img[1].setImageResource(R.drawable.rc01);}
else if(activado[1] && activado[2]){
ruta_img[1].setImageResource(R.drawable.rc11);}
}
else if(id==3 || id==4){
if(!activado[3] && !activado[4]){
ruta_img[3].setImageResource(R.drawable.rcr00);}
else if(activado[3] && !activado[4]){
ruta_img[3].setImageResource(R.drawable.cr10);}
else if(!activado[3] && activado[4]){
ruta_img[3].setImageResource(R.drawable.cr01);}
else if(activado[3] && activado[4]){
ruta_img[3].setImageResource(R.drawable.cr11);}
}
//Se dibujan las rutas entre terminales y routers
else if(id==5 || id==6 || id==7){
if(padre[5]<1 || padre[5]>2){
if(padre[6]<1 || padre[6]>2){
if(padre[7]<1 || padre[7]>2)
ruta_img[0].setImageResource(R.drawable.trt000);
else if(padre[7]==1)
ruta_img[0].setImageResource(R.drawable.tr001);
else if(padre[7]==2)
ruta_img[0].setImageResource(R.drawable.tr002);
}
else if(padre[6]==1){
if (padre[7]<1 || padre[7]>2)
ruta_img[0].setImageResource(R.drawable.tr010);
else if(padre[7]==1)
ruta_img[0].setImageResource(R.drawable.tr011);
else if(padre[7]==2)
ruta_img[0].setImageResource(R.drawable.tr012);
}
54
else if(padre[6]==2){
if (padre[7]<1 || padre[7]>2)
ruta_img[0].setImageResource(R.drawable.tr020);
else if(padre[7]==1)
ruta_img[0].setImageResource(R.drawable.tr021);
else if(padre[7]==2)
ruta_img[0].setImageResource(R.drawable.tr022);
}
}
else if(padre[5]==1){
if(padre[6]<1 || padre[6]>2){
if(padre[7]<1 || padre[7]>2)
ruta_img[0].setImageResource(R.drawable.tr100);
else if(padre[7]==1)
ruta_img[0].setImageResource(R.drawable.tr101);
else if(padre[7]==2)
ruta_img[0].setImageResource(R.drawable.tr102);
}
else if(padre[6]==1){
if (padre[7]<1 || padre[7]>2)
ruta_img[0].setImageResource(R.drawable.tr110);
else if(padre[7]==1)
ruta_img[0].setImageResource(R.drawable.tr111);
else if(padre[7]==2)
ruta_img[0].setImageResource(R.drawable.tr112);
}
else if(padre[6]==2){
if (padre[7]<1 || padre[7]>2)
ruta_img[0].setImageResource(R.drawable.tr120);
else if(padre[7]==1)
ruta_img[0].setImageResource(R.drawable.tr121);
else if(padre[7]==2)
ruta_img[0].setImageResource(R.drawable.tr122);
}
}
else if(padre[5]==2){
if(padre[6]<1 || padre[6]>2){
if(padre[7]<1 || padre[7]>2)
ruta_img[0].setImageResource(R.drawable.tr200);
else if(padre[7]==1)
ruta_img[0].setImageResource(R.drawable.tr201);
else if(padre[7]==2)
ruta_img[0].setImageResource(R.drawable.tr202);
}
else if(padre[6]==1){
if (padre[7]<1 || padre[7]>2)
ruta_img[0].setImageResource(R.drawable.tr210);
else if(padre[7]==1)
ruta_img[0].setImageResource(R.drawable.tr211);
else if(padre[7]==2)
ruta_img[0].setImageResource(R.drawable.tr212);
}
else if(padre[6]==2){
if (padre[7]<1 || padre[7]>2)
ruta_img[0].setImageResource(R.drawable.tr220);
else if(padre[7]==1)
ruta_img[0].setImageResource(R.drawable.tr221);
else if(padre[7]==2)
ruta_img[0].setImageResource(R.drawable.tr222);
55
}
}
}
else if(id==8){
if(activado[8])
ruta_img[2].setImageResource(R.drawable.t8c1);
else
ruta_img[2].setImageResource(R.drawable.t8c0);
}
else if(id==9 || id==10 || id==11){
if(padre[9]<3 || padre[9]>4){
if(padre[10]<3 || padre[10]>4){
if(padre[11]<3 || padre[11]>4)
ruta_img[4].setImageResource(R.drawable.trt000);
else if(padre[11]==1)
ruta_img[4].setImageResource(R.drawable.rt001);
else if(padre[11]==2)
ruta_img[4].setImageResource(R.drawable.rt002);
}
else if(padre[10]==3){
if(padre[11]<3 || padre[11]>4)
ruta_img[4].setImageResource(R.drawable.rt010);
else if(padre[11]==1)
ruta_img[4].setImageResource(R.drawable.rt011);
else if(padre[11]==2)
ruta_img[4].setImageResource(R.drawable.rt012);
}
else if(padre[10]==4){
if(padre[11]<3 || padre[11]>4)
ruta_img[4].setImageResource(R.drawable.rt020);
else if(padre[11]==1)
ruta_img[4].setImageResource(R.drawable.rt021);
else if(padre[11]==2)
ruta_img[4].setImageResource(R.drawable.rt022);
}
}
else if(padre[9]==3){
if(padre[10]<3 || padre[10]>4){
if(padre[11]<3 || padre[11]>4)
ruta_img[4].setImageResource(R.drawable.rt100);
else if(padre[11]==1)
ruta_img[4].setImageResource(R.drawable.rt101);
else if(padre[11]==2)
ruta_img[4].setImageResource(R.drawable.rt102);
}
else if(padre[10]==3){
if(padre[11]<3 || padre[11]>4)
ruta_img[4].setImageResource(R.drawable.rt110);
else if(padre[11]==1)
ruta_img[4].setImageResource(R.drawable.rt111);
else if(padre[11]==2)
ruta_img[4].setImageResource(R.drawable.rt112);
}
else if(padre[10]==4){
56
if(padre[11]<3 || padre[11]>4)
ruta_img[4].setImageResource(R.drawable.rt120);
else if(padre[11]==1)
ruta_img[4].setImageResource(R.drawable.rt121);
else if(padre[11]==2)
ruta_img[4].setImageResource(R.drawable.rt122);
}
}
else if(padre[9]==4){
if(padre[10]<3 || padre[10]>4){
if(padre[11]<3 || padre[11]>4)
ruta_img[4].setImageResource(R.drawable.rt200);
else if(padre[11]==1)
ruta_img[4].setImageResource(R.drawable.rt201);
else if(padre[11]==2)
ruta_img[4].setImageResource(R.drawable.rt202);
}
else if(padre[10]==3){
if(padre[11]<3 || padre[11]>4)
ruta_img[4].setImageResource(R.drawable.rt210);
else if(padre[11]==1)
ruta_img[4].setImageResource(R.drawable.rt211);
else if(padre[11]==2)
ruta_img[4].setImageResource(R.drawable.rt212);
}
else if(padre[10]==4){
if(padre[11]<3 || padre[11]>4)
ruta_img[4].setImageResource(R.drawable.rt220);
else if(padre[11]==1)
ruta_img[4].setImageResource(R.drawable.rt221);
else if(padre[11]==2)
ruta_img[4].setImageResource(R.drawable.rt222);
}
}
}
}
}
});
}
else
{
readBuffer[readBufferPosition++] = b;
}}}}
catch (IOException ex)
{
stopWorker = true;
}}}
});
workerThread.start();
}
57
58
ruta_img[2].setImageResource(R.drawable.t8c0);
ruta_img[3].setImageResource(R.drawable.rcr00);
ruta_img[4].setImageResource(R.drawable.trt000);
myLabel[0] = (TextView)findViewById(R.id.label0);
myLabel[1] = (TextView)findViewById(R.id.label1);
myLabel[2] = (TextView)findViewById(R.id.label2);
myLabel[3] = (TextView)findViewById(R.id.label3);
myLabel[4] = (TextView)findViewById(R.id.label4);
myLabel[5] = (TextView)findViewById(R.id.label5);
myLabel[6] = (TextView)findViewById(R.id.label6);
myLabel[7] = (TextView)findViewById(R.id.label7);
myLabel[8] = (TextView)findViewById(R.id.label8);
myLabel[9] = (TextView)findViewById(R.id.label9);
myLabel[10] = (TextView)findViewById(R.id.label10);
myLabel[11] = (TextView)findViewById(R.id.label11);
for(i=0; i<12; i++){
myLabel[i].setText("");
if(i>0) nodo_img[i].setImageResource(nodo_draw[2*i]);
}
}
vf.showNext();
}}
A5.- AndroidManifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="es.upct.monitorredsensores"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="Monitor Red Sensores"
android:theme="@style/AppTheme" >
<activity
android:name="es.upct.monitorredsensores.MainActivity"
android:label="Monitor Red Sensores" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
</application>
</manifest>
59
Referencias y Enlaces.
http://www.arduino.cc/es/
http://arduino.cc/es/Reference/HomePage
http://wiring.org.co/
http://www.processing.org/
http://arduino.cc/es/Main/ArduinoBoardSerialSingleSided3
http://arduino.cc/en/Main/Buy
http://arduino.cc/es/Main/Software
http://arduino.cc/es/Main/Hardware
http://arduino.cc/es/Main/Policy
10
http://arduino.cc/en/Main/ArduinoBoardUno
11
http://arduino.cc/en/Main/ArduinoBoardLeonardo
12
http://arduino.cc/en/Main/ArduinoBoardADK
13
http://arduino.cc/en/Main/ArduinoBoardPro
14
http://arduino.cc/en/Main/ArduinoBoardMini
15
http://arduino.cc/en/Main/ArduinoBoardNano
16
http://arduino.cc/en/Main/ArduinoBoardFio
17
http://www.atmel.com/Images/doc8161.pdf
18
http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf
19
http://www.digi.com/technology/rf-articles/wireless-zigbee
20
http://standards.ieee.org/getieee802/download/802.15.4-2011.pdf
21
http://standards.ieee.org/about/get/802/802.15.html
22
http://www.zigbee.org/
23
http://standards.ieee.org/about/get/802/802.11.html
60
24
http://www.wi-fi.org/
25
http://www.meshnetworks.com/
26
http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf
27
http://www.digi.com/xbee/
28
http://www.digi.com/es/
29
http://www.digi.com/support/kbase/kbaseresultdetl?id=2125
30
http://www.digi.com/support/productdetail?pid=3352&osvid=57&type=utilities
31
http://examples.digi.com/wp-content/uploads/2012/07/XBee_ZB_ZigBee_AT_Commands.pdf
32
http://www.bluetooth.com/Pages/Bluetooth-Home.aspx
33
http://www.ieee802.org/15/pub/TG1.html
34
https://www.bluetooth.org/en-us
35
http://sorin-schwartz.com/white_papers/fhvsds.pdf
36
http://www.android.com/
37
http://www.linux.org/
38
https://www.google.com/intl/es/about/
39
http://www.apache.org/licenses/LICENSE-2.0
40
http://developer.android.com/sdk/index.html
41
https://play.google.com/store
42
http://www.java.com/es/
43
http://www.eclipse.org/
44
http://developer.android.com/sdk/installing/studio.html
45
http://developer.android.com/training/basics/activity-lifecycle/index.html
46
http://developer.android.com/guide/topics/manifest/manifest-intro.html
47
http://developer.android.com/guide/topics/ui/declaring-layout.html
48
http://developer.android.com/reference/android/widget/ViewFlipper.html
49
http://developer.android.com/reference/android/widget/TextView.html
50
http://developer.android.com/reference/android/widget/ImageView.html
51
http://developer.android.com/reference/android/graphics/drawable/Drawable.html
52
http://developer.android.com/reference/android/widget/Button.html
53
http://arduino.cc/es/Main/ArduinoXbeeShield
54
http://www.analog.com/static/imported-files/data_sheets/TMP35_36_37.pdf
55
http://www.farnell.com/datasheets/1699948.pdf
56
http://academic.cleardefinition.com/wp-content/uploads/2012/08/AnnotatedDiagram.pdf
57
http://code.google.com/p/xbee-arduino/
58
http://code.google.com/u/[email protected]/
61
Figuras
Figura 1 - http://www.robotshop.com/blog/en/files/arduino-microcontrollers.jpg
Figura 2 - http://www.arduinodev.com/wp-content/uploads/2012/01/09950-01.jpg
Figura 3 - http://4.bp.blogspot.com/-nfoEZFX6OME/T3-u05afydI/AAAAAAAABXw/gYxNyeGM3Q/s1600/arduino2.png
Figura 4 - Captura de pantalla del entorno de desarrollo integrado (IDE) de Arduino
Figura 5 http://www.sena.com/products/industrial_zigbee/ZigBee_Technology_Overview_for_SENA_
Web_Page.V1.pdf#page=10
Figura 6 http://www.sena.com/products/industrial_zigbee/ZigBee_Technology_Overview_for_SENA_
Web_Page.V1.pdf#page=4
Figura 7 Robert Faludi, Building Wireless Sensor Networks, OReilly, 2011
Figura 8 - http://www.matlog.com/58-816-thickbox/modules-xbee-zb-serie-2.jpg
Figura 9 - Robert Faludi, Building Wireless Sensor Networks, OReilly, 2011
Figura 10 http://www.socialledge.com/sjsu/images/9/9e/CmpE146_F12_T2_XBeeAPIFrame.png
Figura 11 - Robert Faludi, Building Wireless Sensor Networks, OReilly, 2011
Figura 12 - http://ows.edb.utexas.edu/sites/default/files/users/nqamar/system-architecture.jpg
Figura 13 - http://developer.android.com/training/basics/activity-lifecycle/starting.html
Figura 14 Topologa representada mediante el programa Microsoft Visio
Figura 15 Esquema de divisor de tensin realizado con el programa ISIS
Figura 16 Fotografa del nodo coordinador de la red
Figura 17 Captura del software X-CTU
Figura 18 - ftp://ftp1.digi.com/support/documentation/90000991_B.pdf#page=48
Figura 19 - Paquete de datos representado mediante el programa Microsoft Visio
Figura 20 Captura de pantalla de la aplicacin de monitorizacin desarrollada
62