Estación meteorológica solar autónoma en Arqueros de Madrid

El artículo de hoy es un tanto periférico en cuanto a que no habla del tiro con arco en sí pero está estrechamente relacionado con nuestra afición en la modalidad 3D o Bosque.

En muchas ocasiones tenemos que recurrir a la previsión metereológica en la zona de nuestro club para saber si nos conviene coger el coche y desplazarnos hasta allí. El frío o la lluvia son nuestros peores enemigos y aunque a veces la adicción al tiro con arco es tan fuerte que nos hace ser demasiado optimistas con lo que la AEMET o servicios como accuweather indican, lo cierto es que sería fantástico conocer qué tiempo está haciendo exactamente en nuestro club en el momento en el que queremos tomar una decisión basada en datos objetivos y precisos.

En parte por esto decidí construir una estación metereológica completamente autónoma que tomara datos de temperatura, humedad relativa y lluvia para dejarla en nuestro club, Arqueros de Madrid. Así, en lugar de suponer, podría mirar una web y me daría el dato que necesitaba, siempre actualizado. Aproveché la oportunidad que la empresa en la que trabajo, Kaleidos, nos brinda cada seis meses en forma de una semana completa para desarrollar nuestros proyectos personales siempre que podamos mostrar algo terminado sobre las 14h del viernes.

El circuito base, de izquierda a derecha, relé, arduino micro y raspi zero

Tuve la fortuna de sumar al proyecto a Andrey Antukh y a Teresa de la Torre, también de Kaleidos, y el proyecto tomó forma de la siguiente manera:

  1. La estación debería ser impermeable.

  2. La estación debería funcionar exclusivamente con energía solar a través de paneles solares.

  3. La estación debería medir al menos temperatura, humedad relativa y lluvia.

  4. La estación debería poder enviar los datos a través de la red móvil a un servidor externo siempre disponible que a su vez mostraría la información de forma visual.

  5. La estación debería consumir lo mínimo posible para asegurar que una batería cargada con los paneles solares tendría siempre un flujo positivo, se cargaría más rápido de lo que se descargaría.

  6. La estación debería tener un modo de ahorro de energía si detectara que la batería está cerca a descargarse.

  7. La estación debería estar diseñada para hacer frente a apagones súbitos de la batería y volver a la vida en cuanto recibiera de nuevo corriente.

Características técnicas

Empleamos un kit de panel solar + batería + maletín impermeable de Voltaic Systems. Este kit es fantástico por muchos motivos (salvo el precio). Su panel solar puede generar una salida de 9W (6V a 1.5A) a una batería con capacidad para 12000mAh que a su vez puede ser consumida con dos salidas de 5V a 1A y 5V a 2A. Estas dos salidas son esenciales para alimentar dos componentes principales de la estación.

Para los sensores, elegimos un dispositivo DHT11 que mide temperaturas y humedades relativas en los rangos que nos interesan (de 0 a 50 grados y de 20% a 80% de humedad relativa) y un sensor de lluvia de Octopus.

A la izquierda, sensor de lluvia, a la derecha sensor de temperatura y humedad relativa

El sensor DHT11 envía datos de forma analógica codificados de forma que combina temperatura y humedad. El sensor de luvia envía los datos en forma de voltaje. Cuanta más lluvia, más circuitos de su malla se cierran (por la conducción que provoca el agua) y más cerca de los 5V de entrada devuelve. Usando una escala que traduce voltaje a un valor entre 0 y 1000 sabemos que solo a partir de 300 se puede empezar a hablar de algo de lluvia.

Los sensores están conectados a una placa Arduino, concretamente la Arduino Micro. La tecnología Arduino es comúnmente empleada en proyectos de este tipo. Es barata, consume poca energía y es fácil de programar (en lenguaje C). Dispone de muchas bibliotecas para manipular sensores o dispositivos externos que conectamos a sus pines. Concretamente la Arduino Micro es especialmente diminuta y consume no más de 50mA.

Cada vez que el sistema Arduino lee datos de los sensores, envía la información a otra pieza de la estación, una Raspberry Pi Zero, un micro ordenador ARM que apenas cuesta 7€ y que es dificilísima de encontrar (las otras versiones de Raspberry Pi son más comunes y también más grandes y con mayor consumo). La Zero consume alrededor de 160mA. El arduino envía los datos a la Zero vía pines y comunicación en serie.

La raspberry pi zero ("la zero") tiene a su vez un pincho 3G con una tarjeta SIM. Tuve que asegurarme de que el pincho 3G no consumiera tanta energía que estresara a la propia zero y la apagara. Al final aposté por el Huawei E173 que es un pincho 3G libre. La zero tiene una tarjeta microSD con un Linux preparado para arrancar en cuanto recibe energía y ejecutar un programa que se pone a la escucha de datos del arduino al tiempo que activa la conexión 3G y envía los datos empaquetados en protocolo UDP a un servidor externo. Andrey elegió UDP en lugar de TCP para limitar el tráfico al máximo y despreocuparse de si al otro lado se recibían los datos. Es decir, el sistema funciona como una baliza. Si estás escuchando, bien, si no, pues no pasa nada.

Dado que el arduino es el único sistema siempre encendido pero no tiene el concepto de hora y fecha, probamos con un reloj aparte pero dio tantos problemas que decidimos quitarlo. Esto significa que la estación metereológica toma datos por el día y por la noche, tampoco es gran problema.

Muchas de las conexiones necesarias, sobre todo las de corriente y tierra las soldé aparte para poder manejar mejor la maraña de cables y así almacenarlos en una cajita.

Cómo funciona la estación

Un panel solar con una salida de hasta 9W carga una batería de una capacidad de 12000mAh. Esta batería alimenta en su salida de 5V y 1A al arduino. El arduino tiene un reloj interno muy simple que cuenta 20 minutos y activa un relé pero solo lo hará si confirma que la batería está entregando más de 3.3V, señal de que tiene carga suficiente. Este relé toma la corriente de 5V y 2A de la batería y se la pasa a la zero. que se enciende. Mientras la zero arranca, el arduino empieza a tomar datos de los sensores y los va emitiendo a la zero. En cuanto la zero es capaz de escuchar, registra los datos y los envía por la comunicación 3G que intenta establecer. Estos datos llegan a un servidor externo que los almacena en una base de datos.
Cuando han transcurrido unos 40 segundos desde el encendido de la zero, el arduino le envía la señal de apagarse y la raspberry pi zero tarda unos 5 segundos en apagarse completamente. A los 10 segundos, el arduino corta la corriente desactivando el relé. Como la zero ya está apagada, el riesgo de daño al circuito es mínimo. Esto se vuelve a repetir en el minuto 21 por seguridad ya que la conexión 3G no siempre puede establecerse.

Aquí podéis ver un vídeo de 1 minuto que muestra la secuencia completa.

Las pruebas de consumo me dieron un resultado bastante alentador. Con una batería completamente cargada, el sistema funciona de forma ininterrumpida unas 180h (7 días y medio). Dado que la batería en circunstancias de luz subóptimas tarda en cargarse 4 días como mucho, estamos ante una situación favorable de consumo.

Una vista general del circuito base

La estación la he colocado en un lugar del club que tiene buena cobertura y suficiente luz (tampoco se trata de que esté expuesta al sol porque podría marcar temperaturas con poco sentido y el panel solar no necesita estar completamente orientado al sol para funcionar). De momento está en periodo de pruebas. Si queréis acceder a los datos en crudo mientras Angela termina una pequeña web más visual podéis pinchar aquí. Si ese enlace no va no os preocupéis, a veces "se atasca" pero lo solucionaremos pronto. Fijaos, eso sí, que la hora que marca es horario universal y eso significa que hay que hacer la conversión a hora peninsular (sumando 2h en horario de verano y 1h en horario de invierno). De todas formas, ese enlace muestra un valor de los últimos 20 minutos y eso es todo lo que seguramente necesitéis saber.

[{"name": "rain", "value": 6.0, "updated_at": 1470558171, "updated_at_iso": "2016-08-07T08:22:51Z"}, {"name": "temp", "value": 33.0, "updated_at": 1470558171, "updated_at_iso": "2016-08-07T08:22:51Z"}, {"name": "humid", "value": 25.0, "updated_at": 1470558171, "updated_at_iso": "2016-08-07T08:22:51Z"}]

Algo similar al texto de arriba es lo que os encontraréis. Simplemente buscad las palabras "value" y encontraréis un número correspondiente a la palabra más cercana junto a "name". En el ejemplo tenemos "rain" y luego "6.0", "temp" y luego "33.0" y "humid" y "25.0". Como os digo, en breve habrá una web para mostrarlo de forma visual.

Espero que esta herramienta sea útil. Yo me lo pasé muy bien construyéndola junto con Andrey y Tere y la versión final que tras varios tests he podido comprobar que funciona perfectamente espero que se quede durante años operativa y al servicio de los integrantes y amigos del club Arqueros de Madrid.

Actualización 09-08-2016: Hoy anunciaban lluvias así que no pude evitar ir a reforzar el carácter estanco de la estación.

El sensor de lluvia arriba y el sensor de temperatura y humedad escondido y protegido abajo.

Este vídeo muestra que efectivamente cayó una buena. La estación envío el dato de unos 750 sobre 1000 en lluvia (no está directamente expuesta pero es un valor ciertamente alto y encaja perfectamente).

Actualización 19-08-2016: Se puede consultar la información actualizada con un margen máximo de 20 minutos en http://adm.aljaba.net.