lunes, 24 de marzo de 2014

Estación meteorológica Inomet

    Los alumnos Ion Arbizu, Jon Fernandez y Mikel Jimenez de electrónica hemos desarrollado una estación meteorológica basada en la tecnología de Arduino, que recoge las condiciones ambientales mediante seis sensores y envía estos datos a través de una red Wifi, pudiendo así visualizar los datos de la forma que queramos. En nuestro caso, hemos desarrollado dos programas diferentes, en los cuales un uno podremos ver los datos en el portal web www.xively.com y en el otro, los datos de la estación estarán reflejados en una APP Android propia.


HARDWARE:

     A continuación profundizando un poco más, os expondremos los componentes de este proyecto, y su funcionamiento. Para empezar, como ya hemos mencionado, nos basaremos en la tecnología de Arduino. Para ello disponemos del Arduino Uno y del Arduino Wifi Shield. Arduino es un micro-controlador, de plataforma electrónica abierta, para la creación de prototipos. Puede tomar información del entorno a través de sus pines de entrada, con toda una gama de sensores. También es capaz de controlar pequeños actuadores, tales como luces, motores, etc. En nuestro caso el único actuador es el Arduino Wifi Shield.


     El Wifi Shield conecta al Arduino a Internet o a una red Wifi de forma inalámbrica, con unas sencillas plantillas de programación, a las que se les puede añadir el programa que queramos. 
     En nuestro caso hemos creado dos programas en dos plantillas diferentes del Wifi Shield. El primero es el programa de Xively, viene como ejemplo en la librería del Wifi Shield, y el otro es una plantilla de "servidor web", para enviar los datos por JSON a una APP, también ejemplo en dicha librería. Una vez configuradas estas plantillas con los credenciales de la red, incluiremos el programa propio, que en nuestro caso leerá los valores de los sensores, y los enviará a a su destino a través de la red.

     Para la lectura de las condiciones ambientales contamos con los siguientes sensores:
1. Anemómetro: sensor de velocidad del viento. Es un molinillo que da dos impulsos por cada vuelta cuando el viento lo hace girar. Este impulso lo metemos al Arduino por una entrada digital, y le indicamos que por cada dos pulsos ha dado una vuelta completa. De este modo, y con unos sencillos cálculos matemáticos tendremos la velocidad en km/h.

2. Sensor de lluvia: es un sensor analógico. Consta de una placa en la cual hay impresas dos pistas, que no se tocan entre ellas. Cuando cae una gota de agua en la placa, comunica estas dos pistas modificando así el valor del sensor. Así será como sabremos si llueve o no llueve.


3. Sensor de luminosidad: para detectar la cantidad de luz ambiental usaremos un foto-transistor, actuando la luz como base. La pata del emisor será la que nos entregue el valor de la luz del ambiente. A más luz, mayor señal. La señal en todos los sensores analógicos oscila entre 0 y 1023. Dividiendo este valor entre 10'23 tendremos un valor sobre cien, es decir, el porcentaje de cantidad de luz ambiental.


4. Sensor de temperatura y humedad: este sensor se llama DHT22. Es un sensor digital y requiere de librerías propias para su correcto funcionamiento. Mide la temperatura y la pasa a ºC. También mide la temperatura y la muestra en % como humedad relativa (Imagen en foto del Inomet Shield).

5. Sensor de presión barométrica: BMP085, este también es digital, por lo que al igual que el anterior, requiere de sus librerías, que facilitan mucho el trabajo con ellos. Este detector nos aportará información sobre: temperatura, presión y altitud. Nosotros solo haremos caso a la presión. Este dato se puede mostrar en Pascales o mili bares (Imagen en foto del Inomet Shield).

6. Sensor de contaminación: o MQ135, analógico. Mide algunos factores de la polución del medio. Como hemos mencionado antes, al ser analógico dará un valor de 0-1023, siendo este ultimo el máximo de contaminación. Después como hemos hecho en otros sensores, pasamos este dato a porcentaje (Imagen en foto del Inomet Shield).

    Todos estos sensores estarán organizados en un Shield de fabricación propia, el cual, alimenta a todos los componentes según sus especificaciones, y dispone la señal de los detectores de forma que cada uno de ellos vaya a una entrada del Arduino. Esta tarjeta solo contiene cuatro sensores: DHT22, MQ135, BMP085 y el sensor de lluvia, del cual la placa detectora estará en el exterior. Los demás sensores requieren estar en el exterior, por lo que se conectarán a la tarjeta por regletas. Este Shield se puede montar en el Arduino Uno directamente, o también se puede montar sobre el Shield Wifi, que a su vez va montado sobre el Arduino. Las tres tarjetas usan la misma disposición de pines.



SOFTWARE:

     Como hemos mencionado antes, hemos creado dos programas diferentes a partir de los ejemplos que nos ofrecen las diferentes librerías de Arduino.

     En el primer programa leemos los valores de los sensores  y los subimos a una web (www.xively.com)
usando la red Wifi. Esta web nos permite ver los datos de los sensores y ademas crear un gráfico con el histórico.

     Para la confección del programa hemos usado el ejemplo "Wifi_Multiple_DataString_UpLoad" de la librería Xively (esta librería se debe descargar). 

    Ya en el programa, en primer lugar, debemos definir las librerías, tanto las del Arduino, como las de los sensores, Wifi, Xively,etc... Importante, para ello estas librerías deben estar en la carpeta "libraries" de Arduino. Acto seguido, se deben definir las variables, que serán las encargadas de guardar los valores de los sensores, en nuestro caso son 7 variables ya que medimos 7 condiciones ambientales. Seguido, se deben introducir los credenciales de la red Wifi a la que nos queremos conectar, además del numero API de Xively. Este numero es la dirección de nuestra cuenta en Xively, para que los datos se suban a esa cuenta.

     Después, se definen los DataStreams, son los datos que vamos a enviar (los datos de las variables). En primer lugar se deben definir la cantidad de DataStreams que hay en nuestro programa, para poder identificar a cada dato con su numero correspondiente y después de debe definir si el dato que se envía es texto o dato numérico. Estos DataStreams se envían al FEED, que también hay que definirlo. Es un código de nuestra cuenta de Xively.

    A continuación, se inicializan el Wifi Shield y los sensores digitales para que empiecen a funcionar. Si conseguimos conectarnos en la terminal del Arduino veremos los datos de la conexión (IP...), si no se ha conectado automáticamente lo reintentará.. Finalmente se hace una lectura de los sensores, y los valores recogidos se suben a nuestra cuenta de Xively. Este ultimo proceso se repite constantemente, para que los datos se vayan actualizando.

    En la imagen siguiente vemos el resultado, vemos como quedan los datos en la web. En el siguiente enlace podréis ver nuestro código completo. Codigo Arduino Xively





     Por último, en el siguiente programa utilizaremos el ejemplo de la librería Wifi "WifiWebServer". En esta ocasión el programa es más sencillo que el anterior. Los datos se envían en formato JSON. En ese paquete de datos se envía el nombre de la variable y su valor. Estos datos después se pueden visualizar en el navegador dirigiéndose a la IP que se le da al Arduino, o incluso aprovechar los datos y mostrarlos en una APP de Android, como es nuestro caso.

     Para la confección de la programación, en primer lugar debemos definir las librerías que se vayan a utilizar. Posteriormente declaramos las variables, en este caso también son 7, las mismas que en el programa anterior. 

     Ahora para conectarnos a la red Wifi que deseemos, metemos el nombre de dicha red y su contraseña. Después de esto, es la hora de inicializar el arduino, el Shield Wifi y los sensores digitales que tenemos, de no hacerlo así, no conseguiremos que que la estación funcione correctamente.

     Una vez estemos conectados a la red Wifi, lo podremos ver en la terminal de Arduino. En ella aparecerán los datos de la conexión, como por ejemplo la IP. Esta IP es la que debemos utilizar para ver los datos ya que será ahí donde se envíen los datos.

     Por último, el Arduino estará esperando a que algún cliente le haga la petición, en ese momento, este le mandara el paquete de datos, haciendo posible la visualización de los datos. Después de haberlos enviado, automáticamente sale el cliente, y no vuelve a haber ningún cliente hasta que se vuelva ha hacer la petición de datos.

    En el siguiente enlace encontrareis el código que hemos creado para Arduino: Arduino Servidor Web JSON. A continuación os mostramos el resultado de nuestro trabajo, la visualización del los datos en una aplicación para Android propia.


Aquí os dejamos el vídeo y el link del vídeo explicativo que hemos subido a Youtube: Estación Inomet



Esperamos que os haya resultado interesante y os hayáis divertido tanto como lo hemos hecho nosotros con este proyecto.

Saludos.

Jon Fernandez, Ion Arbizu y Mikel Jimenez
La Salle Berrozpe G2E

9 comentarios:

  1. Quisiera saber como hicieron su apk, que software usaron porque estoy haciendo algo similar pero aun poseo problemas en la implementacion de la aplicación para android.

    ResponderEliminar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar
    2. Lo hicimos directamente en android studio, no recuerdo si tengo el código todavía pero lo busco y si es así lo publicaré github para que quede accesible a todo el mundo.

      Eliminar
    3. Si lo tienes, sería ideal!
      Estaría bueno compartirlo :)

      Eliminar
  2. Buenas excelente trabajo, a mi me gustaria saber como recibir los parametros JSON en un archivo html o el akp de Android.

    ResponderEliminar
  3. Buenos dias, me gustariahacer unaestación similar pero me surjen dudas a la hora de hacer la aplicación android.
    Podriais publicar el codigo?

    ResponderEliminar
    Respuestas
    1. Lo hicimos directamente en android studio, no recuerdo si tengo el código todavía pero lo busco y si es así lo publicaré github para que quede accesible a todo el mundo.

      Eliminar
    2. Mil gracias! de todos modos haber si consigo que funcione el código con un modulo shield mas economico como este: http://www.ebay.es/itm/121818143422?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT

      Eliminar
    3. Disculpa cómo hicieron la conexión del panel solar y quepanel solar usado

      Eliminar