Está en la página 1de 88

Instituto Politécnico Nacional

Escuela Superior de Ingenierı́a Mecánica y


Eléctrica

Prototipo Didáctico de una Estación


Meteorológica Monitoreada a Distancia

TESIS
PARA OBTENER EL TÍTULO DE:
Ingeniera en Comunicaciones y Electrónica
(Especialidad Computación)

PRESENTA
Berenice Montalvo Lezama

ASESORES:
M. en C. Genaro Zavala Mejia
Ing. Karla Sandra Arellano Garcia

2013
Índice general

Resumen 4

Índice de figuras 5

1. Antecedentes 9
1.1. Planteamiento del Problema . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2. Objetivo General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3. Objetivos Especı́ficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4. Justificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5. Estado del Arte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5.1. Monitoreo de una estación meteorológica vı́a internet . . . . . . . . 10
1.5.2. Estación Meteorológica Vantage Pro2 . . . . . . . . . . . . . . . . . 11
1.5.3. Estación Meteorológica Crystal Moments CW101 . . . . . . . . . . 12

2. Marco Teórico 15
2.1. Estaciones Meteorologı́cas . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.1. Origen de la Meteorologı́a . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.2. Estación Meteorológica . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.3. Variables Meteorológicas . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.4. Clasificación de las Estaciones Meteorológicas . . . . . . . . . . . . 16
2.1.5. Componentes de una Estación Meteorológica . . . . . . . . . . . . . 18
2.1.6. Veleta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2. Tecnologı́as de Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2.1. Microcontrolador . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2.2. Sensores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.3. Sensores Meteorológicos . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3. Tecnologı́as de Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3.1. Sistemas de gestión de bases de datos . . . . . . . . . . . . . . . . . 25
2.3.2. Plataforma de programación . . . . . . . . . . . . . . . . . . . . . . 25

3. Desarrollo 29
3.1. Desarrollo del Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1.1. Anemómetro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1.2. Veleta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1.3. Termómetro e higrómetro . . . . . . . . . . . . . . . . . . . . . . . 38
3.1.4. Tarjeta Principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.1.5. Protección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.1.6. Base para la Estación Meteorológica . . . . . . . . . . . . . . . . . 42

3
Índice general

3.2. Desarrollo del Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45


3.2.1. Componente de Medición . . . . . . . . . . . . . . . . . . . . . . . 45
3.2.2. Componente de Servicios . . . . . . . . . . . . . . . . . . . . . . . . 46
3.2.3. Componente de Interfaz de Usuario . . . . . . . . . . . . . . . . . . 49

4. Pruebas y resultados 51
4.1. Funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.2. Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.3. Estimación de costos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

5. Conclusiones 55

Anexos 55

6. Anexos 57
6.1. Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6.1.1. Especificaciones CNY70 . . . . . . . . . . . . . . . . . . . . . . . . 57
6.1.2. Especificaciones HEF40106 . . . . . . . . . . . . . . . . . . . . . . . 60
6.1.3. Especificaciones HMZ433A . . . . . . . . . . . . . . . . . . . . . . . 63
6.1.4. Especificaciones LM35 . . . . . . . . . . . . . . . . . . . . . . . . . 66
6.2. Códigos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6.2.1. Clase Measure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6.2.2. Clase MeasureDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
6.2.3. Clase MeasureDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.3. C++ Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

4
Resumen
Este proyecto consistió en el diseño y construcción de una estación meteorológica la cual
es monitoreada de forma remota.El software para el monitoreo permite dar a conocer las
variables meteorológicas medidas por la estación las cuales son temperatura, humedad,
velocidad y dirección del viento.

5
Índice de figuras
1.1. Estación meteorológica Vantage Pro2. . . . . . . . . . . . . . . . . . . . . . 11
1.2. Consola de la estación meteorológica Vantage Pro2. . . . . . . . . . . . . . 12
1.3. Estación Meteorológica Crystal Moments CW101. . . . . . . . . . . . . . . 13

2.1. Clasificación de las Estaciones Meteorológicas. . . . . . . . . . . . . . . . . 16


2.2. Anemómetro de empuje. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3. Anemómetro de efecto Doppler. . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4. Anemómetro de rotación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.5. Veleta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.6. Arduino AT Mega 2560. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.7. Escudo Arduino Ethernet. . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.8. Motor eléctrico sin escobillas. . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.1. Diagrama del prototipo didáctico de la estación meteorológico. . . . . . . . 29


3.2. Cazoleta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.3. Varillas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.4. Motor con orificios para los soportes de las cazoletas. . . . . . . . . . . . . 30
3.5. Eje del anemómetro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.6. Anemómetro ensamblado. . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.7. Circunferencia para área de sensado. . . . . . . . . . . . . . . . . . . . . . 32
3.8. Sensor Óptico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.9. Configuración del sensor óptico. . . . . . . . . . . . . . . . . . . . . . . . . 33
3.10. Conexión del sensor óptico. . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.11. Diseño de la tarjeta de circuito impreso para el anemómetro. . . . . . . . . 34
3.12. Tarjeta para medir la rotación del anemómetro . . . . . . . . . . . . . . . . 34
3.13. Distancia del montaje entre la tarjeta y sensor. . . . . . . . . . . . . . . . 35
3.14. Diagrama de la veleta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.15. Veleta ensamblada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.16. Diseño de la tarjeta de circuito impreso para la veleta . . . . . . . . . . . . 37
3.17. Tarjeta para detectar la orientación de la veleta. . . . . . . . . . . . . . . . 37
3.18. Sensor de Temperatura LM35. . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.19. Diagrama de configuración para rango completo del sensor de temperatura 39
3.20. Configuración del LM35 con un rango de -55 a 155 grados centı́grados. . . 39
3.21. Sensor de Humedad HMZ433A. . . . . . . . . . . . . . . . . . . . . . . . . 40
3.22. Diseño de la tarjeta de circuito impreso del termómetro e higrómetro. . . . 40
3.23. Tarjeta para medir la humedad y temperatura. . . . . . . . . . . . . . . . . 41
3.24. Diseño de la tarjeta de circuito impreso principal. . . . . . . . . . . . . . . 41
3.25. Tarjeta principal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

7
Índice de figuras

3.26. Modulo de protección. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42


3.27. Patas Niveladoras. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.28. Niveles de burbuja. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.29. Brújula. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.30. Diagrama de flujo del componente de medición. . . . . . . . . . . . . . . . 45
3.31. Diagrama de clases resumido. . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.32. Diagrama entidad relación de la base de datos. . . . . . . . . . . . . . . . . 46
3.33. Diagrama de clases para el acceso a base de datos. . . . . . . . . . . . . . . 47
3.34. Diagrama de clases para el acceso a base de datos. . . . . . . . . . . . . . . 48
3.35. Diagrama de clases para el acceso a base de datos. . . . . . . . . . . . . . . 48
3.36. Gráfica de la temperatura en con mediciones de tiempo real. . . . . . . . . 49
3.37. Instrumentos de medición. . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.38. Gráfica de promedios de temperatura. . . . . . . . . . . . . . . . . . . . . . 49

4.1. Funcionamiento del prototipo didáctico de la estación meteorológica moni-


toreado de forma remota. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.2. Gráfica comparativa de humedad. . . . . . . . . . . . . . . . . . . . . . . . 52
4.3. Gráfica comparativa de temperatura. . . . . . . . . . . . . . . . . . . . . . 52
4.4. Gráfica comparativa de velocidad. . . . . . . . . . . . . . . . . . . . . . . . 53
4.5. Tabla de costos para el Hardware. . . . . . . . . . . . . . . . . . . . . . . . 54
4.6. Tabla de costo del proyeto. . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

8
1 Antecedentes
El conocimiento de las variaciones climáticas es de suma importancia en la agricultura,
la navegación y la vida en general.
La meteorologı́a estudia los cambios atmosféricos que se producen a cada momento
utilizando parámetros como: temperatura del aire, humedad, presión atmosférica y preci-
pitaciones pluviales.
El clima es un conjunto de fenómenos meteorológicos que caracterizan las condicio-
nes habituales o más probables de un punto determinado de la superficie terrestre. Las
estaciones meteorológicas son instalaciones cuyo propósito es medir y registrar variables
meteorológicas las cuales son temperatura, presión atmosférica, humedad relativa del aire,
pluviosidad, velocidad y dirección del viento . Los instrumentos mediante los cuales se
obtiene la medición de las variables antes mencionadas son los siguientes, el termómetro,
el barómetro, pluviómetro, anemómetro y la veleta.
Las estaciones meteorológicas pueden ser: manuales o automáticas. Las primeras son
monitoreadas por personal altamente capacitado, mientras que las estaciones meteorológi-
cas automáticas nos permiten monitorearlas a distancia, en este tipo de instalaciones la
señal se procesa mediante la tecnologı́a de microcontroladores y microprocesadores para
ser enviada a través de un sistema de comunicación.
Las estaciones meteorológicas tienen un amplio campo de aplicación como lo es en
aeronáutica, agricultura, navegación y en deportes al aire libre. Dependiendo del uso se
pueden configurar las estaciones instalaciones con distintos niveles de equipamiento.
En este escrito, se presenta la construcción de un prototipo de estación meteorológica
la cual será monitoreada a distancia.

1.1. Planteamiento del Problema


El conocimiento de las variaciones climáticas es de gran utilidad para el ser humano ya
que le permite realizar ciertas tareas sabiendo que no le serán impedidas, arruinadas o
complicadas por el estado del tiempo, cuando se pueden tomar precauciones para evitar
sus consecuencias o suspenderlas hasta un momento mas propicio.
Los informes climatológicos son dados por zonas en general y no de forma especifica lo
que genera problemas para la realización de ciertas actividades como son la agricultura y
navegación, donde el clima juega un papel muy importante.

1.2. Objetivo General


Diseñar y construir un prototipo didáctico de una estación meteorológica la cual sera
monitoreada a distancia.

9
1 Antecedentes

1.3. Objetivos Especı́ficos


Diseñar y construir tarjetas electrónicas para medir las variables meteorológicas:
humedad relativa, temperatura, dirección y velocidad del viento.

Diseñar y construir un prototipo de estación meteorológica usando estas tarjetas.

Diseñar e implementar el software necesario para registrar las mediciones de las


variables meteorológicas.

Diseñar e implementar el software necesario para monitorear las mediciones de las


variables meteorológicas.

1.4. Justificación
La estación meteorológica brindará datos del clima especı́ficamente en el lugar donde sea
implementada. La importancia de estos datos es vital, dado que los microclimas generados
en cada lugar por montes, montañas, sierras, lagos y lagunas, no necesariamente se ven
reflejados en los informes del clima para zonas en general. A través de su exclusivo software
de procesamiento de datos, la estación meteorológica proporcionara información relevante
con la que se podrá tomar decisiones y acciones de forma más certera.
El desarrollo del prototipo de la estación meteorológica con monitoreo remoto, permi-
tirá aplicar los conocimientos adquiridos a lo largo de la carrera de Ingenierı́a en Comuni-
caciones y Electrónica. En el desarrollo de la estación meteorológica se aplicarán conoci-
mientos de ciertas asignaturas, las cuales forman parte fundamental para el desarrollo del
proyecto como son Fı́sica, Máquinas Eléctricas, Microprocesadores, Programación, Elec-
tricidad y Magnetismo, Teoremas de circuitos, Electrónica digital, Sistemas en Tiempo
Real, Lenguajes de Internet y Rede.

1.5. Estado del Arte


A continuación se presentarán las estaciones meteorológicas actuales ası́ como también
los trabajos que se han desarrollado hasta ahora.

1.5.1. Monitoreo de una estación meteorológica vı́a internet


Un proyecto realizado en la Universidad Autónoma de Zacatecas en el 2009, consistió en
la construcción de un sistema electrónico para la captura, transmisión y despliegue de
datos a distancia de una estación meteorológica.
Las mediciones de las variables meteorológicas se realizaron mediante sensores los cua-
les se conectaron a un microcontrolador PIC16F877A el cual realizó la captura y digi-
talización de las señales analógicas de los sensores para poder llevar acabo la etapa de
transmisión.La etapa de recepción fue compuesta de un circuito receptor y un microcon-
trolador PIC16F84A encargado de enviar los datos a la tarjeta de adquisición NI-ELVIS
que permitió hacer la comunicación con la PC.

10
1.5 Estado del Arte

Para la construcción de la interfaz entre la tarjeta NI-ELVIS y la PC desarrollaron un


programa en LabVIEW el cual fue responsable de controlar la lectura de la información
enviada a la tarjeta de adquisición, interpretar y crear una base de datos. Finalmente los
datos fueron desplegados en una pagina web.

1.5.2. Estación Meteorológica Vantage Pro2


Vantage Pro2 es una estación meteorológica desarrollada por la empresa Davis Instru-
ments.
Vantage Pro2 es resistente a la corrosión y a las inclemencias del tiempo, posee un
panel solar que alimenta los sensores durante el dı́a también a la vez que carga una
baterı́a interna que proporciona energı́a por la noche.
La consola permite visualizar todas las variables meteorológicas de forma simultánea y
configurar la estación sin necesidad de un ordenador. Esta estación presenta un cómodo
teclado y una pantalla LCD de 15 x 9 cm con retroiluminación.

Figura 1.1. Estación meteorológica Vantage Pro2.

Las variables meteorológicas que se obtienen mediante esta estación son las siguientes:

Velocidad y dirección del viento.

Temperatura y humedad interior y exterior.

Temperatura de sensación y punto de rocı́o.

Lluvia actual y acumulada diaria, mensual y anual.

Intensidad de lluvia.

Presión atmosférica actual y tendencia.

11
1 Antecedentes

Pronóstico meteorológico.

Fase lunar y hora de puesta y salida del sol.

En la pantalla de esta estación se muestran los gráficos con datos de las últimas 24
horas, dı́as o meses.

Figura 1.2. Consola de la estación meteorológica Vantage Pro2.

También es posible la configuración de más de 70 alarmas simultáneas para alertar de


peligros como vientos fuertes, temperaturas de congelación, lluvias intensas con posibili-
dad de inundaciones, etc.

1.5.3. Estación Meteorológica Crystal Moments CW101

La estación Meteorológica CW101 desarrollada por la empresa Oregon Scientific posee


un diseño elegante y original.
Algunas de las caracterı́sticas que posee esta estación meteorológica son reloj radio
controlado, panel retro-iluminado, icono del pronóstico iluminado con luz LED.
La estación meteorológica CW101 consta de figurines de metacrilato tallados con sis-
tema láser que se encienden de diferentes colores para la visualización fácil e inmediata
de las previsiones meteorológicas.Posee sensores infrarrojos que con un movimiento de la
mano puede cambiar la información en pantalla sin necesidad de pulsar ninguna tecla.
Este dispositivo consta de la base, acabado en negro que muestra la información de tiempo
y temperatura, la parte superior con tres figurines meteorológicos.

12
1.5 Estado del Arte

Figura 1.3. Estación Meteorológica Crystal Moments CW101.

13
2 Marco Teórico
En este capitulo se abordaran de manera general los aspectos considerados para desa-
rrollo de este proyecto. En la primera sección se describe la teorı́a relacionada a las esta-
ciones meteorológicas. En siguientes secciones se describen las herramientas de hardware
y software utilizadas para el desarrollo e implementación.

2.1. Estaciones Meteorologı́cas


En este apartado se describe todo lo relacionado con las estaciones meteorológicas y
cada uno de sus componentes.

2.1.1. Origen de la Meteorologı́a


Desde épocas antiguas el hombre por necesidad de supervivencia, se convirtió en un
observador de su medio ambiente, los fenómenos atmosféricos eran considerados como
mensajes o castigos de los dioses.El hombre antiguo se conformaba con aceptar los be-
neficios o perjuicios asociados, pero sin cuestionar los mecanismos o las causas de los
fenómenos.
La agricultura comenzó en el año 5,000 y con ella surgió la observación aplicada de
los fenómenos meteorológicos. El hombre prehistórico tomo en cuenta los factores meteo-
rológicos y climáticos, tales como la lluvia y la temperatura, para su producción agrı́cola
y para escoger su hábitat.
En la antigüedad, el hombre dedicaba gran parte del tiempo a observar las caracterı́sti-
cas de los fenómenos naturales que lo afectaban, de modo que los podı́a usar para su
beneficio.El tiempo meteorológico tenia gran importancia para las actividades diurnas y
era un factor determinante para la alimentación e incluso supervivencia de ese hombre
prehistórico.

2.1.2. Estación Meteorológica


Una estación meteorológica es una instalación la cual tiene como objetivo, medir y
registrar variables meteorológicas.

2.1.3. Variables Meteorológicas


Las variables meteorológicas mas importantes son temperatura, humedad, presión at-
mosférica, precipitación pluvial, velocidad y dirección del viento, estas variables son me-
didas mediante instrumentos como pluviómetro, termómetro, barómetro, anemómetro,
veleta, entre otros [brenes˙elementos˙1995].

15
2 Marco Teórico

Temperatura
La temperatura es una de las magnitudes más utilizadas para describir el estado de la
atmósfera, varı́a entre el dı́a y la noche, entre una estación y otra, y también entre una
ubicación geográfica y otra.
Es una magnitud relacionada con la rapidez del movimiento de las partı́culas que cons-
tituyen la materia. Cuanta mayor agitación presenten éstas, mayor será la temperatura.
El instrumento que se utiliza para medir la temperatura se llama termómetro y fue
inventado por Galileo en 1593.

Humedad
La humedad ambiental se define como la cantidad de vapor de agua presente en el aire.
Es muy importante medir la humedad atmosférica debido a que esta afecta en el efecto
invernadero y fenómenos como sublimación y condensación, para realizar la medición de
esta variable meteorológica es empleado el higrógrafo [brenes˙elementos˙1995].

Presión Atmosférica
La presión armosférica es el peso que ejerce el aire en la Tierra y por lo cual también
ejerce una fuerza sobre todos los cuerpos debidos a la acción de la gravedad. La presión
atmosférica depende de muchas variables, sobre todo de la altitud. Cuanto más arriba en
la atmósfera nos encontremos, la cantidad de aire por encima de nosotros será menor.

Dirección del viento


La dirección del viento viene definida por el punto cardinal del cual proviene y al cual
se dirige.

Velocidad del viento


La velocidad del viento es la rapidez de este, la cual se mide con el anemómetro, que
suele registrar dicha dirección y rapidez a lo largo del tiempo.

2.1.4. Clasificación de las Estaciones Meteorológicas


Las estaciones meteorológicas se clasifican de acuerdo a la aplicación [brenes˙elementos˙1995]
como se muestra en la figura 2.1

Figura 2.1. Clasificación de las Estaciones Meteorológicas.

16
2.1 Estaciones Meteorologı́cas

Climatológicas
Una estación climatológica es un área destinada a la obtención y medición de los datos
generados por instrumentos que registran los distintos fenómenos meteorológicos que se
producen en la atmósfera.
Las observaciones que se efectúan se realizan en forma horaria remitiéndolas inmedia-
tamente a un centro recolector de datos, mediante mensajes codificados, por la vı́a de
comunicación más rápida disponible. Estas observaciones se utilizan para una gran canti-
dad de fines meteorológicos, en general en tiempo real y especialmente para la elaboración
de mapas meteorológicos.
Este tipo de estación meteorológica se puede encontrar en hogares, casas de campo,
ranchos escuelas, etc.

Agrı́colas
Una estación agroclimática tiene como objetivo el proporcionar datos que permitan un
conocimiento de las condiciones del clima en relación con el desarrollo y crecimiento de
los cultivos y su manejo.
El desarrollo tecnológico ha permitido demostrar que la variación del clima afecta la
mayorı́a de los procesos fı́sicos y biológicos que determinan la calidad y cantidad de la
producción agrı́cola. Conocer el clima oportunamente o con anticipación suficiente es
necesario para mejorar la producción o reducir efectos adversos para el cultivo.
El utilizar de manera oportuna y apropiada los registros climatológicos permite los
siguientes beneficios agrı́colas:

a) Realizar un riego eficiente.

b) Mejorar la fertilización durante el desarrollo de la planta.

Estos beneficios representan para el agricultor mayor producción, menor costo de cul-
tivo, mayor superficie cultivable, producto de mayor calidad, todo lo cual significa en
términos finales, mayor ganancia, menores gastos o menos problemas para el productor
agrı́cola y la población en general.

Especiales
Este tipo de estaciones meteorológicas son las encargadas de medir variables en mares
y océanos. Estas instalaciones son mas especializadas ya que poseen instrumentos de
sondeo como radares meteorológicos para medir la turbulencia atmosférica y la actividad
de tormentas, perfiladores de viento y sistemas acústicos de sondeo de la estructura vertical
de temperaturas.

Aeronáuticas
Las estaciones aeronáuticas tienen su aplicación en aeropuertos y aeródromos civiles o
militares, estas realizan mediciones climáticas las cuales se efectúan en varias horas del
dı́a y son enviadas inmediatamente a un centro recolector de datos, estas observaciones

17
2 Marco Teórico

se transmiten a otros aeródromos y los aviones en vuelo, con la finalidad de contribuir


y proveer un normal desarrollo de la navegación aérea segura. En caso de un desastre
natural, por medio de la estación se provee información indispensable que permita tomar
medidas necesarias para una rápida búsqueda y salvamento de los posibles sobrevivientes.
La disponibilidad de información meteorológica fiable es un factor decisivo para las
operaciones de vuelo y en particular para la elección de la ruta y nivel de vuelo. Esta
información permite reducir la carga de combustible y el tiempo de duración del vuelo, de
esta manera disminuyen los costos operativos logrando muy importantes ahorros gracias
a estas predicciones concretas.
Los sensores con los que suelen contar las estaciones meteorológicas aeronáuticas son de:
temperatura del aire, punto de rocı́o, dirección y fuerza del viento, presión barométrica,
precipitación, alcance visual en la pista y sensor para medir la altitud de las nubes.

Satelitales
Un satélite meteorológico es un tipo de satélite artificial que se utiliza principalmente
para supervisar el tiempo atmosférico y el clima de la Tierra. La configuración básica de
un satélite meteorológico, consiste en una cámara con la función de fotografiar electróni-
camente los sistemas nubosos. La información recibida es enviada rápidamente a la Tierra,
debido a que las condiciones meteorológicas pueden variar en poco tiempo. La transmisión
de estas imágenes, permiten la suficiente resolución para el trabajo meteorológico.
Los dos tipos básicos de satélites meteorológicos, dependiendo de su órbita son los
geoestacionarios y los polares.

2.1.5. Componentes de una Estación Meteorológica


Los instrumentos que forman una estación meteorológica va de acuerdo a la aplica-
ción que se desee darle, principalmente una estación está compuesta de los siguientes
instrumentos anemómetro, veleta, barómetro, termistor y pluviómetro.

Anemómetro
Es un instrumento que forma parte de una estación meteorológica el cual está destinado
a medir la velocidad del viento. Los diferentes tipos de anemómetros son los siguientes:

De efecto Doppler

De empuje.

De rotación o de Robinson.

Anemómetro de Empuje
El funcionamiento de este tipo de anemómetro es el siguiente una superficie colocada
en la punta de un péndulo se coloca de frente al viento, el empuje producido por este,
levantara el péndulo de acuerdo a la velocidad del viento. Una escala apropiada, grabada

18
2.1 Estaciones Meteorologı́cas

en una superficie paralela al movimiento del péndulo servirá como indicador usando el
propio péndulo como aguja indicadora [hidy˙vientos˙1960].

Figura 2.2. Anemómetro de empuje.

Anemómetro Doppler

Los anemómetros Doppler de láser utilizan un haz de luz láser dividido en dos haces.
Las partı́culas de aire cerca de la salida del haz se reflejan de nuevo en un detector en
el que se mide contra el haz de luz original. Cuando las moléculas del aire se mueven,
crean un desplazamiento Doppler, que puede ser utilizado para medir la velocidad del
viento y luego se calcula el movimiento o la velocidad de las partı́culas del aire cerca del
anemómetro [vallina˙instalaciones˙2010].

Figura 2.3. Anemómetro de efecto Doppler.

19
2 Marco Teórico

Anemómetro de Rotación
Este anemómetro es también llamado de copa o de cazoletas, fue inventado en 1846 por
John T. Robinson y mide la velocidad del viento. Se compone de cuatro semiesferas que
giran cualquiera que sea la dirección del viento [inieco˙programacion˙2011]. Este movi-
miento puede ir a un sensor dedicado a contar el numero de vuelta o mediante un pequeño
generador que de un voltaje que es proporcional a lo velocidad de giro. El primer sistema
nos dará el recorrido del viento, mientras que el segundo dará la velocidad instantánea,
como lo hace el indicador de velocidad de un automóvil. Este tipo de anemómetro es el
más utilizado debido a su simplicidad y exactitud.
La cruz de cazoletas ABCD imprime un movimiento de rotación al árbol EF el cual
transmite mediante un tornillo F la rueda dentada H se encarga de hacer mover la aguja
indicadora K.

Figura 2.4. Anemómetro de rotación.

2.1.6. Veleta
La veleta es un dispositivo el cual nos indica la dirección del viento [castillo˙agrometeorologi˙2001],
en su inicio tenı́an fines decorativos.
La dirección del viento se determina cuando la veleta gira y apunta la dirección de
donde proviene el viento.

Dirección. Es la pieza que indica el norte, sur, este y oeste.

20
2.2 Tecnologı́as de Hardware

Ornamento. Es la parte más visible del a veleta esta la puede o no llevar ya que es
el adorno decorativo.

Varilla. Es la pieza central de una veleta y todas las demás partes de se conectan a
ella.

Cola. Es la pieza encargada de atrapar el viento.

Figura 2.5. Veleta.

2.2. Tecnologı́as de Hardware


A continuación se describen el hardware y herramientas relacionadas con este.

2.2.1. Microcontrolador
Un microcontrolador es un circuito integrado que posee memoria en la cual se puede
grabar programas para después ejecutarlos. El microcontrolador ejecuta el programa car-
gado en la memoria Flash. Esto se denomina el código ejecutable y está compuesto por
una serie de ceros y unos, es decir, código binario. Dependiendo de la arquitectura del

21
2 Marco Teórico

microcontrolador, el código está compuesto por palabras de 12, 14 o 16 bits de ancho.


Cada palabra se interpreta por la CPU como una instrucción a ser ejecutada durante
el funcionamiento del microcontrolador. Todas las instrucciones que el microcontrolador
puede reconocer y ejecutar se les denominan colectivamente conjunto de instrucciones.
Estos circuitos son diseñados para disminuir el costo, facilitar el proceso de desarrollo
de sistemas, ası́ como también reducir el consumo de energı́a.
Existen plataformas que a su vez integran microcontroladores junto con componentes
necesarios para su correcto funcionamiento para facilitar aun mas el desarrollo de proyec-
tos, una de esta es la plataforma Arduino.

Plataforma Arduino
Arduino es una plataforma de hardware libre, basada en una placa con un microcon-
trolador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en
proyectos multidisciplinares.
El Arduino Mega es una versión de esta plataforma basada en el microcontrolador
ATmeg1280. Sus caracteristicas principales son:

Voltaje de funcionamiento: 5V

Voltaje de entrada: 7-12 V

Voltaje de entrada : 6-20V

Pines E/S digitales:54

Pines de entrada analógica: 16

Intensidad por pin: 16

Intensidad en pin: 3.3V

Memoria Flash: 3.3V

EEPROM : 4 KB

Figura 2.6. Arduino AT Mega 2560.

22
2.2 Tecnologı́as de Hardware

Para extender la funcionalidad de la plataforma, existen tarjetas llamadas escudos que


se conectan a la placa principal.
El escudo Ethernet permite a una placa Arduino conectarse a una red por medio del
protocolo Ethernet. Está tarjeta esta basada en el chip Wiznet W5100. La placa principal
usa los pines digitales 10, 11, 12, y 13 para comunicarse con el W5100 en el escudo
ethernet, por lo que estos pines no pueden usarse como entradas y salidas.
El escudo Ethernet contiene los siguientes LEDs informativos:

PWR: Indica que la placa y la shield están alimentadas

LINK: Indica cuando existe un enlace de red y parpadea cuando la shield envı́a o
recibe datos

FULLD: indica que la conexión de red es full duplex

RX: Parpadea al recibir datos

TX: Parpadea al enviar datos

Figura 2.7. Escudo Arduino Ethernet.

2.2.2. Sensores
Un sensor es un dispositivo el cual es capaz de detectar magnitudes fı́sicas o quı́micas,
y transformarlas en variables eléctricas.

2.2.3. Sensores Meteorológicos


Los sensores meteorológicos son diseñados para medir parámetros ambientales.Algunos
de estos sensores son: humedad y temperatura.

23
2 Marco Teórico

Sensor de Temperatura

Los sensores de temperatura son dispositivos que transforman los cambios de tempera-
tura en cambios en señales eléctricas que son procesados por equipo eléctrico o electrónico.

Sensor de Humedad

Un sensor de humedad es un dispositivo que mide la humedad relativa en un área dada.


Este sensor puede ser utilizado tanto en interiores y exteriores. Los sensores de humedad
están disponibles en formas tanto analógicas como digitales.

Sensor Óptico

Los sensores ópticos son dispositivos que funcionan con luz, este tipo de sensores poseen
tanto el emisor como el receptor en un mismo encapsulado.
Trabajan por reflexión de la luz, es decir, el emisor emite y si esta luz es reflejada por
un objeto, el receptor lo detecta.
Este tipo de sensor se caracteriza por ser muy sensible.

Motor eléctrico sin escobillas

Este motor conocido también como ”brushless”se caracteriza por no usar escobillas
para realizar el cambio de polaridad del rotor. El motor brushless al no poseer escobillas
no produce rozamiento ni genera fricción tampoco producen calor o ruido al contrario
aumentan su rendimiento y no requieren de mucho mantenimiento.

Figura 2.8. Motor eléctrico sin escobillas.

2.3. Tecnologı́as de Software


En esta sección se describen las herramientas empleadas en el proyecto para el desarrollo
del software.

24
2.3 Tecnologı́as de Software

2.3.1. Sistemas de gestión de bases de datos


Un Sistema de Gestión de Bases de Datos (SGBD) es un conjunto de programas que
permiten la manipulación de las bases de datos, es decir, el almacenamiento, modificación
y extracción de la información en una base de datos, además de proporcionar herramientas
para añadir, borrar, modificar y analizar los datos.
Los SGBD también proporcionan métodos para mantener la integridad de los datos,
para administrar el acceso de usuarios a los datos.

MySQL

MySQL es un sistema de gestión de bases de datos relacionales muy completo, multi-


plataforma y utilizado para aplicaciones web.
Este SGBD es ideal para la creación de bases de datos con acceso desde páginas web
dinámicas, ası́ como para la creación de cualquier otra solución que implique el almace-
namiento de datos, posibilitando realizar múltiples y rápidas consultas.

2.3.2. Plataforma de programación


A continuación se describen los lenguajes de programación y herramientas utilizadas.

Plataforma Java

Java es un lenguaje de programación que fue creado por James Gosling de Sun Mi-
crosystems y publicado en el 1995 como un componente fundamental de la plataforma
Java de Sun Microsystems [diaz˙java˙2003].
Los caracterı́sticas mas importantes de Java son cinco, la programación orientada a
objetos, la posibilidad de ejecutar un mismo programa en diversos sistemas operativos, la
inclusión por defecto de soporte para trabajo en red, la opción de ejecutar el código en
sistemas remotos de manera segura y la facilidad de uso.
Java cuenta con una manera sencilla para acceder y comunicarse con un SGBD, lla-
mada JDBC. JDBC es una API de Java para ejecutar sentencias SQL, consta de un
conjunto de clases e interfaces las cuales están escritas en lenguaje de programación Java
[speegle˙jdbc:˙2002].
Para el desarrollo de aplicaciones complejas que cuenten por naturaleza con una arqui-
tectura Cliente - Servidor, Java nos provee de su plataforma. Java Platform Enterprise
Edition o Java EE es una plataforma de programación para desarrollar y ejecutar softwa-
re de aplicaciones que permite utilizar arquitecturas de N capas distribuidas y se apoya
ampliamente en componentes de software modulares ejecutándose sobre un servidor de
aplicaciones. Esta plataforma esta orientada principalmente al desarrollo de aplicaciones
web.
Las aplicaciones desarrolladas usando JEE, hacen uso de un servidor aplicaciones. Uno
de los servidores de aplicaciones mas populares es TomEE, ya que sus principales carac-
teristicas son la sencillez y velocidad.

25
2 Marco Teórico

Transferencia de Estado Representacional


Transferencia de Estado Representacional (REST) es una técnica de arquitectura de
software y tiene sus inicios por el año 2000. REST se refiere a una colección de principios
arquitectónicos por los cuales se diseñan servicios web haciendo foco en los recursos del
sistema, incluyendo cómo se accede al estado de dichos recursos y cómo se transfieren por
HTTP hacia clientes escritos en diversos lenguajes [richardson˙restful˙2008]. REST
emergió en los últimos años como el modelo predominante para el diseño de servicios.
Una implementación de un servicio web REST se caracteriza por cuatro principios
fundamentales:

Uso de métodos HTTP.

Prescindir del estado de la comunicación.

Exponer URL’s con forma de directorios

Transferencia de información mediante XML o JavaScript Object Notation (JSON).

JSON es un formato ligero para el intercambio de datos, basado en la sintaxis del


lenguaje de programación JavaScript. JSON es legible e independiente de la plataforma,
además de tener a su disposición implementaciones en una amplia gama de lenguajes de
programación.
La plataforma Java EE provee del estándar JAX-RS que nos permite el desarrollo de
sistemas usando la arquitectura REST. El servidor TomEE provee una implementación
de este estándar.

Plataforma Web
HTML es el acrónimo de HyperText Markup Language.Es un lenguaje de hipertexto, es
otras palabras permite escribir texto de forma estructurada.Esta compuesto por etiquetas,
que marcan el inicio y fin de cada elemento del documento.
Con el paso del tiempo han surgido diferentes versiones, a las cuales se han incorporado
y suprimido caracterı́sticas, con el fin de hacerlo más eficiente y facilitar el desarrollo de
páginas web compatibles con distintos navegadores y plataformas.
Javascript es un lenguaje de programación que se utiliza para la creación de paginas
web dinámica [maza˙javascript˙2012], gracias a su compatibilidad con la mayorı́a de los
navegadores modernos, es un lenguaje de programación muy utilizado.
Ajax es una forma de desarrollo web para crear aplicaciones interactivas.El desarrollo
de aplicaciones web siguiendo el esquema AJAX se basa en realizar la interfaz con el
cliente mediante páginas web e interactuar de forma ası́ncrona con el servidor en segun-
do plano sin necesidad de recargar las páginas, como ocurrı́a en el modelo tradicional
[olson˙ajax˙2007].
Ajax es una técnica válida para múltiples plataformas y utilizable en muchos sistemas
operativos y navegadores dado que está basado en estándares abiertos como JavaScript y
Document Object Model.

26
2.3 Tecnologı́as de Software

Jquery fue creado por John Resig, es un framework de JavaScript.Es decir es un pro-
ducto que sirve como base para la programación avanzada de aplicaciones, que aporta
una serie de funciones o códigos para realizar tareas habituales. Un framework son un
conjunto de librerı́as de código que contienen procesos o rutinas ya listos para usar. Se
emplean los frameworks para ası́ no tener que desarrollar las tareas más básicas, puesto
que en el propio framework ya hay implementaciones que están probadas, funcionan y no
se necesitan volver a programar.
RGraph es una biblioteca basada en JavaScript gratuita y construida para gráficos web.
RGraph crea los graficos de HTML5 en el navegador web utilizando JavaScript, lo que
significa páginas web más rápidas y con menos carga del servidor web. Esto lleva a los
pequeños tamaños de página, menores costos y sitios web más rápidos.

Herramientas de Software
Eclipse es una plataforma de desarrollo compuesta por un conjunto de herramientas de
programación de código abierto multiplataforma. Esta plataforma, tı́picamente ha sido
usada para desarrollar entornos de desarrollo integrados (del inglés IDE), como el IDE
de Java llamado Java Development Toolkit (JDT) y el compilador (ECJ) que se entrega
como parte de Eclipse (y que son usados también para desarrollar el mismo Eclipse).
Mercurial es un sistema de versiones distribuido libre y gratuito, orientado a desarro-
lladores de software. Fue escrito para funcionar en Linux pero ha sido adaptado para
Windows, Mac OS y la mayorı́a de otros sistemas tipo Unix.

27
3 Desarrollo
En este apartado se describe el desarrollo hardware y software del prototipo de la
estación meteorológica.

3.1. Desarrollo del Hardware


En la figura 3.1 se muestran los elementos que integran el prototipo de la estación
meteorológica.

Figura 3.1. Diagrama del prototipo didáctico de la estación meteorológico.

En los apartados siguientes se describirá cada uno de estos elementos.

3.1.1. Anemómetro
Como ya se mencionó el anemómetro esta encargado de medir la velocidad del viento.
Para el desarrollo del proyecto se eligió el anemómetro de Robinson pues posee buena
exactitud y no requiere de una orientación.

29
3 Desarrollo

La elección de los materiales fue crucial en la construcción del dispositivo ya que están
directamente relacionados con su buen funcionamiento, es decir, deben ser muy ligeros.
La construcción los elementos que componen el anemómetro se describe continuación:

Cazoletas: Fueron construidas por la mitad de un flotador plástico ver figura 3.2.

Figura 3.2. Cazoleta.

Varillas: Son las encargadas de soportar las cazoletas, se diseñaron con aluminio esto
debido a su baja densidad.Fue necesario realizar cuerda en ambas orillas de estas,
para con ello poder fijar un extremo al eje del anemómetro y el otro a las cazoletas.

Figura 3.3. Varillas.

Estas varillas poseen una longitud de 32cm.

Eje: Este fué fabricado con un motor brushless el cual no posee escobillas, por lo
que se reduce la fricción y el calor, a este motor se le realizaron 4 orificios ver figura
3.4.

Figura 3.4. Motor con orificios para los soportes de las cazoletas.

El motor fué fijado a una tapa de PVC cuyo diámetro es de 12cm ver figura 3.5.

30
3.1 Desarrollo del Hardware

Figura 3.5. Eje del anemómetro.

Cada uno de los componentes mencionados anteriormente fueron fijados como se mues-
tra en la siguiente figura.

Figura 3.6. Anemómetro ensamblado.

En la parte inferior del motor fue fijado una circunferencia diseñada de cartón blanco
con 8 franjas negras como se muestra en la figura 3.7. Mediante esta circunferencia se
activaran los sensores para medir la velocidad del viento.

31
3 Desarrollo

Figura 3.7. Circunferencia para área de sensado.

Para el desarrollo de la electrónica del anemómetro se empleó el sensor óptico CNY70


(ver 6.1.1) debido que posee un muy buen tiempo de respuesta con lo cual se obtienen
mediciones precisas .

Figura 3.8. Sensor Óptico.

La conexión del sensor óptico se muestra en la figura 3.9

32
3.1 Desarrollo del Hardware

Figura 3.9. Configuración del sensor óptico.

Puesto que la salida del sensor es proporcional con la cantidad de rayo reflectado por el
objeto; se conecto a esta un buffer trigger-schmitt (ver 6.1.2) con el objetivo de obtener
una salida lógica, es decir, este sistema se encarga de distinguir entre blanco y negro.
El diagrama esquemático es mostrado en la figura 3.10

Figura 3.10. Conexión del sensor óptico.

El diseño de la tarjeta de circuito impreso para el anemómetro es mostrado en la figura


3.11.

33
3 Desarrollo

Figura 3.11. Diseño de la tarjeta de circuito impreso para el anemómetro.

La figura 3.12 muestra la tarjeta finalizada.

Figura 3.12. Tarjeta para medir la rotación del anemómetro .

La alimentación de la tarjeta mostrada en la figura 3.11 se realizó con un jack rj45, esto

34
3.1 Desarrollo del Hardware

con la finalidad de facilitar la conexión.


Esta placa fue fijada a la parte inferior del motor brushless, a una distancia menor a
50mm de la circunferencia ver figura 3.7.

Figura 3.13. Distancia del montaje entre la tarjeta y sensor.

Es de suma importancia la distancia existente entre la circunferencia y el sensor ya que


de ello depende que el sensor sea capaz de detectar el cambio de blanco a negro.

3.1.2. Veleta
La veleta es el dispositivo que indica la dirección del viento por lo que una de sus
caracterı́sticas primordiales es que al igual forma que el anemómetro los materiales deben
ser muy ligeros.
La construcción de los elementos que componen la veleta es descrita continuación:

Dirección y cola: Estas dos partes de la veleta se diseñaron de sintra el cual es un


material ligero, rı́gido y resistente.

Varilla: Esta posee una dimensión es de 60.5 cm y fue diseñada de material plástico.

Eje: Para esta parte de la veleta fue empleado un motor brushless, el cual se fijo a
una tapa de PVC de 12 cm de diámetro.

Las dimensiones de la veleta son mostrados en la figura 3.14.

35
3 Desarrollo

6 cm 13.5 cm 53 cm 20 cm

30 cm 2 cm 20 cm

37.5 cm

92.5 cm

Figura 3.14. Diagrama de la veleta.

Para fijar la veleta al eje fue necesario encontrar el centro de masa, es decir su punto
de equilibrio.El centro de masa se puede apreciar como un punto gris en la figura 3.14.
Cada uno de los elementos anteriormente descritos fueron ensamblados como se muestra
en la figura 3.15.

Figura 3.15. Veleta ensamblada

Para el desarrollo de la electrónica al igual que en el anemómetro se emplearon sensores


ópticos CNY70.Los cuales se encargan de notificar al microcontrolador cual es la dirección
de la veleta.
El diseño de la tarjeta de circuito impreso para la veleta se muestra en la figura 3.16.

36
3.1 Desarrollo del Hardware

Figura 3.16. Diseño de la tarjeta de circuito impreso para la veleta

El diseño de la tarjeta ya finalizada se muestra en la figura 3.17.

Figura 3.17. Tarjeta para detectar la orientación de la veleta.

De igual forma que en el anemómetro se diseño una circunferencia pero esta vez con
solo una franja negra, esta circunferencia fue fijada en la parte inferior del motor con el

37
3 Desarrollo

objetivo de que mediante el paso de la linea negra se activen los sensores CNY70 y con
ello poder determinar orientación de esta.

3.1.3. Termómetro e higrómetro


Para las mediciones de temperatura se empleo el circuito integrado lm35 (ver 6.1.4) el
cual es un sensor con una precisión de 1 grado centı́grado, la salida es lineal y cada grado
centı́grado es equivalente a 10mV.

Figura 3.18. Sensor de Temperatura LM35.

Las principales caracterı́sticas que presenta este sensor son las siguientes:

Calibrado en grados Celsius

La tensión de salida es proporcional a la temperatura

Alimentación 4-30 V

Rango configurable

Velocidad de Respuesta 40 microsegundos

Bajo costo

De acuerdo a la conexión del sensor lm35 es posible configurar el rango. Para este
proyecto es necesario el rango completo que ofrece el sensor, es decir de -55 a 150 grados,
por lo que se configuro de la siguiente manera.

38
3.1 Desarrollo del Hardware

Figura 3.19. Diagrama de configuración para rango completo del sensor de temperatura

Donde R1 se calcula de la siguiente forma:

V cc
R= (3.1)
,00005A
Sustituyendo valores

5
R= = 10000ohms (3.2)
,00005A
Por lo tanto la resistencia adecuada para la configuración deseada es de 10kilo ohms.

Figura 3.20. Configuración del LM35 con un rango de -55 a 155 grados centı́grados.

Se implementaron en el proyecto dos sensores de temperatura esto con la finalidad de


tener una medición mas precisa.
Las mediciones de la humedad se realizaron con el sensor HMZ433A (ver 6.1.3).

39
3 Desarrollo

Figura 3.21. Sensor de Humedad HMZ433A.

Este sensor de humedad posee las siguientes caracteristicas:

Alimentación 5 V

Voltaje de Salida 0-3.3V

Rango 20-90 Humedad Relativa

El diseño de la tarjeta de circuito impreso para los sensores de temperatura y humedad


se muestra en la figura 3.22.

Figura 3.22. Diseño de la tarjeta de circuito impreso del termómetro e higrómetro.

La tarjeta finalizada se muestra en la figura

40
3.1 Desarrollo del Hardware

Figura 3.23. Tarjeta para medir la humedad y temperatura.

3.1.4. Tarjeta Principal


Para realizar la conexión de las placas mostradas previamente se realizó el diseño de
una tarjerta de circuito impreso que permitiera la conexión de estas y su vez al microcon-
trolador arduino.
El diseño de la tarjeta de circuito impreso se muestra en la figura 3.24

Figura 3.24. Diseño de la tarjeta de circuito impreso principal.

41
3 Desarrollo

La tarjeta terminada se muestra en la figura 3.25

Figura 3.25. Tarjeta principal.

3.1.5. Protección
El modulo de protección fue diseñado con el objetivo de resguardar el microcontrolador,
la tarjeta para medir la humedad y temperatura ası́ como también para resguardar el
router.

Figura 3.26. Modulo de protección.

3.1.6. Base para la Estación Meteorológica


La estación meteorológica fue fijada a una base que posee por dimensiones 121x31
cm. Es fundamental que la estación meteorológica se encuentre nivelada para su buen

42
3.1 Desarrollo del Hardware

funcionamiento por lo que para conseguir esto se emplearon patas ajustables, ver figura
3.27.

Figura 3.27. Patas Niveladoras.

Mediante las patas ajustables es posible balancear la tabla y con ayuda de 4 niveles de
burbuja adheridos a la tabla es posible verificar que la estación se encuentre en condiciones
necesarias para su buen funcionamiento.

Figura 3.28. Niveles de burbuja.

Se fijo a la base de la estación meteorológica una brújula, debido a que para comenzar
a realizar las mediciones es indispensable que la veleta apunte al norte.

43
3 Desarrollo

Figura 3.29. Brújula.

44
3.2 Desarrollo del Software

3.2. Desarrollo del Software


El software desarrollado para el proyecto puede dividirse principalmente en tres com-
ponentes:

Componente de Medición. Software que se ejecuta en la plataforma Arduino encar-


gado de realizar mediciones meteorológicas y reportarlas al componente de Servicios.

Componente de Servicios. Software que expone un conjunto de servicios para alma-


cenar y consultar las mediciones meteorológicas a los otros dos componentes.

Componente de Interfaz de Usuario. Software que proporciona una interfaz gráfica


web que muestra las mediciones meteorológicas.

3.2.1. Componente de Medición


Este software esta implementado en el lenguaje de programación C sobre la plataforma
Arduino. Su función es realizar mediciones periódicas de los sensores desarrollados. De
manera general, su flujo se muestra en la figura 3.30.

Figura 3.30. Diagrama de flujo del componente de medición.

45
3 Desarrollo

3.2.2. Componente de Servicios


Este componente realiza dos funciones, en primer lugar proporciona servicios para alma-
cenar y acceder a las mediciones, además, ejecuta un proceso que periódicamente calcula
y almacena un promedio de las mediciones ocurridas durante este lapso. La figura 3.31
muestra el diagrama de clases de este componente.

Figura 3.31. Diagrama de clases resumido.

Base de Datos

El diseño de la base de datos se muestra en la figura 3.32.

Figura 3.32. Diagrama entidad relación de la base de datos.

La función que cumplen las tablas es la siguiente:

measure. Almacena las mediciones que entregadas por el componente de Medición.

normalized measure. Almacena un historial de promedios de mediciones. Cada pro-


medio representa el conjunto de mediciones ocurridas cada 10 minutos.

Measure y MeasureDB son las clases que proporcionan acceso a la base de datos, su
diagrama de clases se muestra en el figura 3.33.

46
3.2 Desarrollo del Software

Figura 3.33. Diagrama de clases para el acceso a base de datos.

Interfaz de Servicios
Los siguientes servicios son expuestos utilizando una arquitectura REST y el formato
JSON:

Guardar medición (URL/measure/save). Almacena una medición en la tabla measure.

Listar mediciones (URL/list?s=inicio&e=fin). Lista las mediciones que ocurrieron


entre inicio y fin.

Listar promedio de mediciones (URL/listNormalized?s=inicio&e=fin). Lista los pro-


medios de medicionesgenerados entre inicio y fin.

47
3 Desarrollo

MeasureResource es la clase que proporciona el acceso a los servicios, su diagrama de


clases se muestra en el figura 3.34.

Figura 3.34. Diagrama de clases para el acceso a base de datos.

Proceso generador de promedios

El componente cuenta con un proceso que se ejecuta a intervalos periódicos, cada 10


minutos de manera indefinida. En cada ejecución el proceso realiza estas dos tareas:

Guardar medición (URL/measure/save). Almacena una medición en la tabla measure.

Listar mediciones (URL/list?s=inicio&e=fin). Lista las mediciones que ocurrieron


entre inicio y fin.

Listar promedio de mediciones (URL/listNormalized?s=inicio&e=fin). Lista los pro-


medios de medicionesgenerados entre inicio y fin.

ContextListener y NormalizedMeasureGenerator son las clases que proporciona esta


funcionalidad, su diagrama de clases se muestra en el figura 3.35.

Figura 3.35. Diagrama de clases para el acceso a base de datos.

48
3.2 Desarrollo del Software

3.2.3. Componente de Interfaz de Usuario


Proporciona una pagina web interactiva que consta de dos pestañas en las que se mues-
tran las mediciones. La primera pestaña presenta las mediciones obtenidas en tiempo real
del hardware. En la figura 3.36 se muestra esta pestaña.
.

Figura 3.36. Gráfica de la temperatura en con mediciones de tiempo real.

En la parte inferior de la pestaña se encuentran instrumentos que muestran los valores


correspondientes a la medición al presionar un punto sobre la gráfica.

Figura 3.37. Instrumentos de medición.

En la segunda pestaña se presenta una gráfica que muestra los promedios de las medi-
ciones.

.
Figura 3.38. Gráfica de promedios de temperatura.

49
4 Pruebas y resultados
En este apartado se muestran las pruebas y resultados realizados para comprobar la
fiabilidad del proyecto.

4.1. Funcionamiento
El diagrama que muestra el funcionamiento del prototipo didáctico de la estación me-
teorológica se puede observar en la figura 4.1

Figura 4.1. Funcionamiento del prototipo didáctico de la estación meteorológica monito-


reado de forma remota.

El bloque de estación es el encargado de medir las variables meteorológicas para después


mediante el microcontrolador ser enviadas al servidor y posteriormente ser reportadas en
la interfaz gráfica.

51
4 Pruebas y resultados

4.2. Pruebas
Se realizó una comparativa entre las mediciones representativas generadas por el pro-
totipo y mediciones de un servicio meteorológico publico llamado OpenWeatherMap.
En la figura 4.2 se muestra gráfica comparativa de las mediciones de humedad.

Figura 4.2. Gráfica comparativa de humedad.

La gráfica en azul nos muestra las mediciones obtenidas por OpenWeatherMap mientras
que la gráfica en rojo nos muestra las mediciones obtenidas de la estación.
En la figura 4.3 se muestra gráfica comparativa de las mediciones de temperatura.

Figura 4.3. Gráfica comparativa de temperatura.

52
4.3 Estimación de costos

En la figura 4.4 se muestra gráfica comparativa de las mediciones de velocidad. De esta


figura se puede observar que hay variaciones significativas en las mediciones de ambos
sistemas, esto debido a que se encuentran en lugares distintos.

Figura 4.4. Gráfica comparativa de velocidad.

En las pruebas mencionadas anteriormente, se puede apreciar que las mediciones produ-
cidas por el prototipo son confiables, ya que al comparar sus mediciones con las otorgadas
por el servicio meteorológico OpenWeatherMap son muy similares.

4.3. Estimación de costos

El costo estimado del hardware del proyecto se resume mediante la siguiente tabla.

53
4 Pruebas y resultados

Figura 4.5. Tabla de costos para el Hardware.

Considerando que el sueldo de un ingeniero es aproximadamente de 30,000 pesos men-


suales, realizando el calculo para obtener el ingreso por hora, resulta un aproximado de
150 pesos.
Las horas dedicadas al desarrollo del proyecto fueron aproximadamente 500, conside-
rando el anterior calculo se tiene el desarrollo de este proyecto tendrı́a un costo de mano
de obra aproximado de 75,000 pesos.

Figura 4.6. Tabla de costo del proyeto.

54
5 Conclusiones
Una vez concluido el proyecto, los resultados que podemos sintetizar son los siguientes:

Fue posible diseñar y construir componentes de hardware conformados por disposi-


tivos mecánicos y tarjetas electrónicas que pudieran producir medidas fiables de las
variables meteorológicas propuestas.

Fue posible diseñar e implementar un software para interactuar y registrar la infor-


mación producida por los componentes de hardware de forma exitosa.

Fue posible diseñar e implementar un software que por medio de un sitio web que
permite monitorear e interpretar de manera remota los resultados producidos por
los componentes de hardware.

Finalmente podemos concluir que fue posible alcanzar el objetivo general del proyecto,
es decir, construir un prototipo de estación meteorológica midiendo las cuatro variables
propuestas: humedad relativa, temperatura, dirección y velocidad del viento.

55
6 Anexos
6.1. Hardware
6.1.1. Especificaciones CNY70

57
CNY70
www.vishay.com
Vishay Semiconductors
Reflective Optical Sensor with Transistor Output
FEATURES
Marking area
• Package type: leaded
• Detector type: phototransistor
• Dimensions (L x W x H in mm): 7 x 7 x 6
E D • Peak operating distance: < 0.5 mm
• Operating range within > 20 % relative
collector current: 0 mm to 5 mm
21835 Top view
19158_1
• Typical output current under test: IC = 1 mA
• Emitter wavelength: 950 nm
DESCRIPTION • Daylight blocking filter
The CNY70 is a reflective sensor that includes an infrared • Lead (Pb)-free soldering released
emitter and phototransistor in a leaded package which • Material categorization: For definitions of compliance
blocks visible light. please see www.vishay.com/doc?99912

APPLICATIONS
• Optoelectronic scanning and switching devices i.e., index
sensing, coded disk scanning etc. (optoelectronic
encoder assemblies).

PRODUCT SUMMARY
DISTANCE FOR DISTANCE RANGE FOR TYPICAL OUTPUT DAYLIGHT
PART NUMBER MAXIMUM CTRrel (1) RELATIVE Iout > 20 % CURRENT UNDER TEST (2) BLOCKING FILTER
(mm) (mm) (mA) INTEGRATED
CNY70 0 0 to 5 1 Yes

Notes
(1) CTR: current transfere ratio, I /I
out in
(2) Conditions like in table basic charactristics/sensors

ORDERING INFORMATION
ORDERING CODE PACKAGING VOLUME (1) REMARKS
CNY70 Tube MOQ: 4000 pcs, 80 pcs/tube -
Note
(1) MOQ: minimum order quantity

ABSOLUTE MAXIMUM RATINGS (Tamb = 25 °C, unless otherwise specified)


PARAMETER TEST CONDITION SYMBOL VALUE UNIT
COUPLER
Total power dissipation Tamb ≤ 25 °C Ptot 200 mW
Ambient temperature range Tamb - 40 to + 85 °C
Storage temperature range Tstg - 40 to + 100 °C
Soldering temperature Distance to case 2 mm, t £ 5 s Tsd 260 °C
INPUT (EMITTER)
Reverse voltage VR 5 V
Forward current IF 50 mA
Forward surge current tp ≤ 10 μs IFSM 3 A
Power dissipation Tamb ≤ 25 °C PV 100 mW
Junction temperature Tj 100 °C

Rev. 1.8, 30-Jul-12 1 Document Number: 83751


For technical questions, contact: sensorstechsupport@vishay.com
THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE. THE PRODUCTS DESCRIBED HEREIN AND THIS DOCUMENT
ARE SUBJECT TO SPECIFIC DISCLAIMERS, SET FORTH AT www.vishay.com/doc?91000
CNY70
www.vishay.com
Vishay Semiconductors

ABSOLUTE MAXIMUM RATINGS (Tamb = 25 °C, unless otherwise specified)


PARAMETER TEST CONDITION SYMBOL VALUE UNIT
OUTPUT (DETECTOR)
Collector emitter voltage VCEO 32 V
Emitter collector voltage VECO 7 V
Collector current IC 50 mA
Power dissipation Tamb ≤ 25 °C PV 100 mW
Junction temperature Tj 100 °C

ABSOLUTE MAXIMUM RATINGS

300
P - Power Dissipation (mW)

Coupled device
200

Phototransistor
100
IR - diode

0
0 25 50 75 100
95 11071 Tamb - Ambient Temperature (°C)

Fig. 1 - Power Dissipation vs. Ambient Temperature

BASIC CHARACTERISTICS (Tamb = 25 °C, unless otherwise specified)


PARAMETER TEST CONDITION SYMBOL MIN. TYP. MAX. UNIT
COUPLER
VCE = 5 V, IF = 20 mA,
Collector current IC (2) 0.3 1.0 mA
d = 0.3 mm (figure 1)
Cross talk current VCE = 5 V, IF = 20 mA, (figure 2) ICX (3) 600 nA
Collector emitter saturation IF = 20 mA, IC = 0.1 mA, (2)
VCEsat 0.3 V
voltage d = 0.3 mm (figure 1)
INPUT (EMITTER)
Forward voltage IF = 50 mA VF 1.25 1.6 V
Radiant intensity IF = 50 mA, tp = 20 ms Ie 7.5 mW/sr
Peak wavelength IF = 100 mA λP 940 nm
Virtual source diameter Method: 63 % encircled energy d 1.2 mm
OUTPUT (DETECTOR)
Collector emitter voltage IC = 1 mA VCEO 32 V
Emitter collector voltage IE = 100 μA VECO 5 V
Collector dark current VCE = 20 V, IF = 0 A, E = 0 lx ICEO 200 nA
Notes
(1) Measured with the “Kodak neutral test card”, white side with 90 % diffuse reflectance
(2) Measured without reflecting medium

Rev. 1.8, 30-Jul-12 2 Document Number: 83751


For technical questions, contact: sensorstechsupport@vishay.com
THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE. THE PRODUCTS DESCRIBED HEREIN AND THIS DOCUMENT
ARE SUBJECT TO SPECIFIC DISCLAIMERS, SET FORTH AT www.vishay.com/doc?91000
6 Anexos

6.1.2. Especificaciones HEF40106

60
HEF40106B
Hex inverting Schmitt trigger
Rev. 7 — 21 November 2011 Product data sheet

1. General description
The HEF40106B provides six inverting buffers. Each input has a Schmitt trigger circuit.
The inverting buffer switches at different points for positive-going and negative-going
signals. The difference between the positive voltage (VT+) and the negative voltage (VT)
is defined as hysteresis voltage (VH).

The HEF40106B may be used for enhanced noise immunity or to “square up” slowly
changing waveforms.

It operates over a recommended VDD power supply range of 3 V to 15 V referenced to VSS


(usually ground). Unused inputs must be connected to VDD, VSS, or another input.

2. Features and benefits


 Schmitt trigger input discrimination
 Fully static operation
 5 V, 10 V, and 15 V parametric ratings
 Standardized symmetrical output characteristics
 Specified from 40 C to +125 C
 Complies with JEDEC standard JESD 13-B

3. Applications
 Wave and pulse shapers
 Astable multivibrators
 Monostable multivibrators

4. Ordering information
Table 1. Ordering information
All types operate from 40 C to +125 C
Type number Package
Name Description Version
HEF40106BP DIP14 plastic dual in-line package; 14 leads (300 mil) SOT27-1
HEF40106BT SO14 plastic small outline package; 14 leads; body width 3.9 mm SOT108-1
HEF40106BTT TSSOP14 plastic thin shrink small outline package; 14 leads; body width 4.4 mm SOT402-1
NXP Semiconductors HEF40106B
Hex inverting Schmitt trigger

5. Functional diagram

1A 1Y
1 2

2A 2Y
3 4

3A 3Y
5 6

4A 4Y
9 8

5A 5Y
11 10

6A 6Y
13 12 A Y

mna204 mna025

Fig 1. Functional diagram Fig 2. Logic diagram (one inverting buffer)

6. Pinning information

6.1 Pinning

HEF40106B

1A 1 14 VDD

1Y 2 13 6A

2A 3 12 6Y

2Y 4 11 5A

3A 5 10 5Y

3Y 6 9 4A

VSS 7 8 4Y

001aal174

Fig 3. Pin configuration

HEF40106B All information provided in this document is subject to legal disclaimers. © NXP B.V. 2011. All rights reserved.

Product data sheet Rev. 7 — 21 November 2011 2 of 16


6.1 Hardware

6.1.3. Especificaciones HMZ433A

63
HUMIDITYCAPACITORS
CERAMIC & TEMPERATURE MODULE
MA Series: Multilayer Surface Mount
HMZ-433A

INTRODUCTION FEATURES
The HMZ-433A is a humidity and •Wide humidity operation range
temperature sensing module that can •Linear DC output
be installed in a wide range of •Long term stability
applications. This module requires no •Small and economical
additional engineering and has •Temperature sensing included
specified inputs and outputs. •RoHS Compliant

APPLICATIONS
•Airconditioner, Humidifier, Dehumidifier
•Humidity Controller, Humidity transmitter
•Hygrometer, Hygro-recorder
•Copy machines, Data Equipment
•Appliance
•Weather forecast Equipment

DIMENSIONS

*Connector is 2317RJ-04 (4 pins, 2.5mm pitch)

ELECTRICAL CHARACTERISTICS

Sensing Element (Humidity) HMZ-433A, Ghitron HCZ-H6A

Supply Voltage (VIN) 5Vdc+5%


Current Consumption 5mA max (2mA average.)
Operating Range 0 to 60°C 95% RH or Less
Storage Range -20 to 60°C 95% RH or Less
Humidity Transmitting Range 30 to 90% RH
Accuracy at 25°C(+0.5°C) +5%RH (at 60%RH, Vin=5Vdc)
Humidity Output % RH 30 40 50 60 70 80 90
(At 25°C, Vin=5Vdc) Vo 1.00 1.32 1.65 1.98 2.31 2.64 2.97
*See Figure A
Temperature Response Temp (°C) 0 10 20 25 30 40 50 60
(50k¿+1% thermistor) Resistance (k¿ 160.56 98.71 62.32 50 40.3 26.75 18.8 12.5
*See Figure B

C7B03
RFE International • Tel:(949) 833-1988 • Fax:(949) 833-1788 • E-Mail Sales@rfeinc.com
REV2006.09.13
HUMIDITY & TEMPERATURE MODULE
HMZ-433A

FIGURE A
Humidity Output 0~3.3V characteristics
3.00
15°C 20°C 25°C 30°C 35°C 40°C
2.50 30% RH 1.23 1.09 1.02 0.94 0.83 0.78
Output Voltage (V)

40% RH 1.39 1.32 1.30 1.20 1.14 1.13


2.00
50% RH 1.65 1.65 1.64 1.60 1.58 1.62
1.50 60% RH 2.01 2.00 1.98 1.97 1.94 1.95
70% RH 2.28 2.21 2.25 2.22 2.15 2.16
1.00 80% RH 2.47 2.46 2.45 2.41 2.42 2.42

0.50 90% RH 2.82 2.77 2.73 2.71 2.70 2.67

HMZ Module Humidity Output 0~3.3V v.s. Temperature Characterisics


0.00
20 30 40 50 60 70 80 90 100
Relative Humidity (%RH)

FIGURE B
Thermistor R-T curve

180
160
140
Resistance (K ohms)

120
100
80
60

40
20
0
0 5 10 15 20 25 30 35 40 45 50 55 60
Temperature (C)

HOW TO USE IN CIRCUIT

Humidity Pin1 Power (+5V)


Circuit Block Pin2 Humidity Output (DC:V)
C>0.1uf
Pin3 GND

Thermistor Pin1 Power (+5V)


Circuit Block Pin2
Pin3 GND
Pin4 Temperature Output (DC:V)
Resistor

C7B03
RFE International • Tel:(949) 833-1988 • Fax:(949) 833-1788 • E-Mail Sales@rfeinc.com
REV2006.09.13
6 Anexos

6.1.4. Especificaciones LM35

66
Precision Centigrade Temperature Sensors
LM35/LM35A/LM35C/LM35CA/LM35D
December 1994

LM35/LM35A/LM35C/LM35CA/LM35D
Precision Centigrade Temperature Sensors
General Description
The LM35 series are precision integrated-circuit tempera- available packaged in hermetic TO-46 transistor packages,
ture sensors, whose output voltage is linearly proportional to while the LM35C, LM35CA, and LM35D are also available in
the Celsius (Centigrade) temperature. The LM35 thus has the plastic TO-92 transistor package. The LM35D is also
an advantage over linear temperature sensors calibrated in § available in an 8-lead surface mount small outline package
Kelvin, as the user is not required to subtract a large con- and a plastic TO-202 package.
stant voltage from its output to obtain convenient Centi-
grade scaling. The LM35 does not require any external cali- Features
bration or trimming to provide typical accuracies of g (/4§ C Y Calibrated directly in § Celsius (Centigrade)
at room temperature and g */4§ C over a full b55 to a 150§ C Y Linear a 10.0 mV/§ C scale factor
temperature range. Low cost is assured by trimming and Y 0.5§ C accuracy guaranteeable (at a 25§ C)
calibration at the wafer level. The LM35’s low output imped-
ance, linear output, and precise inherent calibration make
Y Rated for full b55§ to a 150§ C range
interfacing to readout or control circuitry especially easy. It Y Suitable for remote applications
can be used with single power supplies, or with plus and Y Low cost due to wafer-level trimming
minus supplies. As it draws only 60 mA from its supply, it has Y Operates from 4 to 30 volts
very low self-heating, less than 0.1§ C in still air. The LM35 is Y Less than 60 mA current drain
rated to operate over a b55§ to a 150§ C temperature Y Low self-heating, 0.08§ C in still air
range, while the LM35C is rated for a b40§ to a 110§ C Y Nonlinearity only g (/4§ C typical
range (b10§ with improved accuracy). The LM35 series is Y Low impedance output, 0.1 X for 1 mA load

Connection Diagrams
TO-46 TO-92 SO-8
Metal Can Package* Plastic Package Small Outline Molded Package

TL/H/5516 – 2
TL/H/5516– 1 TL/H/5516– 21
*Case is connected to negative pin (GND) Order Number LM35CZ, Top View
LM35CAZ or LM35DZ N.C. e No Connection
Order Number LM35H, LM35AH, See NS Package Number Z03A
LM35CH, LM35CAH or LM35DH Order Number LM35DM
See NS Package Number H03H See NS Package Number M08A

TO-202
Plastic Package
Typical Applications

TL/H/5516 – 3
TL/H/5516 – 4
FIGURE 1. Basic Centigrade
Temperature Choose R1 e b VS/50 mA
Sensor ( a 2§ C to a 150§ C)
VOUT e a 1,500 mV at a 150§ C
e a 250 mV at a 25§ C
eb 550 mV at b 55§ C
TL/H/5516 – 24
FIGURE 2. Full-Range Centigrade
Order Number LM35DP Temperature Sensor
See NS Package Number P03A
TRI-STATEÉ is a registered trademark of National Semiconductor Corporation.

C1995 National Semiconductor Corporation TL/H/5516 RRD-B30M75/Printed in U. S. A.


Absolute Maximum Ratings (Note 10)
If Military/Aerospace specified devices are required, SO Package (Note 12):
please contact the National Semiconductor Sales Vapor Phase (60 seconds) 215§ C
Office/Distributors for availability and specifications.
Infrared (15 seconds) 220§ C
Supply Voltage a 35V to b 0.2V
ESD Susceptibility (Note 11) 2500V
Output Voltage a 6V to b 1.0V
Specified Operating Temperature Range: TMIN to TMAX
Output Current 10 mA
(Note 2)
Storage Temp., TO-46 Package, b 60§ C to a 180§ C
LM35, LM35A b 55§ C to a 150§ C
TO-92 Package, b 60§ C to a 150§ C
LM35C, LM35CA b 40§ C to a 110§ C
SO-8 Package, b 65§ C to a 150§ C
LM35D 0§ C to a 100§ C
TO-202 Package, b 65§ C to a 150§ C
Lead Temp.:
TO-46 Package, (Soldering, 10 seconds) 300§ C
TO-92 Package, (Soldering, 10 seconds) 260§ C
TO-202 Package, (Soldering, 10 seconds) a 230§ C

Electrical Characteristics (Note 1) (Note 6)


LM35A LM35CA
Tested Design Tested Design Units
Parameter Conditions
Typical Limit Limit Typical Limit Limit (Max.)
(Note 4) (Note 5) (Note 4) (Note 5)
Accuracy TA e a 25§ C g 0.2 g 0.5 g 0.2 g 0.5 §C
(Note 7) TA eb10§ C g 0.3 g 0.3 g 1.0 §C
TA e TMAX g 0.4 g 1.0 g 0.4 g 1.0 §C
TA e TMIN g 0.4 g 1.0 g 0.4 g 1.5 §C
Nonlinearity TMINsTAsTMAX g 0.18 g 0.35 g 0.15 g 0.3 §C
(Note 8)
Sensor Gain TMINsTAsTMAX a 10.0 a 9.9, a 10.0 a 9.9, mV/§ C
(Average Slope) a 10.1 a 10.1

Load Regulation TA e a 25§ C g 0.4 g 1.0 g 0.4 g 1.0 mV/mA


(Note 3) 0sILs1 mA TMINsTAsTMAX g 0.5 g 3.0 g 0.5 g 3.0 mV/mA
Line Regulation TA e a 25§ C g 0.01 g 0.05 g 0.01 g 0.05 mV/V
(Note 3) 4VsVSs30V g 0.02 g 0.1 g 0.02 g 0.1 mV/V
Quiescent Current VS e a 5V, a 25§ C 56 67 56 67 mA
(Note 9) VS e a 5V 105 131 91 114 mA
VS e a 30V, a 25§ C 56.2 68 56.2 68 mA
VS e a 30V 105.5 133 91.5 116 mA
Change of 4VsVSs30V, a 25§ C 0.2 1.0 0.2 1.0 mA
Quiescent Current 4VsVSs30V 0.5 2.0 0.5 2.0 mA
(Note 3)
Temperature a 0.39 a 0.5 a 0.39 a 0.5 mA/§ C
Coefficient of
Quiescent Current
Minimum Temperature In circuit of a 1.5 a 2.0 a 1.5 a 2.0 §C
for Rated Accuracy Figure 1 , IL e 0
Long Term Stability TJ e TMAX, for g 0.08 g 0.08 §C
1000 hours

Note 1: Unless otherwise noted, these specifications apply: b 55§ C s TJ s a 150§ C for the LM35 and LM35A; b 40§ s TJ s a 110§ C for the LM35C and LM35CA; and
0§ s TJ s a 100§ C for the LM35D. VS e a 5Vdc and ILOAD e 50 mA, in the circuit of Figure 2. These specifications also apply from a 2§ C to TMAX in the circuit of
Figure 1 . Specifications in boldface apply over the full rated temperature range.
Note 2: Thermal resistance of the TO-46 package is 400§ C/W, junction to ambient, and 24§ C/W junction to case. Thermal resistance of the TO-92 package is
180§ C/W junction to ambient. Thermal resistance of the small outline molded package is 220§ C/W junction to ambient. Thermal resistance of the TO-202 package
is 85§ C/W junction to ambient. For additional thermal resistance information see table in the Applications section.

2
Electrical Characteristics (Note 1) (Note 6) (Continued)

LM35 LM35C, LM35D


Tested Design Tested Design Units
Parameter Conditions
Typical Limit Limit Typical Limit Limit (Max.)
(Note 4) (Note 5) (Note 4) (Note 5)
Accuracy, TA e a 25§ C g 0.4 g 1.0 g 0.4 g 1.0 §C
LM35, LM35C TA eb10§ C g 0.5 g 0.5 g 1.5 §C
(Note 7) TA e TMAX g 0.8 g 1.5 g 0.8 g 1.5 §C
TA e TMIN g 0.8 g 1.5 g 0.8 g 2.0 §C
Accuracy, TA e a 25§ C g 0.6 g 1.5 §C
LM35D TA e TMAX g 0.9 g 2.0 §C
(Note 7) TA e TMIN g 0.9 g 2.0 §C
Nonlinearity TMINsTAsTMAX g 0.3 g 0.5 g 0.2 g 0.5 §C
(Note 8)
Sensor Gain TMINsTAsTMAX a 10.0 a 9.8, a 10.0 a 9.8, mV/§ C
(Average Slope) a 10.2 a 10.2

Load Regulation TA e a 25§ C g 0.4 g 2.0 g 0.4 g 2.0 mV/mA


(Note 3) 0sILs1 mA TMINsTAsTMAX g 0.5 g 5.0 g 0.5 g 5.0 mV/mA
Line Regulation TA e a 25§ C g 0.01 g 0.1 g 0.01 g 0.1 mV/V
(Note 3) 4VsVSs30V g 0.02 g 0.2 g 0.02 g 0.2 mV/V
Quiescent Current VS e a 5V, a 25§ C 56 80 56 80 mA
(Note 9) VS e a 5V 105 158 91 138 mA
VS e a 30V, a 25§ C 56.2 82 56.2 82 mA
VS e a 30V 105.5 161 91.5 141 mA
Change of 4VsVSs30V, a 25§ C 0.2 2.0 0.2 2.0 mA
Quiescent Current 4VsVSs30V 0.5 3.0 0.5 3.0 mA
(Note 3)
Temperature a 0.39 a 0.7 a 0.39 a 0.7 mA/§ C
Coefficient of
Quiescent Current
Minimum Temperature In circuit of a 1.5 a 2.0 a 1.5 a 2.0 §C
for Rated Accuracy Figure 1 , IL e 0
Long Term Stability TJ e TMAX, for g 0.08 g 0.08 §C
1000 hours

Note 3: Regulation is measured at constant junction temperature, using pulse testing with a low duty cycle. Changes in output due to heating effects can be
computed by multiplying the internal dissipation by the thermal resistance.
Note 4: Tested Limits are guaranteed and 100% tested in production.
Note 5: Design Limits are guaranteed (but not 100% production tested) over the indicated temperature and supply voltage ranges. These limits are not used to
calculate outgoing quality levels.
Note 6: Specifications in boldface apply over the full rated temperature range.
Note 7: Accuracy is defined as the error between the output voltage and 10mv/§ C times the device’s case temperature, at specified conditions of voltage, current,
and temperature (expressed in § C).
Note 8: Nonlinearity is defined as the deviation of the output-voltage-versus-temperature curve from the best-fit straight line, over the device’s rated temperature
range.
Note 9: Quiescent current is defined in the circuit of Figure 1 .
Note 10: Absolute Maximum Ratings indicate limits beyond which damage to the device may occur. DC and AC electrical specifications do not apply when
operating the device beyond its rated operating conditions. See Note 1.
Note 11: Human body model, 100 pF discharged through a 1.5 kX resistor.
Note 12: See AN-450 ‘‘Surface Mounting Methods and Their Effect on Product Reliability’’ or the section titled ‘‘Surface Mount’’ found in a current National
Semiconductor Linear Data Book for other methods of soldering surface mount devices.

3
Typical Performance Characteristics
Thermal Resistance Thermal Response
Junction to Air Thermal Time Constant in Still Air

Quiescent Current
Thermal Response in Minimum Supply vs. Temperature
Stirred Oil Bath Voltage vs. Temperature (In Circuit of Figure 1 .)

TL/H/5516 – 17
Quiescent Current
vs. Temperature Accuracy vs. Temperature Accuracy vs. Temperature
(In Circuit of Figure 2 .) (Guaranteed) (Guaranteed)

TL/H/5516 – 18
Noise Voltage Start-Up Response

TL/H/5516 – 22

4
6.2 Códigos

6.2. Códigos
6.2.1. Clase Measure
package pdem.model;

import java.util.Date;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Measure {

public static final int ES = 0, NE = 1, NO = 2, NW = 3,


WE = 4, SW = 5, SO = 6, SE = 7;

private Date createdOn;


private int id;
private float relativeHumidity;
private float temperature;
private int windDirection;
private float windSpeed;

public Date getCreatedOn() {


return createdOn;
}

public int getId() {


return id;
}

public float getTemperature() {


return temperature;
}

public float getRelativeHumidity() {


return relativeHumidity;
}

public int getWindDirection() {


return windDirection;
}

public float getWindSpeed() {


return windSpeed;

71
6 Anexos

public void setId(int id) {


this.id = id;
}

public void setCreatedOn(Date createdOn) {


this.createdOn = createdOn;
}

public void setTemperature(float temperature) {


this.temperature = temperature;
}

public void setRelativeHumidity(float relativeHumidity) {


this.relativeHumidity = relativeHumidity;
}

public void setWindDirection(int windDirection) {


this.windDirection = windDirection;
}

public void setWindSpeed(float windSpeed) {


this.windSpeed = windSpeed;
}

6.2.2. Clase MeasureDB

package pdem.persistence;
import java.sql.Connection;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Logger;

72
6.2 Códigos

import pdem.model.Measure;

public class MeasureDB {

private final static Logger log =


Logger.getLogger(MeasureDB.class.getName());

private static final String bd = "pdem";


private static final String user = "pdem";
private static final String pass = "pdem";
private static final String server = "jdbc:mysql://localhost/" + bd;
private static DateFormat sdf =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private Connection cnx;

public void deleteBetweenDates(Date start, Date end) {


String sql = "delete from measure " +
"where created_on between ’%s’ and ’%s’";
sql = String.format(sql, sdf.format(start), sdf.format(end));
try {
openConection();
Statement stm = cnx.createStatement();
stm.executeUpdate(sql);
closeStatement(stm);
closeConection();
} catch (SQLException e) {
log.severe(e.getMessage());
}
}

public List<Measure> listBetweenDates(Date start, Date end) {


List<Measure> measures = new ArrayList<>();
String sql = "select * from measure " +
"where created_on between ’%s’ and ’%s’";
sql = String.format(sql, sdf.format(start), sdf.format(end));
try {
openConection();
Statement stm = cnx.createStatement();
ResultSet rst = stm.executeQuery(sql);
while (rst.next()) {
Measure m = new Measure();
m.setId(rst.getInt("id"));
m.setCreatedOn(rst.getTimestamp("created_on"));

73
6 Anexos

m.setRelativeHumidity(rst.getFloat("relative_humidity"));
m.setTemperature(rst.getFloat("temperature"));
m.setWindDirection(rst.getInt("wind_direction"));
m.setWindSpeed(rst.getFloat("wind_speed"));
measures.add(m);
}
closeResultSet(rst);
closeStatement(stm);
closeConection();
} catch (SQLException e) {
log.severe(e.getMessage());
}
return measures;
}

public List<Measure> listNormalizedBetweenDates(Date start, Date end) {


List<Measure> measures = new ArrayList<>();
String sql = "select * from normalized_measure " +
"where created_on between ’%s’ and ’%s’";
sql = String.format(sql, sdf.format(start), sdf.format(end));
try {
openConection();
Statement stm = cnx.createStatement();
ResultSet rst = stm.executeQuery(sql);
while (rst.next()) {
Measure m = new Measure();
m.setId(rst.getInt("id"));
m.setCreatedOn(rst.getTimestamp("created_on"));
m.setRelativeHumidity(rst.getFloat("relative_humidity"));
m.setTemperature(rst.getFloat("temperature"));
m.setWindDirection(rst.getInt("wind_direction"));
m.setWindSpeed(rst.getFloat("wind_speed"));
measures.add(m);
}
closeResultSet(rst);
closeStatement(stm);
closeConection();
} catch (SQLException e) {
log.severe(e.getMessage());
}
return measures;
}

public void save(Measure measure) {

74
6.2 Códigos

String sql = "insert into measure (created_on, relative_humidity," +


"temperature, wind_direction, wind_speed) " +
"values (’%s’, %f, %f, %d, %f)";
sql = String.format(sql, sdf.format(measure.getCreatedOn()),
measure.getRelativeHumidity(),measure.getTemperature(),
measure.getWindDirection(), measure.getWindSpeed());
try {
openConection();
Statement stm = cnx.createStatement();
stm.executeUpdate(sql);
closeStatement(stm);
closeConection();
} catch (SQLException e) {
log.severe(e.getMessage());
}
}

public void saveNormalized(Measure measure) {


String sql = "insert into normalized_measure (created_on, " +
"relative_humidity, temperature, wind_direction," +
"wind_speed) values (’%s’, %f, %f, %d, %f)";
sql = String.format(sql, sdf.format(measure.getCreatedOn()),
measure.getRelativeHumidity(),measure.getTemperature(),
measure.getWindDirection(), measure.getWindSpeed());
try {
openConection();
Statement stm = cnx.createStatement();
stm.executeUpdate(sql);
closeStatement(stm);
closeConection();
} catch (SQLException e) {
log.severe(e.getMessage());
}
}

private void openConection() {


try {
Class.forName("com.mysql.jdbc.Driver");
cnx = DriverManager.getConnection(server, user, pass);
} catch (Exception e) {
System.out.println("Conection failed");
log.severe(e.getMessage());
}
}

75
6 Anexos

private void closeResultSet(ResultSet rs) {


if (rs != null) {
try {
rs.close();
} catch (Exception e) {
System.err.print("Impossible to close the ResultSet");
log.severe(e.getMessage());
}
}
}

private void closeStatement(Statement stmt) {


if (stmt != null) {
try {
stmt.close();
} catch (Exception e) {
System.err.print("Impossible to close the Statement");
log.severe(e.getMessage());
}
}
}

private void closeConection() {


if (cnx != null) {
try {
cnx.close();
} catch (Exception e) {
System.err.print("Impossible to close the conection");
log.severe(e.getMessage());
}
}
}

public static void main(String[] args) {


testSave();
testListBetweenDates();
}

private static void testSave() {


Measure measure = new Measure();

76
6.2 Códigos

measure.setCreatedOn(new Date());
measure.setRelativeHumidity(88.0f);
measure.setTemperature(12.0f);
measure.setWindDirection(1);
measure.setWindSpeed(0.0f);
MeasureDB measureDB = new MeasureDB();
measureDB.save(measure);
}

private static void testListBetweenDates() {


SimpleDateFormat formatter =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String startString = "2013-10-26 09:03:44";
//String endString = "2013-10-26 09:18:13";

try {
Date start=formatter.parse(startString);
//Date end = formatter.parse(endString);
Date end = new Date();

MeasureDB measureDB = new MeasureDB();


List<Measure> measures = measureDB.listBetweenDates(start, end);

for (Measure measure : measures) {


System.out.print(measure.getId() + " ");
System.out.print(measure.getCreatedOn() + " ");
System.out.print(measure.getRelativeHumidity() + " ");
System.out.print(measure.getTemperature() + " ");
System.out.print(measure.getWindDirection() + " ");
System.out.print(measure.getWindSpeed() + " ");
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
}
}

6.2.3. Clase MeasureDB


package pdem.persistence;

import java.sql.Connection;

77
6 Anexos

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Logger;

import pdem.model.Measure;

public class MeasureDB {

private final static Logger log =


Logger.getLogger(MeasureDB.class.getName());

private static final String bd = "pdem";


private static final String user = "pdem";
private static final String pass = "pdem";
private static final String server = "jdbc:mysql://localhost/" + bd;
private static DateFormat sdf =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private Connection cnx;

public void deleteBetweenDates(Date start, Date end) {


String sql = "delete from measure " +
"where created_on between ’%s’ and ’%s’";
sql = String.format(sql, sdf.format(start), sdf.format(end));
try {
openConection();
Statement stm = cnx.createStatement();
stm.executeUpdate(sql);
closeStatement(stm);
closeConection();
} catch (SQLException e) {
log.severe(e.getMessage());
}
}

public List<Measure> listBetweenDates(Date start, Date end) {

78
6.2 Códigos

List<Measure> measures = new ArrayList<>();


String sql = "select * from measure " +
"where created_on between ’%s’ and ’%s’";
sql = String.format(sql, sdf.format(start), sdf.format(end));
try {
openConection();
Statement stm = cnx.createStatement();
ResultSet rst = stm.executeQuery(sql);
while (rst.next()) {
Measure m = new Measure();
m.setId(rst.getInt("id"));
m.setCreatedOn(rst.getTimestamp("created_on"));
m.setRelativeHumidity(rst.getFloat("relative_humidity"));
m.setTemperature(rst.getFloat("temperature"));
m.setWindDirection(rst.getInt("wind_direction"));
m.setWindSpeed(rst.getFloat("wind_speed"));
measures.add(m);
}
closeResultSet(rst);
closeStatement(stm);
closeConection();
} catch (SQLException e) {
log.severe(e.getMessage());
}
return measures;
}

public List<Measure> listNormalizedBetweenDates(Date start, Date end) {


List<Measure> measures = new ArrayList<>();
String sql = "select * from normalized_measure " +
"where created_on between ’%s’ and ’%s’";
sql = String.format(sql, sdf.format(start), sdf.format(end));
try {
openConection();
Statement stm = cnx.createStatement();
ResultSet rst = stm.executeQuery(sql);
while (rst.next()) {
Measure m = new Measure();
m.setId(rst.getInt("id"));
m.setCreatedOn(rst.getTimestamp("created_on"));
m.setRelativeHumidity(rst.getFloat("relative_humidity"));
m.setTemperature(rst.getFloat("temperature"));
m.setWindDirection(rst.getInt("wind_direction"));

79
6 Anexos

m.setWindSpeed(rst.getFloat("wind_speed"));
measures.add(m);
}
closeResultSet(rst);
closeStatement(stm);
closeConection();
} catch (SQLException e) {
log.severe(e.getMessage());
}
return measures;
}

public void save(Measure measure) {


String sql = "insert into measure (created_on, relative_humidity," +
"temperature, wind_direction, wind_speed) " +
"values (’%s’, %f, %f, %d, %f)";
sql = String.format(sql, sdf.format(measure.getCreatedOn()),
measure.getRelativeHumidity(),measure.getTemperature(),
measure.getWindDirection(), measure.getWindSpeed());
try {
openConection();
Statement stm = cnx.createStatement();
stm.executeUpdate(sql);
closeStatement(stm);
closeConection();
} catch (SQLException e) {
log.severe(e.getMessage());
}
}

public void saveNormalized(Measure measure) {


String sql = "insert into normalized_measure (created_on, " +
"relative_humidity, temperature, wind_direction," +
"wind_speed) values (’%s’, %f, %f, %d, %f)";
sql = String.format(sql, sdf.format(measure.getCreatedOn()),
measure.getRelativeHumidity(),measure.getTemperature(),
measure.getWindDirection(), measure.getWindSpeed());
try {
openConection();
Statement stm = cnx.createStatement();
stm.executeUpdate(sql);
closeStatement(stm);

80
6.2 Códigos

closeConection();
} catch (SQLException e) {
log.severe(e.getMessage());
}
}

private void openConection() {


try {
Class.forName("com.mysql.jdbc.Driver");
cnx = DriverManager.getConnection(server, user, pass);
} catch (Exception e) {
System.out.println("Conection failed");
log.severe(e.getMessage());
}
}

private void closeResultSet(ResultSet rs) {


if (rs != null) {
try {
rs.close();
} catch (Exception e) {
System.err.print("Impossible to close the ResultSet");
log.severe(e.getMessage());
}
}
}

private void closeStatement(Statement stmt) {


if (stmt != null) {
try {
stmt.close();
} catch (Exception e) {
System.err.print("Impossible to close the Statement");
log.severe(e.getMessage());
}
}
}

private void closeConection() {


if (cnx != null) {
try {
cnx.close();
} catch (Exception e) {

81
6 Anexos

System.err.print("Impossible to close the conection");


log.severe(e.getMessage());
}
}
}

public static void main(String[] args) {


testSave();
testListBetweenDates();
}

private static void testSave() {


Measure measure = new Measure();
measure.setCreatedOn(new Date());
measure.setRelativeHumidity(88.0f);
measure.setTemperature(12.0f);
measure.setWindDirection(1);
measure.setWindSpeed(0.0f);
MeasureDB measureDB = new MeasureDB();
measureDB.save(measure);
}

private static void testListBetweenDates() {


SimpleDateFormat formatter =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String startString = "2013-10-26 09:03:44";
//String endString = "2013-10-26 09:18:13";

try {
Date start=formatter.parse(startString);
//Date end = formatter.parse(endString);
Date end = new Date();

MeasureDB measureDB = new MeasureDB();


List<Measure> measures = measureDB.listBetweenDates(start, end);

for (Measure measure : measures) {


System.out.print(measure.getId() + " ");
System.out.print(measure.getCreatedOn() + " ");
System.out.print(measure.getRelativeHumidity() + " ");
System.out.print(measure.getTemperature() + " ");
System.out.print(measure.getWindDirection() + " ");
System.out.print(measure.getWindSpeed() + " ");

82
6.3 C++ Arduino

System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
}
}

6.3. C++ Arduino


#include <SPI.h>
#include <Ethernet.h>

const boolean DEBUG = false;


const boolean PRINT_MEASURE = false;
const boolean PRINT_REQUEST = false;
const boolean PRINT_RESPONSE = false;
const boolean SEND_REQUEST = true;
const unsigned long INTERVAL_MEASURE = 1 * 1000;
const unsigned long INTERVAL_MEASURE_WIND = 500;
const float REAL_INTERVAL = 2.0 * 1000.0 / INTERVAL_MEASURE_WIND;
const int NUMBER_OF_TICKS = 36;
const float RADIO_VANE = 0.47;
const float MEASURES_FOR_AVG = 100;
const String NEW_LINE = "\n";

// config for pins


const int PIN_RELATIVE_HUMIDITY = A13;
const int PIN_TEMPERATURE1 = A14;
const int PIN_TEMPERATURE2 = A15;
const int PIN_WIND_SPEED = 48;

const int PIN_ES = 40;


const int PIN_NE = 42;
const int PIN_NO = 44;
const int PIN_NW = 46;
const int PIN_WE = 22;
const int PIN_SW = 24;
const int PIN_SO = 26;
const int PIN_SE = 28;

// codes for directions


const int DIR_ES = 0;

83
6 Anexos

const int DIR_NE = 1;


const int DIR_NO = 2;
const int DIR_NW = 3;
const int DIR_WE = 4;
const int DIR_SW = 5;
const int DIR_SO = 6;
const int DIR_SE = 7;

byte MAC[] = {0x90,0xA2,0xDA,0x0E,0xAC,0x29};


//IPAddress SERVER(192, 168, 2, 113);
//IPAddress SERVER(192, 168, 2, 142);
IPAddress SERVER(192, 168, 1, 1);
//char SERVER[] = "bereland";
//char SERVER[] = "rlyeh";
const int PORT = 8080;

EthernetClient client;
// last time there was a successful send, in milliseconds
unsigned long lastSuccessfulSend = 0;

// variables for the measure


float relativeHumidity;
float temperature;
int windDirection;
float windSpeed;

void setup() {
// pin configuration
pinMode(PIN_RELATIVE_HUMIDITY, INPUT);
pinMode(PIN_TEMPERATURE1, INPUT);
pinMode(PIN_TEMPERATURE2, INPUT);
pinMode(PIN_WIND_SPEED, INPUT);
pinMode(PIN_ES, INPUT);
pinMode(PIN_NE, INPUT);
pinMode(PIN_NO, INPUT);
pinMode(PIN_NW, INPUT);
pinMode(PIN_WE, INPUT);
pinMode(PIN_SW, INPUT);
pinMode(PIN_SO, INPUT);
pinMode(PIN_SE, INPUT);

// start serial port


Serial.begin(9600);
// give the ethernet module time to boot up:

84
6.3 C++ Arduino

delay(1000);
if(SEND_REQUEST) {
// start the Ethernet connection
Ethernet.begin(MAC);
// print the Ethernet board/shield’s IP address:
print("Arduino ");
println(Ethernet.localIP());
println();
}
}

void loop() {
// response could return at any moment
if(PRINT_RESPONSE)
printResponse();

if(millis() - lastSuccessfulSend > INTERVAL_MEASURE) {


takeMeasure();
sendMeasure();
}

// WIND DIRECTION
detectWindDirection();
}

void takeMeasure() {
// RELATIVE HUMIDITY & TEMPERATURE
float avgRh = 0, avgT = 0;
for(int i = 0; i < MEASURES_FOR_AVG; i++) {
avgRh += analogRead(PIN_RELATIVE_HUMIDITY);
avgT += analogRead(PIN_TEMPERATURE1);
avgT += analogRead(PIN_TEMPERATURE2);
detectWindDirection();
}
relativeHumidity = (avgRh / MEASURES_FOR_AVG) * 500.0 / 3.3 / 1024;
temperature = (avgT / (2.0 * MEASURES_FOR_AVG)) * 500.0 / 1024;

// RELATIVE HUMIDITY & TEMPERATURE


//relativeHumidity = 60 + random(0, 100) / 100.0;
//temperature = 25 + random(0, 100) / 100.0;

// WIND SPEED
//measure.windSpeed = random(0, 10000) / 100.0;
int ticks = 0;

85
6 Anexos

boolean previousStatus = digitalRead(PIN_WIND_SPEED), currentStatus;


unsigned long start = millis();

while(millis() - start < INTERVAL_MEASURE_WIND) {


currentStatus = digitalRead(PIN_WIND_SPEED);
if(currentStatus != previousStatus) {
previousStatus = currentStatus;
ticks++;
// WIND DIRECTION
detectWindDirection();
}
}

float rps = (ticks * 4.0 / NUMBER_OF_TICKS) / REAL_INTERVAL;


//Serial.println(rps * 60);
windSpeed = 2 * 3.1416 * RADIO_VANE * rps / 0.2777;
}

void detectWindDirection() {
//windDirection = (int) random(0, 8);
if(digitalRead(PIN_ES))
windDirection = DIR_ES;
else if(digitalRead(PIN_NE))
windDirection = DIR_NE;
else if(digitalRead(PIN_NO))
windDirection = DIR_NO;
else if(digitalRead(PIN_NW))
windDirection = DIR_NW;
else if(digitalRead(PIN_WE))
windDirection = DIR_WE;
else if(digitalRead(PIN_SW))
windDirection = DIR_SW;
else if(digitalRead(PIN_SO))
windDirection = DIR_SO;
else if(digitalRead(PIN_SE))
windDirection = DIR_SE;
}

void sendMeasure() {
String request = buildRequest();
if(SEND_REQUEST) {
// if there’s a successful connection
println("connecting to server...");
if (client.connect(SERVER, PORT)) {

86
6.3 C++ Arduino

println("sending request");
// send the HTTP PUT request
if(PRINT_REQUEST)
println(request);
client.println(request);
// take the time of this send
lastSuccessfulSend = millis();
client.stop();
} else {
// if you couldn’t make a connection
println("connection failed, stopping");
client.stop();
}
} else {
lastSuccessfulSend = millis();
}
}

String buildRequest() {
// rouding to two decimals
relativeHumidity = floor(relativeHumidity * 100) / 100.0;
temperature = floor(temperature * 100) / 100.0;
windSpeed = floor(windSpeed * 100) / 100.0;

char relativeHumidityChar[8], temperatureChar[8], windSpeedChar[8];


dtostrf(relativeHumidity, 3, 2, relativeHumidityChar);
dtostrf(temperature, 3, 2, temperatureChar);
dtostrf(windSpeed, 3, 2, windSpeedChar);

String data = "{’measure’:{";


data += "’relativeHumidity’:" + String(relativeHumidityChar) + ",";
data += "’temperature’:" + String(temperatureChar) + ",";
data += "’windDirection’:" + String(windDirection) + ",";
data += "’windSpeed’:"+ String(windSpeedChar);
data += "}}";

if(PRINT_MEASURE)
println(data);

String req = "POST /pdem/measure/save HTTP/1.1" + NEW_LINE;


req += "Host: " + String(SERVER) + ":" + String(PORT) + NEW_LINE;
req += "User-Agent: Arduino/1.0" + NEW_LINE;
req += "Connection: close" + NEW_LINE;
req += "Content-Type: application/json;" + NEW_LINE;
req += "Content-Length: ";

87
6 Anexos

req += data.length();
req += NEW_LINE + NEW_LINE;
req += data;
req += NEW_LINE;

return req;
}

void printResponse() {
if(client.available()) {
println("response");
String res = "";
while(client.available())
res += (char) client.read();
print(res);
}
}

// wrappres for debug


void print(float f) { if(DEBUG) Serial.print(f); }
void print(int i) { if(DEBUG) Serial.print(i); }
void print(String s) { if(DEBUG) Serial.print(s); }
void println() { if(DEBUG) Serial.println(); }
void println(float f) { if(DEBUG) Serial.println(f); }
void println(int i) { if(DEBUG) Serial.println(i); }
void println(String s) { if(DEBUG) Serial.println(s); }
void println(IPAddress ip) { if(DEBUG) Serial.println(ip); }

88

También podría gustarte