Hace unos meses me topé con un proyecto divertido: quería publicar en la Web información del clima de Huigra Viejo Camping –un sitio para hacer camping ubicado en los Andes del Ecuador. La idea era que el turista interesado pudiera consultar las condiciones climáticas en tiempo real, a través del sitio huigra.com, y de paso, como una característica extra, consultar el pronóstico del tiempo para los días que tenía planeado reservar su estadía.
El problema fue que todos los proveedores de pronósticos de tiempo como weather.com o forecast.io me proporcionaban datos alejados de la verdad. La razón: aparentemente el gradiente de temperatura en la zona es muy abrupto y el clima varía mucho de una ubicación a otra muy cercana (a menos de 1 km de distancia), dificultando extrapolar los datos de las estaciones de monitoreo cercanas o información de satélite… y bueno, el sitio de camping precisamente se encuentra en la ladera escarpada de una montaña.
La solución? Tomar la temperatura in-situ con algún hardware y luego reportarlo de algún modo en el sitio Web en cuestión. Una oportunidad ideal para jugar con el Arduino MKR1000, pues gracias a su soporte WIFI, nos permitirá transmitir data hacia el Internet, a través de algún router inalámbrico. Si el lector no consigue el Arduino MKR1000 también puede intentar con el Arduino UNO WiFi, les dejo vínculos a ambas opcioness.
Sensores de humedad, temperatura y presión
Haremos el proyecto muy sencillo, sólo con 2 sensores (de hecho así es como está instalado), que nos permitirán reportar 3 parámetros: temperatura, humedad y presión barométrica. La conexión es bastante simple como vemos en la siguiente figura.
BMP180 de Bosch
Lo encontramos en la parte de arriba de la imagen anterior. Este sensor es básicamente un sensor de presión barométrica muy fácil de usar, pues nos permite conexión con el MKR1000 a través de I2C. El soporte I2C en Arduino es maravilloso, pues nos permite encadenar varios dispositivos (como sensores) al mismo cableado I2C. En este caso sólo usaremos UN dispositivo (el BMP180), pero podríamos añadir más con poca modificación. En todo caso lo único que necesitamos conectar es dos cables de data, marcados como SCL (el reloj) y SDA (la data), además de la referencia de GROUND. El SCL en el MKR1000 es el pin D12 y el SDA corresponde al pin D11.
DHT11 (o DHT22)
Un sensor de temperatura y humedad. Económico y fácil de usar. En la figura anterior lo encontramos en la parte inferior.
Weather Underground (wunderground.com)
Weather Underground es una plataforma comunitaria de reporte del clima, disponible online, que nos permitirá reportar las condiciones climáticas a la nube. Actualmente cuenta con más de 250,000 estaciones conectadas… una locura!… También nos provee un API, llamado PWS, que hace posible que existan plugins para sitios Web, así como apps para tablets o smartphones.
La documentación del API que usaremos en este proyecto lo encontramos acá http://wiki.wunderground.com/index.php/PWS_-_Upload_Protocol
Para usar esta plataforma debemos registrar un usuario (es grátis) y crear una estación meteorológica para comenzar a reportar. Se nos asignará un identificador de la estación meteorológica creada, así como una clave, para usar desde las invocaciones al API.
El código Arduino
Para facilitar la cosa he creado un repositorio en GitHub. http://www.github.com/elandivar/huigra
No voy a explicar todo el código porque es bastante simple, pero hay unas líneas a las que les dedicaré una corta explicación y es la función sendSample del archivo https://github.com/elandivar/huigra/blob/master/huigrastation.ino
P.D. Mención especial a AsiriLabs, que nos proporcionó los componentes necesarios para la construcción de este prototipo.