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