Indoor Air Quality station

“Previsioni del tempo: lo sprecherò anche per tutta la prossima settimana.”

La qualità dell’aria che respiriamo è importante. Anche quando siamo dentro casa nostra.

Con pochi euro di materiale e qualche ora di lavoro (riuscire a ritagliarsi del tempo per giocare non è mai facile!), alla fine sono giunto ad avere un modulo praticamente completo che rileva:

i dati rilevati vengono inviati via protocollo MQTT al broker indicato, il tutto comodamente gestibile via interfaccia web attraverso la wifi casalinga.

Le sostanze organiche volatili identificabili dal sensore MQ135 (VOCs) sono monossido di carbonio, anidride carbonica, ammoniaca, idrocarburi aromatici, anidride solforosa, vapori di benzene e altri gas pericolosi, in concentrazioni da 10 a 1000ppm. Sfortunatamente l’uscita analogica del sensore non consente di discriminare la tipologia di gas rilevato (rimando a un interessante articolo in merito: Cheap CO2 meter using the MQ135 sensor with AVR ATmega).

Hardware

Il cuore di tutto è un modulo WeMos D1 mini, che monta il già noto ESP8266, di cui abbiamo già parlato in altri articoli sempre su questo blog, più una manciata di altri componenti:

lo schema elettrico è piuttosto semplice:

Un occhio esperto potrebbe chiedersi il motivo della ulteriore resistenza da 270KOhm sulla porta dell’ADC A0, considerando che c’è già, sulla scheda WeMos D1 Mini Lite, un partitore resistivo (R1=220KOhm e R2=100KOhm) per portare il range originale (0-1V) a 0-3.3V.

WeMos D1 Mini lite pinout diagram

Poiché il modulo MQ135 è alimentato dalla Vcc a 5V, è necessario estendere il range dell’ADC portandolo da 3.3 a 5V. Aumentando quindi la R1 fino a 490KOhm (Vout=Vin*(R1/R2)=Vin*(100K/490K)) si ottiene un range di ingresso dell’ADC a 0-5V.

Il modulo Bosch BME280 è connesso via bus i2c ai pin D4 e D5 e alimentato a 3.3V (assicuratevi di avere un modulo che supporta questo voltaggio).

Software

Successivamente sarà necessario compilare e installare il firmware, che potete scaricate da github.com/michelep/IndoorAirQualityMonitor.

Pre-requisiti:

inoltre saranno necessarie anche queste librerie:

Per caricare i files sulla partizione SPIFFS (SPI Flash Filing System) ho usato il comodissimo tool Arduino ESP8266 filesystem uploader.

Dentro la cartella “data”, che contiene i file da memorizzare nello SPIFFS, c’è il file config.json che contiene la configurazione del modulo, compresa la parte che riguarda la connessione alla rete WiFi che i dati del broker MQTT per l’invio dei parametri ambientali rilevati.

L’interfaccia web della stazione di monitoraggio mostra in tempo reale i parametri rilevati.

E’ possibile impostare delle soglie di allarme che fanno suonare il buzzer on-board al superamento dei limiti impostati:

Tutta la configurazione è modificabile dall’interfaccia web disponibile on-board. In assenza della connessione ad una rete WiFi, il modulo si predispone in modalità access-point con SSID “IHOT_AP” e autenticazione PSK con password “12345678“.

Il modulo sincronizza data e ora via NTP e il led RGB “pulsa” del colore relativo all’indice humidex calcolato dai parametri ambientali.

Humidex

L’indice humidex, sviluppato dai meteorologi canadesi, serve a indicare la percezione di comfort a seconda dei parametri ambientali quali temperatura e umidità. Il calcolo avviene secondo una funzione matematica:

float calculateHumidex(float temperature, float humidity) {
  float e;
  e = (6.112 * pow(10,(7.5 * temperature/(237.7 + temperature))) * humidity/100);
  float humidex = temperature + 0.55555555 * (e - 10.0);
  return humidex;
}

che restituisce un valore tra 20 e 54-55, corrispondente all’incirca a questi gradi di comfort:

MQTT

Durante lo sviluppo del prototipo ho sperimentato diverse metodologie di invio dei dati. Inizialmente usavo una interfaccia REST che, però, si è rivelata presto inadeguata. Ho così deciso di passare a MQTT, installando Mosquitto sul mio NAS Synology casalingo, che uso come broker.

Bastano anche poche righe di Python e la libreria client MQTT per ricevere i dati relativi alla qualità dell’aria di casa:

#!/usr/bin/env python
import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
     print("Connected with result code "+str(rc))
     client.subscribe("#")

def on_message(client, userdata, msg):
     print(msg.topic+" "+str(msg.payload))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("[MQTT broker]", 1883, 60)

client.loop_forever()

Usando un gateway MQTT-MySQL sarà anche possibile visualizzare i dati usando una piattaforma come Grafana.

Questo articolo è stato visto 52 volte (Oggi 1 visite)
Exit mobile version