Red de Sensores inalámbricos de largo alcance para medición de

Anuncio
Departamento de Ingeniería de Sistemas y Automática
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Red de Sensores inalámbricos de largo alcance
para medición de la calidad del aire
Autor:
Tutor:
Enrique Fuentes Haba
Daniel Rodríguez Ramírez
Proyecto Final de Carrera
Ingeniería en Electrónica
Sevilla 2013
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Índice General
1. Introducción
1.1.Objeto del Proyecto
1.2.Alcance
2. Medición de la calidad del aire
2.1.Calidad del aire
2.2.CO2
3. Redes inalámbricas de sensores
4. Implantación del sistema: Autopista AP-4
4.1. Descripción de la Autopista AP-4
4.2. Estudio de cobertura y propagación de radio en la Autopista AP-4
4.2.1.
Enlace Conexión A-4 Bellavista – A.S. El Fantasma
4.2.2.
Enlace A.S. Los Palacios – A.S. El Fantasma
4.2.3.
Enlace Peaje Los Palacios – A.S. El Fantasma
4.2.4.
Enlace Entrada N-IV Los Palacios – A.S. El Fantasma
4.2.5.
Enlace N-IV Paraje Pájaras – A.S. El Fantasma
4.2.6.
Enlace A.S. El Fantasma – A.M. Las Cabezas
4.2.7.
Enlace Peaje Las Cabezas – A.M. Las Cabezas
4.2.8.
Enlace A.M. Las Cabezas – Salida El Cuervo (N-IV)
4.2.9.
Enlace A.S. El Fantasma – Salida El Cuervo (N-IV) (Alternat.)
4.2.10. Enlace A.M. Las Cabezas – Punto Cota Máxima
4.2.11. Enlace Punto Cota Máxima – Repetidor El Cuadrejón
4.2.12. Enlace Repetidor El Cuadrejón – Salida Jerez Norte
4.2.13. Enlace Repetidor El Cuadrejón – Circunvalación Jerez
4.2.14. Enlace Circunvalación Jerez – Salida Jerez Sur
4.2.15. Enlace Circunvalación Jerez –Aforo Jerez Sur
4.2.16. Enlace Aforo Jerez Sur –Puerto Real
5. Plataforma Hardware
5.1.Libelium WaspMote (v1.1)
5.2.Comunicaciones: Xbee– 868
5.3.Sensores
5.3.1. Descripción General
5.3.2. Sensor de Humedad – 808H5V5
5.3.3. Sensor de Temperatura – MCP9700A
5.3.4. Sensor de Presión Atmosférica – MPXAZ6115A
5.3.5. Sensor de Dióxido de Carbono (CO2) – TGS4161
-I-
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
6. Especificaciones del sistema
7. Firmware
7.1.Sistema de desarrollo
7.2.Descripción funcional del código
7.2.1. Parámetros de funcionamiento (smca.cfg)
7.2.2. Descripción funcional del programa
8. Implementación Hardware
9. Pruebas del Sistema
9.1.Test de Alcance
9.2.Test de Muestreo y Medida
9.3.Test de Transmisión de datos
9.4.Pruebas de campo
9.4.1. Planificación y Despliegue
9.4.2. Explotación de los datos
10.Conclusiones
10.1. Problemáticas encontradas en el desarrollo
10.2. Mejoras y líneas futuras de desarrollo
10.3. Resumen y conclusiones
11.ANEXO 1 Código y fichero de configuración
12.Referencias
Contenido del CD
1. Códigos Fuente
1.1. Librería “waspmote-api-v.024r”
1.2. SMCA.pde
1.3. Test_RangeTX.pde
1.4. Ficheros de configuración
2. Datos Test´s
- II -
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
1.- Introducción
1.1- Objeto del Proyecto
El proyecto pretende diseñar un sistema para la medición de magnitudes que
informan sobre la calidad del aire, basado en dispositivos sensores dotados de
comunicaciones que conformen una red inalámbrica de largo alcance.
Como objetivo secundario se analizará la idoneidad para tal fin de los equipos
Waspmote (en su versión primigenia v1.1) desarrollados por la empresa
Libelium. Para ello se dispone de un kit de desarrollo, con comunicaciones en la
banda de los 868 MHz (Módulos Digi Xbee-868), más un kit de tarjetas de
medición de gases (con sensores de temperatura, humedad y CO2).
Se ha elegido de entre módulos de comunicaciones de rango elevado compatibles,
el de 868 MHz por su alta sensibilidad en recepción y potencia de transmisión, si
bien esto condiciona la topología de la red a conformar.
Libelium pone a disposición de los desarrolladores información técnica de sus
equipos, del API de desarrollo, pequeños ejemplos de uso y una línea de soporte
con formato de foro, pero no suministra aplicaciones software completas.
2.2.- Alcance
Se llevará a cabo la puesta en marcha de la plataforma elegida, intentando
aprovechar al máximo las características de la misma para conocer los límites de
esta tecnología. Para ello se definen previamente unas especificaciones del sistema
que habrá que cumplimentar apurando las limitaciones del producto.
Se comprobará el alcance teórico del módulo de comunicaciones y las limitaciones a
este tipo de transmisiones.
Se realizará un prototipo funcional para despliegue en campo, y se llevarán a cabo
pruebas en un entorno real. En concreto se pretende realizar mediciones de las
magnitudes a controlar en la autopista AP-4, Sevilla-Cádiz, en el tramo Las Cabezas
de San Juan – Los Palacios - Dos Hermanas.
Queda fuera del alcance de este proyecto la calibración de los sensores y el análisis
de las medidas realizadas en campo.
1
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
2.- Medición de la calidad del aire
2.1.- Calidad del aire
La calidad del aire es una indicación de cuanto el aire esté exento de polución
atmosférica, y por lo tanto apto para ser respirado. Actualmente los controles y la
reglamentación se han incrementado y la calidad de los combustibles también se ha
mejorado. Sin embargo el tráfico de vehículos a motor se ha incrementado
exponencialmente, transformándose en la principal fuente contaminante en las
ciudades.
A nivel mundial se ha descubierto que las emisiones de anhídrido carbónico
derivadas de la combustión del petróleo están participando en forma determinante
en el incremento de la temperatura global a causa del efecto invernadero. Las
principales fuentes endógenas de contaminación del aire son:
•
•
•
Las fábricas o instalaciones industriales, que no tienen los filtros adecuados
para las emisiones aéreas
Centrales termoeléctricas
Vehículos con motor de combustión interna
La calidad del aire puede ser comprometida también por causas naturales como por
ejemplo:
•
•
Erupciones volcánicas
Vientos fuertes con transporte de partículas en suspensión
La lucha contra la contaminación atmosférica se desarrolla en los siguientes
frentes:
•
•
En el control de las fuentes de contaminación andrógenas y fijación de
estándares adecuados para las emisiones
Monitoreo de la calidad del aire y determinación de estándares mínimos, a
partir de los cuales se desencadenan las medidas excepcionales de
limitaciones de emisiones
2.2.- CO2
El dióxido de carbono, también denominado óxido de carbono (IV), gas carbónico y
anhídrido carbónico (los dos últimos cada vez más en desuso), es un gas cuyas
moléculas están compuestas por dos átomos de oxígeno y uno de carbono. Su
fórmula molecular es CO2. Es un gas incoloro e inodoro que se forma en todos
aquellos procesos en que tiene lugar la combustión de sustancias que contienen
carbono. En ambientes interiores no industriales sus principales focos son la
respiración humana y el fumar; aunque los niveles de dióxido de carbono también
pueden incrementarse por la existencia de otras combustiones (cocinas y
calefacción) o por la proximidad de vías de tráfico, garajes o determinadas
industrias.
El dióxido de carbono es una magnitud objetiva para determinar la calidad del aire.
El ser humano respira este gas incoloro e inodoro que se muestra más activo en
proporción directa con la edad y la corpulencia. La concentración de dióxido de
carbono al aire libre oscila entre 360 ppm (parts per million) en áreas de aire limpio
y 700 ppm en las ciudades. El valor máximo recomendado para los interiores es de
1.000 ppm y el valor límite para oficinas es de 1.500 ppm. Hay que tener mucha
2
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
precaución ya que este valor límite se alcanza con cierta facilidad. Por ejemplo, en
una oficina de 25 metros cuadrados en la que trabajan cuatro adultos y que ha sido
recién ventilada, la concentración de dióxido de carbono asciende a 2.000 ppm una
hora después de haber cerrado las ventanas aislantes.
La calidad del aire repercute en el bienestar de los humanos. El dióxido de carbono
sólo es perjudicial a partir de una concentración de un 5 % del volumen (que son
50.000 ppm), no obstante a partir de concentraciones mucho menores (a partir de
valores entre 800 y 2.000 ppm) se pueden producir molestias diversas, como dolor
de cabeza, cansancio, pérdidas de concentración y bajo rendimiento. El trabajador
se siente sobrecargado no sólo por el propio trabajo, sino también por una mala
calidad del aire de la oficina.
De forma paralela al contenido de dióxido de carbono aumenta también la
concentración de un amplio número de sustancias, por un lado son sustancias
originadas por el ser humano como los olores, pero por otro lado pueden venir de
las emisiones de la sala y del mobiliario, como los formaldehídos, el bifenol
policlorado, los productos de limpieza y los disolventes. Estas sustancias pueden ser
perjudiciales para la salud (síndrome o enfermedad de los edificios "sick building"),
pero es más difícil determinar su concentración si comparamos con la de CO2.
La concentración atmosférica del CO2 ha sufrido un considerable aumento en los
últimos dos siglos, especialmente en sus últimas décadas. Antes del comienzo de la
revolución industrial (hacia 1751, cuando el escocés James Watt inventó la máquina
de vapor) la concentración de CO2 en la Atmósfera era de unas 280 partes por
millón (ppm) de la mezcla de gases del aire (el 0,028%) y a principios del siglo XXI
alcanza unas 375 ppm (el 0,037%), lo que representa 0,009% por encima de
finales del siglo XX.
Desde 1958 (Año Geofísico Internacional) se han llevado a cabo cuidadosas
mediciones de las concentraciones de CO2 atmosférico por parte de Charles D
Keeling, primero en el Instituto Scripps de Oceanografía de La Jolla, en California, y
desde 1974 en el observatorio del volcán Mauna Loa, en Hawai, alejado de fuentes
locales de contaminación. Posteriormente otros científicos han ido también
obteniendo series de registros del CO2 que han corroborado los resultados del
Mauna Loa. 10 años después de la segunda mitad del siglo XX, y luego, en apenas
40 años después (1960-2000), el aumento de las concentraciones de CO2 en la
atmósfera es la diferencia, aproximadamente, de (380-320= 60 ppm), lo que
representa un incremento significativo respecto a la era pre-industrial, que eran de
280 ppm.
3
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
En la gráfica de evolución de la concentración atmosférica de CO2 se observa que la
línea de incremento del mismo no es rectilínea sino quebrada. Los dientes de sierra
son debidos a oscilaciones estacionales. Ocurre que durante la estación de
crecimiento vegetativo (especialmente en la primavera y verano de las latitudes
medias y altas del hemisferio norte) la vegetación absorbe CO2 del aire y la
concentración atmosférica baja. Por el contrario, en la época de hibernación, la
biomasa terrestre pierde carbono y la concentración de CO2 en el aire aumenta. En
donde más agudos son los picos estacionales es en las latitudes altas y medias del
hemisferio norte. Aquí la diferencia entre el pico invernal y el valle estival de la
concentración atmosférica de CO2 es entre 15 y 20 ppm. Esta amplitud anual
disminuye en las latitudes bajas, hasta ser de sólo unas 3 ppm cerca del Ecuador,
debido a la menor influencia estacional en la actividad de las plantas tropicales.
El incremento anual de CO2 en la atmósfera es muy diferente de un año para otro.
Estas variaciones dependen de muchos factores que afectan al desarrollo de la
vegetación y a los procesos biológicos: anomalías en la temperatura del suelo,
espesor y extensión de la nieve invernal, mayor o menor aridez durante la época
vegetativa, etc.
El dióxido de carbono, junto al vapor de agua y otros gases, es uno de los gases de
efecto invernadero (G.E.I.) que contribuyen a que la Tierra tenga una temperatura
tolerable para la biomasa. Por otro lado, un exceso de dióxido de carbono se
supone que acentuaría el fenómeno conocido como efecto invernadero, reduciendo
la emisión de calor al espacio y provocando un mayor calentamiento del planeta;
sin embargo, se sabe también que un aumento de la temperatura del mar por otras
causas (como la intensificación de la radiación solar) provoca una mayor emisión
del dióxido de carbono que permanece disuelto en los océanos (en cantidades
colosales), de tal forma que la variación del contenido del gas en el aire podría ser
causa y/o consecuencia de los cambios de temperatura, cuestión que no ha sido
dilucidada por la ciencia.
4
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
3.-Redes inalámbricas de sensores (Wireless Sensor Networks)
Las Redes Inalámbricas de Sensores o WSN (Wireless Sensor Networks) en
terminología anglosajona, despiertan un gran interés por su capacidad de
despliegue rápido, ubicuidad y bajo costo en múltiples aplicaciones.
El incremento del interés en las Redes de Sensores Inalámbricos puede
cuantificarse mediante el número de artículos publicados en los últimos años
Ya en 1978 DARPA patrocinó un taller al respecto llamado “Distributed Sensor Nets
Workshop”. En 1993 UCLA inicia el primer gran proyecto WSN llamado “WINS”. En
1998 se crea Sensoria, la primera spin-off de este proyecto. Otros proyectos
importantes fueron el “Radio Pico” en UC Berkeley (1999) y el “µAmps” en el MIT.
El concepto de ubicuidad en las TIC, fue introducido por Weiser en 1988 trabajando
para el Computer Science Laboratory at Xerox PARC y adquirió reconocimiento
mundial en 1991 con el trabajo “The Computer for the Twenty-First Century”.
Sobre esta teoría aplicativa Weiser escribió sobre dos bases fundamentales: El
sistema distribuido y la computación móvil y que ambos sistemas funcionaban
sobre cuatro cimientos: el uso inteligente de espacios eficaces; invisibilidad; escala
local y ocultación de los desniveles de acondicionamiento. Weiser propone y se
basa en que la interacción actual operador-computador no es la ordenada. En su
libro expuso que "La computadora es un punto de conexión demasiado enredado,
su manejo requiere mucha atención exclusiva, quitando la atención al usuario de la
tarea que debe hacer".
A Weiser le pareció lógico defender el "ocaso" de las computadoras, pero decía que
entendiéramos bien este término, proponía que los ordenadores personales sean
sustituidos por ordenadores invisibles encajados en objetos de uso diario. Cuando
en 1991 propone esta teoría, el nivel de tecnología era demasiado costoso y
la Xerox, empresa para la cual Weiser trabajaba, descarta de plano realizarlo. Sólo
en 1998 comenzaron aplicando su teoría que no pudo ver concluida.
Desde entonces los investigadores en Informática y Electrónica han seguido
desarrollando el concepto “Smart” (Entornos inteligentes, lugares inteligentes,
hogares inteligentes, Objetos inteligentes etc.). Últimamente el concepto “Smart
City” tiene mucha presencia en los medios.
Se construyen las cosas “smart” o inteligentes equipándolas con procesamiento y el
concepto es valido para casi todo. Para ello se requieren pequeñas unidades de
procesamiento con una interfaz para su entorno y una interfaz para comunicarse
5
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Una red de sensores inalámbricos puede definirse como un grupo de pequeños
dispositivos con capacidad de procesamiento con una interfaz con su entorno y con
los demás. También es una red de comunicación con la capacidad de medir y
procesar los valores físicos o una serie de dispositivos sensores inteligentes, que
son capaces de comunicarse entre sí.
Las ventajas generales de estas redes son el aumento de la cantidad de datos, la
flexibilidad y la reducción de costes. Sin embargo esta tecnología impone una serie
de retos, como son la gestión de las restricciones energéticas, su programación y
mantenibilidad, la construcción de las redes inalámbricas y su usabilidad.
Las consideraciones de diseño típicas son:
•
•
•
•
•
•
•
Tamaño de nodo y de factor de forma
El coste de producción
Consumo de energía y vida útil
Rango de comunicación y la velocidad
Capacidad de procesamiento
Simplicidad y facilidad de uso
Flexibilidad
El compromiso entre estos factores dependerá principalmente de la aplicación para
la cual se utilicen. Existen múltiples equipos en el mercado con distintas
características. A continuación se enumeran algunos a modo de ejemplo:
•
•
•
•
•
•
•
•
Mica2 and Mica2Dot (2002) (Proposito General)
Telos (2005)
(Proposito General)
Fleck3 (2007)
(Aplicacion exterior y Monitorizacion ambiental)
Sentio32 (2009)
(Industria)
SentioEM3 (2011)
(Monitorizacion ambiental)
TinyNode (Shockfish)
(Proposito General)
Waspmote (Libelium)
(Proposito General)
Z1 (Zolertia)
(Proposito General)
En este trabajo se utilizará el sistema Waspmote, de la empresa Libelium, Spin-off
de la Universidad de Zaragoza. Especializada en el desarrollo de hardware para
redes de sensores inalámbricos y sistemas distribuidos ha recibido varios premios
por su actividad empresarial y su desarrollo innovador.
Las características principales del producto son:
Waspmote
•
•
•
•
Plataforma modular
Posibilidad de múltiples configuraciones diferentes
Placa base con procesamiento y la interconexión
Sensores y dispositivos de comunicación conectables
Entorno de desarrollo:
•
•
•
•
Software de código abierto
Multiplataforma (Linux, Windows, Max-OS)
Editor de programas para el desarrollo
Monitor Serie para la interacción / depuración
6
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Estructura API
•
Desarrollado en C/C++
o
o
•
C para microcontroladores ATMega
C ++ para módulos Waspmote
Al igual que el hardware, el software también es modular
o
o
o
Cada módulo tiene su propia biblioteca
Sólo lo que se requiere es compilado
Posibilidad de efectuar llamadas entre las distintas bibliotecas
7
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
4.- Implantación del sistema: Autopista AP-4
4.1.- Descripción de la Autopista AP-4
Para realizar las pruebas en campo del sistema que permitan comprobar la
idoneidad del mismo, se ha elegido un test de validación para la implantación de un
sistema de monitorización de índices de CO2 sobre la autopista AP-4, Sevilla Cádiz.
La AP-4, o Autopista del Sur, es la autopista de peaje de la A-4 que constituye la
continuación a ésta y última autopista en el recorrido de la A-4. Comienza en
Sevilla a la altura de Dos Hermanas aproximadamente en el kilómetro 560 de la A4 y termina en la N-443 en Cádiz; va paralela a la carretera N-IV. Es la vía más
directa desde la Bahía de Cádiz a la capital andaluza y también la más directa
(junto a la A-381) para llegar a Sevilla desde la bahía de Algeciras y tiene una
longitud de 94 Km.
En 1986 Aumar, actualmente del grupo Abertis, se fusionó con la concesionaria
Bética de Autopistas, la concesionaria de la vía, y mantendrá la concesión hasta
2020.
Según datos publicados por el Ministerio de Fomento, en 2011 la AP-4 registró una
intensidad media diaria (IMD) de 21.029 vehículos al día. La autopista ha tenido
descensos en su intensidad circulatoria en los cuatro últimos años: -7,2 % en 2011,
-4,6 % en 2010, -1,7 % en 2009 y -3,8 % en 2008. Hasta 2007 siempre había
registrado cifras positivas de crecimiento, siendo el dato más alto el de ese año,
con 25.138 vehículos al día.
8
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
A pesar de los descensos de los últimos cuatro años, hay que señalar que en
apenas dos décadas se ha triplicado el tráfico, ya que en 1991 la autopista apenas
registraba una IMD de 7.791 vehículos al día.
En los meses de verano se registran las cifras más altas de tráfico: en los meses de
julio y agosto de 2011 se alcanzaron los 30.000 vehículos diarios. En cambio, en
invierno el tráfico se reduce notablemente con una intensidad media diaria de
diciembre a marzo que se sitúa entre 15.000 y 18.000 vehículos diarios.
Una de las características principales de esta vía es su profusa masa forestal de
hasta 300 Hectáreas, distribuida en los márgenes de la misma y compuesta de pino
y eucalipto, y de otras especies arbustivas como la retama, la adelfa y la mimosa
en el seto de la mediana. Su función original es tanto ornamental como funcional,
pero también puede atribuírsele una función compensatoria de las emisiones de
CO2 mediante la captura de este gas derivada de la función clorofílica de las
plantas.
9
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Otra característica, común a todas las autopistas de peaje, es la existencia de una
red de Postes de auxilio (Postes SOS). Cada dos kilómetros existe un poste en cada
sentido que permite la comunicación de voz con un Centro de Control. Estos postes
están dotados de un panel solar para alimentar sus equipos electrónicos. Estos
puntos son ideales para la instalación de equipos sensores. Desgraciadamente su
tecnología analógica punto a punto complica la utilización de la red de voz para
transmitir datos. Sin embargo si pueden ser utilizados como soporte y su sistema
de alimentación no se vería afectado por ser usado también para alimentar a los
equipos sensores.
También se dispone de otros puntos singulares, con disponibilidad de alimentación
solar como los puntos de aforo. Además se cuenta con dos repetidores de la red de
radio, cuyas antenas de 12 metros se encuentran situados en puntos de una mayor
altura.
10
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
4.2.- Estudio de cobertura y propagación de radio en la Autopista AP-4
La distribución de los puntos de medida sobre la AP-4 se planifica persiguiendo dos
objetivos fundamentales: Obtener un conjunto de medidas distribuidas en los
puntos singulares de la autopista y conseguir una correcta cobertura vía radio de
todos los nodos mediante la retransmisión de datos. Como especificaciones de
partida, la red desplegada debe cubrir toda la longitud de la autopista, ser
susceptible de ser ampliada, y los datos deben concentrarse en el Área de
Mantenimiento y Conservación, situada en Las Cabezas de San Juan.
La curva altimétrica de la AP-4, con alturas situadas entre los 4 y los 88 m sobre el
nivel el mar, presenta algunos puntos singulares a tener en cuenta en la estrategia
de propagación de señales
El sistema se distribuye en dos redes con un nodo concentrador común instalado en
las instalaciones de Área de Conservación y Explotación de la AP4 (COEX) situada
en el acceso de Las Cabezas de San Juan, salida 44. En esta ubicación se
encuentran todas las instalaciones de mantenimiento de la autopista y además se
sitúa más o menos en un punto central respecto de la longitud total de la misma.
Los puntos de medida se distribuirían de la siguiente manera:
Se realiza el estudio teórico de cobertura y propagación utilizando la herramienta
Radio Mobile.
A continuación se enumeran los nodos con su función y localización, su distribución
lógica, altura sobre el nivel del mar y su implantación física sobre el terreno. Se
realiza un estudio de cobertura superpuesta de los nodos repetidores y después se
describen los distintos enlaces, con los datos de propagación de señal y cobertura
de radio particularizados.
Redes y Nodos
Red
Nodo Tipo Gateway
Punto Singulares
Instalación
Alimentación
Pk
Alt
15
47
Solar
20
27
Solar
23
12
Aforo LP 2
Batería Aforo
26
4
N-IV Pájaras
Aforo Pájaras
Batería Aforo
592
52
AS El Fantasma
Repetidor
Solar
42
59
Peaje Las Cabezas
Farola
Solar
44
19
----
AM Las Cabezas
Repetidor
Suministro
45
18
08
Salida El Cuervo (N-IV)
Aforo El Cuervo
Batería Aforo
53
26
R
08
Punto Cota Máxima
Especifica
Solar
61
87
11
R
10
AS El Cuadrejón
Repetidor
Solar
69
55
SMCA AP4(S)
12
N
11
Jerez Norte
C.Transformación Solar
78
17
SMCA AP4(S)
13
R
11
Circunvalación Jerez
Aforo Jerez N-S
Batería Aforo
82
10
SMCA AP4(S)
14
N
13
Salida Jerez Sur
Farola
Solar
84
17
SMCA AP4(S)
15
R
13
Aforo Jerez Sur
Aforo Jerez Sur 1
Batería Aforo
91
76
SMCA AP4(S)
16
N
15
Puerto Real
Farola
Solar
104
9
SMCA AP4(N)
01
N
06
Conexión A-4 Bellavista
SOS 01
Batería SOS
SMCA AP4(N)
02
N
06
AS Los Palacios
Farola
SMCA AP4(N)
03
N
06
Peaje Los Palacios
Farola
SMCA AP4(N)
04
N
06
Entrada N-IV Los Palacios
SMCA AP4(N)
05
N
06
SMCA AP4(N)
06
R
08
SMCA AP4(N)
07
N
08
SMCA AP4(N/S)
08
C
SMCA AP4(S)
09
N
SMCA AP4(S)
10
SMCA AP4(S)
11
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Diagrama lógico nodos y distribución geográfica
01
02
Conexión A-4 Bellavista
AS Los Palacios
03
Peaje Los Palacios
04
Entrada N-IV Los Palacios
05
06
N-IV Pájaras
AS El Fantasma
07
Peaje Las Cabezas
08
09
AM Las Cabezas
Salida El Cuervo (N-IV)
10
11
Punto Cota Máxima
AS El Cuadrejón
12
Jerez Norte
13
Circunvalación Jerez
14
15
Jerez Sur
Aforo Jerez Sur
16
Puerto Real
12
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Mapa de Cobertura Superpuesta (Single polar)
13
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Mapa de Cobertura (Single polar) de Nodo 06 (Repetidor) A.S. El Fantasma
Mapa de Cobertura (Single polar) de Nodo 10 (Repetidor) Punto Cota Máxima
14
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Mapa de Cobertura (Single polar) de Nodo 13 (Repetidor) Circunvalación Jerez
Mapa de Cobertura (Single polar) de Nodo 13 (Repetidor) Circunvalación Jerez
15
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
4.2.1.- Enlace Conexión A-4 Bellavista – A.S. El Fantasma
Red:
SMCA AP-4 (N)
Punto Inicial:
Tipo:
Punto de Instalación:
Alimentación:
(01) Conexión A-4 Bellavista
Nodo
Poste SOS 01
Batería Poste SOS (Solar)
Punto Final:
Tipo:
Punto de Instalación:
Alimentación:
(06) Área Servicio El Fantasma
Router
Antena Repetidor Radio
Panel Solar
16
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
4.2.2.- Enlace A.S. Los Palacios – A.S. El Fantasma
Red:
SMCA AP-4 (N)
Punto Inicial:
Tipo:
Punto de Instalación:
Alimentación:
(02) A.S. Los Palacios
Nodo
Farola
Panel Solar
Punto Final:
Tipo:
Punto de Instalación:
Alimentación:
(06) Área Servicio El Fantasma
Router
Antena Repetidor Radio
Panel Solar
17
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
4.2.3.- Enlace Peaje Los Palacios – A.S. El Fantasma
Red:
SMCA AP-4 (N)
Punto Inicial:
Tipo:
Punto de Instalación:
Alimentación:
(03) Peaje Los Palacios
Nodo
Farola
Panel Solar
Punto Final:
Tipo:
Punto de Instalación:
Alimentación:
(06) Área Servicio El Fantasma
Router
Antena Repetidor Radio
Panel Solar
18
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
4.2.4.- Enlace Entrada N-IV Los Palacios – A.S. El Fantasma
Red:
SMCA AP-4 (N)
Punto Inicial:
Tipo:
Punto de Instalación:
Alimentación:
(04) Entrada N-IV Los Palacios
Nodo
Aforo
Batería Aforo (Panel Solar)
Punto Final:
Tipo:
Punto de Instalación:
Alimentación:
(06) Área Servicio El Fantasma
Router
Antena Repetidor Radio
Panel Solar
19
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
4.2.5.- Enlace N-IV Paraje Pájaras – A.S. El Fantasma
Red:
SMCA AP-4 (N)
Punto Inicial:
Tipo:
Punto de Instalación:
Alimentación:
(05) N-IV Paraje Pájaras
Nodo
Aforo
Batería Aforo (Panel Solar)
Punto Final:
Tipo:
Punto de Instalación:
Alimentación:
(06) Área Servicio El Fantasma
Router
Antena Repetidor Radio
Panel Solar
20
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
4.2.6.- Enlace A.S. El Fantasma – A.M. Las Cabezas
Red:
SMCA AP-4 (N)
Punto Inicial:
Tipo:
Punto de Instalación:
Alimentación:
(06) Área Servicio El Fantasma
Router
Antena Repetidor Radio
Panel Solar
Punto Final:
Tipo:
Punto de Instalación:
Alimentación:
(08) Área COEX Las Cabezas
Concentrador
Antena Repetidor Radio
Panel Solar
21
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
4.2.7.- Enlace Peaje Las Cabezas – A.M. Las Cabezas
Red:
SMCA AP-4 (N)
Punto Inicial:
Tipo:
Punto de Instalación:
Alimentación:
(07) Peaje Las Cabezas
Nodo
Farola
Panel Solar
Punto Final:
Tipo:
Punto de Instalación:
Alimentación:
(08) Área Mantenimiento Las Cabezas
Concentrador
Antena Repetidor Radio
Panel Solar
22
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
4.2.8.- Enlace A.M. Las Cabezas – Salida El Cuervo (N-IV)
Red:
SMCA AP-4 (S)
Punto Inicial:
Tipo:
Punto de Instalación:
Alimentación:
(09) Salida El Cuervo (N-IV)
Nodo
Aforo
Batería Aforo (Panel Solar)
Punto Final:
Tipo:
Punto de Instalación:
Alimentación:
(08) Área Mantenimiento Las Cabezas
Concentrador
Antena Repetidor Radio
Panel Solar
23
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
4.2.9.- Enlace A.S. El Fantasma – Salida El Cuervo (N-IV) (Alternativo)
Red:
SMCA AP-4 (S)
Punto Inicial:
Tipo:
Punto de Instalación:
Alimentación:
(09) Salida El Cuervo (N-IV)
Nodo
Aforo
Batería Aforo (Panel Solar)
Punto Final:
Tipo:
Punto de Instalación:
Alimentación:
(06) Área Servicio El Fantasma
Router
Antena Repetidor Radio
Panel Solar
24
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
4.2.10.- Enlace A.M. Las Cabezas – Punto Cota Máxima
Red:
SMCA AP-4 (S)
Punto Inicial:
Tipo:
Punto de Instalación:
Alimentación:
(10) Punto de Cota Máxima AP-4
Router
Báculo
Panel Solar
Punto Final:
Tipo:
Punto de Instalación:
Alimentación:
(08) Área Mantenimiento Las Cabezas
Concentrador
Antena Repetidor Radio
Panel Solar
25
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
4.2.11.- Enlace Punto Cota Máxima – Repetidor El Cuadrejón
Red:
SMCA AP-4 (S)
Punto Inicial:
Tipo:
Punto de Instalación:
Alimentación:
(11) Repetidor El Cuadrejón
Router
Antena Repetidor Radio
Panel Solar
Punto Final:
Tipo:
Punto de Instalación:
Alimentación:
(10) Punto de Cota Máxima AP-4
Router
Báculo
Panel Solar
26
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
4.2.12.- Enlace Repetidor El Cuadrejón – Salida Jerez Norte
Red:
SMCA AP-4 (S)
Punto Inicial:
Tipo:
Punto de Instalación:
Alimentación:
(12) Salida Jerez Norte
Nodo
Centro de Transformación
Panel Solar
Punto Final:
Tipo:
Punto de Instalación:
Alimentación:
(11) Repetidor El Cuadrejón
Router
Antena Repetidor Radio
Panel Solar
27
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
4.2.13.- Enlace Repetidor El Cuadrejón – Circunvalación Jerez
Red:
SMCA AP-4 (S)
Punto Inicial:
Tipo:
Punto de Instalación:
Alimentación:
(13) Circunvalación Jerez
Router
Aforo
Panel Solar
Punto Final:
Tipo:
Punto de Instalación:
Alimentación:
(11) Repetidor El Cuadrejón
Router
Antena Repetidor Radio
Panel Solar
28
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
4.2.14.- Enlace Circunvalación Jerez – Salida Jerez Sur
Red:
SMCA AP-4 (S)
Punto Inicial:
Tipo:
Punto de Instalación:
Alimentación:
(14) Salida Jerez Sur
Nodo
Farola
Panel Solar
Punto Final:
Tipo:
Punto de Instalación:
Alimentación:
(13) Circunvalación Jerez
Router
Aforo
Panel Solar
29
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
4.2.15.- Enlace Circunvalación Jerez –Aforo Jerez Sur
Red:
SMCA AP-4 (S)
Punto Inicial:
Tipo:
Punto de Instalación:
Alimentación:
(15) Aforo Jerez Sur
Router
Aforo
Panel Solar
Punto Final:
Tipo:
Punto de Instalación:
Alimentación:
(13) Circunvalación Jerez
Router
Aforo
Panel Solar
30
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
4.2.16.- Enlace Aforo Jerez Sur –Puerto Real
Red:
SMCA AP-4 (S)
Punto Inicial:
Tipo:
Punto de Instalación:
Alimentación:
(16) Puerto Real
Nodo
Farola
Panel Solar
Punto Final:
Tipo:
Punto de Instalación:
Alimentación:
(15) Aforo Jerez Sur
Router
Aforo
Panel Solar
31
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
5.- Plataforma Hardware
5.1.- Libelium Waspmote (v1.1)
Arquitectura
Waspmote se basa en una arquitectura modular. La idea es integrar únicamente los
módulos que necesitemos en cada dispositivo y ser capaces de cambiarlos y
ampliarlos según las necesidades.
Los módulos disponibles para integrar en Waspmote se clasifican en:
------
Módulos ZigBee/802.15.4 (2.4GHz, 868MHz, 900MHz). Baja y alta potencia.
Módulo GSM - 3G/GPRS (Quadband: 850MHz/900MHz/1800MHz/1900MHz)
Módulo GPS
Módulos Sensoriales (Placas de Sensores)
Módulo de almacenamiento: SD Memory Card
Especificaciones y Características
Microcontrolador: ATmega1281
Frecuencia: 8MHz
SRAM: 8KB
EEPROM: 4KB
FLASH: 128KB
SD Card: 2GB
Peso: 20gr
Dimensiones: 73.5 x 51 x 13 mm
Rango de Temperatura: [-20ºC, +65ºC]
32
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
33
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Valores de funcionamiento:
-
Tensión de batería mínima de funcionamiento
Tensión de batería máxima de funcionamiento
Tensión de carga USB
Tensión de carga placa solar
Corriente de carga de batería por USB
Corriente de carga de batería por placa solar
Tensión de pila de botón
3.3 V
4.2V
5V
6 - 12 V
100 mA (máx.)
280 mA (máx.)
3V
Valores máximos absolutos:
-
Tensión en cualquier pin
Corriente máxima por cualquier pin I/O digital
Tensión de alimentación USB
Tensión de alimentación placa solar
Tensión de batería cargada
[-0.5 V, +3.8 V]
40 mA
7V
18V
4.2 V
Sistema Energético
Waspmote tiene 4 modos de funcionamiento.
ON: modo normal de funcionamiento. El consumo en este estado es de 9mA.
Sleep: El programa principal se detiene, el microcontrolador pasa a un estado de
latencia, del que puede ser despertado por todas las interrupciones asíncronas y
por la interrupción síncrona generada por el Watchdog. El intervalo de duración de
este estado va de 32ms a 8s. El consumo en este estado es de 62μA.
Deep Sleep: El programa principal se detiene, el microcontrolador pasa a un
estado de latencia del que puede ser despertado por todas las interrupciones
asíncronas y por la interrupción síncrona lanzada por el RTC. El intervalo de este
ciclo puede ir de 8 segundos a minutos, horas, días. El consumo en este estado
es de 62μA.
Hibernate: El programa principal se detiene, el microcontrolador y todos los
módulos de Waspmote quedan completamente desconectados. La única forma de
volver a activar el dispositivo es a través de la alarma previamente programada en
el RTC (interrupción síncrona). El intervalo de este ciclo puede ir de 8 segundos a
minutos, horas, días. Al quedar el dispositivo totalmente desconectado de la
batería principal el RTC es alimentado a través de una batería auxiliar de la que
consume 0,7μA.
Consumo
Micro
Ciclo
Interrupciones
ON
9mA
ON
-
Síncronas y Asíncronas
Sleep
62μA
ON
32ms - 8s
Síncrona (Watchdog) y
Asíncronas
Deep Sleep
62μA
ON
8s - min/horas/días
Síncrona (RTC) y Asíncronas
Hibernate
0,7μA
OFF
8s - min/horas/días
Síncrona (RTC)
Por otro lado, cada módulo tiene hasta 4 modos de funcionamiento:
ON: modo normal de funcionamiento.
34
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Sleep: En este modo se detienen algunas funcionalidades del módulo y se pasa a
un uso asíncrono, normalmente dirigido por eventos. En cada módulo funciona de
una forma distinta y es específico de cada uno (programado por el fabricante).
Hibernate: En este modo se detienen todas las funcionalidades del módulo y se
pasa a un uso asíncrono, normalmente dirigido por eventos. En cada módulo
funciona de una forma distinta y es específico de cada uno (programado por el
fabricante).
OFF: Mediante el uso de switches digitales controlados por el microcontrolador se
apaga por completo el módulo. Este modo ha sido implementado por Libelium
como capa independiente de control energético, de forma que se pueda reducir el
consumo al mínimo (~0μA) sin relegar en las técnicas implementadas por el
fabricante.
Tablas de consumos
Waspmote
ON
Sleep
Deep Sleep
Hibernate
9mA
62μA
62μA
0,7μA
RSSI(LEDs): 7,6mA
SD
OFF
0μA
ON
0,14mA
Lectura
0,2mA
Escritura
0,2mA
35
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Fuentes de Alimentación
- Batería
La batería incluida con Waspmote es una batería de Ion de Litio (Li-Ion) de tensión
nominal 3.7V. En lo referente a la capacidad de la batería existen varias
posibilidades: 1150mA, 2300mA y 6600mA Li-Ion recargables y 13000mAH no
recargable.
Waspmote dispone de un circuito de control y protección que se encarga de que la
corriente de carga de batería sea la adecuada en todo momento.
Curvas de descarga y carga de la batería
A continuación se muestran dos imágenes que corresponden a la descarga y a la
carga de la batería.
-
Panel Solar
La placa solar ha de conectarse utilizando el cable suministrado para tal fin. Tanto
el conector mini USB como el conector de la placa solar únicamente admiten una
posición de conexión por lo tanto hay que respetarla y no forzar su conexión en la
posición incorrecta. De esta forma respetaremos la polaridad de las conexiones.
36
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Se admiten placas solares de hasta 12V. La corriente máxima de carga a través de
placa solar es de 280mA.
- USB
Las tres fuentes de alimentación de Waspmote desde el USB son:
-- Conexión USB a PC
-- Conexión USB a 220V
-- Conexión USB a Conector de Vehículo
La tensión de carga a través del USB ha de ser 5V.
La corriente máxima de carga a través de USB es de 100mA.
El conector mini USB ha de ser estándar mini USB modelo B.
37
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
I/O
Waspmote puede comunicarse con otros dispositivos externos mediante los
diferentes puertos de entrada/salida que posee. Los dispositivos con los que
Waspmote se puede comunicar pueden ser cualquier sensor, componente o módulo
electrónico siempre y cuando se respeten las especificaciones requeridas por cada
puerto.
Waspmote dispone de 7 entradas analógicas accesibles en el conector de sensores.
Cada una de las entradas está conectada directamente al microcontrolador. El
microcontrolador utiliza un conversor Analógico digital (ADC) de aproximaciones
sucesivas de 10 bits. El valor de tensión de referencia para las entradas es de 0V
(GND). El valor máximo de tensión de entrada es de 3.3V que corresponde con la
tensión de alimentación general del microcontrolador
Waspmote posee 8 pines digitales que pueden ser configuradas como entrada o
salida en función de las necesidades de la aplicación. Los valores de tensión
correspondientes a los diferentes valores digitales serían:
- 0V para el 0 lógico
- 3.3V para el 1 lógico
El pin DIGITAL1 además puede usarse como salida PWM (Pulse Width
Modulation) con el cual se puede “simular” una señal analógica. En realidad es
una onda cuadrada entre 0 V y 3.3 V en la que se puede cambiar la proporción de
tiempo en que la señal está en alto (su ciclo de trabajo) de 0% a 100%, simulando
una tensión de 0V (0%) a 3.3V (100%). La resolución es de 8 bits por lo que
podemos configurar hasta 255 valores intermedios entre 0-100%.
En Waspmote existen 6 puertos serie: Una de las UART del microcontrolador está
conectada simultáneamente al módulo de comunicación XBee y al puerto USB. La
otra UART del microcontrolador está conectada a un multiplexor de cuatro canales,
pudiendo seleccionar desde el código cuál de las cuatro nuevas UART queremos
conectar a la UART del microcontrolador. Estas cuatro nuevas UART están
conectadas de la siguiente manera: Una está conectada a la placa 3G/GPRS, otra al
GPS y las otras dos quedan accesibles al usuario en el conector I2C – UART
auxiliares
En Waspmote también se utiliza el bus de comunicación I2C, donde se conectan en
paralelo tres dispositivos: el acelerómetro, el RTC y el potenciómetro que configura
el nivel de threshold de alarma por batería baja. En todos los casos el
microcontrolador actúa como maestro (master) mientras que el resto de los
dispositivos conectados al bus actúan como esclavos (slave).
El puerto SPI del microcontrolador se utiliza para la comunicación de éste con la
tarjeta micro SD. Todas las operaciones de uso del bus son realizadas por la librería
específica de forma transparente.
La comunicación USB se utiliza en Waspmote para la comunicación con un
ordenador o dispositivo compatible. Esta comunicación permite la carga del
programa al microcontrolador y la comunicación de datos durante la ejecución del
programa. Para la comunicación USB se utiliza una de las UART del
microcontrolador y de la conversión al estándar USB se encarga el FT232RL. De
esta forma en el ordenador tendremos un nuevo puerto de comunicación serie listo
para comunicarse con Waspmote.
38
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
RTC
Waspmote tiene integrado un reloj de tiempo real (Real Time Clock - RTC), el cual
le mantiene informado del momento temporal en el que se encuentra. Toda la
programación y control del RTC se hace a través del bus I2C.
Podemos programar alarmas en el RTC especificando día/hora/minuto/segundo. Lo
que nos permite tener un control total acerca de cuándo queremos que se despierte
el mote para captar valores y realizar las acciones programadas con ellos. Esto nos
permite tener a Waspmote funcionando en los modos de máximo ahorro energético
(Deep Sleep e Hibernate) y hacer que se despierte justo en el momento que nos
interese. Además de alarmas relativas se pueden programar alarmas periódicas de
forma que dándole una medida temporal él reprograme su alarma automáticamente
cada vez que salte.
El RTC elegido es el DS3231SN de Maxim, el cual funciona a una frecuencia de
32.768Hz (un valor divisor del segundo que le permite cuantificar y calcular mejor
las variaciones temporales).
El DS3231SN es uno de los relojes con mayor precisión en el mercado debido al
mecanismo interno de compensación de las variaciones de oscilación que se
producen en el
cristal de cuarzo, debidas a los cambios de temperatura
(Temperature Compensated Crystal Oscillator - TCXO).
La mayoría de los RTC del mercado introducen una variación de ± 20ppm lo que
equivale a una pérdida de precisión de 1’7s al día (10’34min/año), sin embargo, el
modelo elegido para Waspmote introduce una pérdida de tan solo ± 2ppm, lo que
se traduce en unas variaciones de 0’16s al día (1min/año). El proceso de
recalibración del cristal de oscilación se realiza gracias a los datos obtenidos por el
sensor de temperatura interno que tiene el RTC. El valor de este sensor digital
puede ser accedido por Waspmote a través del I2C, lo que le permite conocer la
temperatura de la placa en todo momento en el rango de los -40ºC a +85ºC
con una precisión de 0.25ºC. El RTC tiene 2 fuentes de alimentación: batería
principal y batería auxiliar.
Cuando el mote está conectado, el RTC se alimenta a través de la batería principal.
Sin embargo, para asegurar que se mantiene siempre con la hora correcta y que
estos datos no se borran cuando hay un cambio de batería principal o se acaba la
carga de ésta, se ha incluido una batería auxiliar que alimenta al RTC cuando la
principal no puede hacerlo.
El RTC es el responsable de despertar a Waspmote en 2 de los modos de máximo
ahorro energético Deep Sleep e Hibernate. Esto posibilita que Waspmote pueda
desconectar su batería principal y que sea el RTC (alimentado de su batería
auxiliar) quien controle cuando ha de despertarse y realizar una determinada
acción. Esto permite obtener un consumo en el estado de Hibernación de 0,7μA.
39
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
LED´s
Waspmote dispone de una serie de LEDs indicadores
- Led indicador de carga de batería
Led de color rojo que indica que en Waspmote hay conectada una batería que está
siendo cargada, la carga puede hacerse mediante un cable mini USB o bien
mediante placa solar conectada a Waspmote. Una vez que la batería está
totalmente cargada el led se apaga automáticamente.
- LED 0 – Led programable
Led indicador verde conectado al microcontrolador totalmente programable por el
usuario desde el código del programa. Además el led 0 indica cuando Waspmote se
resetea, emitiendo un parpadeo cada vez que se lleva a cabo un reset en la placa.
- LED 1 – Led programable
Led indicador rojo conectado al microcontrolador totalmente programable por el
usuario desde el código del programa.
- Led indicador USB Power
Led verde que indica cuando Waspmote está conectado a un puerto USB compatible
bien para carga de batería o bien para programación. Cuando el led está encendido
indica que el cable USB está conectado correctamente, al quitar el cable USB el led
se apagará automáticamente.
- RSSI Leds
Se han incluido 3 LEDs para conocer visualmente el valor del RSSI (Received
Strength Signal Indicator) de las tramas ZigBee/802.15.4. Estos LEDs indican la
calidad de la señal del último paquete recibido.
40
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Nº LEDs encendidos
RSSI recibido
1LED
RSSI > (Sensibilidad + 11,1dB)
1+2LEDs
RSSI > (Sensibilidad + 21,23dB)
1+2+3 LEDs
RSSI > (Sensibilidad + 31,82dB)
Jumpers
En Waspmote disponemos de tres jumpers para activar/desactivar ciertas
funcionalidades, en la figura inferior se puede apreciar la localización de dichos
jumpers
Descripción de los jumpers:
- Jumper de habilitación de programación:
La programación de la placa sólo es posible si este jumper está colocado.
41
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
- Jumper de habilitación del indicador RSSI
Si el jumper está colocado, está habilitada la función de indicación por leds de
RSSI.
- Jumper de habilitación de modo Hibernate
Si el jumper no está colocado, deshabilitamos la programación de Waspmote. El
modo de funcionamiento Hibernate requiere quitar este jumper durante el comienzo
del programa por primera vez.
Almacenamiento externo: SD Memory Card
Waspmote integra un soporte de almacenamiento externo como son las tarjetas SD
(Secure Digital). En concreto se utilizan tarjetas micro-SD para reducir al mínimo el
espacio usado.
Waspmote usa el sistema de ficheros FAT16 y puede soportar tarjetas de hasta
2GB. La información que almacena Waspmote en forma de ficheros en la SD puede
ser accedida desde diferentes sistemas operativos como Linux, Windows o Mac-OS.
Hay muchos modelos de tarjetas SD; cualquiera de ellas tiene bloques defectuosos,
que son ignorados al usar la librería de Waspmote para la SD. Sin embargo, cuando
se usa OTA, estos bloques no se pueden ignorar y por lo tanto la ejecución podría
quedar interrumpida.
Para comunicarnos con el módulo SD usamos el bus SPI. Este bus es un estándar
de comunicaciones utilizado para transferir información entre dispositivos
electrónicos que acepten un flujo de bits regulados por un reloj. El SPI incluye una
línea de reloj, una de datos entrantes, otra de datos salientes y un pin de selección.
La alimentación de la tarjeta SD se realiza a través de un pin digital del
microcontrolador. De esta forma, no es necesario utilizar un switch para cortar la
alimentación, basta con poner el valor del pin en bajo.
Para hacernos una idea de la capacidad de información que supone el usar una
tarjeta de 2GB simplemente hay que hacer la división de ese tamaño con lo que
suele ocupar de media una trama sensorial en Waspmote (100 Bytes aprox.):
2GB/100B = 20 millones de medidas
El límite en la creación de ficheros y directorios por nivel es de 256 ficheros por
directorio y hasta 256 subdirectorios en cada directorio. No hay límite en el número
de niveles anidados.
42
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
5.2.- Comunicaciones: Xbee– 868
Waspmote integra los módulos XBee de Digi para comunicación en bandas de
frecuencia libre ISMB (Industrial Scientific Medical Band). Los módulos XBee
integrados en Waspmote incorporan conectores de antena RPSMA.
Estos módulos se comunican con el microcontrolador utilizando la UART_0 a una
velocidad de 38400bps. Existen 7 posibles módulos XBee distribuidos por Libelium
para su integración con Waspmote.
Modelo
Protocolo
Frecuencia
txPower
Sensibilidad
Rango*
XBee-802.15.4
802.15.4
2.4GHz
1mW
-92dB
500m
XBee-802.15.4-Pro
802.15.4
2.4GHz
100mW
-100dBm
7000m
XBee-ZB
ZigBee-Pro
2.4GHz
2mW
-96dBm
500m
XBee-ZB-Pro
ZigBee-Pro
2.4GHz
50mW
-102dBm
7000m
XBee-868
RF
868MHz
315mW
-112dBm
12km
XBee-900
RF
900MHz
50mW
-100dBm
10Km
XBee-XSC
RF
900MHz
100mW
-106dBm
12Km
*Las distancias anteriormente indicadas fueron medidas mediante tests en un
entorno real, en condiciones de línea vista y con las antenas dipolo de 5dBi que
suministra Libelium.
Se ha elegido de entre módulos de rango elevado el Xbee – 868 por su alta
sensibilidad en recepción y potencia de transmisión
XBee - 868
Módulo
Frecuencia
XBee
868
869,4 –
869,65MHz
Potencia
Transmisión
315mW
43
Sensibilidad
Canales
Distancia
-112dBm
1
12km
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
La topología clásica de este tipo de red es P2P, puesto que los nodos pueden
establecer conexiones punto a punto con los nodos hermanos mediante el uso de
parámetros como la dirección MAC o la de Red
Topología p2p
Identificador de Dirección MAC del dispositivo
Antena
La frecuencia utilizada es la banda de 869MHz (Europa), utilizando 1 único canal. El
uso de este módulo está permitido únicamente en Europa.
Respecto al apartado energético, la potencia de transmisión se puede ajustar a
varios valores:
Parameter
Tx XBee - 868
0
0dBm
1
13.7dBm
2
20dBm
3
22dBm
4
25dBm
Valores de potencia de transmisión. XBee TX Power
Consumo XBee
Modulo
XBee 868
ON
60,82mA
SLEEP
--
OFF
0μA
SENDING
RECEIVING
160mA
73mA
Antena
Se utilizan antenas de dipolo enfundado (sleeve dipole), modificación de las dipolo
estándar, mas robustas físicamente al estar encapsuladas en un radomo plástico y
que mantiene el patrón de radiación omnidireccional. Las usadas son de una
ganancia de 4,5 dBi con conector RP-SMA Macho
44
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Waspmote Gateway
Este dispositivo nos permitirá obtener los datos que circulan por la red sensorial en
un PC o dispositivo con un puerto USB estándar. Waspmote Gateway actuará como
un “puente de datos o puerta de acceso” entre la red sensorial y el equipo
receptor. Este equipo receptor se encargará de almacenar o utilizar los datos
recibidos en función de las necesidades de la aplicación en concreto.
Waspmote Gateway
45
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
5.3.- Sensores
5.3.1- Descripción General
La placa para sensores de gases de Waspmote ha sido diseñada para monitorizar
parámetros ambientales como la temperatura, humedad, presión atmosférica
y 14 tipos de gases diferentes. Permite la inclusión de 6 sensores de gases al
mismo tiempo, la regulación de su alimentación a través de un sistema de
interruptores de estado sólido (switches) y la amplificación de la señal de cada uno
de éstos a través de una etapa de amplificación no inversora de ganancia máxima
101 controlada a través de un potenciómetro digital configurable mediante el bus
de interconexión de integrados (Inter-Integrated Circuit Bus, I2C).
Los gases que pueden llegar monitorizarse son:
-
Monóxido de Carbono – CO
Dióxido de Carbono – CO2
Oxígeno molecular – O2
Metano – CH4
Hidrógeno molecular – H2
Amoniaco – NH3
Iso-butano – C4H10
Etanol – CH3CH2OH
Tolueno – C6H5CH3
Sulfuro de Hidrógeno – H2S
Dióxido de Nitrógeno – NO2
Ozono – O3
Compuestos Orgánicos Volátiles (VOC’s)
Hidrocarburos
Especificaciones
Peso: 20gr
Dimensiones: 73.5 x 51 x 1.3 mm
Rango de Temperatura: [-20ºC, 65ºC]
46
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Compatibilidad de los sensores:
Hay un conector específico para cada uno de los siguientes sensores:
-
Temperatura
Humedad
Presión atmosférica
CO2 (conector 1A)
O2 (conector 1B)
Sólo puede haber uno de los siguientes sensores en una placa de gases: NO2, VOC
y O3 (conector 2B). Los sensores de VOC y O3 requieren una modificación
hardware en la placa de gases, que se realiza en Libelium.
Los conectores 2A, 3 y 4 están disponibles para el resto de los sensores.
Los sensores de CO y NH3 sólo pueden colocarse en los conectores 3 o 4.
Características eléctricas
Tensiones de alimentación de la placa: 3.3V y 5V
Tensión de alimentación de los sensores: 5V
Intensidad máxima admitida (continua): 200mA
Intensidad máxima admitida (pico): 400mA
Consideraciones generales en la utilización de los sensores
Se ha implementado una estructura muy similar para todos los conectores para los
sensores de gases de la placa, consistente en una resistencia de carga a la salida
de cada sensor, excepto en los conectores 1A y 1B donde no es necesaria, seguida
por una etapa de amplificación de ganancia máxima 101. Los conectores 1A y 1B
por un lado y 2A y 2B por otro comparten la misma etapa de amplificación y la
misma salida al microprocesador.
La elección de la ganancia de la etapa de amplificación y de la resistencia de carga
del sensor debe efectuarse en función de dos parámetros: el sensor concreto del
que se dispone, ya que pueden existir variaciones importantes entre dos sensores
diferentes del mismo modelo, y el valor y rango de concentraciones de gas que se
desea monitorizar.
Importante: en la elección de la resistencia de carga y de la amplificación debe
tenerse en cuenta que, aunque los sensores deben alimentarse con una tensión de
5V para funcionar adecuadamente, el microprocesador de Waspmote permite
entradas entre 0 y 3.3V, por lo tanto será necesario calcular los valores de la
resistencia de carga y ganancia para adecuar el rango de medida del sensor a la
47
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
entrada de Waspmote.
La ganancia de la etapa de amplificación y la resistencia de carga de un conector
pueden configurarse a través de un sencillo conjunto de comandos disponibles en la
librería SensorGas, creada para facilitar la manipulación de la placa desde el mote
Waspmote. Para mayor información sobre las instrucciones de la librería y los pasos
a seguir para la configuración de los sensores consultar el apartado 4.2 del manual.
La precisión que puede conseguirse en el valor de salida del sensor será función del
modo en que se alimente. De este modo, cuanto mayor sea el tiempo de
alimentación o el ciclo de trabajo, según el caso, mejor precisión se obtendrá. La
contraprestación de una alimentación prolongada es un incremento en el consumo
del mote, con el consiguiente decrecimiento de la duración de la batería, por lo que
se recomienda ajustar la alimentación de cada sensor a los requerimientos de la
aplicación concreta que se esté desarrollando con el fin de optimizar las
prestaciones del equipo.
El cálculo de la resistencia del sensor, a partir del cuál se puede obtener el valor de
concentración de gas mediante las gráficas incluidas en este manual y en las hojas
de características de los sensores, puede realizarse a través de la siguiente
ecuación:
en la que Rs es la resistencia de salida del sensor, Vc su alimentación (5V para
cualquier sensor excepto el NO2, que está alimentado a 1.8V), Vout la tensión de
salida medida y Rl la resistencia de carga que se ha definido.
Cuando un sensor permanezca sin alimentación durante un tiempo prolongado es
posible que muestre una salida poco estable. Dicha estabilidad se recupera después
de permanecer un tiempo encendido o de varios ciclos consecutivos de
alimentación.
La sensibilidad de los sensores puede variar cuando el dispositivo se encuentre
sometido a variaciones grandes de temperatura o humedad, por ejemplo en
condiciones de exteriores. Para compensar dichas variaciones puede utilizar las
tablas y gráficas incluidas en las hojas de características de los sensores.
5.3.2- Sensor de Humedad – 808H5V5
Especificaciones
Rango de medida: 0 ~ 100%RH
Señal de salida: 0,8 ~ 3.9V (25ºC)
Precisión: <±4%RH (a 25ºC, rango 30 ~ 80%), <±6%RH (rango 0 ~ 100)
Alimentación: 5VDC ±5%
Temperatura de operación: -40 ~ +85ºC
Tiempo de respuesta: <15 segundos
Consumo típico: 0.38mA
Consumo máximo: 0.5mA
Se trata de un sensor analógico que proporciona una salida en tensión proporcional
a la humedad relativa en el ambiente. Puesto que el rango de señal del sensor
queda fuera del permitido a la entrada de Waspmote se ha introducido un divisor
de tensión que convierte la tensión de salida a valores entre 0,48 ~ 2,34V
48
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
El sensor permanece alimentado siempre que la alimentación de 5V de la placa esté
encendida, de modo que para su lectura tan sólo es necesario ejecutar el comando
de captura del valor analógico del pin al que está conectado el sensor (ANALOG4).
Salida del sensor de Humedad 808H4V5 extraída de la hoja de características del sensor de Sencera Co.,
Ltd
Función de transferencia
La función responde a una recta del tipo
RH [%] = Coef.a * V [v] - Coef.b
Tomando dos puntos de la gráfica, aplicando la corrección del divisor de tensión y
resolviendo la ecuación de la recta que pasa por dos puntos:
RH [%] − 0 V [v ] − 0.48
=
100 − 0
2.34 − 0.48
0.8v Æ 0.48v -Æ0%
3.9v Æ 2.34-Æ 100%
Obtenemos la función en base a los coeficientes:
RH [%] =
100
100 * 0.48
V [v ] −
1.86
1.86
Coef.a = 53,76344086
Coef.b = 25,80645161
Estos coeficientes se identifican en el sistema mediante los parámetros
sens_pa1HR y sens_pa2HR. Esto permite modificar la función de transferencia
en caso de que se sustituya el sensor por otro modelo, siempre y cuando la
respuesta del mismo sea lineal.
49
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
5.3.3- Sensor de Temperatura – MCP9700A
Especificaciones
Rango de medida: [-40ºC ,+125ºC]
Tensión de salida (0ºC): 500mV
Sensibilidad: 10mV/ºC
Precisión: ±2ºC (rango 0ºC ~ +70ºC), ±4ºC (rango -40 ~ +125ºC)
Alimentación: 2.3 ~ 5.5V
Tiempo de respuesta: 1.65 segundos (63% de respuesta de +30 a +125ºC)
Consumo típico: 6μA
Consumo máximo: 12μA
El MCP9700A es un sensor analógico que convierte un valor de temperatura en un
voltaje analógico proporcional. El rango de voltajes a su salida se encuentra entre
100mV (-40ºC) y 1.75V (125ºC), lo que resulta de una variación de 10mV/ºC, con
500mV de salida para 0ºC. De este modo, la salida puede leerse directamente
desde Waspmote mediante el comando de captura del valor analógico del pin al que
está conectado (ANALOG1).
Gráfica de la tensión de salida del sensor MCP9700A respecto de la temperatura extraída de
la hoja de características del sensor de Microchip
Función de transferencia
La función responde a una recta del tipo
T[º ] = Coef.a * Vout [v] − Coef.b
Tomando dos puntos de la gráfica, aplicando la corrección del divisor de tensión y
resolviendo la ecuación de la recta que pasa por dos puntos:
T [º ] + 40 Vout [v ] − 0.1
=
125 + 40
1.75 − 0.1
0.10v Æ -40º
1.75v Æ 125º
Obtenemos la función en base a los coeficientes:
T [º ] =
165
(V [v] − 0.1) − 40
1.65
Coef.a = 100
Coef.b = 50
50
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
5.3.4.- Sensor de Presión Atmosférica – MPXAZ6115A
Especificaciones
Rango de medida: 15 ~ 115kPa
Señal de salida: 0,2 ~ 4,7V (0 ~ 85ºC)
Sensibilidad: 45.9mV/kPa
Precisión: <±1,5%V (0 ~ 85ºC)
Consumo típico: 6mA
Consumo máximo: 10mA
Alimentación: 4.75 ~ 5.25V
Temperatura de operación: -40 ~ +125ºC
Tiempo de respuesta: 20ms
El sensor MPX4115A convierte la presión atmosférica en un voltaje analógico de
valor comprendido en un rango entre 0.2V y 4.7V. Al tratarse de un rango que
excede el valor máximo admitido por Waspmote se ha adaptado su salida a un
rango entre 0.12V y 2.82V.
Para proceder a su lectura basta con capturar el valor analógico en su pin de
entrada (ANALOG5) mediante el comando correspondiente.
Gráfica de la tensión de salida del sensor MPXAZ6115A respecto de la presión extraída de la hoja de
características del sensor de Freescale
Función de transferencia
La función responde a una recta del tipo
Vout = Vs * (0.009 * P − 0.095) ± Err . Así:
P=
((Vout + Err ) / Vs) + 0.095
siendo Vs =5v
0.009
Dado que el sensor se encuentra integrado en la placa, el único parámetro útil
desde el punto de vista de la calibración es el error propio de cada sensor. Este
coeficiente se identifica en el sistema mediante el parámetro sens_errPR
51
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
5.3.5.- Sensor de Dióxido de Carbono (CO2) – TGS4161
Especificaciones
Gases: CO2
Rango de medida: 350 ~ 10000ppm
Tensión a 350ppm: 220 ~ 490mV
Sensibilidad: 44 ~ 72mV (variación entre la tensión a 350ppm y a 3500ppm)
Alimentación: 5V ±0.2V DC
Temperatura de operación: -10 ~ +50ºC
Tiempo de respuesta: 1.5 minutos
Consumo medio: 50mA
El sensor TGS4161 proporciona a su salida una tensión proporcional a la
concentración de CO2 en el ambiente. Presenta un valor entre 220 y 490mV para
una concentración de 350ppm (aproximadamente la concentración normal de CO2
en el aire) decreciendo conforme incrementa la cantidad de gas. Diferentes
sensores pueden presentar una gran variabilidad en los valores de tensión inicial a
350ppm y sensibilidad, de modo que será recomendable calibrar cada sensor antes
de incluirlo en la aplicación.
La precisión que este sensor puede ofrecer varía en función del tiempo que haya
permanecido alimentado antes de la medida. Un tiempo de 30 segundos es
suficiente para detectar cambios profundos en la concentración, mientras que una
medida de alta precisión requerirá de al menos 10 minutos de alimentación.
Este sensor debe colocarse únicamente en el conector 1A de la forma indicada en la
imagen 35 que figura en el apartado 3.17.1. Para acceder al valor de salida del
sensor basta con capturar el valor analógico del sensor en su pin de entrada
(ANALOG3).
Gráfico de la sensibilidad del TGS4161 extraído de la hoja de características del sensor de Fígaro.
ΔEMF(mv)=EMF1 - EMF2
Donde
EMF1=EMF in 350 ppm CO2
EMF2=EMF in listed gas concentration
52
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Función de transferencia
La función de tipo logarítmico responde a:
ΛEMF = ml * log(CO2 [ ppm]) + b Así: log(CO [ ppm ]) = EMF 1 − EMF 2 − b
2
m
Donde EMF1 es la tensión de salida del sensor en una concentración de CO2 de
350ppm y EMF2 la tensión de salida del sensor ante una concentración dada.
Tomando dos puntos de la gráfica:
0[mv] Æ 350[ppm]
30[mv] Æ 1000[ppm]
60[mv] Æ 3000[ppm]
m=
]m =
30 − 60
= 62.877
log 1000 − log 3000
y 2 − y1
log( x 2) − log( x1)
]b = y − m * log( x )
b = 30 − 62,877 * log(1000 ) = -158,631
Coef.m = 62.877
Coef.b = -158.631
Tomando otros puntos:
Coef.m = 64,30501426
Coef.b = -163,5963319
Estos coeficientes se identifican en el sistema mediante los parámetros
sens_pmCO2 y sens_bCO2. Esto permite modificar la función de transferencia
en caso de que se sustituya el sensor por otro modelo, siempre y cuando la
respuesta del mismo sea logarítmica.
El parámetro sens_paCO2 fija el valor en mv hallado en el proceso de calibración
del sensor para EMF1 (EMF in 350 ppm CO2).
53
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
6.- Especificaciones del sistema
El sistema de desarrolla siguiendo las siguientes especificaciones:
- Sistema abierto
La plataforma de desarrollo está basada en la plataforma abierta Arduino, cuyas
librerías de desarrollo y API´s son de libre distribución.
- Sistema configurable y adaptable
El sistema utiliza un fichero de configuración, en formato texto plano y alojado en la
tarjeta SD incluida, desde donde el sistema carga los distintos parámetros de
configuración de cada unidad en el momento del arranque. Esto permite utilizar un
solo firmware para todos los dispositivos, independiente del rol y utilización que se
defina para cada unidad
Estos parámetros se agrupan en Configuración General (permiten cambiar la hora
en el equipo), Comunicaciones (tipo de nodo, identificación, programación y
potencia de las transmisiones,), Muestreo (Periodo y número de muestras) y
Sensores (coeficientes de linealización, tiempo de precalentamiento).
Los tipos de nodo son:
Nodo:
Router:
Concentrador:
Solo transmite a su Gateway
Recibe de cualquier nodo o router y transmite a su Gateway
Recibe de cualquier nodo o router y transmite vía USB a PC
- Seguridad de datos redundante y acceso a los datos universal
Las medidas realizadas se almacenan en su valor calculado según la función de
transferencia proporcionada por el fabricante del sensor en cuestión. Los datos se
almacenan y transmiten en un formato de registro en texto plano y tabulado con
espacios. Cada registro se almacena en un fichero individual, cuyo nombre
identifica el origen y momento de la muestra que contiene.
54
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Además, en cada unidad queda almacenado un fichero Log con todos registros
generados por ese nodo.
Los registros propios y los recibidos por cada nodo intermedio, provenientes de los
nodos anteriores, con destino el próximo, son almacenados en formato de fichero
individual en un directorio en la SD, de donde no se eliminan hasta tener la
confirmación de su correcta retransmisión. En caso de ruptura de la cadena de
transmisión, los datos son fácilmente recolectables.
En el nodo final, o concentrador, se almacenan todos los registros generados en la
cadena, en formato de fichero individual. Este nodo cuenta con una simple interfaz
de usuario que permite la lectura y borrado de los datos utilizando un simple
emulador de terminal vía USB. En cualquier el acceso a todos los datos
almacenados puede realizarse también leyendo directamente la SD.
- Bajo consumo y alta autonomía
El sistema se alimenta de la batería principal, teniendo la posibilidad de ser
conectado a su vez a una fuente externa constante (fuente de alimentación) o
variable (panel solar) mediante un regulador que cargue la batería. Esta
programado para minimizar el consumo, encendiendo los dispositivos (RTC, USB,
SD, Placa de gases, XBee) solo cuando van a ser utilizados, y desconectándolos
después. Se utiliza la estrategia de poner al equipo en modo latente (Deep Sleep)
para minimizar el consumo en los periodos de espera entre muestreos o ventanas
de comunicación. La autonomía del equipo dependerá, además del tipo de
alimentación, de la programación de los parámetros que afectan a esta (Potencia y
frecuencia de las transmisiones, Tiempo de precalentamiento de sensores,
frecuencia del muestreo y numero de muestras), parámetros que el usuario deberá
analizar y personalizar dependiendo de las necesidades y características de cada
instalación. El sistema además informa del porcentaje de batería restante y de la
tensión de alimentación de la misma en la parte de estatus de los registros
transmitidos, lo que permite comprobar el estado del equipo y adelantarse a un
final de autonomía o fallo de alimentación externa.
- Protocolo sencillo y configurable
Cada mote tiene un ID propio y conoce el ID y la MAC Address de su gateway. La
ventana de comunicaciones es configurable en frecuencia y duración. Cada mote
recibe registros provenientes de aquellos motes que lo tengan como gateway.
Cada registro recibido genera un fichero temporal para reenvío del tipo:
[ID][Tipo]aammddhhmmss[nn].dat
que se almacena en directorio /Buzón. La rutina de comunicaciones vía Xbee
comprueba que lugar de la cadena de trasmisión ocupa el dispositivo y según esto
configura la estrategia de escuchar o empezar a transmitir. El protocolo, muy
básico, es lanzar un RTS y esperar un CTS. Una vez recibido se transmite un
registro y se espera el ACK. Se retransmite todo fichero que exista en el directorio
/Buzon. Una vez recibido el ACK de recibido del gateway, se elimina el fichero del
buzón. Para conformar el mensaje se utilizará la API de XBee.
55
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
7.- Firmware
7.1.- Sistema de desarrollo
El primer paso es instalar el IDE (Integrated Development Environment) utilizado
para programar Waspmote mediante el lenguaje C++. Este IDE se puede encontrar
en la página:
http://www.libelium.com/development/waspmote
El IDE que se va a utilizar es el compilador de la plataforma Arduino, siguiendo el
mismo estilo de librerías y funcionamiento. Es importante usar la versión que se
encuentra en la Web de Waspmote y no otras versiones del IDE de Arduino. La
razón es que la versión disponible en la Web de Libelium es la que ha sido
debidamente testeada y probada y es sobre la que aseguramos un funcionamiento
óptimo.
El IDE-Waspmote incluye todas las librerías del API necesarias para compilar los
programas. El proyecto ha sido desarrollado con el IDE versión 2.0 para Windows y
la API v0.24 para las placas tipo Waspmote v1.1, modificada.
La memoria utilizada para almacenar las variables del programa, recepción de
datos, etc. es la memoria RAM, que es de 8 KB en Waspmote. El objeto de la
modificación de la API es maximizar la cantidad de memoria disponible para el
sistema eliminando la carga en la compilación, de librerías estáticas que no se
vayan a utilizar en el programa. Esto garantiza los al menos 1.2Kb de memoria
libre necesarios en el arranque para que el sistema de comunicaciones (API Xbee)
no devuelva errores.
La falta de memoria libre se debe a todos los módulos de radio y módulos
Waspmote que se incluyen por defecto. Se pueden eliminar las librerías
innecesarias y funciones de la API que no esté utilizando en este mote (otras placas
de sensores, funciones XBee no utilizados, etc.) mediante la eliminación de los
archivos .cpp y .h y comentando la clase correspondiente en Wasclasses.h.
Una estrategia de ahorro de memoria (y de energía también) es encender cada
módulo sólo cuando sea necesario (cuando se va a utilizar) y apagarlo después de
eso.
Otras estrategias y prácticas para minimizar el uso de recursos hardware son:
- Declarar variables usando los tipos adecuados para ahorrar memoria.
- Usar memoria dinámica y liberarla tras usarla, especialmente con la transmisión y
recepción de los paquetes XBee
- Minimizar el uso de mensajes de debug.
La estructura de los códigos se divide en 2 partes fundamentales: un parte
denominada setup y una parte llamada loop. Ambas partes del código tienen un
comportamiento secuencial, ejecutándose las instrucciones en el orden establecido.
La parte llamada setup es la primera parte del código que se ejecuta, haciéndolo
sólo una vez al iniciar el código. En esta parte es recomendable incluir la
inicialización de los módulos que se vayan a utilizar, así como parte del código que
sólo interesa que se ejecute al iniciarse Waspmote.
56
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
La parte denominada loop es un bucle que se ejecuta continuamente, formando un
bucle infinito. Debido al comportamiento de esta parte del código es recomendable
la utilización de las interrupciones para realizar acciones con Waspmote.
Por ello, una técnica habitual de programación orientada al ahorro energético se
basaría en bloquear el programa (ya sea manteniendo el micro despierto o dormido
en determinados casos) hasta que alguna de las interrupciones disponibles en
Waspmote indique que se ha producido un evento. De esta forma, cuando se
detecta una interrupción, se ejecuta la función asociada a dicha interrupción, la cual
ha sido previamente almacenada en un vector de interrupciones.
El proceso de desarrollo del código ha de realizarse de la forma mas estructurada
posible. Esto permite un tiempo de depuración menor cuando el mismo está
terminado. La realización de funciones, genéricas o especificas, ordenadas, permite
un cuerpo de programa fácil de entender y mantener.
7.2.- Descripción funcional del firmware
7.2.1.- Parámetros de funcionamiento (smca.cfg)
El fichero de configuración, smca.cfg es un fichero de texto plano tipo .txt editable
con cualquier editor. En el se especifican los valores de los distintos parámetros de
configuración de cada unidad que se cargan en el momento del arranque.
Estos parámetros se agrupan en Configuración General (permiten cambiar la hora
en el equipo), Comunicaciones (tipo de nodo, identificación, programación y
potencia de las transmisiones,), Muestreo (Periodo y número de muestras) y
Sensores (coeficientes de linealización, tiempo de precalentamiento).
La estructura del fichero de configuración smca.cfg, consta de una serie de
etiquetas, una por linea, de cinco caracteres identificativas del parametro, con un
separador (caracter ”=”) y el valor del parametro a continuacion (sin espacios). La
longitud del valor del parametro es fija para cada uno de ellos y se especifica mas
adelante. Todo lo que vaya despues de esa longitud será obviado, con lo que la
inclusion de comentarios esta permitida
El orden de las etiquetas no importa. La rutina de carga de parametros busca la
etiqueta identificadora a lo largo de todo el fichero. La inclusion de lineas extras con
comentarios tambien está soportada. En el anexo de código se expone un ejemplo
de listado del fichero
A continuacion se definen los parametros implementados, su formato valores
admitidos y justificacion:
Configuracion General (conf_xxxxx)
conf_fdate=[1/0]
Flag de Puesta en hora [SI/NO].
En caso de poner el flag a “1” el
sistema cambiara la hora segun el
parametro conf_idate
conf_idate="YY:MM:DD:dw:hh:mm:ss"
Fecha y hora a programar
57
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Configuracion de Comunicaciones (comu_xxxxx)
comu_outPL=[0-4]
Define la potencia de transmision del XBee:
comu_outPL
comu_ownTD=[0-2]
Tx XBee - 868
0
0dBm
1
13.7dBm
2
20dBm
3
22dBm
4
25dBm
Describe el tipo de nodo. Toma los siguientes valores:
2:
1:
0:
Nodo ( Solo transmite a su Gateway)
Router (Recibe de cualquier nodo o router
y transmite a su Gateway)
Concentrador (Recibe de cualquier nodo o
router y transmite vía USB a PC)
comu_ownID=[XXXX]
Identificador de la unidad. Alfanumérico
comu_gatID=[XXXX]
Identificador del gateway destino de las
transmisiones de la unidad. Alfanumérico
comu_gatMA=[xxxxxxxxxxxxxxxx]
Direccion MAC del gateway destino de
las transmisiones. MAC (media access
control; en español "control de acceso al
medio") es un identificador de 48 bits (6
bloques hexadecimales) que corresponde
de forma única a una tarjeta o
dispositivo de red. Se conoce también
como dirección física, y es única para
cada dispositivo. Está identificada en
cada dispositivo XBee mediante una
etiqueta.
comu_range=[hh:mm]
Frecuencia
de
interrupcion
de
comunicaciones en horas y minutos a
contar desde las 00:00. Conviene que el
valor sea multiplo de 24:00, de manera
que el numero de transmisiones por dia
sea constante:
Intervalo
58
Nº Tx/Rx día
00:05
288
00:10
144
00:15
96
00:20
72
00:30
48
01:00
24
02:00
12
04:00
6
06:00
4
08:00
3
12:00
2
24:00
1
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Configuracion de Muestreo (samp_xxxxx)
samp_count=[1-9]
Numero de medidas por muestra. Se
generarán tantos registros como medidas
se
indiquen
por
cada
muestreo
programado
samp_range=[00:hh:mm:ss]
Programacion de la frecuencia de
muestreo en valor relativo desde el
momento del arranque o reset del equipo,
que es cuando se inicia el intervalo.
Configuracion de Sensores (sens_xxxxx)
sens_Tprec=[xxx]
Tiempo de precalentamiento de sensores
en segundos. El fabricante recomienda
valores de entre 30 y 90 [s].
sens_errPR=[xxxxxxxxxxxx]
Correccion de error en sensor de presión
(ver apartado 5.3.4). Se compone de 12
caracteres numericos admitiendo
el
simbolo “–“ y el “.” Debe completarse a
“0”´s para rellenar
sens_pa1HR=[xxxxxxxxxxxx]
sens_pa2HR=[xxxxxxxxxxxx]
sens_GaCO2=01
sens_pmCO2=[xxxxxxxxxxxx]
sens_pbCO2=[xxxxxxxxxxxx]
sens_paCO2=[xxx]
Parametros de linealizacion de la fdt del
sensor de Humedad Relativa (ver
apartado 5.3.2).
Se compone de 12
caracteres numericos admitiendo
el
simbolo “–“ y el “.” Debe completarse a
“0”´s para rellenar
Ganancia del amplificador del sensor de
CO2
Parametros de linealizacion de la fdt del
sensor de CO2 (ver apartado 5.3.5). Se
compone de 12 caracteres numericos
admitiendo el simbolo “–“ y el “.” Debe
completarse a “0”´s para rellenar
Valor en mv hallado en el proceso de
calibración del sensor para una
concentración de CO2 de 350 ppm CO2
59
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
7.2.2.- Descripción funcional del programa
Fase de Configuración (SETUP)
-
El programa comienza inicializando el puerto USB, de forma que la salida del
mismo pueda ser monitorizada mediante un terminal o el serial monitor
incluido en el IDE.
-
El sistema identifica la versión del programa y muestra la memoria libre en
bytes.
-
Se inicializa el lector de la tarjeta SD y se muestra su capacidad libre en Mb.
-
Se leen los parámetros del fichero smca.cfg. Si el parámetro de puesta en
hora (conf_fdate) está a 1, se sobrescribe a 0 en el fichero.
-
Se inicializa el RTC y en caso de que el parámetro de puesta en hora
(conf_fdate) fuese 1 se actualiza la hora según el parámetro conf_idate.
-
Se inicializa la alarma 1, utilizada para programar la frecuencia de la
interrupción de muestreo según el parámetro samp_range. El programa
muestra la fecha y hora programada.
-
Se inicializa la alarma 2, utilizada para programar la frecuencia de la
interrupción de comunicaciones según el parámetro comu_range.
El
programa muestra la fecha y hora programada.
Cuerpo de programa (LOOP)
-
El cuerpo de programa se inicia con un contador de ciclos que además
muestra la memoria disponible, la identificación del nodo según el
parámetro
comu_ownID y la fecha y hora cargadas en el RTC del
dispositivo.
-
Si la unidad está configurada como Concentrador (comu_ownTD=0) se
arranca una interfaz de usuario en modo línea de comandos que permite
interaccionar con el dispositivo. Se muestra un prompt del tipo “>>”
durante 25 segundos y el sistema responde a los siguientes comandos:
o
o
o
o
o
“T” -> Modo 1: Envío de registros vía USB y borrado. Backup en
carpeta “Registro”
“D” -> Modo 2: Envío de registros vía USB y borrado
“L” -> Modo 3: Devuelve Nº de Ficheros en “Buzon”
“E” -> Finaliza la sesión
Otros -> Comando no reconocido: Devuelve “—>err”.
-
Tras el periodo de permanencia de la interfaz, o si esta no ha arrancado por
no tratarse de un nodo concentrador, el sistema pasa a un estado de Deep
Sleep mostrando "zz.." en pantalla. En este estado el programa principal se
detiene, el microcontrolador pasa a un estado de latencia del que será
despertado por la interrupción síncrona lanzada por el RTC. El intervalo de
este ciclo puede ir de 8 segundos a minutos, horas, días. El consumo en este
estado es de 62μA.
-
La interrupción desde el RTC es producida por cualquiera de las alarmas, 1 o
2, cargadas previamente. Cuando llega una, el sistema despierta mostrando
60
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
"Up!" por pantalla y ejecuta un modulo de tratamiento de interrupciones
que, tras identificar la interrupción, ejecuta la rutina, de muestreo o de
comunicaciones,
asociada a la misma y carga de nuevo la alarma
correspondiente. No se sale de este modulo de tratamiento mientras existen
interrupciones pendientes de tratar con lo que, si mientras se ejecuta una
rutina se produjese la activación de la otra alarma, la rutina asociada se
ejecutaría a continuación.
-
Una vez tratadas, el sistema informa de la programación actualizada de las
alarmas y vuelve al inicio del bucle LOOP.
Interrupción de Muestreo (SAMP)
-
El equipo identifica su estado ejecutando un “Blink” o guiño de los leds de
estado durante 0,3 sg y muestra por pantalla “IM”.
-
Activa la placa de gases y espera un tiempo de precalentamiento, leído del
parámetro sens_Tprec, necesario para estabilizar los sensores.
-
Realiza tres medidas del sensor de dióxido de carbono (CO2). A cada medida
directa se le aplica la función de transferencia descrita en (5.3.5) utilizando
los
parámetros
sens_GaCO2,
sens_pmCO2,
sens_pbCO2
y
sens_paCO2. Se almacena la media aritmética de las tres medidas.
-
Realiza una medida del sensor de presión (PR). A la medida directa se le
aplica la función de transferencia descrita en (5.3.4) utilizando el parámetro
sens_errPR. Se almacena el resultado.
-
Realiza una medida del sensor de humedad relativa (HR). A la medida
directa se le aplica la función de transferencia descrita en (5.3.2) utilizando
los parámetros sens_pa1HR y sens_pa2HR. Se almacena el resultado.
-
Realiza una medida del sensor de temperatura (TE). A la medida directa se
le aplica la función de transferencia descrita en (5.3.3). Se almacena el
resultado.
-
Desconecta la placa de gases y activa la unidad SD.
-
Genera un registro del muestreo realizado con el siguiente formato:
IDID DD/MM/AA HH:MM:SS TT TT BBB VVVV MMMM PPPP HHHH TTTT CCCC
Donde:
IDID: Identificador de la unidad Corresponde al parámetro comu_ownID
DD/MM/AA: Fecha de la muestra
HH:MM:SS: Hora, minuto y segundo de toma de la muestra
TR: Temperatura del RTC / Placa en ºC
TX: Temperatura alcanzada por el XBee en la última transmisión en ºC
BBB: Porcentaje de batería restante
VVVV: Tensión de batería en milivoltios
MMMM: Memoria de tarjeta SD libre en bytes
PPPP: Medida de presión en milibares
HHHH: Medida de Humedad Relativa en tantos por ciento
61
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
TTTT: Medida Temperatura en milésimas de grado
CCCC: Medida de Concentración Dióxido Carbono en ppm
-
Añade el registro como nueva línea al fichero smca.dat en el directorio raíz
de la SD y muestra “->dat”. Si no existe el fichero, crea uno nuevo.
-
Crea
dentro
de
la
carpeta
/Buzon,
un
fichero
del
tipo
IDIDaammddhhmmss.dat donde IDID es el parámetro comu_ownID y
aammddhhmmss es la fecha y hora con segundos de generación del fichero,
cuyo contenido es el registro anterior mostrando la leyenda "->Fic".
-
Desactiva la tarjeta SD.
-
Todo el proceso se repite tantas veces consecutivas como hayamos
especificado mediante el parámetro samp_count
Interrupción de Comunicaciones (COM)
-
El equipo muestra por pantalla “IC”. Inicializa el módulo XBee, configurando
su potencia de transmisión según el parámetro comu_outPL.
-
Si el equipo está configurado como Concentrador (comu_ownTD=0) o
Router (comu_ownTD=1) se inicia la rutina de RECEPCION. Si el equipo
está configurado como Nodo (comu_ownTD=2) esta se omite. Tras acabar
esta rutina el equipo pasa a la de TRANSMISION.
TRANSMISION
-
Se enciende el LED 1 (Verde) y se inician los 8 intentos de transmisión.
-
Cada iteración se señaliza mostrando “TX [nº]” por pantalla y comienza
enviando un paquete de tipo "RTS” al Gateway configurado (parámetros
comu_gatID y comu_gatMA) y esperando (Ver apartado RECEPCION)
durante 10sg el correspondiente paquete “CTS” desde su gateway que
indica que este está escuchando. El envío de un paquete correctamente se
señaliza con un “OK”. En caso contrario se informa mediante el mensaje
“ERROR [CodErr]” el código de error devuelto por el XBee además de
mostrar la leyenda "ErrTX", siendo:
o
o
CodErr = 2 Comando no ejecutado,
CodErr = 1 Comando ejecutado con errores
-
Cuando
se recibe el “CTS”, se inicia la transmisión de los ficheros
almacenados en el directorio /Buzon
-
La transmisión se inicia mostrando el numero de ficheros en el directorio
("Fic: [nº]") y el número de ficheros erróneos o no legibles detectados ("
Er: [nº]"). Se transmite el registro contenido en cada fichero y se espera el
“ACK” del gateway que confirma su recepción correcta. En ese caso el LED 1
(Verde) parpadea y se borra el fichero de /Buzon mostrando "DEL"
(borrado correcto) o "ErrDEL” (error de borrado) en la traza por pantalla.
En caso contrario se mostrará "ErrACK".
62
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
-
Esta rutina se repite hasta que no haya más ficheros correctos que
transmitir. Entonces se apaga el LED 1 (Verde) y se desconecta el módulo
XBee.
RECEPCION
-
Se enciende el LED 0 (Rojo). Se inician los 8 intentos de recepción.
-
Cada iteración se señaliza mostrando “RX [nº]” por pantalla. En caso de
estar configurado como Router el tiempo durante el que se está a la espera
durante cada intento es de 20 sg, y en caso de estarlo como Concentrador,
de 30 sg
-
Si se recibe un dato muestra "Dato" por pantalla. Este se trata: Si el dato es
conforme según se muestra “RxOK". En caso contrario se informa el código
de error devuelto por el XBee "ErrRX: [CodErr]" siendo:
o
o
-
CodErr = 2 Comando no ejecutado.
CodErr = 1 Comando ejecutado con errores.
En caso de recepción correcta se analiza el origen y tipo de mensaje. Este
último puede ser:
o
o
o
o
Mensaje CTS (Clear To Send): La unidad transmisora está dispuesta
para recibir datos. El equipo inicia la transmisión de ficheros (Ver
apartado TRANSMISION)
Mensaje RTS (Request To Send): La unidad transmisora está
dispuesta para transmitir datos. El equipo transmite su disponibilidad
para recibirlos mediante la transmisión de un mensaje del tipo CTS
Mensaje ACK (Acknowledgement): La unidad transmisora confirma
la recepción correcta del último mensaje de datos
Mensaje DAT (Data): La unidad transmisora ha enviado un mensaje
conteniendo un registro de datos. En este caso el LED 0 (Rojo)
parpadea, se activa la SD y se genera un fichero en la carpeta
/Buzon, del tipo IDIDaammddhhmmss.dat donde IDID es el
identificador de la unidad transmisora del mismo y aammddhhmmss
es la fecha y hora con segundos de generación del fichero, cuyo
contenido es el registro recibido y mostrando "->Fic" por pantalla.
Tras eso Desactiva la tarjeta SD y envía un mensaje del tipo ACK al
transmisor.
63
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
8.- Implementación Hardware
Para las pruebas de campo se realizaron tests de montaje de los equipos sobre
distintos contenedores, derivados de distintos productos del mercado de bajo costo,
mecanizándolos de forma manual para que cumplieran su propósito de proteger al
equipo, permitir el buen funcionamiento de los sensores y la accesibilidad a
conectores y al interruptor principal y hacer el transporte y la instalación mas
sencillos.
También se construyeron dos paneles solares, derivados de los utilizados en los
paneles solares de los Postes SOS, adaptándolos a las especificaciones de Libelium.
Modelo A
64
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Modelo B y Panel Solar
65
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
9.- Pruebas del Sistema
9.1.- Test de alcance
Se realiza una prueba de alcance de los dispositivos, equipándose una unidad
Waspmote con una antena dipolo enfundado de 4,5 dBi, y ejecutándose el
programa test Test_RangeTx que es una variante desarrollada a tal fin del
firmware que viene cargado en la misma de fabrica. Este transmite al Waspmote
Gateway a intervalos una trama del tipo:
ë~V }3¢@:®í þ R # }3¢@:®í--- Waspmote. MAC address: 0013 A200 403A B313 -- Loop: 1
ë~V }3¢@:®í þ R # }3¢@:®í--- Waspmote. MAC address: 0013 A200 403A B313 -- Loop: 2
(…)
ë~V }3¢@:®í þ R # }3¢@:®í--- Waspmote. MAC address: 0013 A200 403A B313 -- Loop: 541
(…)
que informa de la dirección MAC del dispositivo transmisor y enumera los mensajes,
de manera que se pueda comprobar la perdida de alguno al detectarse saltos en el
contador
Se instala de forma provisional mediante cables y poleas un equipo suspendido de
la torre de antena del repetidor situada en el área de servicio de El Fantasma
dirección Sevilla. La altura alcanzada por el equipo es de unos 10 m sobre los 65m
sobre el nivel del mar donde esta ubicada dicha antena.
La zona inicialmente elegida para realizar la transmisión fue el Peaje de Las
Cabezas de San Juan. Como se demuestra en el análisis realizado con Radio Mobile,
la elevación del Cerro de El Fantasma produce una zona de sombra en la
propagación de la señal en la dirección deseada (N).
66
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Perfil entre Los Peajes de Las Cabezas y Los Palacios
Perfil entre el Peaje de Los Palacios y el área de servicio de Los Palacios.
Perfil entre el Peaje de Las Cabezas y El Cerro de El Fantasma
67
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Se instala el Waspmote Gateway con un prolongador para antena en un portátil
corriendo un monitor serie sobre el puerto USB donde esta conectado el dispositivo.
La antena se instala en el techo de un vehiculo mediante base magnética, y se
conecta al portátil embarcado.
Se inicia la prueba comprobándose la recepción correcta de las tramas. Se procede
entonces a recorrer la autopista AP-4 dirección Dos Hermanas una velocidad de 110
Km/h. La altura media de este trayecto es de entre 4 y 10m sobre el nivel de mar.
Las tramas se van recibiendo correctamente con algún error esporádico al cruzar
las zonas de sombra producida por los pasos superiores de la autopista o por
alguna área de denso arbolado.
68
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Se detiene el vehiculo en tres zonas especificas y se comprueba que las tramas son
recibidas de forma correcta y sin perdidas de tramas. Las zonas son:
Peaje de Los Palacios:
Distancia en línea recta al trasmisor 18,2 Km.
Área de Servicio de Los Palacios:
Distancia en línea recta al trasmisor 21,8 Km.
Enlace AP-4 / A-4 (SOS nº 1):
Distancia en línea recta al trasmisor 26,8 Km.
69
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
70
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
9.2.- Test de Muestreo y Medida
Se utiliza una unidad equipada con placa de gases con sensores de CO2, HR, Tº y
Presión atmosférica. Se parametriza mediante el fichero de configuración smca.cfg
los valores del muestreo de la siguiente manera:
// Parametros Conf.Comunic (comu_xxxxx)
comu_ownID=ID02
comu_ownTD=2
comu_range=00:00
ID de la Unidad
Nodo
Sin Comunicaciones
// Parametros Conf.Muestreo (samp_xxxxx)
samp_count=9
samp_range=00:00:01:00
sens_Tprec=030
9 Medidas por muestra
Muestreo cada 60 s
30 s de tiempo de precalentamiento de sensores
// Parametros Conf.Sensor Presion (sens_xxxPR)
sens_errPR=-0.625000000
// Parametros Conf.Sensor Humedad Relativa (sens_xxxHR)
sens_pa1HR=53.763440000
sens_pa2HR=25.806450000
// Parametros Conf.Sensor CO2 (sens_xxCO2)
sens_GaCO2=01
sens_pmCO2=62.877000000
sens_pbCO2=-158.6310000
sens_paCO2=400
El funcionamiento de la unidad mediante esta configuración se resume en:
•
•
Inicialización y carga de parámetros
Bucle:
o Modo Deep Sleep durante 60s
o Muestreo de 9 medidas con intervalos de 90s
Se procede durante un periodo de 24h durante el mes de Agosto a someter al
equipo a diversos entornos para comprobar la funcionalidad de la placa de gases:
-
Medidas en Interior de Vivienda Urbana
Medidas en Atmosfera Saturada de CO2
Medida en Exterior de Vivienda Urbana
Medidas en Interior de Vivienda Urbana
Medida en Exterior de Vivienda Urbana
Medidas en Interior de Vivienda Urbana
Medida en Exterior de Vivienda Urbana
Medida en Exterior (Sombra)
Medida en Exterior (Sol)
Medidas en Interior de Vivienda Urbana
Medidas en Interior de Frigorífico
71
(21:03)
(21:24)
(21:30)
(00:19)
(00:49)
(06:35)
(07:30)
(15:29)
(15:51)
(16:06)
(19:40)
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
-
Medidas en Interior de Vivienda Urbana
(20:15)
Los datos, almacenados en el fichero smca.dat son importados a un fichero Excel.
Esta operación es sencilla ya que los datos se encuentran en registros por línea con
campos independientes separados por blancos.
La hoja preparada para el análisis presenta un aspecto tal que el siguiente:
Nº IDID
DD/MM/AA Tim
Lap
Tr Bat Volt
Mem pppp hhhh tttt
cccc
%HR
Tª
Sens.
CO2
Inicio Test: 9
Muestras con 90 seg
Prec.
1
ID02
19/08/2012 21:03:35
30
97 4180 1881
1056
5241 2709
1086
52,41
27,09
1086
Medida en Interior
2
ID02
19/08/2012 21:05:08 0:01:33 30
98 4180 1881
1053
5258 2838
1222
52,58
28,38
1222
3
ID02
19/08/2012 21:06:40 0:01:32 30
98 4180 1881
1054
5171 2935
857
51,71
29,35
857
4
ID02
19/08/2012 21:08:12 0:01:32 30
97 4180 1881
1059
5223 2677
762
52,23
26,77
762
5
ID02
19/08/2012 21:09:45 0:01:33 30
97 4174 1881
1062
5119 2645
601
51,19
26,45
601
6
ID02
19/08/2012 21:11:17 0:01:32 30
97 4174 1881
1060
5241 2709
857
52,41
27,09
857
7
ID02
19/08/2012 21:12:51 0:01:34 30
97 4174 1881
1063
5310 2709
857
53,10
27,09
857
8
ID02
19/08/2012 21:14:23 0:01:32 30
96 4174 1881
1064
5466 2677
601
54,66
26,77
601
9
ID02
19/08/2012 21:15:55 0:01:32 30
96 4174 1881
1056
5379 3032
857
53,79
30,32
857
10 ID02
19/08/2012 21:18:28 0:02:33 31
95 4174 1881
1054
5293 2838
965
52,93
28,38
965
11 ID02
19/08/2012 21:20:01 0:01:33 31
95 4167 1881
1054
5206 2806
857
52,06
28,06
857
12 ID02
19/08/2012 21:21:34 0:01:33 30
96 4167 1881
1056
5206 2935
857
52,06
29,35
857
13 ID02
19/08/2012 21:23:06 0:01:32 30
95 4167 1881
1056
5345 2903
857
53,45
29,03
857
14 ID02
19/08/2012 21:24:39 0:01:33 29
96 4167 1881
1054
6004 2806
1200
60,04
28,06
9106
15 ID02
19/08/2012 21:26:11 0:01:32 30
96 4167 1881
1064
6073 2838
1300
60,73
28,38
3145
16 ID02
19/08/2012 21:27:43 0:01:32 31
95 4167 1881
1054
5483 3032
1400
54,83
30,32
2794
17 ID02
19/08/2012 21:29:16 0:01:33 31
95 4167 1881
1054
5119 2967
1548
51,19
29,67
1548
18 ID02
19/08/2012 21:30:48 0:01:32 31
95 4167 1880
1054
5102 2935
233
51,02
29,35
233
19 ID02
19/08/2012 21:33:21 0:02:33 32
95 4161 1880
1056
4217 3161
475
42,17
31,61
475
20 ID02
19/08/2012 21:34:54 0:01:33 33
95 4161 1880
1054
4079 3161
90
40,79
31,61
90
21 ID02
19/08/2012 21:36:26 0:01:32 33
95 4161 1880
1063
4027 3548
375
40,27
35,48
375
22 ID02
19/08/2012 21:37:59 0:01:33 34
95 4161 1880
1056
4131 3193
422
41,31
31,93
422
23 ID02
19/08/2012 21:39:32 0:01:33 34
95 4161 1880
1053
4113 3064
422
41,13
30,64
422
24 ID02
19/08/2012 21:41:05 0:01:33 34
95 4161 1880
1057
4148 3064
475
41,48
30,64
475
25 ID02
19/08/2012 21:42:37 0:01:32 34
94 4161 1880
1056
4183 3032
534
41,83
30,32
534
26 ID02
19/08/2012 21:44:10 0:01:33 34
94 4161 1880
1056
4269 3032
422
42,69
30,32
422
27 ID02
19/08/2012 21:45:42 0:01:32 34
94 4161 1880
1063
4027 3451
296
40,27
34,51
296
28 ID02
19/08/2012 21:48:15 0:02:33 34
94 4161 1880
1054
3922 3225
296
39,22
32,25
296
29 ID02
19/08/2012 21:49:48 0:01:33 34
94 4154 1880
1053
3766 3161
296
37,66
31,61
296
30 ID02
19/08/2012 21:51:20 0:01:32 34
94 4154 1880
1053
3888 3419
375
38,88
34,19
375
31 ID02
19/08/2012 21:52:53 0:01:33 34
94 4154 1880
1054
3992 3064
375
39,92
30,64
375
32 ID02
19/08/2012 21:54:25 0:01:32 34
93 4154 1880
1066
3905 3451
333
39,05
34,51
333
33 ID02
19/08/2012 21:55:58 0:01:33 34
93 4154 1880
1054
3801 3129
102
38,01
31,29
102
34 ID02
19/08/2012 21:57:31 0:01:33 34
94 4154 1880
1053
3836 3064
333
38,36
30,64
333
35 ID02
19/08/2012 21:59:03 0:01:32 34
94 4154 1880
1053
3714 3096
296
37,14
30,96
296
36 ID02
19/08/2012 22:00:36 0:01:33 34
93 4154 1880
1054
3628 3129
263
36,28
31,29
263
37 ID02
19/08/2012 22:04:28 0:03:52 34
93 4154 1880
1056
3385 3258
296
33,85
32,58
296
38 ID02
19/08/2012 22:06:01 0:01:33 35
93 4154 1880
1066
3420 3258
296
34,20
32,58
296
39 ID02
19/08/2012 22:07:35 0:01:34 35
93 4154 1880
1056
3454 3129
296
34,54
31,29
296
40 ID02
19/08/2012 22:09:07 0:01:32 35
93 4148 1880
1059
3576 3129
50
35,76
31,29
50
41 ID02
19/08/2012 22:10:40 0:01:33 35
93 4148 1880
1054
3524 3129
333
35,24
31,29
333
Atmosfera Saturada
(vela en Bol)
Medidas en Exterior
72
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
42 ID02
19/08/2012 22:12:12 0:01:32 35
93 4148 1880
1056
3541 3129
296
35,41
31,29
296
43 ID02
19/08/2012 22:13:45 0:01:33 35
93 4148 1880
1059
3472 3193
184
34,72
31,93
184
44 ID02
19/08/2012 22:15:18 0:01:33 35
93 4148 1880
1059
3454 3225
233
34,54
32,25
233
45 ID02
19/08/2012 22:16:51 0:01:33 35
93 4148 1880
1059
3315 3258
233
33,15
32,58
233
46 ID02
19/08/2012 22:19:23 0:02:32 35
93 4148 1880
1066
3402 3258
296
34,02
32,58
296
47 ID02
19/08/2012 22:20:56 0:01:33 35
93 4141 1880
1060
3368 3258
80
33,68
32,58
80
48 ID02
19/08/2012 22:22:28 0:01:32 35
93 4141 1880
1059
3385 3258
207
33,85
32,58
207
49 ID02
19/08/2012 22:24:01 0:01:33 35
93 4141 1880
1059
3281 3290
233
32,81
32,90
233
50 ID02
19/08/2012 22:25:34 0:01:33 34
93 4141 1879
1059
3610 3161
333
36,10
31,61
333
51 ID02
19/08/2012 22:27:06 0:01:32 34
93 4141 1879
1057
3454 3193
263
34,54
31,93
263
52 ID02
19/08/2012 22:28:39 0:01:33 34
93 4141 1879
1057
3662 3161
263
36,62
31,61
263
53 ID02
19/08/2012 22:30:12 0:01:33 34
92 4141 1879
1056
3576 3161
233
35,76
31,61
233
54 ID02
19/08/2012 22:31:44 0:01:32 34
92 4141 1879
1059
3628 3193
233
36,28
31,93
233
55 ID02
19/08/2012 22:34:17 0:02:33 34
93 4141 1879
1064
3714 3193
115
37,14
31,93
115
56 ID02
19/08/2012 22:35:49 0:01:32 34
93 4141 1879
1056
3784 3161
263
37,84
31,61
263
57 ID02
19/08/2012 22:37:22 0:01:33 34
92 4141 1879
1054
3784 3548
263
37,84
35,48
263
58 ID02
19/08/2012 22:38:55 0:01:33 34
92 4141 1879
1056
3870 3129
263
38,70
31,29
263
59 ID02
19/08/2012 22:40:27 0:01:32 34
92 4141 1879
1066
3818 3193
80
38,18
31,93
80
60 ID02
19/08/2012 22:42:00 0:01:33 34
92 4135 1879
1059
3888 3193
233
38,88
31,93
233
61 ID02
19/08/2012 22:43:33 0:01:33 34
92 4135 1879
1057
3853 3129
233
38,53
31,29
233
62 ID02
19/08/2012 22:45:06 0:01:33 34
92 4135 1879
1057
3905 3129
233
39,05
31,29
233
63 ID02
19/08/2012 22:46:38 0:01:32 34
92 4135 1879
1056
3992 3516
263
39,92
35,16
263
Se preparan unas graficas con la evolución temporal de las siguientes magnitudes:
-
CO2 [ppm]
Presión Atmosférica [mbar]
Temperatura Sensor [ºC] / Temperatura Placa [ºC] / Humedad Relativa [%]
El análisis de los datos revela que el equipo refleja correctamente los cambios de
entorno, tanto los producidos por la evolución natural a lo largo del periodo, como
los cambios bruscos introducidos a propósito
Se comprueba una cierta dispersión de las muestras que obliga a un filtrado para
una mejor interpretación de los datos. Para ello se incluye una línea de tendencia
conformada por una media móvil de 10 muestras por magnitud.
73
74
19:32:04
18:32:12
Tª [ºC] / HR[%]
80
70
60
50
40
30
20
10
0
20:23:07
19:28:51
18:35:24
17:43:02
16:50:44
Presion Atm `[mbar]
17:32:26
15:57:29
15:06:30
14:15:53
13:23:01
12:31:12
11:39:28
10:46:48
9:55:09
9:03:38
8:08:30
7:18:45
6:27:27
5:35:12
4:44:09
3:53:11
3:01:19
2:11:48
1:15:03
0:24:24
23:35:10
22:43:33
21:52:53
21:03:35
mBar
19:32:04
18:32:12
17:32:26
16:33:45
15:34:09
14:35:55
13:36:41
12:38:32
11:39:28
10:40:29
9:41:33
8:42:47
7:42:42
6:44:06
5:45:34
4:47:15
3:50:05
2:52:00
1:54:00
0:51:06
23:53:18
22:56:55
21:59:03
21:03:35
ppm
1800
16:33:45
15:34:09
14:35:55
13:36:41
12:38:32
11:39:28
10:40:29
9:41:33
8:42:47
7:42:42
6:44:06
5:45:34
4:47:15
3:50:05
2:52:00
1:54:00
0:51:06
23:53:18
22:56:55
21:59:03
21:03:35
Temp Placa
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Co2 `[ppm]
Co2 [ppm]
10 per. media móvil (Co2 [ppm])
1600
1400
1200
1000
800
600
400
200
0
Pres. Atm [mb]
10 per. media móvil (Pres. Atm [mb])
1120
1100
1080
1060
1040
1020
1000
980
960
Tª Placa [ºC]
Tª Sensor [ºC]
Humed.Rel [%]
10 per. media móvil (Humed.Rel [%])
10 per. media móvil (Tª Sensor [ºC])
10 per. media móvil (Tª Placa [ºC])
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
9.3.- Test de Transmisión de datos
Se equipan con placas de gases y sensores las tres unidades de las que se dispone
configurándolas para efectuar una prueba con medidas reales y transmisión de
datos en un entorno de interior, mientras se monitorizan los equipos con un PC
conectado a los mismos vía USB. La duración del test fue de 12 horas. La
transmisión se realizó con los equipos en potencia mínima y sin antena, para evitar
saturación.
Se configuran como sigue:
Unidad 1 (Concentrador)
// Parametros Conf.Comunic (comu_xxxxx)
comu_outPL=1
comu_ownTD=0
comu_ownID=ID01
comu_gatID=ID01
comu_gatMA=0013A200403AAEED
comu_range=01:00
Potencia minima
Tipo Concentrador
Identificador
Gateway (Indiferente)
MAC Gateway (Indiferente)
Periodo de la transmision
// Parametros Conf.Muestreo (samp_xxxxx)
samp_count=1
samp_range=00:00:04:00
// Parametros Conf.Sensores (sens_xxxxx)
sens_Tprec=060
sens_errPR=-0.625000000
sens_pa1HR=53.763440000
sens_pa2HR=25.806450000
sens_GaCO2=01
sens_pmCO2=62.877000000
sens_pbCO2=-158.6310000
sens_paCO2=325
Unidad 2 (Router)
Todos los parámetros iguales excepto:
comu_ownTD=1
comu_ownID=ID02
comu_gatID=ID01
comu_gatMA=0013A200403AAEED
Tipo Router
Identificador
Identificador del Gateway
MAC Adress del Gateway
Unidad 3 (Nodo)
Todos los parámetros iguales excepto:
comu_ownTD=2
comu_ownID=ID03
comu_gatID=ID02
comu_gatMA= 0013A200403AB30F
Tipo Router
Identificador
Identificador del Gateway
MAC Adress del Gateway
75
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Previamente a la prueba, se sincronizan los tres RTC de las placas mediante el
reinicio de las unidades previamente configuradas con los parámetros:
conf_fdate=1
conf_idate=12:11:26:02:22:20:00
"YY:MM:DD:dw:hh:mm:ss"
El funcionamiento del sistema mediante esta configuración se resume en que cada
uno de los tres equipos recoge una muestra cada cinco minutos, contando desde el
momento de arranque de cada uno.
Cada hora en punto los equipos se ponen en modo transmisión/recepción. Los
registros producidos y almacenados en la unidad ID03 (Nodo) se transmiten a la
unidad ID02 (Router). Los producidos por esta más los recibidos se transmiten a la
unidad ID01 (Concentrador).
Desde la unidad ID01, se puede monitorizar la existencia de registros y recogerlos
cuando convenga mediante la interfaz disponible cada 5 minutos. Dado que el
sistema SD trabaja en FAT, el número máximo de ficheros a listar y transmitir es de
255
76
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Al final de la transmisión se comprueba cuantos registros han tenido errores. Tras
exportar los datos a Excel, se realizan las gráficas de las magnitudes medidas por
los tres equipos. Se comprueba tras la importación directa de los registros
almacenados en cada una de los ficheros smca.dat de cada unidad, la
correspondencia con los tratados mediante la cadena de transmisiones.
Unidad ID03 (Nodo)
Humedad
Humedad Relativa
Presion Atmosferica
3 per. media
1100
móvil (Humedad)
1080
70
60
1060
50
1040
1020
40
%
[mb] 1000
30
Presion
Atmosferica
980
960
20
Polinómica
(Presion
Atmosferica)
940
10
920
0
11
:4
4:
12
12
:2
9:
39
13
:1
5:
06
14
:0
0:
33
14
:4
6:
00
15
:3
1:
27
16
:1
6:
54
17
:0
2:
21
17
:4
7:
48
18
:3
3:
15
19
:1
8:
42
20
:0
4:
09
20
:4
9:
36
21
:3
5:
04
22
:4
9:
20
23
:3
4:
47
:4
7
23
:4
9
22
21
:3
4
:2
0
:0
4
:3
6
:3
5
:0
9
:4
9
:0
4
20
19
20
:1
8
:3
3
18
17
:4
2
:1
5
:4
8
:2
1
:4
7
:5
4
:0
2
:1
6
16
17
:0
0
:2
7
15
14
:3
1
:4
6
:3
3
:0
6
:0
0
14
13
11
12
:4
4
:2
9
:1
5
:3
9
:1
2
900
Unidad ID02 (Router)
Humedad
Humedad Relativa
Presion Atmosferica
3 per.
media
1100
móvil (Humedad)
1080
70
60
1060
50
1040
1020
40
Presion
Atmosferica
[mb] 1000
%
30
980
Polinómica
(Presion
Atmosferica)
960
20
940
10
920
:1
5
:2
0
:3
5
23
21
22
:3
1
:4
6
:4
3
:5
1
20
:4
1
:5
1
19
19
18
:5
7
:2
4
:2
9
:0
6
:3
5
:1
6
:4
1
:2
6
:3
6
15
16
17
:5
4
:4
6
:2
1
14
:5
6
:2
6
:1
1
14
:2
1
13
11
12
:3
1
:4
1
:4
9
:4
4
:1
5
:2
0
23
22
:4
6
:3
5
:4
3
:5
1
:3
1
21
20
:4
1
:5
1
19
19
18
:5
7
:2
4
:0
6
:2
9
:1
6
:2
6
17
16
:3
5
:4
1
:4
8
:3
6
:5
4
:4
6
15
14
14
:1
1
:5
6
:2
1
:2
6
:2
1
13
12
:3
1
:4
1
:4
9
:4
4
11
:4
8
900
0
Unidad ID01 (Concentrador)
Humedad
Humedad Relativa
Presion Atmosferica
3 per. media
1100
móvil (Humedad)
60
1080
50
1060
1040
40
%
1020
Presion
Atmosferica
[mb] 1000
30
980
Polinómica
(Presion
Atmosferica)
960
20
940
10
920
:0
4
0:
59
:2
8
:2
1
:5
9
23
:5
4
:4
3
21
:0
8
:1
8
:0
8
:2
3
20
20
:2
8
:3
2
:4
1
19
18
17
:3
8
:5
0
:5
8
:0
9
:4
8
16
15
:5
9
:2
2
:2
8
:1
3
15
:2
3
14
:3
3
13
12
:4
2
:5
1
:5
4
:5
3
:0
4
:2
1
0:
59
:2
8
23
21
:4
3
:5
9
:0
8
20
:5
4
:2
3
:0
8
20
:1
8
:3
2
:4
1
19
18
:2
8
:5
0
:5
8
:3
8
17
16
:4
8
:0
9
:5
9
15
15
:1
3
:2
2
:2
8
14
:2
3
:3
5
:3
3
:5
1
:4
2
12
13
:5
4
:5
3
11
11
77
:3
5
900
0
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
9.4.- Pruebas de Campo
9.4.1.- Planificación y Despliegue
Tras comprobar el correcto funcionamiento del sistema en condiciones de
laboratorio, se pasa a efectuar una prueba real en campo. Para ello se equipan con
placas de gases y sensores las tres unidades de las que se dispone, montándolas en
el interior de los prototipos de cajas contenedoras descritas en el punto 8 y con sus
correspondientes antenas conectadas. Se instalan en los siguientes puntos,
identificados anteriormente en el punto 4.2:
Unidad Nodo
Tipo
Gateway
Nodo
06
Punto Singular
Peaje Los Palacios
Instalación
Alimentación Pk Altura
Cabina
Autónoma
ID03
03
ID02
06
Router
08
AS El Fantasma
Repetidor
ID01
08
Concentrador
PC
AM Las Cabezas
Edificio Área
23
12
Solar
42
59
USB PC
45
18
Esta configuración permite testear en condiciones reales los enlaces descritos en los
puntos 4.2.3 (Enlace Peaje Los Palacios – A.S. El Fantasma) y 4.2.6. (Enlace A.S. El
Fantasma – A.M. Las Cabezas). Además nos permite comprobar la recuperación de
datos del protocolo de trasmisión bajo condiciones de corte parcial de uno de los
enlaces de comunicaciones.
Se configuran además para efectuar una prueba con medidas y transmisión de
datos en un entorno real, consistente en realizar un muestreo completo de las
magnitudes objeto de estudio cada 10 minutos, diseñando un escalado en
programación de las transmisiones de datos de la siguiente forma:
Unidad ID03: Transmisión a Unidad ID02 cada 60min
Unidad ID02: Transmisión a Unidad ID03 cada 30min
Unidad ID01: Recepción cada 30 minutos. La unidad se apaga durante un periodo
de 16 horas (de 17:00 a 09:00) para forzar la retransmisión de datos desde la udad
ID02 y comprobar la integridad de los mismos operando la consola de línea de
comandos del modo Concentrador desde un PC conectado vía USB.
Instalación Unidad ID03 (Nodo Peaje Los Palacios)
9.4.3.- Desarrollo
78
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Instalación Unidad ID02 (Router A.S. El Fantasma)
79
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Instalación Unidad ID03 (Concentrador A.M. Las Cabezas)
La duración del test fue de 28 horas, iniciándose la misma sobre las 12:00 y
finalizando a las 16:00 del día siguiente, aunque durante las 4 últimas horas los
equipos son desmontados de sus ubicaciones y trasladados al área de
mantenimiento, con lo que las últimas medidas no son representativas. La prueba
se realizó con los equipos configurados en potencia máxima de transmisión.
En el inicio de la prueba se comprueba, mediante la conexión a PC de la unidad
Concentrador ID01, que los equipos están generando datos coherentes y
transmitiéndolos, recibiéndose en esta unidad, en el periodo de una hora y entre las
dos ventanas de recepción programadas, los 6 registros generados por cada una de
las otras dos, tal y como se muestra en este extracto de la consola de ID01:
80
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
SMCAv0.8b1 1511B 1876MB
IM:05, 13:09:05 - 12:33:16
IC:05, 13:09:05 - 12:30
N1 M:1462
ID01 05/09/13 12:24:16
>> L
Fic: 1
>> T
REG.1-0 ID01 05/09/13 12:21:30 34 00 84 4083 1876 1064 2813 3838 15947
>> L
Fic: 0
>> zz..
Up!
IC
Rx 1 Rx 2 Rx 3 Rx 4 Rx 5
Dato RxOK
Rx 6 Rx 7 Rx 8
IM
ID01 05/09/13 12:35:32 39 20 90 4129 1876 1053 2587 3870 20876 ->dat ->Fic
IM:05, 13:09:05 - 12:44:35
IC:05, 13:09:05 - 13:00
N2 M:686
ID01 05/09/13 12:35:36
>> L
Fic: 3
>> T
REG.3-0 ID02 05/09/13 12:14:14 29 00
REG.2-0 ID02 05/09/13 12:24:18 30 00
REG.1-0 ID01 05/09/13 12:35:32 39 20
>> zz..
Up!
IM
ID01 05/09/13 12:51:44 30 00 88 4116
IM:05, 13:09:05 - 13:00:47
IC:05, 13:09:05 - 13:00
91 4129 1882 1053 4235 5612 0377
90 4122 1882 1054 4287 3483 0516
90 4129 1876 1053 2587 3870 20876
1876 1051 2951 2516 5422 ->dat ->Fic
N2 M:1462
ID01 05/09/13 12:51:48
>> zz..
Up!
IC
Rx 1 Rx 2 Rx 3 Rx 4 Rx 5 Rx 6 Rx 7 Rx 8
Dato RxOK CTS OK
Dato RxOK ->Fic
ACK OK
Dato RxOK ->Fic
ACK OK
Dato RxOK ->Fic
ACK OK
Dato RxOK ->Fic
(...)
ACK OK
IM
ID01 05/09/13 13:08:02 36 10 91 4129 1875 1063 3073 3580 18576 ->dat ->Fic
IM:05, 13:09:05 - 13:17:05
IC:05, 13:09:05 - 13:30
N3 M:686
ID01 05/09/13 13:08:06
>> L
Fic: 12
>> T
REG.12-0 ID01 05/09/13 12:51:44 30 00 88 4116 1876 1051 2951 2516 5422
REG.11-0 ID02 05/09/13 12:34:22 32 29 89 4116 1882 1060 4044 3290 0507
REG.10-0 ID02 05/09/13 12:44:26 32 29 88 4109 1882 1056 4027 3290 0529
81
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
REG.9-0
REG.8-0
REG.7-0
REG.6-0
REG.5-0
REG.4-0
REG.3-0
REG.2-0
REG.1-0
>> E
zz..
ID02
ID03
ID03
ID03
ID03
ID03
ID03
ID03
ID01
05/09/13
05/09/13
05/09/13
05/09/13
05/09/13
05/09/13
05/09/13
05/09/13
05/09/13
12:54:30
11:55:51
12:05:54
12:15:57
12:26:00
12:36:03
12:46:06
12:56:09
13:08:02
31
28
29
30
30
30
30
30
36
29
00
29
29
29
29
29
29
10
88
97
96
94
94
93
93
91
91
4103
4174
4167
4161
4154
4148
4141
4135
4129
1882
1882
1882
1882
1882
1882
1882
1882
1875
1057
1063
1054
1053
1050
1057
1051
1060
1063
4044
4686
4530
4339
4443
4339
4495
4460
3073
3483
2709
2838
3129
2935
2999
2935
2935
3580
0827
0054
0098
0073
0158
0165
0168
0244
18576
Se observa como al transmitir los registros almacenados (comando “T”), el sistema
presenta por pantalla los mismos de manera ordenada y con los distintos campos
separados con blancos, con lo que seleccionando esta zona mediante el ratón del
PC, efectuando un “Copia” (Ctr-C) y pegando lo seleccionado (Ctr-V) en un fichero
de texto plano, obtenemos un fichero susceptible de ser importado directamente a
una base de datos u hoja de cálculo.
A las 17:00 se apaga el equipo concentrador, con lo que los datos generados en las
unidades ID03 e ID02 se almacenan en esta última.
A las 09:00 del día siguiente se arranca la unidad y en las ventanas de transmisión
siguientes se retransmiten al concentrador los registros almacenados durante este
periodo de 16 horas en ID02. Se incluye una sección de la salida de la consola de la
ID02 donde se observa la recepción de 6 muestras de la ID01 y la retransmisión de
231 registros al concentrador ID03.
(…)
N11 M:372
ID02 06/09/13 11:55:01
zz..
Up!
IC
Rx 1 Dato RxOK
CTS OK
Dato RxOK ->Fic
ACK OK
Dato RxOK ->Fic
ACK OK
Dato RxOK ->Fic
ACK OK
Dato RxOK ->Fic
ACK OK
Dato RxOK ->Fic
ACK OK
Dato RxOK ->Fic
ACK OK
Rx 2 Rx 3 Rx 4 Rx 5 Rx 6 Rx 7 Rx 8
Tx 1
RTS OK
Dato RxOK
Fic: 231 Er: 0
ID02 05/09/13 16:39:08 35 29 71 3974
Dato RxOK DEL
Fic: 230 Er: 0
ID02 05/09/13 16:49:12 34 29 70 3967
Dato RxOK DEL
Fic: 229 Er: 0
ID02 05/09/13 16:59:16 32 29 69 3961
Dato RxOK DEL
Fic: 228 Er: 0
ID03 05/09/13 16:07:06 31 29 77 4025
Dato RxOK DEL
Fic: 227 Er: 0
ID03 05/09/13 16:17:09 31 29 76 4019
Dato RxOK DEL
1882 1054 4044 3354 0630Á OK
1882 1053 4165 3290 0457¼ OK
1882 1049 4391 3225 0827² OK
1882 1051 4842 2935 0428Å OK
1882 1062 4738 2935 0384® OK
82
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Fic: 226 Er: 0
(...)
Fic: 3 Er: 0
ID03 06/09/13 11:32:50
Dato RxOK DEL
Fic: 2 Er: 0
ID03 06/09/13 11:42:53
Dato RxOK DEL
Fic: 1 Er: 0
ID03 06/09/13 11:52:56
Dato RxOK DEL
Fic: 0 Er: 0
IM
ID02 06/09/13 13:13:36
24 20 21 3593 1882 1050 6593 2387 0537Å OK
25 20 21 3587 1882 1049 6437 2548 0537¹ OK
26 20 20 3587 1882 1051 6177 2451 0558¿ OK
29 20 38 3716 1882 1050 4547 5290 0673 ->dat ->Fic
IM:06, 13:09:06 - 13:22:38
IC:06, 13:09:06 - 13:30
N12 M:372
ID02 06/09/13 13:13:39
zz..
9.4.2.- Explotación de los datos
Una vez finalizada la prueba y con los equipos en el Área de Mantenimiento, se
analizan las tarjetas SD de los tres equipos, con los siguientes resultados:
- Los buzones de transmisión de las unidades ID01 e ID02 están vacíos. Todos los
registros han sido transmitidos a ID03. Se comprueba que no se ha generado
ningún error en el manejo de ficheros (operaciones de creación, escritura y
borrado).
- Todos los registros generados por las tres unidades se encuentran en ID03 en
forma de ficheros, bien en el directorio de recepción “/Buzon”, bien en el de
almacén “/Registro”.
- Todos los registros generados se encuentran incluidos en el fichero de datos
scma.dat de cada unidad.
Se procede a importar los registros contenidos en los tres ficheros scma.dat al
programa Excel y a representar gráficamente los resultados por el mismo
procedimiento enunciado en el punto 9.2.
83
:5
5
13 :51
:2
6
14 :18
:5
6
16 :45
:2
7
17 :12
:5
7
19 :39
:2
8
20 :06
:5
8
22 :33
:2
9
23 :00
:5
9:
2
1: 7
29
:5
3: 4
00
:2
4: 1
30
:4
6: 8
01
:1
7: 5
31
:4
9: 2
02
:
10 09
:3
2:
1 2 36
:1
3
13 :02
:4
3
15 :29
:1
4:
31
11
:5
6
:2
6
:5
5
:1
8
:5
1
16 :45
:2
7:
17 12
:5
7
19 :39
:2
8
20 :06
:5
8:
22 33
:2
9
23 :00
:5
9:
2
1: 7
29
:5
3: 4
00
:2
4: 1
30
:4
6: 8
01
:1
7: 5
31
:4
9: 2
02
:
10 09
:3
2:
12 36
:1
3
13 :02
:4
3:
15 29
:1
4:
31
14
13
11
11
:5
13 5:5
:1 1
14 6:1
:3 5
15 6:3
:5 9
17 7:0
:1 3
18 7:2
:3 7
19 7:5
:5 1
21 8:1
:1 5
22 8:3
:3 9
23 9:0
:5 3
9
1: :27
19
2: :51
40
4: :15
00
5: :39
21
6: :03
41
8: :27
01
9: :51
2
10 2:1
:4 5
12 2:3
:1 9
13 3:0
:3 2
14 3:2
:5 6
16 4:2
:1 5
4:
49
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Unidad ID03 (Nodo Peaje Los Palacios)
Co2 [ppm] según CO2_Value [mv]
1200
1000
Temp RTC
70
Temp Xbee
60
Temp Sensor
30
10
84
Co2 [ppm]
Co2 Value[mv]
Co2_FIL [ppm]
5 per. media móvil (Co2
[ppm])
800
[ppm]
600
400
200
0
Temperatura
50
Temp [ºC]
40
30
20
10
0
Humedad Relativa
90
80
70
60
%
50
40
20
Humedad
3 per. media
móvil (Humedad)
0
11
:5
5
13 :5 1
:2
6
14 :1 8
:5
6
16 :4 5
:2
7
17 :1 2
:5
7
19 :3 9
:2
8
20 :0 6
:5
8
22 :3 3
:2
9:
23 0 0
:5
9:
1: 2 7
29
:5
3: 4
00
:
4: 21
30
:
6: 48
01
:1
7: 5
31
:
9: 42
02
10 :09
:3
2
12 :3 6
:1
3
13 :0 2
:4
3
15 :2 9
:1
4:
16 3 1
:4
4:
58
11
:5
5
13 :5 1
:2
6:
14 1 8
:5
6
16 :4 5
:2
7
17 :1 2
:5
7
19 :3 9
:2
8
20 :0 6
:5
8
22 :3 3
:2
9:
23 0 0
:5
9:
1: 2 7
29
:
3: 54
00
:
4: 21
30
:4
6: 8
01
:
7: 15
31
:
9: 42
02
10 :09
:3
2
12 :3 6
:1
3
13 :0 2
:4
3
15 :2 9
:1
4
16 :3 1
:4
4:
58
:5
5
13 :51
:2
6:
14 1 8
:5
6
16 :45
:2
7
17 :12
:5
7
19 :39
:2
8:
20 0 6
:5
8
22 :33
:2
9
23 :00
:5
9:
2
1: 7
29
:5
3: 4
00
:2
4: 1
30
:4
6: 8
01
:1
7: 5
31
:4
9: 2
02
:
10 09
:3
2:
12 3 6
:1
3:
13 0 2
:4
3
15 :29
:1
4:
31
11
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Presion Atmosferica
1100
1080
1060
1040
1020
[mb] 1000
980
Presion
Atmosferica
960
940
920
Polinómica
(Presion
Atmosferica)
900
% Carga
Descarga Bateria
110
100
90
80
70
60
50
40
30
20
10
0
Tension Alimentación
Volts
4,250
4,200
4,150
4,100
4,050
4,000
3,950
3,900
3,850
3,800
3,750
3,700
3,650
3,600
3,550
3,500
3,450
3,400
3,350
3,300
85
:5
7
:5
8
:5
0: 4
28
:3
1: 0
59
:0
3: 7
29
:4
5: 4
00
:2
6: 0
30
:5
8: 6
01
:3
9: 3
32
:
11 09
:2
4:
14 45
:0
6:
15 07
:3
9:
00
22
:5
7
:5
8
:2
2
:4
8
:1
2
:3
6
:0
0
:1
4
:5
0: 4
28
:3
1: 0
59
:0
3: 7
29
:4
5: 4
00
:2
6: 0
30
:5
8: 6
01
:3
9: 3
32
:
11 09
:2
4:
14 4 5
:0
6:
15 0 7
:3
9:
00
22
:2
0
:5
0
:1
9
:4
9
:1
8
:4
8
:1
4
Temp Sensor
21
19
18
16
15
13
70
:2
2
:4
8
:1
2
:3
6
:0
0
:1
4
12
Temp Xbee
:2
0
:5
0
:1
9
:4
9
:1
8
:4
8
:1
4
80
21
19
18
16
15
13
12
Temp RTC
30
10
86
1200
0
15:49:04
1400
14:38:41
Co2 [ppm] según CO2_Value [mv]
13:23:39
10:53:18
9:32:09
8:21:41
7:11:13
6:00:44
4:50:16
3:39:48
2:29:20
1:18:51
0:08:22
22:57:54
21:43:14
20:30:38
19:20:11
18:09:44
16:59:16
15:48:48
14:38:20
13:27:52
12:14:14
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Unidad ID02 (Router A.S. El Fantasma)
Co2 [ppm]
Co2 Value[mv]
Co2_FIL [ppm]
5 per. media móvil (Co2
[ppm])
1000
[ppm]800
600
400
200
0
Temperatura
60
Temp [ºC]
50
40
30
20
10
0
Humedad Relativa
90
80
70
60
%
50
40
20
Humedad
3 per. media
móvil (Humedad)
87
16
:2
6
:5
0
:1
4
:3
3
15:20:51
14:05:54
11:50:52
10:22:01
920
:2
3
8:35:52
7:25:24
6:14:56
5:04:28
3:54:00
2:43:32
1:33:04
0:22:36
:5
8
:2
2
:4
8
:1
2
940
:1
5
:0
1
:4
4
:0
8
:3
2
:5
6
:2
0
:5
7
:2
0
:5
0
:1
9
:3
6
:0
0
:1
4
:5
0: 4
28
:3
1: 0
59
:0
3: 7
29
:4
5: 4
00
:2
6: 0
30
:5
8: 6
01
:3
9: 3
32
:
11 09
:2
4:
14 45
:0
6:
15 07
:3
9:
00
22
21
19
18
:4
9
:1
8
:4
8
:1
4
980
14
:2
2
15
45
14
43
13
23:12:08
22:01:40
20:51:12
19:40:44
18:30:16
17:19:48
16:09:15
16
15
13
12
[mb] 1000
13
10
8:
6:
5:
3:
2:
8
2
6
0
4
14:58:46
13:48:18
12:21:30
800
:4
4
2:
0
1:
3
0:
5
0:
2
9:
4
:0
2
:2
6
:3
0
1000
42
:1
:4
:1
:4
:0
:3
9
:0
8
:2
1
1200
0:
23
21
20
18
17
15
14
12
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Presion Atmosferica
1100
1080
1060
1040
1020
Presion
Atmosferica
960
Polinómica
(Presion
Atmosferica)
900
Unidad ID01 (Concentrador AM Las Cabezas)
Co2 [ppm] según CO2_Value [mv]
Co2 [ppm]
Co2 Value[mv]
Co2_FIL [ppm]
5 per. media móvil (Co2
[ppm])
[ppm]
600
400
200
0
Temperatura
Temp RTC
45
Temp Xbee
40
35
Temp Sensor
Temp [ºC]
25
30
20
15
10
5
0
88
16
:2
6
:1
4
:3
3
:2
3
920
:5
0
940
14
:0
1
:4
4
:0
8
:3
2
:5
6
:2
0
980
:1
5
:2
2
15
45
14
43
13
[mb] 1000
13
10
8:
6:
5:
3:
2:
8
2
6
0
4
:4
4
2:
0
1:
3
0:
5
0:
2
9:
4
:0
2
:2
6
:3
0
42
:1
:4
:1
:4
:0
:3
9
0:
23
21
20
18
17
15
:0
8
:2
1
16
14
13
10
:2
6
:5
0
:1
5
:4
4
:0
8
:3
2
:5
6
:2
0
:1
4
:3
3
:2
3
:0
1
15
45
14
43
13
:2
2
8:
6:
5:
3:
2:
8
2
6
0
4
:4
4
2:
0
1:
3
0:
5
0:
2
9:
4
:0
2
:2
6
:3
0
42
:1
:4
:1
:4
:0
:3
9
:0
8
:2
1
0:
23
21
20
18
17
15
14
12
%
14
12
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Humedad Relativa
60
50
40
30
20
Humedad
3 per. media
móvil (Humedad)
10
0
Presion Atmosferica
1100
1080
1060
1040
1020
Presion
Atmosferica
960
Polinómica
(Presion
Atmosferica)
900
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
10.- Conclusiones
10.1.- Problemáticas encontradas en el desarrollo
El desarrollo con la plataforma Waspmote de Libelium ha ocasionado no pocos
problemas hasta alcanzar el nivel de conocimiento de sus peculiaridades necesario.
La ventaja con que cuenta la plataforma es que es de código abierto y está
derivada de la plataforma libre Arduino, con lo que el soporte a través de la pagina
Web de Libelium, así como a través de distintos foros en Internet ofrece en general
suficiente información sobre la resolución de los distintos problemas que aparecen
en el transcurso del desarrollo de la aplicación. Eso si, siempre en idioma ingles.
Durante el desarrollo del proyecto Libelium publicó una nueva versión del IDE y
actualizó en varias ocasiones la API. En ocasiones fue necesario actualizar el código
al cambiar o incluso desaparecer, algunas de las funciones usadas. Esta información
aparece en el fichero Waspmote_changelog.txt que se puede consultar en el punto
de descarga de las actualizaciones.
Sin embargo Libelium no actualiza la documentación asociada y los ejemplos con la
misma rapidez, con lo que en algunos casos en el desarrollo se generan errores
aparentemente no explicables, incluso usando ejemplos publicados en la pagina
Web del fabricante. Por ello es importante reflejar en el código fuente para qué
versiones de IDE y API está comprobada la compilación. Es muy útil modificar el
IDE (fichero boards.txt en el subdirectorio \hardware de la aplicación) para que el
mismo pueda soportar la compilación usando distintas versiones de librerías,
(alojadas en el directorio \hardware\cores\). Las usadas en este proyecto fueron:
\waspmote-ide-v.02-windows\hardware\cores\waspmote-api-v.023
\waspmote-ide-v.02-windows\hardware\cores\waspmote-api-v.024
\waspmote-ide-v.02-windows\hardware\cores\waspmote-api-v.024r
Siendo esta última la modificada para optimizar la gestión de memoria.
La memoria RAM del sistema, 8Kb, utilizada para almacenar las variables del
programa, recepción de datos, etc. es escasa, debido a todos los módulos de radio
y módulos Waspmote que se incluyen por defecto.
La API de comunicaciones para Xbee que se utiliza consume mucha memoria para
las estructuras complejas de datos, y el hecho es que con menos de 1.2Kb libres en
el arranque, el sistema de comunicaciones devuelve errores, que además en
principio no se identificaron con la causa real, lo que hasta deducir el origen del
problema, ralentizó mucho la fase de pruebas conjuntas de varios módulos del
software.
Otra causa de un consumo excesivo de memoria RAM es el uso de estrategias de
depuración basadas en el uso de mensajes de estado por pantalla mediante
funciones del tipo USB.print (“cadena”). Parece que el compilador reserva una gran
cantidad de memoria para estas funciones, con lo que la RAM disponible disminuye
rápidamente. Esta es la causa de que la versión final del software tenga una salida
de información escasa y hasta cierto punto críptica, ya que se ha trabajado
intensamente en el optimización de la memoria, con las estrategias ya descritas en
el punto 7.1.- Sistema de desarrollo
Durante el desarrollo se detectó un error en la función configureAlarmMode () de la
librería WaspRTC utilizada por las funciones setAlarm1() y setAlarm2() que impide
que se puedan usar las dos alarmas disponibles simultáneamente, ya que resetea
89
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
los flags de ambas en el registro de estado del RTC independientemente de cual de
las dos se está reprogramando. La estrategia para solventar este problema fue
guardar el registro antes de ejecutar la función, y reponerlo después con el reset
del flag adecuado.
La placa es muy sensible a los errores del tipo manejo de hardware (encender por
ejemplo la SD dos veces seguidas, o el RTC), reseteándose o funcionando
erráticamente. Lo peor es que no da pistas sobre el problema, teniendo que utilizar
una estrategia de probar con versiones anteriores y cambiando cosas poco a poco.
Es imprescindible utilizar una programación lo más ortodoxa posible, de manera
que las estrategias clásicas de depuración puedan ser útiles ya que el entorno no
dispone de debugger, así como consultar los ejemplos de código disponibles en las
Webs del fabricante.
Aun así, el manejo de la SD es bastante delicado. Bien sea por las funciones de
librería, el hardware de lectura integrado en la placa o la propia tarjeta Micro SD,
en muchos casos algunos ficheros de datos se corrompen tras un arranque o
reseteo. Esto ha llevado a replantearse la estrategia de gestión de datos,
independizando cada registro en un fichero, de manera que se minimice el riesgo
de perder todas las muestras en caso de corrupción de un fichero registro único.
También ha habido que implementar mecanismos de gestión de los ficheros
corrompidos para que la existencia de alguno no paralice el tratamiento de los
restantes. Conviene efectuar frecuentes recomposiciones de la FAT de la tarjeta
mediante el comando DOS chkdsk.
El sistema de archivos utilizado en la tarjeta es FAT16, lo que limita el número de
ficheros en un único directorio a 256. En caso de que se sobrepasen, el equipo
sigue grabándolos, pero es incapaz de leerlos para retransmitirlos. Por suerte si son
accesibles desde cualquier PC.
Otro problema que ralentiza el proceso de desarrollo es la necesidad de desmontar
parte del equipamiento para realizar la carga de nuevas versiones de programa,
dado que el módulo XBee comparte la UART con el puerto utilizado para programar,
y para retirarlo es necesario hacerlo primero con la tarjeta de gases. Esta
operación, repetida en innumerables puede ocasionar daños en los conectores de
los componentes dada su extremada fragilidad. También, el tener que usar siempre
la batería conectada, aun alimentando el equipo externamente, aumenta el riesgo
de rotura del conexionado de la misma. Es imprescindible realizar el manipulado de
los equipos con sumo cuidado.
10.2.- Mejoras y líneas futuras de desarrollo
En el transcurso del desarrollo de este proyecto, Libelium ha evolucionado su
producto Waspmote a la plataforma Waspmote PRO v1.2. Esta nueva versión de la
placa principal del sistema incluye entre todas las mejoras algunas que seria
interesante implementar en el sistema desarrollado:
-
Mayor frecuencia de reloj (de 8 a 14 Mhz)
Mayor robustez al eliminar los Jumpers y recolocar los conectores
Es posible reprogramar la placa sin desmontar el XBee.
Se ha añadido una nueva interrupción que es posible usar para que el XBee
pueda despertar al Waspmote cuando se usa el XBee cyclic sleep mode. Esto
permitiría una estrategia de comunicaciones no tan dependiente de la
exactitud y sincronismo entre las distintas unidades, dado que es el RTC y
90
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
su programación el encargado de despertar al equipo para
recibir.
transmitir y
La migración del código a esta nueva plataforma no es inmediata pero si bastante
sencilla ya que los módulos utilizados en este proyecto están soportados.
Otra ventaja de esta plataforma es que es la base de otro producto nuevo de
Libelium, el denominado Plug&Sense. Este es en resumen es un Waspmote con
todo el sistema de encapsulado para intemperie del sistema, alimentaciones y
sensores que facilita el manejo y aumenta la durabilidad del sistema ya que
dispone de conectores con nivel de impermeabilización IP65. Los sensores ya están
encapsulados con el conector adecuado y esto facilita su sustitución, sobre todo en
aquellos que tienen una duración limitada.
Respecto a las mejoras o evoluciones de software objeto de este proyecto, se
centran en minimizar las consecuencias de los problemas de la plataforma descritos
anteriormente y que no se han solucionado aparentemente en la nueva plataforma
de Libelium:
-
Uso de memoria SRAM para ampliar la memoria disponible en 4Kb
Optimizar Sistema de envío de ficheros, para hacerlo mas eficiente y rápido.
Las limitaciones impuestas por la FAT16 de la SD aconsejan gestionar algún
tipo de anidamiento de carpetas para el buzón y archivo, de modo que no se
alcancen tan fácilmente los 256 ficheros por directorio
10.3.- Resumen y conclusiones
El sistema comercial utilizado es apto para el despliegue de redes de sensores de
bajo coste para medición de gases, si bien los desarrollos quedan limitados por el
escaso margen de memoria disponible para el usuario. Debido a esto, su utilización
queda limitada a implementaciones a medida partiendo de unas necesidades muy
específicas, dificultándose el desarrollo de aplicaciones más generalistas o todo uso,
que permitirían una mayor comercialización y retorno de los desarrollos.
Las nuevas implementaciones del sistema proporcionadas por el fabricante
(Waspmote PRO v1.2 / Plug&Sense) eliminan algunos de los problemas de la
plataforma actual, facilitando en parte el desarrollo y fundamentalmente
robusteciendo su uso.
La topología de red elegida así como sus características de propagación son las más
adecuadas para el despliegue de un sistema en una zona extensa, más allá de los
rangos de utilización de otras tecnologías que trabajan en el rango de los 2,4Ghz.
91
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
11.- ANEXO 1.- Código y fichero de configuración
Test_RangeTX
/* * ‐‐‐‐‐‐Test_RangeTX‐‐‐‐‐‐ * * Explanation: * * * Version: 2.0 * Autor: EFH * Core: IDEv01/wasp_v013 */ //‐‐‐‐‐‐‐‐‐‐CONST‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ const char* identity="Test_RangeTx v2.0 (EFH 01.03.2012) build 3"; int counter=0; boolean debug=1; packetXBee* paq_sent; int8_t state=0; long previous=0; char* data="‐‐ Waspmote. MAC address: "; char aux[60]; char mac[16]; int aux_1 = 0; int aux_2 = 0; uint8_t direccion[8]={0x00,0x13,0xA2,0x00,0x40,0x3A,0xB3,0x13}; /* MAC address: 0013 A200 403A B313 */ char* direccion2="0013A200403AAEED"; //‐‐‐‐‐‐‐‐‐‐SETUP‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ void setup() { xbee868.init(XBEE_868,FREQ868M,PRO); // Inits the XBee 868 library xbee868.ON(); // Powers XBee xbee868.setPowerLevel(4); // Set Power Output Level to the max value XBee.println(); XBee.print("Firmware: "); XBee.println(identity); XBee.println(); Utils.setLED(LED0, LED_ON); Utils.setLED(LED1, LED_ON); delay(5000); Utils.setLED(LED0, LED_OFF); Utils.setLED(LED1, LED_OFF); for (int i=0;i<24;i++){ Utils.blinkLEDs(125); } // Get the XBee MAC address delay(500); int counter = 0; while(xbee868.getOwnMac()==1&&counter<4){ xbee868.getOwnMac(); counter++; } 92
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
// Get the XBee firmware version // xbee.getSoftVersion(); delay(10); for(int i=0;i<4;i++){ aux_1=xbee868.sourceMacHigh[i]/16; aux_2=xbee868.sourceMacHigh[i]%16; if (aux_1<10){ mac[2*i]=aux_1+48; } else{ mac[2*i]=aux_1+55; } if (aux_2<10){ mac[2*i+1]=aux_2+48; } else{ mac[2*i+1]=aux_2+55; } } for(int i=0;i<4;i++){ aux_1=xbee868.sourceMacLow[i]/16; aux_2=xbee868.sourceMacLow[i]%16; if (aux_1<10){ mac[2*i+8]=aux_1+48; } else{ mac[2*i+8]=aux_1+55; } if (aux_2<10){ mac[2*i+9]=aux_2+48; } else{ mac[2*i+9]=aux_2+55; } } //sprintf(aux,"%s%s%s%c%c",data,mac,"‐‐",'\r','\n'); } //‐‐‐‐‐‐‐‐‐‐LOOP‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ void loop() { counter++; sprintf(aux,"%s%s%s%d%c%c",data,mac,"‐‐Loop:",counter,'\r','\n'); paq_sent=(packetXBee*) calloc(1,sizeof(packetXBee)); paq_sent‐>mode=BROADCAST; paq_sent‐>MY_known=0; paq_sent‐>packetID=0x52; paq_sent‐>opt=0; xbee868.hops=0; xbee868.setOriginParams(paq_sent,MAC_TYPE); xbee868.setDestinationParams(paq_sent, direccion, aux, MAC_TYPE, DATA_ABSOLUTE); xbee868.setDestinationParams(paq_sent, direccion2, aux, MAC_TYPE, DATA_ABSOLUTE); xbee868.sendXBee(paq_sent); free(paq_sent); paq_sent=NULL; delay(3000); } 93
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
SMCA
* ‐‐‐‐SMCA‐‐‐‐‐‐ * * Explanation: * * * Version: 0.8 * Autor: EFH * Core: IDEv02/wasp_v024r */ //Wasp.gateway. ID: 00 MAC address: 0013A200403AB313 //Waspmote 1 ID: 01 MAC address: 0013A200403AAEED //Waspmote 2. ID: 02 MAC address: 0013A200403AB30F //Waspmote 3. ID: 03 MAC address: 0013A200403AB2D8 //‐‐‐‐‐‐‐‐‐‐CONST‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ // Const. Desarrollo y Definiciones //#define IDENTITY "SMCA v0.8(EFH 03.03.2013) build 1" #define IDENTITY "SMCAv0.8b1 " #define OK " OK" #define ERROR " ERR: " #define RET1 500 #define RET2 5000 #define WAIT1 10 #define WAIT2 15 #define WAIT3 30 #define debug 1 #define LEDS_ON 1 // Parametros Conf.General (conf_xxxxx) uint8_t conf_fdate = 0; // (smca.cfg) Ontime Flag ‐ Puesta en hora char* conf_idate="YY:MM:DD:dw:hh:mm:ss"; // (smca.cfg) Date & Time char* act_date=" "; // RTC Current Date & Time (Thursday, 11/03/08 ‐ 23:39.30) // "Fecha ‐ Hora: 02/02/02 ‐ 02:02:02" // Parametros Conf.Comunic (comu_xxxxx) uint8_t comu_outPL = 1; // (smca.cfg) 0‐4 byte comu_ownTD = 2; // (smca.cfg) 0:Concentrador 1:Router 2:Nodo char* comu_ownID = "ID03"; // (smca.cfg)ID char* comu_gatID = "ID01"; // (smca.cfg)ID gateway char* comu_gatMA = "0013A200403AAEED"; // (smca.cfg)MAC Adress gateway char* comu_range = "00:03"; // (smca.cfg)Periodicidad de Int Comunica. // Parametros Conf.Muestreo (samp_xxxxx) byte samp_count = 3; // (smca.cfg) Numero de medidas por muestra char* samp_range ="00:00:01:15"; // (smca.cfg) Offset 00:hh:mm:ss // Parametros Conf.Sensores (sens_xxxxx) long sens_Tprec = 1; // (smca.cfg) Tiempo de precalentamiento de sensores 0 ‐ 999 [s] float sens_errPR = ‐0.6250000000; // (smca.cfg) float sens_pa1HR = 53.7634400000; // (smca.cfg) float sens_pa2HR = 25.8064500000; // (smca.cfg) // (smca.cfg) int sens_GaCO2 = 1; 94
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
float sens_pmCO2 = 64.3050142600; // (smca.cfg) float sens_pbCO2 = ‐163.5963319000; // (smca.cfg) float sens_paCO2 = 367; // (smca.cfg) 367 mV ppm 350 //‐‐‐‐‐‐‐‐‐‐VARIABLES‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ // Var.Generales char * registro1="IDID DD/MM/AA HH:MM:SS TT TT BBB VVVV MMMM pppp hhhh tttt cccc"; // RLF int PR = 0; // pppp Presion [mbar] int HR = 0; // hh Humedad Relativa [%] int TE = 0; // tttt Temperatura en milesimas de grado [mºC] unsigned int DC = 0; // cccc Concentracion Dioxido Carbono [ppm] int counter=0; byte idcount=0; byte f_ACK=0; // Flag byte f_CTS=0; // Flag //‐‐‐‐‐‐‐‐‐‐SETUP‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ void setup() { USB.begin(); // Opening UART to show messages using 'Serial Monitor' USB.println(); USB.print(IDENTITY); USB.print(freeMemory()); USB.print("B "); init_params (); init_RTC (); } //‐‐‐‐‐‐‐‐‐‐LOOP‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ void loop() { Contador(); if (!comu_ownTD)transmision(); // Si Concentrador(0) if (debug) { USB.println("zz.."); delay(RET1); } PWR.sleep(ALL_OFF); delay(RET1); USB.begin(); //After setting Waspmote to power‐down, UART is closed, so it is necessary to open it again if (debug) USB.println("Up!"); Trata_Interrupciones(); } //‐‐‐‐‐‐‐‐‐‐END LOOP‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ //‐‐‐‐‐‐‐‐‐‐TRAT.INTERRUPCIONES‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ void Trata_Interrupciones() { // #define DEB_TI 0 byte INT=1; //Flag Control Interrupciones if( intFlag & RTC_INT ) // Interrupcion RTC { intFlag &= ~(RTC_INT); // Limpiamos flag INT RTC RTC.readRTCregister(RTC_STATUS_ADDRESS); idcount=RTC.registersRTC[RTC_STATUS_ADDRESS]; // Leemos Reg Status 95
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
while (INT) { if (idcount & B00000001) // (idcount ==1) { USB.println("IM"); Int_Muestreo(); Carga_Alarm1(); } if (idcount & B00000010) // (idcount == 2) { USB.println("IC"); Int_Comunica(); Carga_Alarm2(); } idcount=RTC.registersRTC[RTC_STATUS_ADDRESS]; // Leemos Reg Status if (idcount & B00000011) { INT=1; } else INT=0; } USB.print("IM:"); USB.println(RTC.getAlarm1()); USB.print("IC:"); USB.println(RTC.getAlarm2()); delay(RET1); } } //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ void Carga_Alarm1() { byte Int_stat=0; RTC.readRTCregister(RTC_STATUS_ADDRESS); Int_stat=RTC.registersRTC[RTC_STATUS_ADDRESS]; // Leemos Reg Status RTC.setAlarm1(samp_range,RTC_OFFSET,RTC_ALM1_MODE3); // Carga Timer1 y lo activa. Desactiva el 2.(RTC_CONTROL). Borra Flags Alarma en STATUS RTC.registersRTC[RTC_CONTROL_ADDRESS] |= B00000111; // Set Alarm 1&2 Interrupt Enable (A1IE)(A2IE) y Bit 2: Interrupt Control (INTCN). RTC.writeRTCregister(RTC_CONTROL_ADDRESS); RTC.registersRTC[RTC_STATUS_ADDRESS] = (B11111110 & Int_stat) ; // Repone Status Original y Reset the alarm flags en RT RTC.writeRTCregister(RTC_STATUS_ADDRESS); } //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ void Carga_Alarm2() { byte Int_stat=0, aux=0, aux2=0; byte hour_p=0,minute_p =0; byte dc=0,hc=0,mc=0; aux=(uint8_t) comu_range[0] ‐ 48; aux2=(uint8_t) comu_range[1] ‐ 48; hour_p = RTC.BCD2byte(aux, aux2); aux=(uint8_t) comu_range[3] ‐ 48; aux2=(uint8_t) comu_range[4] ‐ 48; minute_p = RTC.BCD2byte(aux, aux2); 96
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
RTC.getTime(); dc=RTC.date; mc=0; aux=0; if (!hour_p) // intervalo < 1h { hc=RTC.hour; // USB.println("Hora=00‐‐>Prog Minutos"); while (1) { mc=aux*minute_p; if (mc>RTC.minute) { if (mc>=60) { mc‐=60; hc+=1; if (hc==24) { hc=0; dc+=1; } } break; } else aux++; } } else // intervalo >= 1h { mc=0; //USB.println("Minut=00‐‐>Prog Horas"); while (1) { hc=aux*hour_p; if (hc>RTC.hour) { if (hc>=24) { hc‐=24; dc+=1; } break; } else aux++; } } RTC.readRTCregister(RTC_STATUS_ADDRESS); Int_stat=RTC.registersRTC[RTC_STATUS_ADDRESS]; // Leemos Reg Status RTC.setAlarm2(dc,hc,mc,RTC_ABSOLUTE,RTC_ALM2_MODE3); // Carga Timer2 y lo activa. Desactiva el 1.(RTC_CONTROL). // Borra Flag Alarmae en STATUS RTC.registersRTC[RTC_CONTROL_ADDRESS] |= B00000111; // Set Alarm 1&2 Interrupt Enable (A1IE)(A2IE) y Bit 2: Interrupt Control (INTCN). RTC.writeRTCregister(RTC_CONTROL_ADDRESS); RTC.registersRTC[RTC_STATUS_ADDRESS] = (B11111101 & Int_stat) ; // Repone Status Original y Reset the alarm flags 1in RT RTC.writeRTCregister(RTC_STATUS_ADDRESS); } 97
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ //‐‐‐‐‐‐‐‐‐‐RUTINAS‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ //‐‐‐‐‐‐‐‐‐‐INICIALIZACIONES‐‐‐‐‐‐‐‐‐‐‐ void init_params () { SD.ON(); // Powers SD Card up USB.print( (SD.getDiskFree()/1048576)); USB.println("MB"); conf_fdate= Utils.array2long (read_param("conf_fdate", 1)); strcpy(conf_idate,read_param("conf_idate",20)); if (conf_fdate) // Reset Ontime Flag { SD.writeSD("smca.cfg","0",( SD.indexOf("smca.cfg","conf_fdate",0)+sizeof("comu_xxxxx") )); } comu_outPL = Utils.array2long (read_param("comu_outPL", 1)); comu_ownTD = Utils.array2long (read_param("comu_ownTD", 1)); strcpy(comu_gatID,read_param("comu_gatID", 4)); strcpy(comu_ownID,read_param("comu_ownID", 4)); strcpy(comu_gatMA,read_param("comu_gatMA",16)); strcpy(comu_range,read_param("comu_range", 5)); samp_count = Utils.array2long (read_param("samp_count", 1)); strcpy(samp_range,read_param("samp_range", 11)); sens_Tprec = Utils.array2long (read_param("sens_Tprec", 3)); sens_errPR = atof (read_param("sens_errPR", 12)); sens_pa1HR = atof (read_param("sens_pa1HR", 12)); sens_pa2HR = atof (read_param("sens_pa2HR", 12)); sens_GaCO2 = Utils.array2long (read_param("sens_GaCO2", 2)); sens_pmCO2 = atof (read_param("sens_pmCO2", 12)); sens_paCO2 = atof (read_param("sens_paCO2", 12)); sens_pbCO2 = atof (read_param("sens_pbCO2", 12)); SD.OFF(); // Close SD Card"); delay(RET1); } //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ char* read_param(const char* param, uint8_t index ) { char* data= ""; data=SD.cat("smca.cfg",(SD.indexOf("smca.cfg",param,0))+sizeof("comu_xxxxx"),index); return data; } //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ void init_RTC() { #define MENS_ALM1 "IM:" #define MENS_ALM2 "IC:" RTC.ON(); // Powers RTC up, init I2C bus and read initial values if (conf_fdate) { RTC.setTime(conf_idate); conf_fdate=0; delay(RET1); } RTC.setAlarm1(samp_range,RTC_OFFSET,RTC_ALM1_MODE3); USB.print(MENS_ALM1); USB.println(RTC.getAlarm1()); 98
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
Carga_Alarm2(); USB.print(MENS_ALM2); USB.println(RTC.getAlarm2()); RTC.OFF(); } //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ void init_xbee868() { xbee868.init(XBEE_868,FREQ868M,PRO); //Inits the XBee 868 library xbee868.ON(); // Powers XBee xbee868.setPowerLevel(comu_outPL); xbee868.getTemperature(); xbee868.setRSSItime(0xFF); } //‐‐‐‐‐‐‐‐‐‐COMUNICACIONES‐‐‐‐‐‐‐‐‐‐‐‐ //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ void transmision() // Si Concentrador(0) { char data_read=0; char x=25; USB.flush(); USB.print(">> "); delay(500); while (x) { if (USB.available()) { if (LEDS_ON) Utils.blinkLEDs(300); // Blinking LEDs with 1s ON data_read=USB.read(); switch (data_read) { case 0x4C: // "L" ‐> Modo 3: Numero de Ficheros en Buzon USB.println(data_read); if (!SendFiles(3)) break; case 0x54: // "T" ‐> Modo 1: Envio USB y Backup en Registro USB.println(data_read); if (!SendFiles(1)) break; // Nada (mas..) que transmitir break; case 0x44: // "D" ‐> Modo 2: Envio USB y Borrado USB.println(data_read); if (!SendFiles(2)) break; // Nada (mas..) que transmitir case 0x45: // "E" ‐> Terminamos interfaz por comando de salida USB.println(data_read); return; break; default: USB.print(data_read); USB.println(" ‐‐>Err"); } USB.print(">> "); USB.flush(); x=25; } delay(1000); x‐‐; } } 99
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ void Int_Comunica() { init_xbee868 (); USB.println(); if (comu_ownTD!=2) // Si Concentrador(0) o Router(1): RECEPCION { if(LEDS_ON) Utils.setLED(LED0, LED_ON); // LED0 Rojo ON for(byte x=1; x<9;x++) // 8 Intentos de Recepcion { USB.print("Rx "); USB.println(x,DEC); if(comu_ownTD) receive_packet(WAIT2); // Router de 20 sg // Concentrador de 30 sg else receive_packet(WAIT3); } if(LEDS_ON) Utils.setLED(LED0, LED_OFF); // LED0 Rojo OFF } if (comu_ownTD) // Si Nodo(2) o Router(1): TRANSMISION { if(LEDS_ON) Utils.setLED(LED1, LED_ON); // LED1 Verde ON for(byte x=1; x<9;x++) // 8 Intentos de transmision { USB.print("Tx "); USB.println(x,DEC); if (send_packet(comu_gatMA, "RTS", 0x52)) { f_CTS=0; receive_packet(WAIT1) ; // de 10sg o menos... if (f_CTS) { f_CTS=0; if (!SendFiles(0)) break; // Nada (mas..) que transmitir en modo 0 (Envio xbee y Borrado) } } else { // USB.println("ERR_RTS"); delay(RET1); } } // LED1 Verde OFF if(LEDS_ON) Utils.setLED(LED1, LED_OFF); } xbee868.OFF(); USB.begin(); } //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ void receive_packet(byte wait) { //#define DEB_RP 0 uint8_t i=0; long previous=0; uint8_t destination[8]; char* dest="FFFFFFFFFFFFFFFF"; byte msgID=0; char* packID="IDID"; previous=millis(); // Waiting the answer 100
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
while( (millis()‐previous) < (wait*1000)) { if( XBee.available() ) { XBee.println("Dato"); xbee868.treatData(); if( !xbee868.error_RX ) { XBee.println ("RxOK"); while(xbee868.pos>0) // pos:dicates the position in 'packet_finished' array of each packet. { // MAX_FINISH_PACKETS 5 // packetXBee* xbee868.packet_finished[MAX_FINISH_PACKETS] strcpy(registro1, xbee868.packet_finished[xbee868.pos‐1]‐>data); msgID=(xbee868.packet_finished[xbee868.pos‐1]‐>packetID); while(i<4) { destination[i]=(xbee868.packet_finished[xbee868.pos‐1]‐>macSH[i]); i++; } while(i<8) { destination[i]=(xbee868.packet_finished[xbee868.pos‐1]‐>macSL[i‐4]); i++; } Utils.hex2str(destination,dest,8); /* #ifdef DEB_RP XBee.println(freeMemory()); XBee.print("Paq: "); XBee.println(xbee868.pos,DEC); // XBee.print("MAC: "); // XBee.println(dest); // XBee.print("Dat: "); // XBee.println(registro1); XBee.print("PackID: "); XBee.println(msgID,HEX); #endif */ free(xbee868.packet_finished[xbee868.pos‐1]); xbee868.packet_finished[xbee868.pos‐1]=NULL; xbee868.pos‐‐; switch (msgID) { case 0x50: // Mensaje de DAT datos if(LEDS_ON) { Utils.setLED(LED0, LED_OFF); // LED0 Rojo 2 Blimk delay (150); Utils.setLED(LED0, LED_ON); delay (150); Utils.setLED(LED0, LED_OFF); // delay (150); Utils.setLED(LED0, LED_ON); } strncpy(packID,registro1,4); // XBee.println(packID); RTC.getTime(); SD.ON(); WriteFile (packID); SD.OFF(); send_packet(dest, "ACK", 0x51); break; case 0x51: // Mensaje de ACK f_ACK=1; break; case 0x52: // Mensaje de RTS send_packet(dest, "CTS", 0x53); break; 101
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
case 0x53: // Mensaje de CTS f_CTS=1; break; } } previous=millis(); } else { XBee.print("ErrRX: "); XBee.println(xbee868.error_RX,DEC); } } } } //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ byte SendFiles(byte modo) // Modo 0: Envio xbee y Borrado { // Modo 1: Envio USB // Modo 2: Envio USB y Borrado // Modo 3: Numero de ficheros en Buzon char* fichero="IDIDaammddhhmmss.dat"; char* fichero2="IDIDaammddhhmmss.dat"; char * aux2="IDID DD/MM/AA HH:MM:SS TT TT BBB VVVV MMMM EE RR pppp hhhh tttt cccc xxxx xxxx RLF"; uint8_t numfiles,errfiles=0; SD.ON(); // Powers SD Card up delay(RET1); while(1) { if(SD.cd("Buzon")) { // USB.println("Entrando en 'Buzon' "); } numfiles =SD.numFiles(); if (modo==3) { USB.print("Fic: "); USB.println(numfiles,DEC); SD.OFF(); return 0; } if(!modo) { USB.print("Fic: "); USB.print(numfiles,DEC); USB.print(" Er: "); USB.println(errfiles,DEC); } if (!(numfiles‐errfiles)) { // USB.println("Nada que transmitir: "); SD.OFF(); return 0; } fichero2=SD.ls(2+errfiles,1,NAMES); //primero // fichero2=SD.ls(numfiles+1,1,NAMES); //ultimo strncpy(fichero,fichero2,20); aux2=SD.catln(fichero,0,1); //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ Start Codigo Nuevo if (modo==0) // Modo 0: Envio xbee y Borrado { //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ End Codigo Nuevo //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ Start Codigo orig 102
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
if (send_packet(comu_gatMA, aux2, 0x50)) { // delay(1000); f_ACK=0; receive_packet(WAIT1); SD.cd("Buzon"); // Otra vez ya que receive_packet()resetea la SD if (f_ACK) //Recibido ACK del pakete.Se da por enviado { if(LEDS_ON) { Utils.setLED(LED1, LED_OFF); // LED1 Verde 2 Blimk delay (150); Utils.setLED(LED1, LED_ON); delay (150); Utils.setLED(LED1, LED_OFF); delay (150); Utils.setLED(LED1, LED_ON); } f_ACK=0; if(SD.del(fichero))USB.println("DEL"); else { USB.println("ErrDEL"); errfiles++; } SD.cd(".."); } else { USB.println("ErrACK"); SD.OFF(); return 1; } } else { // USB.println(""); USB.println("ErrTX"); SD.OFF(); return 1; } //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ End Codigo orig //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ Start Codigo Nuevo } else //Modo 1: Envio USB y Backup //Modo 2: Envio USB y Borrado { USB.print ("REG."); USB.print(numfiles,DEC); USB.print ("‐"); USB.print(errfiles,DEC); USB.print (" "); USB.print(aux2); if (modo==1) { SD.cd(".."); SD.cd("Registro"); SD.create(fichero); SD.appendln(fichero,aux2); SD.cd(".."); SD.cd("Buzon"); } if(SD.del(fichero))/*USB.println(" DEL.")*/; else { // USB.println(" ERR‐DEL"); errfiles++; 103
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
} SD.cd(".."); } //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ End Codigo Nuevo } //del while solo se sale por return // SD.OFF(); } //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ uint8_t send_packet(char* address, char* data, uint8_t procID ) { packetXBee* paq_sent; paq_sent=(packetXBee*) calloc(1,sizeof(packetXBee)); // Set params to send paq_sent‐>mode=UNICAST; paq_sent‐>MY_known=0; paq_sent‐>packetID=procID; paq_sent‐>opt=0; xbee868.hops=0; xbee868.setOriginParams(paq_sent , comu_ownID, MY_TYPE); //comu_ownID xbee868.setDestinationParams(paq_sent , address , data, MAC_TYPE, DATA_ABSOLUTE); //address xbee868.sendXBee(paq_sent); if( !xbee868.error_TX ) //'0' on success, '1' otherwise { // error=0 ‐‐> The command has been executed with no errors XBee.println(OK); free(paq_sent); paq_sent=NULL; return 1; } else // error=1 ‐‐> There has been an error while executing the command { // error=2 ‐‐> The command has not been executed XBee.print(ERROR); XBee.println(xbee868.error_TX,DEC); free(paq_sent); paq_sent=NULL; return 0; } } //‐‐‐‐‐‐‐‐‐‐‐‐‐‐MUESTREO‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ void Int_Muestreo() { for(byte x=0; x<samp_count;x++) { if (LEDS_ON) Utils.blinkLEDs(300); // Blinking LEDs GetSample(); SD.ON(); GenReg (); WriteReg (); WriteFile (comu_ownID); SD.OFF(); } } //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ void GetSample() { float CO2_value=0; float ppmCO2=0; 104
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
SensorGas.setBoardMode(SENS_ON); // Enciende la Placa de gases. Sets RTC on to enable I2C SensorGas.setSensorMode(SENS_ON, SENS_PRESSURE); // Enciende Sensor de Presion SensorGas.configureSensor(SENS_CO2, sens_GaCO2); SensorGas.setSensorMode(SENS_ON, SENS_CO2); // USB.print("Precalentando "); // USB.print(sens_Tprec,DEC); // USB.println(" segundos"); delay (sens_Tprec*1000); // CO2 DC=0; for(byte x=0; x<3;x++) // media de 3 muestras { CO2_value =1000*((SensorGas.readValue(SENS_CO2))/sens_GaCO2); ppmCO2=pow(10,(sens_paCO2‐CO2_value‐sens_pbCO2)/sens_pmCO2); DC+= int(ppmCO2); } DC/=3; // SensorGas.setSensorMode(SENS_OFF, SENS_CO2); // PRESION // Retardo: Tmin de respuesta 20ms PR=int (10*(((2*(SensorGas.readValue(SENS_PRESSURE))+sens_errPR)/5)+0.095)/0.009 ); // HUMEDAD RELATIVA // Retardo: Tmin de respuesta <15sg HR= int((((SensorGas.readValue(SENS_HUMIDITY))*sens_pa1HR)‐sens_pa2HR)*100); // TEMPERATURA TE= int ((100*(SensorGas.readValue(SENS_TEMPERATURE))‐50) *100); SensorGas.setBoardMode(SENS_OFF); // Apaga la Placa de gases. Set RTC off to disable I2C // RTC.OFF(); } //*/ //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ //‐‐‐‐‐‐‐‐‐TRAT.REGISTROS‐‐‐‐‐‐‐‐‐‐‐‐‐‐ void GenReg () { int diskfree=0; // RTC.ON(); RTC.getTime(); // SD.ON(); diskfree= (SD.getDiskFree()/1048576); // IDID DD/MM/AA HH:MM:SS TT TT BB VVVV MMMM pppp hhhh tttt cccc sprintf (registro1, "%s %02d/%02d/%02d %02d:%02d:%02d %02d %02d %2d %d %4d %04d %04d %04d %04d", // %c%c comu_ownID, RTC.date,RTC.month,RTC.year, RTC.hour, RTC.minute, RTC.second, int(RTC.getTemperature()), // xbee868.temperature[1], // %s %2d "TT", PWR.getBatteryLevel(), (int(PWR.getBatteryVolts()*1000)), diskfree, PR, HR, TE, DC); // "xxxx", // "xxxx"); 105
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
//'\r','\n'); if (debug) USB.println(registro1); // RTC.OFF(); // SD.OFF(); } //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ void WriteReg () { // SD.ON(); // Powers SD Card up // delay(RET1); if(SD.isFile("smca.dat")!=1) { // if (debug) USB.println("'smca.dat' No existe"); SD.create("smca.dat"); // if (debug) USB.println("'smca.dat' creado"); } // USB.println("'smca.dat' Existe"); if(SD.appendln("smca.dat",registro1)&& debug) USB.println("‐>dat"); // SD.OFF(); // delay(RET1); } //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ void WriteFile (char* ID) { char* fichero="IDIDaammddhhmmss.dat"; // SD.ON(); // Powers SD Card up // delay(RET1); if(SD.isDir("Buzon")!=1) { // if (debug) USB.println("'Buzon' No existe"); SD.mkdir("Buzon"); // if (debug) USB.println("'Buzon' creado"); } // if (debug)USB.println("'Buzon' Existe"); // if(SD.cd("Buzon")) USB.println("Entrando"); SD.cd("Buzon"); sprintf (fichero, "%s%02d%02d%02d%02d%02d%02d.dat",ID,RTC.year,RTC.month,RTC.date,RTC.hour, RTC.minute, RTC.second); if(SD.create(fichero)) { // USB.print("Fich: "); // USB.print(fichero); } if(SD.appendln(fichero,registro1)&& debug) USB.println("‐>Fic"); // USB.println(SD.ls()); // if(SD.cd("..")) USB.println ("Saliendo"); SD.cd(".."); // SD.OFF(); // delay(RET1); } //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ //‐‐‐‐‐‐‐‐‐‐FUNCIONES‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ //‐‐‐‐‐‐‐‐‐‐AUXILIARES‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ void Contador() { #define MENS_BUCLE "N" #define MENS_MEM " M:" 106
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
RTC.ON(); counter++; USB.println(); USB.print(MENS_BUCLE); USB.print(counter); USB.print(MENS_MEM); USB.println(freeMemory()); sprintf (act_date, "%s %02d/%02d/%02d %02d:%02d:%02d", comu_ownID,RTC.date,RTC.month,RTC.year,RTC.hour, RTC.minute, RTC.second); USB.println(act_date); USB.println(""); RTC.OFF(); } //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 107
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
smca.cfg (Ejemplo)
// SMCA // // smca.cfg // V3.0 // //ID03:0013A200403AB2D8 //ID02:0013A200403AB30F //ID01:0013A200403AAEED //////////////////////////////////////// // Parametros Conf.General (conf_xxxxx) conf_fdate=1 conf_idate=12:11:26:02:22:20:00 "YY:MM:DD:dw:hh:mm:ss" // Parametros Conf.Comunic (comu_xxxxx) comu_outPL=1 comu_ownTD=2 comu_ownID=ID03 comu_gatID=ID02 comu_gatMA=0013A200403AB30F comu_range=00:30 // Parametros Conf.Muestreo (samp_xxxxx) samp_count=4 samp_range=00:00:08:00 // Parametros Conf.Sensores (sens_xxxxx) sens_Tprec=030 // Tiempo de precalentamiento de sensores [s] sens_errPR=‐0.625000000 sens_pa1HR=53.763440000 sens_pa2HR=25.806450000 sens_GaCO2=01 sens_pmCO2=62.877000000 sens_pbCO2=‐158.6310000 sens_paCO2=400 // mV ppm 350 108
Red de Sensores inalámbricos de largo alcance para medición de la calidad del aire
12.- Referencias
1. http://www.pce-iberica.es/medidor-detalles-tecnicos/definicion-calidad-airey-co2.htm
2. http://es.wikipedia.org/wiki/Di%C3%B3xido_de_carbono
3. http://www.esrl.noaa.gov/gmd/ccgg/trends/weekly.html
4. http://www.esrl.noaa.gov/gmd/ccgg/trends/mlo.html
5. http://www.nytimes.com/imagepages/2013/05/11/science/0511-sciKEELING.html?ref=earth
6. “The Design Space of Wireless Sensor Networks” (Römer, Mattern 2004)
7. http://es.wikipedia.org/wiki/Mark_Weiser
8. Sebastian Bader “Sensor Networks 2011” Department of Information
Technology and Media Mid Sweden University, Sundsvall
9. http://arduino.cc/es/Reference/HomePage
10. http://www.libelium.com/
109
Descargar