Propuesta

Descripción General

La aplicación desarrollada consta de varios módulos. A continuación se muestra un esquema general:

Esquemático

Todos los componentes de color naranjo representan dispositivos de hardware. Los componentes en gris representan software.

La dirección de las flechas indica el sentido de los flujos de información.

 

Descripción detallada

El sistema consta de un PC servidor, ubicado en el hogar, el cual debe permanecer encendido todo el tiempo. En éste corren 2 aplicaciones: 1 Servidor Apache Tomcat y una aplicación Java "TmoteSense".

TmoteSense se encarga de leer los datos que el sensor receptor envía al PC, por el puerto USB. Los datos (mediciones) enviadas se almacenan en una cola, de la cual TmoteSense lee. Posteriormente TmoteSense se conecta con la base de datos (MySQL) y va agregando los valores medidos en tablas separadas, y adjunta la hora de cada medición. En la implementación desarrollada se decidió enviar mediciones cada 1 segundo. TmoteSense guarda 1 de cada 10 mediciones.

TmoteSense se preocupa, también, de verificar que cada medición no supere los umbrales definidos por el usuario; En caso contrario se encarga de enviar un correo electrónico, haciendo uso de la clase Email, que envía correos con una cuenta Gmail. Los umbrales y la dirección de correo de notificación están almacenados en la base de datos, por lo que un cliente remoto puede hacer modificaciones en éstos, a través de la interfaz web, y así, TmoteSense puede cambiar su comportamiento.

TmoteSense genera una interfaz gráfica. A continuación se muestra un ejemplo:

Interfaz de TmoteSense

La interfaz cuenta con 3 campos de texto que muestran los valores de los umbrales de temperatura y luminosidad, y la dirección de correo de notificación. Estos campos son periódicamente refrescados, por lo que cualquier cambio en la base de datos será reflejado aquí.

Además se muestra un termómetro, que varía según las mediciones, y una imagen cuyo brillo es proporcional al valor actual de luminosidad.

 

Interfaz Web

La interfaz está desarrollada en JSP (Java Server Pages), tecnología similar a PHP, implementada en Java. Algunas de las razones de porqué se utilizó JSP son su gran estabilidad, y ser capaz de mezclar código Java para generar páginas dinámicas. Como es una tecnología de lado de servidor, el cliente sólo ve los resultados HTML que la página JSP devuelve, mejorando la seguridad.

La principal misión de la página JSP es mostrar los valores históricos de las mediciones, en distintas ventanas de tiempo.

Para generar los gráficos, la página JSP se conecta a la base de datos mediante la API de JDBC. De esta forma las mediciones son almacenadas en variables, que posteriormente son desplegadas mediante JFreeChart, una biblioteca diseñada para este fin. La página lee también los valores de los umbrales, para graficarlos. (linea verde)

A continuación de muestra un ejemplo de los gráficos, para una ventana de 48 horas.

Mediciones

 

Además la página JSP posee una sección en dónde el cliente puede modificar los umbrales, tal como se definió previamente. A continuación se muestra un ejemplo.

Threshold

 

Sensores inalámbricos

Los sensores utilizados son de plataforma TmoteSky. Más información aquí.

TmoteSky

El programa implementado en estos dispositivos fue diseñado para tener 1 nodo sensor-emisor y un nodo receptor. El nodo sensor-emisor realiza las mediciones y las envía por radiofrecuencia cada 1 segundo. El nodo receptor, recibe estos datos y los pone en la cola a través del puerto USB.

Para esto se utilizó nesC, y tinyOS, un lenguaje y un sistema operativo desarrollados específicamente para dispositivos inalámbricos, de bajo consumo y alta eficiencia.

 

Descarga

zip Código fuente
pdf Presentación del proyecto

 

Notas finales

TmoteSense y el código nesC de los sensores inalámbricos están basados en el proyecto de Alejandro Merello, creado en 2009. Ud puede acceder a su página en este link.

Conclusiones