You are on page 1of 88

Instituto Politecnico Nacional

Escuela Superior de Ingeniera Mecanica y


Electrica

Prototipo Didactico de una Estacion


Meteorologica Monitoreada a Distancia

TESIS
PARA OBTENER EL TITULO DE:
Ingeniera en Comunicaciones y Electronica
(Especialidad Computacion)

PRESENTA
Berenice Montalvo Lezama

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

2013
Indice general

Resumen 4

Indice de figuras 5

1. Antecedentes 9
1.1. Planteamiento del Problema . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2. Objetivo General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3. Objetivos Especficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4. Justificacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5. Estado del Arte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5.1. Monitoreo de una estacion meteorologica va internet . . . . . . . . 10
1.5.2. Estacion Meteorologica Vantage Pro2 . . . . . . . . . . . . . . . . . 11
1.5.3. Estacion Meteorologica Crystal Moments CW101 . . . . . . . . . . 12

2. Marco Teorico 15
2.1. Estaciones Meteorologcas . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.1. Origen de la Meteorologa . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.2. Estacion Meteorologica . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.3. Variables Meteorologicas . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.4. Clasificacion de las Estaciones Meteorologicas . . . . . . . . . . . . 16
2.1.5. Componentes de una Estacion Meteorologica . . . . . . . . . . . . . 18
2.1.6. Veleta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2. Tecnologas de Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2.1. Microcontrolador . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2.2. Sensores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.3. Sensores Meteorologicos . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3. Tecnologas de Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3.1. Sistemas de gestion de bases de datos . . . . . . . . . . . . . . . . . 25
2.3.2. Plataforma de programacion . . . . . . . . . . . . . . . . . . . . . . 25

3. Desarrollo 29
3.1. Desarrollo del Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1.1. Anemometro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1.2. Veleta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1.3. Termometro e higrometro . . . . . . . . . . . . . . . . . . . . . . . 38
3.1.4. Tarjeta Principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.1.5. Proteccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.1.6. Base para la Estacion Meteorologica . . . . . . . . . . . . . . . . . 42

3
Indice general

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


3.2.1. Componente de Medicion . . . . . . . . . . . . . . . . . . . . . . . 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. Estimacion 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. Codigos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 consistio en el diseno y construccion de una estacion meteorologica la cual
es monitoreada de forma remota.El software para el monitoreo permite dar a conocer las
variables meteorologicas medidas por la estacion las cuales son temperatura, humedad,
velocidad y direccion del viento.

5
Indice de figuras
1.1. Estacion meteorologica Vantage Pro2. . . . . . . . . . . . . . . . . . . . . . 11
1.2. Consola de la estacion meteorologica Vantage Pro2. . . . . . . . . . . . . . 12
1.3. Estacion Meteorologica Crystal Moments CW101. . . . . . . . . . . . . . . 13

2.1. Clasificacion de las Estaciones Meteorologicas. . . . . . . . . . . . . . . . . 16


2.2. Anemometro de empuje. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3. Anemometro de efecto Doppler. . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4. Anemometro de rotacion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.5. Veleta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.6. Arduino AT Mega 2560. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.7. Escudo Arduino Ethernet. . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.8. Motor electrico sin escobillas. . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.1. Diagrama del prototipo didactico de la estacion meteorologico. . . . . . . . 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 anemometro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.6. Anemometro ensamblado. . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.7. Circunferencia para area de sensado. . . . . . . . . . . . . . . . . . . . . . 32
3.8. Sensor Optico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.9. Configuracion del sensor optico. . . . . . . . . . . . . . . . . . . . . . . . . 33
3.10. Conexion del sensor optico. . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.11. Diseno de la tarjeta de circuito impreso para el anemometro. . . . . . . . . 34
3.12. Tarjeta para medir la rotacion del anemometro . . . . . . . . . . . . . . . . 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. Diseno de la tarjeta de circuito impreso para la veleta . . . . . . . . . . . . 37
3.17. Tarjeta para detectar la orientacion de la veleta. . . . . . . . . . . . . . . . 37
3.18. Sensor de Temperatura LM35. . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.19. Diagrama de configuracion para rango completo del sensor de temperatura 39
3.20. Configuracion del LM35 con un rango de -55 a 155 grados centgrados. . . 39
3.21. Sensor de Humedad HMZ433A. . . . . . . . . . . . . . . . . . . . . . . . . 40
3.22. Diseno de la tarjeta de circuito impreso del termometro e higrometro. . . . 40
3.23. Tarjeta para medir la humedad y temperatura. . . . . . . . . . . . . . . . . 41
3.24. Diseno de la tarjeta de circuito impreso principal. . . . . . . . . . . . . . . 41
3.25. Tarjeta principal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

7
Indice de figuras

3.26. Modulo de proteccion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42


3.27. Patas Niveladoras. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.28. Niveles de burbuja. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.29. Brujula. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.30. Diagrama de flujo del componente de medicion. . . . . . . . . . . . . . . . 45
3.31. Diagrama de clases resumido. . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.32. Diagrama entidad relacion 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. Grafica de la temperatura en con mediciones de tiempo real. . . . . . . . . 49
3.37. Instrumentos de medicion. . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.38. Grafica de promedios de temperatura. . . . . . . . . . . . . . . . . . . . . . 49

4.1. Funcionamiento del prototipo didactico de la estacion meteorologica moni-


toreado de forma remota. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.2. Grafica comparativa de humedad. . . . . . . . . . . . . . . . . . . . . . . . 52
4.3. Grafica comparativa de temperatura. . . . . . . . . . . . . . . . . . . . . . 52
4.4. Grafica 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 climaticas es de suma importancia en la agricultura,
la navegacion y la vida en general.
La meteorologa estudia los cambios atmosfericos que se producen a cada momento
utilizando parametros como: temperatura del aire, humedad, presion atmosferica y preci-
pitaciones pluviales.
El clima es un conjunto de fenomenos meteorologicos que caracterizan las condicio-
nes habituales o mas probables de un punto determinado de la superficie terrestre. Las
estaciones meteorologicas son instalaciones cuyo proposito es medir y registrar variables
meteorologicas las cuales son temperatura, presion atmosferica, humedad relativa del aire,
pluviosidad, velocidad y direccion del viento . Los instrumentos mediante los cuales se
obtiene la medicion de las variables antes mencionadas son los siguientes, el termometro,
el barometro, pluviometro, anemometro y la veleta.
Las estaciones meteorologicas pueden ser: manuales o automaticas. Las primeras son
monitoreadas por personal altamente capacitado, mientras que las estaciones meteorologi-
cas automaticas nos permiten monitorearlas a distancia, en este tipo de instalaciones la
senal se procesa mediante la tecnologa de microcontroladores y microprocesadores para
ser enviada a traves de un sistema de comunicacion.
Las estaciones meteorologicas tienen un amplio campo de aplicacion como lo es en
aeronautica, agricultura, navegacion 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 construccion de un prototipo de estacion meteorologica
la cual sera monitoreada a distancia.

1.1. Planteamiento del Problema


El conocimiento de las variaciones climaticas es de gran utilidad para el ser humano ya
que le permite realizar ciertas tareas sabiendo que no le seran 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 climatologicos son dados por zonas en general y no de forma especifica lo
que genera problemas para la realizacion de ciertas actividades como son la agricultura y
navegacion, donde el clima juega un papel muy importante.

1.2. Objetivo General


Disenar y construir un prototipo didactico de una estacion meteorologica la cual sera
monitoreada a distancia.

9
1 Antecedentes

1.3. Objetivos Especficos


Disenar y construir tarjetas electronicas para medir las variables meteorologicas:
humedad relativa, temperatura, direccion y velocidad del viento.

Disenar y construir un prototipo de estacion meteorologica usando estas tarjetas.

Disenar e implementar el software necesario para registrar las mediciones de las


variables meteorologicas.

Disenar e implementar el software necesario para monitorear las mediciones de las


variables meteorologicas.

1.4. Justificacion
La estacion meteorologica brindara datos del clima especficamente en el lugar donde sea
implementada. La importancia de estos datos es vital, dado que los microclimas generados
en cada lugar por montes, montanas, sierras, lagos y lagunas, no necesariamente se ven
reflejados en los informes del clima para zonas en general. A traves de su exclusivo software
de procesamiento de datos, la estacion meteorologica proporcionara informacion relevante
con la que se podra tomar decisiones y acciones de forma mas certera.
El desarrollo del prototipo de la estacion meteorologica con monitoreo remoto, permi-
tira aplicar los conocimientos adquiridos a lo largo de la carrera de Ingeniera en Comuni-
caciones y Electronica. En el desarrollo de la estacion meteorologica se aplicaran conoci-
mientos de ciertas asignaturas, las cuales forman parte fundamental para el desarrollo del
proyecto como son Fsica, Maquinas Electricas, Microprocesadores, Programacion, Elec-
tricidad y Magnetismo, Teoremas de circuitos, Electronica digital, Sistemas en Tiempo
Real, Lenguajes de Internet y Rede.

1.5. Estado del Arte


A continuacion se presentaran las estaciones meteorologicas actuales as como tambien
los trabajos que se han desarrollado hasta ahora.

1.5.1. Monitoreo de una estacion meteorologica va internet


Un proyecto realizado en la Universidad Autonoma de Zacatecas en el 2009, consistio en
la construccion de un sistema electronico para la captura, transmision y despliegue de
datos a distancia de una estacion meteorologica.
Las mediciones de las variables meteorologicas se realizaron mediante sensores los cua-
les se conectaron a un microcontrolador PIC16F877A el cual realizo la captura y digi-
talizacion de las senales analogicas de los sensores para poder llevar acabo la etapa de
transmision.La etapa de recepcion fue compuesta de un circuito receptor y un microcon-
trolador PIC16F84A encargado de enviar los datos a la tarjeta de adquisicion NI-ELVIS
que permitio hacer la comunicacion con la PC.

10
1.5 Estado del Arte

Para la construccion 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 informacion
enviada a la tarjeta de adquisicion, interpretar y crear una base de datos. Finalmente los
datos fueron desplegados en una pagina web.

1.5.2. Estacion Meteorologica Vantage Pro2


Vantage Pro2 es una estacion meteorologica desarrollada por la empresa Davis Instru-
ments.
Vantage Pro2 es resistente a la corrosion y a las inclemencias del tiempo, posee un
panel solar que alimenta los sensores durante el da tambien a la vez que carga una
batera interna que proporciona energa por la noche.
La consola permite visualizar todas las variables meteorologicas de forma simultanea y
configurar la estacion sin necesidad de un ordenador. Esta estacion presenta un comodo
teclado y una pantalla LCD de 15 x 9 cm con retroiluminacion.

Figura 1.1. Estacion meteorologica Vantage Pro2.

Las variables meteorologicas que se obtienen mediante esta estacion son las siguientes:

Velocidad y direccion del viento.

Temperatura y humedad interior y exterior.

Temperatura de sensacion y punto de roco.

Lluvia actual y acumulada diaria, mensual y anual.

Intensidad de lluvia.

Presion atmosferica actual y tendencia.

11
1 Antecedentes

Pronostico meteorologico.

Fase lunar y hora de puesta y salida del sol.

En la pantalla de esta estacion se muestran los graficos con datos de las ultimas 24
horas, das o meses.

Figura 1.2. Consola de la estacion meteorologica Vantage Pro2.

Tambien es posible la configuracion de mas de 70 alarmas simultaneas para alertar de


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

1.5.3. Estacion Meteorologica Crystal Moments CW101

La estacion Meteorologica CW101 desarrollada por la empresa Oregon Scientific posee


un diseno elegante y original.
Algunas de las caractersticas que posee esta estacion meteorologica son reloj radio
controlado, panel retro-iluminado, icono del pronostico iluminado con luz LED.
La estacion meteorologica CW101 consta de figurines de metacrilato tallados con sis-
tema laser que se encienden de diferentes colores para la visualizacion facil e inmediata
de las previsiones meteorologicas.Posee sensores infrarrojos que con un movimiento de la
mano puede cambiar la informacion en pantalla sin necesidad de pulsar ninguna tecla.
Este dispositivo consta de la base, acabado en negro que muestra la informacion de tiempo
y temperatura, la parte superior con tres figurines meteorologicos.

12
1.5 Estado del Arte

Figura 1.3. Estacion Meteorologica Crystal Moments CW101.

13
2 Marco Teorico
En este capitulo se abordaran de manera general los aspectos considerados para desa-
rrollo de este proyecto. En la primera seccion se describe la teora relacionada a las esta-
ciones meteorologicas. En siguientes secciones se describen las herramientas de hardware
y software utilizadas para el desarrollo e implementacion.

2.1. Estaciones Meteorologcas


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

2.1.1. Origen de la Meteorologa


Desde epocas antiguas el hombre por necesidad de supervivencia, se convirtio en un
observador de su medio ambiente, los fenomenos atmosfericos 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
fenomenos.
La agricultura comenzo en el ano 5,000 y con ella surgio la observacion aplicada de
los fenomenos meteorologicos. El hombre prehistorico tomo en cuenta los factores meteo-
rologicos y climaticos, tales como la lluvia y la temperatura, para su produccion agrcola
y para escoger su habitat.
En la antiguedad, el hombre dedicaba gran parte del tiempo a observar las caractersti-
cas de los fenomenos naturales que lo afectaban, de modo que los poda usar para su
beneficio.El tiempo meteorologico tenia gran importancia para las actividades diurnas y
era un factor determinante para la alimentacion e incluso supervivencia de ese hombre
prehistorico.

2.1.2. Estacion Meteorologica


Una estacion meteorologica es una instalacion la cual tiene como objetivo, medir y
registrar variables meteorologicas.

2.1.3. Variables Meteorologicas


Las variables meteorologicas mas importantes son temperatura, humedad, presion at-
mosferica, precipitacion pluvial, velocidad y direccion del viento, estas variables son me-
didas mediante instrumentos como pluviometro, termometro, barometro, anemometro,
veleta, entre otros [breneselementos1995].

15
2 Marco Teorico

Temperatura
La temperatura es una de las magnitudes mas utilizadas para describir el estado de la
atmosfera, vara entre el da y la noche, entre una estacion y otra, y tambien entre una
ubicacion geografica y otra.
Es una magnitud relacionada con la rapidez del movimiento de las partculas que cons-
tituyen la materia. Cuanta mayor agitacion presenten estas, mayor sera la temperatura.
El instrumento que se utiliza para medir la temperatura se llama termometro 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 atmosferica debido a que esta afecta en el efecto
invernadero y fenomenos como sublimacion y condensacion, para realizar la medicion de
esta variable meteorologica es empleado el higrografo [breneselementos1995].

Presion Atmosferica
La presion armosferica es el peso que ejerce el aire en la Tierra y por lo cual tambien
ejerce una fuerza sobre todos los cuerpos debidos a la accion de la gravedad. La presion
atmosferica depende de muchas variables, sobre todo de la altitud. Cuanto mas arriba en
la atmosfera nos encontremos, la cantidad de aire por encima de nosotros sera menor.

Direccion del viento


La direccion 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 anemometro, que
suele registrar dicha direccion y rapidez a lo largo del tiempo.

2.1.4. Clasificacion de las Estaciones Meteorologicas


Las estaciones meteorologicas se clasifican de acuerdo a la aplicacion [breneselementos1995]
como se muestra en la figura 2.1

Figura 2.1. Clasificacion de las Estaciones Meteorologicas.

16
2.1 Estaciones Meteorologcas

Climatologicas
Una estacion climatologica es un area destinada a la obtencion y medicion de los datos
generados por instrumentos que registran los distintos fenomenos meteorologicos que se
producen en la atmosfera.
Las observaciones que se efectuan se realizan en forma horaria remitiendolas inmedia-
tamente a un centro recolector de datos, mediante mensajes codificados, por la va de
comunicacion mas rapida disponible. Estas observaciones se utilizan para una gran canti-
dad de fines meteorologicos, en general en tiempo real y especialmente para la elaboracion
de mapas meteorologicos.
Este tipo de estacion meteorologica se puede encontrar en hogares, casas de campo,
ranchos escuelas, etc.

Agrcolas
Una estacion agroclimatica tiene como objetivo el proporcionar datos que permitan un
conocimiento de las condiciones del clima en relacion con el desarrollo y crecimiento de
los cultivos y su manejo.
El desarrollo tecnologico ha permitido demostrar que la variacion del clima afecta la
mayora de los procesos fsicos y biologicos que determinan la calidad y cantidad de la
produccion agrcola. Conocer el clima oportunamente o con anticipacion suficiente es
necesario para mejorar la produccion o reducir efectos adversos para el cultivo.
El utilizar de manera oportuna y apropiada los registros climatologicos permite los
siguientes beneficios agrcolas:

a) Realizar un riego eficiente.

b) Mejorar la fertilizacion durante el desarrollo de la planta.

Estos beneficios representan para el agricultor mayor produccion, menor costo de cul-
tivo, mayor superficie cultivable, producto de mayor calidad, todo lo cual significa en
terminos finales, mayor ganancia, menores gastos o menos problemas para el productor
agrcola y la poblacion en general.

Especiales
Este tipo de estaciones meteorologicas son las encargadas de medir variables en mares
y oceanos. Estas instalaciones son mas especializadas ya que poseen instrumentos de
sondeo como radares meteorologicos para medir la turbulencia atmosferica y la actividad
de tormentas, perfiladores de viento y sistemas acusticos de sondeo de la estructura vertical
de temperaturas.

Aeronauticas
Las estaciones aeronauticas tienen su aplicacion en aeropuertos y aerodromos civiles o
militares, estas realizan mediciones climaticas las cuales se efectuan en varias horas del
da y son enviadas inmediatamente a un centro recolector de datos, estas observaciones

17
2 Marco Teorico

se transmiten a otros aerodromos y los aviones en vuelo, con la finalidad de contribuir


y proveer un normal desarrollo de la navegacion aerea segura. En caso de un desastre
natural, por medio de la estacion se provee informacion indispensable que permita tomar
medidas necesarias para una rapida busqueda y salvamento de los posibles sobrevivientes.
La disponibilidad de informacion meteorologica fiable es un factor decisivo para las
operaciones de vuelo y en particular para la eleccion de la ruta y nivel de vuelo. Esta
informacion permite reducir la carga de combustible y el tiempo de duracion 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 meteorologicas aeronauticas son de:
temperatura del aire, punto de roco, direccion y fuerza del viento, presion barometrica,
precipitacion, alcance visual en la pista y sensor para medir la altitud de las nubes.

Satelitales
Un satelite meteorologico es un tipo de satelite artificial que se utiliza principalmente
para supervisar el tiempo atmosferico y el clima de la Tierra. La configuracion basica de
un satelite meteorologico, consiste en una camara con la funcion de fotografiar electroni-
camente los sistemas nubosos. La informacion recibida es enviada rapidamente a la Tierra,
debido a que las condiciones meteorologicas pueden variar en poco tiempo. La transmision
de estas imagenes, permiten la suficiente resolucion para el trabajo meteorologico.
Los dos tipos basicos de satelites meteorologicos, dependiendo de su orbita son los
geoestacionarios y los polares.

2.1.5. Componentes de una Estacion Meteorologica


Los instrumentos que forman una estacion meteorologica va de acuerdo a la aplica-
cion que se desee darle, principalmente una estacion esta compuesta de los siguientes
instrumentos anemometro, veleta, barometro, termistor y pluviometro.

Anemometro
Es un instrumento que forma parte de una estacion meteorologica el cual esta destinado
a medir la velocidad del viento. Los diferentes tipos de anemometros son los siguientes:

De efecto Doppler

De empuje.

De rotacion o de Robinson.

Anemometro de Empuje
El funcionamiento de este tipo de anemometro es el siguiente una superficie colocada
en la punta de un pendulo se coloca de frente al viento, el empuje producido por este,
levantara el pendulo de acuerdo a la velocidad del viento. Una escala apropiada, grabada

18
2.1 Estaciones Meteorologcas

en una superficie paralela al movimiento del pendulo servira como indicador usando el
propio pendulo como aguja indicadora [hidyvientos1960].

Figura 2.2. Anemometro de empuje.

Anemometro Doppler

Los anemometros Doppler de laser utilizan un haz de luz laser dividido en dos haces.
Las partculas 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 moleculas 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 partculas del aire cerca del
anemometro [vallinainstalaciones2010].

Figura 2.3. Anemometro de efecto Doppler.

19
2 Marco Teorico

Anemometro de Rotacion
Este anemometro es tambien 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 direccion del viento [iniecoprogramacion2011]. Este movi-
miento puede ir a un sensor dedicado a contar el numero de vuelta o mediante un pequeno
generador que de un voltaje que es proporcional a lo velocidad de giro. El primer sistema
nos dara el recorrido del viento, mientras que el segundo dara la velocidad instantanea,
como lo hace el indicador de velocidad de un automovil. Este tipo de anemometro es el
mas utilizado debido a su simplicidad y exactitud.
La cruz de cazoletas ABCD imprime un movimiento de rotacion al arbol EF el cual
transmite mediante un tornillo F la rueda dentada H se encarga de hacer mover la aguja
indicadora K.

Figura 2.4. Anemometro de rotacion.

2.1.6. Veleta
La veleta es un dispositivo el cual nos indica la direccion del viento [castilloagrometeorologi2001],
en su inicio tenan fines decorativos.
La direccion del viento se determina cuando la veleta gira y apunta la direccion de
donde proviene el viento.

Direccion. Es la pieza que indica el norte, sur, este y oeste.

20
2.2 Tecnologas de Hardware

Ornamento. Es la parte mas 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 demas partes de se conectan a
ella.

Cola. Es la pieza encargada de atrapar el viento.

Figura 2.5. Veleta.

2.2. Tecnologas de Hardware


A continuacion 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 despues ejecutarlos. El microcontrolador ejecuta el programa car-
gado en la memoria Flash. Esto se denomina el codigo ejecutable y esta compuesto por
una serie de ceros y unos, es decir, codigo binario. Dependiendo de la arquitectura del

21
2 Marco Teorico

microcontrolador, el codigo esta compuesto por palabras de 12, 14 o 16 bits de ancho.


Cada palabra se interpreta por la CPU como una instruccion 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 disenados para disminuir el costo, facilitar el proceso de desarrollo
de sistemas, as como tambien reducir el consumo de energa.
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, disenada para facilitar el uso de la electronica en
proyectos multidisciplinares.
El Arduino Mega es una version 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 analogica: 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 Tecnologas 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. Esta 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 estan alimentadas

LINK: Indica cuando existe un enlace de red y parpadea cuando la shield enva o
recibe datos

FULLD: indica que la conexion 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 fsicas o qumicas,
y transformarlas en variables electricas.

2.2.3. Sensores Meteorologicos


Los sensores meteorologicos son disenados para medir parametros ambientales.Algunos
de estos sensores son: humedad y temperatura.

23
2 Marco Teorico

Sensor de Temperatura

Los sensores de temperatura son dispositivos que transforman los cambios de tempera-
tura en cambios en senales electricas que son procesados por equipo electrico o electronico.

Sensor de Humedad

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


Este sensor puede ser utilizado tanto en interiores y exteriores. Los sensores de humedad
estan disponibles en formas tanto analogicas como digitales.

Sensor Optico

Los sensores opticos son dispositivos que funcionan con luz, este tipo de sensores poseen
tanto el emisor como el receptor en un mismo encapsulado.
Trabajan por reflexion 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 electrico sin escobillas

Este motor conocido tambien como brushlessse 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 friccion tampoco producen calor o ruido al contrario
aumentan su rendimiento y no requieren de mucho mantenimiento.

Figura 2.8. Motor electrico sin escobillas.

2.3. Tecnologas de Software


En esta seccion se describen las herramientas empleadas en el proyecto para el desarrollo
del software.

24
2.3 Tecnologas de Software

2.3.1. Sistemas de gestion de bases de datos


Un Sistema de Gestion de Bases de Datos (SGBD) es un conjunto de programas que
permiten la manipulacion de las bases de datos, es decir, el almacenamiento, modificacion
y extraccion de la informacion en una base de datos, ademas de proporcionar herramientas
para anadir, borrar, modificar y analizar los datos.
Los SGBD tambien proporcionan metodos para mantener la integridad de los datos,
para administrar el acceso de usuarios a los datos.

MySQL

MySQL es un sistema de gestion de bases de datos relacionales muy completo, multi-


plataforma y utilizado para aplicaciones web.
Este SGBD es ideal para la creacion de bases de datos con acceso desde paginas web
dinamicas, as como para la creacion de cualquier otra solucion que implique el almace-
namiento de datos, posibilitando realizar multiples y rapidas consultas.

2.3.2. Plataforma de programacion


A continuacion se describen los lenguajes de programacion y herramientas utilizadas.

Plataforma Java

Java es un lenguaje de programacion 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 [diazjava2003].
Los caractersticas mas importantes de Java son cinco, la programacion orientada a
objetos, la posibilidad de ejecutar un mismo programa en diversos sistemas operativos, la
inclusion por defecto de soporte para trabajo en red, la opcion de ejecutar el codigo 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 estan escritas en lenguaje de programacion Java
[speeglejdbc: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 programacion 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 ejecutandose 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 Teorico

Transferencia de Estado Representacional


Transferencia de Estado Representacional (REST) es una tecnica de arquitectura de
software y tiene sus inicios por el ano 2000. REST se refiere a una coleccion de principios
arquitectonicos por los cuales se disenan servicios web haciendo foco en los recursos del
sistema, incluyendo como se accede al estado de dichos recursos y como se transfieren por
HTTP hacia clientes escritos en diversos lenguajes [richardsonrestful2008]. REST
emergio en los ultimos anos como el modelo predominante para el diseno de servicios.
Una implementacion de un servicio web REST se caracteriza por cuatro principios
fundamentales:

Uso de metodos HTTP.

Prescindir del estado de la comunicacion.

Exponer URLs con forma de directorios

Transferencia de informacion mediante XML o JavaScript Object Notation (JSON).

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


lenguaje de programacion JavaScript. JSON es legible e independiente de la plataforma,
ademas de tener a su disposicion implementaciones en una amplia gama de lenguajes de
programacion.
La plataforma Java EE provee del estandar JAX-RS que nos permite el desarrollo de
sistemas usando la arquitectura REST. El servidor TomEE provee una implementacion
de este estandar.

Plataforma Web
HTML es el acronimo 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 caractersticas, con el fin de hacerlo mas eficiente y facilitar el desarrollo de
paginas web compatibles con distintos navegadores y plataformas.
Javascript es un lenguaje de programacion que se utiliza para la creacion de paginas
web dinamica [mazajavascript2012], gracias a su compatibilidad con la mayora de los
navegadores modernos, es un lenguaje de programacion 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 paginas web e interactuar de forma asncrona con el servidor en segun-
do plano sin necesidad de recargar las paginas, como ocurra en el modelo tradicional
[olsonajax2007].
Ajax es una tecnica valida para multiples plataformas y utilizable en muchos sistemas
operativos y navegadores dado que esta basado en estandares abiertos como JavaScript y
Document Object Model.

26
2.3 Tecnologas 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 programacion avanzada de aplicaciones, que aporta
una serie de funciones o codigos para realizar tareas habituales. Un framework son un
conjunto de libreras de codigo que contienen procesos o rutinas ya listos para usar. Se
emplean los frameworks para as no tener que desarrollar las tareas mas basicas, puesto
que en el propio framework ya hay implementaciones que estan probadas, funcionan y no
se necesitan volver a programar.
RGraph es una biblioteca basada en JavaScript gratuita y construida para graficos web.
RGraph crea los graficos de HTML5 en el navegador web utilizando JavaScript, lo que
significa paginas web mas rapidas y con menos carga del servidor web. Esto lleva a los
pequenos tamanos de pagina, menores costos y sitios web mas rapidos.

Herramientas de Software
Eclipse es una plataforma de desarrollo compuesta por un conjunto de herramientas de
programacion de codigo abierto multiplataforma. Esta plataforma, tpicamente ha sido
usada para desarrollar entornos de desarrollo integrados (del ingles 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 tambien 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 mayora de otros sistemas tipo Unix.

27
3 Desarrollo
En este apartado se describe el desarrollo hardware y software del prototipo de la
estacion meteorologica.

3.1. Desarrollo del Hardware


En la figura 3.1 se muestran los elementos que integran el prototipo de la estacion
meteorologica.

Figura 3.1. Diagrama del prototipo didactico de la estacion meteorologico.

En los apartados siguientes se describira cada uno de estos elementos.

3.1.1. Anemometro
Como ya se menciono el anemometro esta encargado de medir la velocidad del viento.
Para el desarrollo del proyecto se eligio el anemometro de Robinson pues posee buena
exactitud y no requiere de una orientacion.

29
3 Desarrollo

La eleccion de los materiales fue crucial en la construccion del dispositivo ya que estan
directamente relacionados con su buen funcionamiento, es decir, deben ser muy ligeros.
La construccion los elementos que componen el anemometro se describe continuacion:

Cazoletas: Fueron construidas por la mitad de un flotador plastico ver figura 3.2.

Figura 3.2. Cazoleta.

Varillas: Son las encargadas de soportar las cazoletas, se disenaron 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 anemometro y el otro a las cazoletas.

Figura 3.3. Varillas.

Estas varillas poseen una longitud de 32cm.

Eje: Este fue fabricado con un motor brushless el cual no posee escobillas, por lo
que se reduce la friccion 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 fue fijado a una tapa de PVC cuyo diametro es de 12cm ver figura 3.5.

30
3.1 Desarrollo del Hardware

Figura 3.5. Eje del anemometro.

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

Figura 3.6. Anemometro ensamblado.

En la parte inferior del motor fue fijado una circunferencia disenada de carton 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 area de sensado.

Para el desarrollo de la electronica del anemometro se empleo el sensor optico 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 Optico.

La conexion del sensor optico se muestra en la figura 3.9

32
3.1 Desarrollo del Hardware

Figura 3.9. Configuracion del sensor optico.

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 logica, es decir, este sistema se encarga de distinguir entre blanco y negro.
El diagrama esquematico es mostrado en la figura 3.10

Figura 3.10. Conexion del sensor optico.

El diseno de la tarjeta de circuito impreso para el anemometro es mostrado en la figura


3.11.

33
3 Desarrollo

Figura 3.11. Diseno de la tarjeta de circuito impreso para el anemometro.

La figura 3.12 muestra la tarjeta finalizada.

Figura 3.12. Tarjeta para medir la rotacion del anemometro .

La alimentacion de la tarjeta mostrada en la figura 3.11 se realizo con un jack rj45, esto

34
3.1 Desarrollo del Hardware

con la finalidad de facilitar la conexion.


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 direccion del viento por lo que una de sus
caractersticas primordiales es que al igual forma que el anemometro los materiales deben
ser muy ligeros.
La construccion de los elementos que componen la veleta es descrita continuacion:

Direccion y cola: Estas dos partes de la veleta se disenaron de sintra el cual es un


material ligero, rgido y resistente.

Varilla: Esta posee una dimension es de 60.5 cm y fue disenada de material plastico.

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 diametro.

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 electronica al igual que en el anemometro se emplearon sensores


opticos CNY70.Los cuales se encargan de notificar al microcontrolador cual es la direccion
de la veleta.
El diseno 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. Diseno de la tarjeta de circuito impreso para la veleta

El diseno de la tarjeta ya finalizada se muestra en la figura 3.17.

Figura 3.17. Tarjeta para detectar la orientacion de la veleta.

De igual forma que en el anemometro se diseno 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 orientacion de esta.

3.1.3. Termometro e higrometro


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

Figura 3.18. Sensor de Temperatura LM35.

Las principales caractersticas que presenta este sensor son las siguientes:

Calibrado en grados Celsius

La tension de salida es proporcional a la temperatura

Alimentacion 4-30 V

Rango configurable

Velocidad de Respuesta 40 microsegundos

Bajo costo

De acuerdo a la conexion 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 configuracion 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 configuracion deseada es de 10kilo ohms.

Figura 3.20. Configuracion del LM35 con un rango de -55 a 155 grados centgrados.

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


tener una medicion 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:

Alimentacion 5 V

Voltaje de Salida 0-3.3V

Rango 20-90 Humedad Relativa

El diseno de la tarjeta de circuito impreso para los sensores de temperatura y humedad


se muestra en la figura 3.22.

Figura 3.22. Diseno de la tarjeta de circuito impreso del termometro e higrometro.

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 conexion de las placas mostradas previamente se realizo el diseno de
una tarjerta de circuito impreso que permitiera la conexion de estas y su vez al microcon-
trolador arduino.
El diseno de la tarjeta de circuito impreso se muestra en la figura 3.24

Figura 3.24. Diseno 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. Proteccion
El modulo de proteccion fue disenado con el objetivo de resguardar el microcontrolador,
la tarjeta para medir la humedad y temperatura as como tambien para resguardar el
router.

Figura 3.26. Modulo de proteccion.

3.1.6. Base para la Estacion Meteorologica


La estacion meteorologica fue fijada a una base que posee por dimensiones 121x31
cm. Es fundamental que la estacion meteorologica 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 estacion se encuentre en condiciones
necesarias para su buen funcionamiento.

Figura 3.28. Niveles de burbuja.

Se fijo a la base de la estacion meteorologica una brujula, debido a que para comenzar
a realizar las mediciones es indispensable que la veleta apunte al norte.

43
3 Desarrollo

Figura 3.29. Brujula.

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 Medicion. Software que se ejecuta en la plataforma Arduino encar-


gado de realizar mediciones meteorologicas y reportarlas al componente de Servicios.

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


cenar y consultar las mediciones meteorologicas a los otros dos componentes.

Componente de Interfaz de Usuario. Software que proporciona una interfaz grafica


web que muestra las mediciones meteorologicas.

3.2.1. Componente de Medicion


Este software esta implementado en el lenguaje de programacion C sobre la plataforma
Arduino. Su funcion es realizar mediciones periodicas 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 medicion.

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, ademas, ejecuta un proceso que periodicamente 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 diseno de la base de datos se muestra en la figura 3.32.

Figura 3.32. Diagrama entidad relacion de la base de datos.

La funcion que cumplen las tablas es la siguiente:

measure. Almacena las mediciones que entregadas por el componente de Medicion.

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 medicion (URL/measure/save). Almacena una medicion 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 periodicos, cada 10


minutos de manera indefinida. En cada ejecucion el proceso realiza estas dos tareas:

Guardar medicion (URL/measure/save). Almacena una medicion 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 pestanas en las que se mues-
tran las mediciones. La primera pestana presenta las mediciones obtenidas en tiempo real
del hardware. En la figura 3.36 se muestra esta pestana.
.

Figura 3.36. Grafica de la temperatura en con mediciones de tiempo real.

En la parte inferior de la pestana se encuentran instrumentos que muestran los valores


correspondientes a la medicion al presionar un punto sobre la grafica.

Figura 3.37. Instrumentos de medicion.

En la segunda pestana se presenta una grafica que muestra los promedios de las medi-
ciones.

.
Figura 3.38. Grafica 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 didactico de la estacion me-
teorologica se puede observar en la figura 4.1

Figura 4.1. Funcionamiento del prototipo didactico de la estacion meteorologica monito-


reado de forma remota.

El bloque de estacion es el encargado de medir las variables meteorologicas para despues


mediante el microcontrolador ser enviadas al servidor y posteriormente ser reportadas en
la interfaz grafica.

51
4 Pruebas y resultados

4.2. Pruebas
Se realizo una comparativa entre las mediciones representativas generadas por el pro-
totipo y mediciones de un servicio meteorologico publico llamado OpenWeatherMap.
En la figura 4.2 se muestra grafica comparativa de las mediciones de humedad.

Figura 4.2. Grafica comparativa de humedad.

La grafica en azul nos muestra las mediciones obtenidas por OpenWeatherMap mientras
que la grafica en rojo nos muestra las mediciones obtenidas de la estacion.
En la figura 4.3 se muestra grafica comparativa de las mediciones de temperatura.

Figura 4.3. Grafica comparativa de temperatura.

52
4.3 Estimacion de costos

En la figura 4.4 se muestra grafica 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. Grafica 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 meteorologico OpenWeatherMap son muy similares.

4.3. Estimacion 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 tendra 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 disenar y construir componentes de hardware conformados por disposi-


tivos mecanicos y tarjetas electronicas que pudieran producir medidas fiables de las
variables meteorologicas propuestas.

Fue posible disenar e implementar un software para interactuar y registrar la infor-


macion producida por los componentes de hardware de forma exitosa.

Fue posible disenar 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 estacion meteorologica midiendo las cuatro variables
propuestas: humedad relativa, temperatura, direccion 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 60C 95% RH or Less
Storage Range -20 to 60C 95% RH or Less
Humidity Transmitting Range 30 to 90% RH
Accuracy at 25C(+0.5C) +5%RH (at 60%RH, Vin=5Vdc)
Humidity Output % RH 30 40 50 60 70 80 90
(At 25C, 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
15C 20C 25C 30C 35C 40C
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 LM35s 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 devices 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 devices 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 Codigos

6.2. Codigos
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 Codigos

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 Codigos

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 Codigos

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 Codigos

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 Codigos

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/shields 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 theres 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 couldnt 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