lunedì 4 gennaio 2021

IOT con raspberry pi zero, enviro + e plantower

Con poco più di 100 euro si può assemblare un sistema sensore per l'analisi della qualità dell'aria completo di: sensori meteo come temperatura, pressione e umidità; sensore di particolato; triplo sensore di gas basato su tecnologia MOX; sensore di luce e prossimità; sensore acustico. Il tutto OPEN-SOURCE Che volete di più?

Secondo me è una piccola rivoluzione perché è il primo esempio di sistema sensore economico e da sviluppo per poter registrare "impronte" ripetibili dell'ambiente in cui si è immersi.  Gli scenari applicativi sono innumerevoli.

La centralina per la qualità dell'aria, basata sull'enviro+ della pimoroni. L'enviro+ è innestato sul raspberry pi zero W. la batteria (bianca) sotto fa da base di  ancoraggio su cui ho fissato con un po' di patafix i componenti. A sx in Blue il sensore di particolato Plantower 5003.

Il sistema è modulare quindi si può iniziare con un minimo di spesa e poi man mano che si ha voglia si aggiungono pezzi. E' un'ottima palestra per conoscere e addentrarsi in diversi campi quali i sensori a stato solido. la qualità dell'aria, la programmazione in python, l'IOT, l'analisi multivariata di sensori. Inoltre permette da subito di partecipare a progetti di "citizen science" come ad esempio quello di  Map Sensor.Community messo su dal CODE for Germany, un network di sviluppatori OPEN tedeschi.

acquistato da MELOPERO a nov 2020, l'enviro+ (56,19€ compresa la spedizione) ha la seguente dotazione di sensori e hardware:

(https://learn.pimoroni.com/tutorial/sandyj/getting-started-with-enviro-plus)

BME280 temperature, pressure, and humidity sensor

LTR-559 light and proximity sensor

MICS6814 triplo sensore di gas con tecnologia MOX e ADS1015 analog to digital converter (ADC)

MEMS microphone (l'unico sensore che non so se funziona veramente)

0.96" colour LCD (160x80)

Conviene installarlo su di un Raspberry Pi zero W che ho acquistato in un secondo momento (34€ con case, heatsink e spedizione). Infatti avevo a disposizione un raspberry pi 3 ma il riscaldamento della board falsava troppo la lettura del sensore di temperatura. Come si vedrà più avanti il sensore di temperatura ha un algoritmo di correzione che compensa la temperatura della cpu per un Pi zero.

Chiaramente con il Pi zero le cose sono un pochino più complicate dall'hardware: non c'è una porta hdmi standard; le porte USB sono quelle micro. 

Io ho risparmiato tempo e soldi programmando il raspbian con il wifi di casa sul raspberry classico e poi ho montato la ssd sul Pi zero. In questo modo mi collego via SSH al raspberry (anche da remoto seguendo QUESTO TUTORIAL) con il PC o con App sul telefonino come JuiceSSH o RaspController.

Seguendo il tutorial minimal di Sandyj si installano nel raspbian le librerie python per far funzionare sensori e dysplay lcd ( a parte il sensore del microfono). La pimoroni offre diversi programmi di esempio in python, tutti utili e funzionanti per capire le potenzialità della scheda.

Osservazioni sul Funzionamento

In circa due mesi, nel poco tempo libero a disposizione durante le vacanze in lock-down, ho potuto divertirmi con l'enviro +, completando la sua dotazione con il sensore per particolato PLANTOWER 5003 (~30€) che si innesta sulla presa UART dell'enviro+.
 
Semplicemente utilizzando gli script in python di esempio si possono fare molte cose senza scrivere una linea di codice.
Il sensore di Temperatura e Umidità ha bisogno di essere compensato a causa del riscaldamento del raspberry. L'esempio "compensated-temperature.py" e "weather-and-light.py" illustrano come fare la compensazione.
Per la trasmissione e fruizione dei dati le possibilità sono varie:

Rapidamente si può provare la trasmissione dei dati con il protocollo MQTT (cinguettio degli IOT) in una rete locale seguendo i link sotto indicato e usando l'esempio "mqtt-all.py"

https://github.com/robmarkcole/rpi-enviro-mqtt

https://appcodelabs.com/introduction-to-iot-build-an-mqtt-server-using-raspberry-pi

https://desertbot.io/blog/headless-raspberry-pi-4-mqtt-setup

In questa modo è possibile già trasmettere ,visualizzare, e registrare dati in una rete locale.

Schermata sensori con mqqt explorer

Invece per Trasmettere su un server IOT, mi sono appoggiato ad Adafruit, utilizzando lo script python "adafruit_io.py" indicato al link 

https://github.com/dedSyn4ps3/enviroplus-python/blob/master/examples/adafruit_io.py

che trasmette feeds dei sensori "meteo" al server che possono essere raccolti in un dashboard. 

Le librerie sono solo per il sensore BLE280, quindi non posso trasmettere i sensori di gas e il valore di lux

FEEDS Adafruit Dashboard

Per funzionare ha bisogno di installare le librerie e i moduli adafruit seguendo il tutorial 

https://learn.adafruit.com/adafruit-io-basics-digital-output/python-setup  

e registrando un account free sul sito io.adafruit.com.

Per caratterizzare correttamente il sistema si potrebbe usare il protocollo MQTT per twittare i dati in formato json verso un MQTT server che li può visualizzare e storare in formato json. 

Il sistema così com'è è un ottima stazione meteo ed è piccolo abbastanza per monitorare piccoli volumi come frigoriferi.

TODO:

bypass crash python: riavvio ogni volta che sposto il sistema sensore (falso contatto alimentazione); crontab riavvio ogni 30min (problema riscaldamento sensori); crontab kill e riavvio python. ricerca sui forum per avvio servizio sentinella.

Iscrizione e trasmissione feeds a  luftdaten

formattazione json FEED adafruit IO

trasmissione ssh tunnelling al server 192.107.82.250

formattazione json MQTT

elaborazione json MQTT con R

script python per trasmissione MQTT solo del sensore di GAS per caratterizzazioni in laboratorio

FEED per il sensore di GAS e altri parametri del sistema sensore

compensazione temperatura

OSSERVAZIONI sui sensori di gas 

I sensori di Gas sono quelli più difficili da utilizzare perché non danno misurazioni "assolute" di grandezze fisiche ma indicano la presenza e la variazione di specie gassose ossidanti e riducenti o la variazione di VOC (composti chimici volatili) in aria. Quindi possono concorrere a fornire informazioni sulla qualità dell'aria che ci circonda ma hanno bisogno di una trattazione dei dati abbastanza "specialistica".  Per chi, come me, si occupa di sensori di gas per mestiere e passione sono affascinanti da studiare. Di seguito annoto qualche osservazione sui sensori.

23 nov 2020

dopo una prima notte di accensione ecco i valori all'equilibrio:

Temperatura 23°C +-1°C; valore vero 19.1 °C

umidità 32%+-1%; valore vero 70%

baseline sensori gas:misure outdoor alle 9 di mattina

oxisdses: 28+-1

reduced : 340

nh3: 98

24 nov

misure outdoor alle 9 di mattina

Temperatura 10°C +-1°C; valore vero 14 °C

umidità 54%+-2%; valore vero 70% (http://www.meteo.unina.it/davis/dati-in-tempo-reale)

pressione 101770 +- 10 valore vero 102440

baseline sensori gas:

oxisdses: 37+-1

reduced :600+-50

nh3: 750+-50

poi sposto il sensore in Bagno

il sensore NH3 vede bene i detersivi in aria come mostra il minimo corrispondente all'ingresso in aria di detersivo usato da mara per pulire vetri. Anche il reducing si accorge ma forse è a più largo spettro. L'oxidizing, insieme all'abbassamento di umidità da info sul ricambio d'aria

Il sensore rimane in bagno durante la pulizia da parte di mara. Pulizia effettuata a finestre aperte. Quando la pulizia viene completata e le finestre chiuse, L'aria si riempe di VOC derivanti dal lavaggio (semaforo giallo)


 

proviamo a dare delle condizioni di soglia giallo-verde:

oxides > 31

reduced > 275

nh3 > 200

contano in primis oxides ed nh3

In tarda mattinata ho visto l'oxides superare i 50

La sera l'aria ha meno componenti ossidanti con l'oxides che scende a 36, nh3 scende sotto i 200 anche se il sensore "reduced" si mantiene sopra i 300. 

alle 18.45 sposto il sensore nel salone

il "reduced" sente gli odori della cucina, scendendo sotto i 275

il sensore "nh3" sente bene le puzze del bagno

l'"oxides" è lento a stabilizarsi dopo l'accensione (30 minuti ancora deve stabilizzarsi)

in salone la sera solo l'oxides è sopra la zona verde

Odori di cucinato fortemente percepibili, apro la finestra

Enviroplus spostato in cucina. Foto prima di aprire la finestra e aumentare la velocità della cappa