Arxiu de la categoria: IoT

Projecte IoT a thingspeak.com

Ja està funcionant el projecte de IoT basat en NodeCMU i el sensor de temperatura/humitat/pressió BME280, i visualització de les dades a thingspeak.com. També he començat a fer el curs de IoT a l’institut Rambla Prim, que imparteix el Jordi Binefa.

Enllaços:

Calibració del sensor de temperatura DS18B20

Ja tinc pràcticament enllestit el projecte IoT amb una REST Api [3][4] per llegir la temperatura d’un sensor DS18B20.

El problema (i greu) és que les temperatures que estic agafant del sensor són errònies. Per saber quina és la temperatura real en el meu barri (Gràcia-Barcelona) agafo com a referència la web de meteo.cat. L’estació meteorològica automàtica més propera és la de Zona Universitària, tot i que en realitat la temperatura no serà la mateixa ben bé. El carrer Joan Blanques, on tinc el sensor, és estret i enmig de la ciutat i el barri; la Zona Universitària és un espai més ample i obert, possiblement les temperatures mínimes tendeixen a ser més baixes…

Calibrar el sensor DS18B20 pot ser una tasca difícil. Aquí tenim un article [1] molt interessant sobre com procedir per la calibració. L’article és realment interessant, però no tinc el temps (ni les ganes) d’implementar-ho. El que sí que hauria d’haver fet, i això era fàcil, era adquirir 10 sensors DS18B20 (són baratos), descartar aquells que es desvien bastant de la temperatura real, i fer que les meves mostres siguin una mitjana dels altres sensors no-descartats, per exemple 5. Això no és cap problema, a la RPi tinc molts pins GPIO disponibles.

Una altra possibiltiat és utilitzar un altre sensor de temperatura. Per exemple, utilitizar el BMP280, que a més de la temperatura també tinc la pressió i la humitat relativa (i és barato). És molt interessant aquest article [2] on s’utilitza el BMP280 per construir una estació meteorològica alimentada per penell solar.

La conclusió és que confiar en què el sensor que tinc doni la temperatura correcta és un greu error. L’objectiu del projecte és fer un exemple didàctic de IoT, RestFul API, i gràfiques com a frontend. Això s’ha acomplert, ara només falta que la temperatura que llegeixo sigui real. Per tant, el que faré és mirar de fer una recta de regressió per aproximar-me a la temperatura real a partir de les dades que em dóna el meu sensor, suposant que la millor aproximació és una recta.

En la imatge es poden veure dues gràfiques. En la de dalt es veu la diferència entre la temperatura real i la del meu sensor. En la de baix es pot deduir la recta de regressió per convertir les dades del sensor a dades reals. De totes maneres, aquestes dades es corresponen a dos dies i mig. Esperaré una setmana més (i que pugin les temperatures del mes de maig, i així tenir més rang) per poder fer una recta de regressió.

Enllaços:

Internet of Things, Restful API amb Python i Flask, Raspberry Pi Zero i sensor de temperatura

Estic muntant un projecte acadèmic de Internet of Things. Es pretén mesurar la temperatura exterior del meu barri amb un sensor DS18B20 connectat a una Raspberry Pi Zero. Tal com es veu a la foto, he hagut de connectar un llapis Wifi USB. Idealment seria millor fer el projecte amb la nova Raspberry Pi Zero W que acaba de sortir fa un mes, i que porta wifi incorporat.

La temperatura es va gravant cada 10 minuts a una base de dades MongoDB. La part més interessant del projecte és programar una Restful API, i per fer-ho ho faré amb Python i el microframework Flask, a partir d’algun exemple que he trobat (veure els enllaços). En la versió 1 només hi havia un servei, que era bolcar totes les temperatures. La versió 2 ja fa més coses: bolcar totes les temperatures; recuperar la temperatura actual; filtrar per un dia; filtrar per varis dies al mateix temps.

Una altra part important és la capa de presentació, i per fer-ho utilitzo la llibreria Highcharts.com, que dóna uns resultats molt espectaculars. Per cada funció de la API es donarà un exemple html, per exemplificar com podem digerir les dades.

En les futures versions de la API es calcularan les mitjanes de temperatura diàries, mensuals i anuals, de manera que es puguin fer comparatives entre dies, mesos,… De moment encara no està disponible.

La API encara no és pública, estic en fase de desenvolupament. En el moment que sigui estable i pública ja ho anunciaré. De moment la tinc dins de casa, sota els efectes del termostat de la calefacció, amb la qual cosa els resultats no són interessants. Però la idea és després de Setmana Santa traslladar-ho tot al local, el sensor a l’exterior, i la Raspberry Pi dins del local. Es podrà accedir a la API en el domini http://joanqc.no-ip.biz/, però encara no està disponible.

La idea de desenvolupar aquesta API és, a part de què programar és divertit, poder utilitzar open data en format JSON a l’assignatura de Javascript (M06) en el cicle de Desenvolupament d’Aplicacions Web (DAW), a l’institut. Evidentment, hi ha molts exemples disponibles d’open data i format JSON. Però un exemple on els alumnes vegin d’on surten realment les dades, sempre serà interessant.

En el primer enllaç tenim la documentació i discussió de tota la posta a punt. És el punt de partida principal si es vol reproduir el projecte. En el segon enllaç es documenta la API, en les seves diferents versions.