GreenDuino
Il progetto GreenDuino ha come obiettivo la realizzazione di una stazione di analisi della qualità dell'aria basata sulla piattaforma open-hardware Arduino. Il progetto prevede delle attività sperimentali che sfruttano l'elettronica educativa, il making per costruire oggetti e strumenti per rilevare dati dalla realtà circostante, analizzarli e interpretarli.
E' prevista la prototipazione di uno strumento per acquisire valori ambientali quali temperatura, livello di rumore, qualità dell’aria e il progetto software che si occupi, sfruttando appositi moduli aggiuntivi per la comunicazione, di inviare i dati rilevati online.
Il progetto è utile per incentivare la cultura ambientale: la raccolta dei dati ambientali e la loro contestualizzazione aiuterà a incrementare la consapevolezza del rispetto, della conservazione e della valorizzazione del patrimonio naturalistico e ambientale.
Installazione Componenti
Per realizzare il sistema di monitoraggio ambientale, rilevare la qualità dell'aria ed il rumore ambientale sono necessari i seguenti componenti:
- Scheda NodeMCU ESP8266 WiFi
- Sensore SDS011 qualità dell’aria (polveri sottili PM10 e PM2.5)
- Sensore temperature e umidità DHT22
- Sensore KY-037 di suono
- Cavi di collegamento (x10)
- Cassetta protettiva per esterni
Alla scheda NodeMCU ESP8266 WiFi è necessario collegare il sensore di suono KY-037 per rilevare il rumore ambientale, il sensore di temperatura e umidità DHT22 e un sensore della qualità dell'aria per misurare le polveri sottili presenti (PM10 e PM2.5).
Nelle immagini allegate, è possibile visionare lo schema di montaggio, le foto dei sensori e dei collegamenti con la scheda centrale con tutti i passaggi per replicare il sistema.
- Passaggio 1: montaggio sensore SDS011 sulla scheda NodeMCU
- Passaggio 2: montaggio sensore DHT22 sulla scheda NodeMCU
- Passaggio 3: montaggio sensore KY-037 sulla scheda NodeMCU
- Passaggio 4: montaggio di tutti i componenti all'interno una scatola protettiva per esterni su cui sono stati praticati dei fori per ogni sensore e aggiunte delle griglie di protezione
Sviluppo Software E Invio Dei Dati Online
Una volta collegati tutti i componenti, è necessario sviluppare il codice da caricare sulla scheda Node MCU ESP8266 WiFi. La prima parte della programmazione software riguarda l'acquisizione dei dati rilevati dai sensori di temperatura e umidità dell'aria (DHT22), dal sensore di polveri sottili PM2.5 e PM10 (SDS011) e dal sensore di suono (KY-037) per rilevare i rumori ambientali.
La fase successiva prevede la connessione della scheda alla rete WiFi e l'invio dei dati online alla piattaforma ThingSpeak, utilizzando le API messe a disposizione dal servizio. I dati vengono trasmessi ogni 20 secondi, offrendo un monitoraggio praticamente in tempo reale.
Per la compilazione e il caricamento del software, è necessario procedere con l’installazione dell'IDE di Arduino e con la configurazione della scheda Node MCU ESP8266, oltre che aggiungere le librerie necessarie per comunicare con i sensori. La procedura da seguire è la seguente:
- installazione dell'IDE di Arduino scaricabile all’indirizzo https://www.arduino.cc/en/Main/Software
- installazione dell'Add-on della scheda ESP8266 nell'IDE di Arduino:
- dalla schermata principale andare su File -> Impostazioni e inserire la stringa "http://arduino.esp8266.com/stable/package_esp8266com_index.json" nel campo "URL aggiuntivo per il Gestore Schede". Confermare con il pulsante "OK"
- sempre all’interno dell'IDE di Arduino, andare su Strumenti -> Scheda -> Gestore schede, cercare la stringa ESP8266 e procedere con l’installazione della scheda ESP8266 by ESP8266 Community
- in Strumenti -> Scheda selezionare la scheda Node MCU 1.0 (ESP-12E Module)
- installazione della libreria per il sensore DHT22:
- in Strumenti -> Gestione librerie cercare la stringa DHT22 e procedere con l’installazione della libreria DHT sensor library by Adafruit
- in Strumenti -> Gestione librerie cercare la stringa Adafruit Unified Sensor e procedere con l’installazione della libreria Adafruit Unified Sensor by Adafruit
- installazione della libreria per la gestione del sensore SDS011:
- in Strumenti -> Gestione librerie cercare la stringa SDS011 e procedere con l’installazione della libreria SDS011 sensor library by R. Zschiegner
- installazione della libreria per la gestione della comunicazione con il server ThingSpeak:
- in Strumenti -> Gestione librerie cercare la stringa ThingSpeak e procedere con l’installazione della libreria ThingSpeak by Mathworks
I parametri di configurazione per la connessione WiFi e per la comunicazione con il canale ThingSpeak vanno inseriti in un file "secrets.h" all'interno della stessa directory del file .ino.
#define SECRET_CH_ID 0000000 // sostituire 0000000 con l'ID del canale #define SECRET_WRITE_APIKEY "XYZ" // sostituire XYZ con la API Key del canale #define SECRET_SSID "MySSID" // sostituire MySSID con il SSID della rete WiFi #define SECRET_PASS "MyPassword" // sostituire MyPassword con la password WiFi
Si riporta il codice sorgente (file .ino) del dispositivo sviluppato in linguaggio simile al C/C++. Una volta compilato e caricato sulla scheda, i dati possono essere visualizzati sul monitor seriale o direttamente sul canale ThingSpeak.
#include <DHT.h> //Libreria Sensore Temperatura e Umidita' #include <SDS011.h> //Libreria Sensore Polveri Sottili pm 2.5 e pm 10.0 #include "ThingSpeak.h" //Libreria invio dati al sito web ThingSpeak #include "secrets.h" //Libreria rilevazione delle password per l'accesso wifi #include <ESP8266WiFi.h> //Libreria sensore wifi della scheda #define DHTPIN D7 //Costante del pin digitale D7 per l'acquisizione della Temperatura e l'Umidita' #define DHTTYPE DHT22 //Costante DHT22 nome del sensore DHT dht(DHTPIN, DHTTYPE); SDS011 my_sds; char ssid[] = SECRET_SSID; //Nome della rete char pass[] = SECRET_PASS; //Password della rete int keyIndex = 0; WiFiClient client; unsigned long myChannelNumber = SECRET_CH_ID; const char * myWriteAPIKey = SECRET_WRITE_APIKEY; //Inizializziamo i valori da rilevare tramite i sensori float temperatura = 0; float umidita = 0; float pm2_5 = 0; float pm10 = 0; int decibel = 0; String stato = "Dati aggiornati"; void Temperatura(){ temperatura=dht.readTemperature(); //Assegna la Temperatura Serial.println("Temperatura' " + String(temperatura)); //Stampa Temperatura } void Umidita(){ umidita=dht.readHumidity(); //Assegna l'Umidita' Serial.println("Umidita' " + String(umidita)); //Stampa Umidita' } void Polveri_sottili(){ int error; error = my_sds.read(&pm2_5,&pm10); if (!error){ //Controlla se e' presente un errore Serial.println("P2.5: "+String(pm2_5)); //Stampa pm2.5 Serial.println("P10: "+String(pm10)); //Stampa pm10 } else Serial.println("Errore polveri sottili."); //Stampa errore quando la rilevazione non e' andata a buon fine } void Suono(){ unsigned long picco=0; //Inizializzazione del valore di picco for(int i=0; i<1000; i++){ //Trova controllando 1 secondo il sensore il valore di picco int valore=analogRead(A0); //Rileva dall'entrata analogica il suono if(valore>picco){ //Restituisce il valore di picco picco=valore; } delay(1); //Aspetta un millisecondo } decibel=picco*4.524-2549.156; // Calibrazione del sensore if(decibel<=25) decibel=25; //Limite intervallo di acquisizione if(decibel>=120) decibel=120; Serial.println("Picco: " + String(picco)); //Stampa valore di picco Serial.println("Decibel: " + String(decibel)); } void setup() { Serial.begin(9600); //Velocita' trasmissione scheda dht.begin(); //Velocita' trasmissione dati dal sensore di temperatura my_sds.begin(D1, D2); //D1 va su TX di SDS011, D2 va su RX di SDS011 WiFi.mode(WIFI_STA); ThingSpeak.begin(client); //Inizializziamo ThingSpeak } void loop() { //Collegamento alla rete WiFi if(WiFi.status() != WL_CONNECTED){ Serial.print("In attesa di collegamento WiFi: "); Serial.println(SECRET_SSID); while(WiFi.status() != WL_CONNECTED){ WiFi.begin(ssid, pass); //collegamento a una rete di sicurezza WPA/WPA2 Serial.print("."); delay(5000); } Serial.println("WiFi connesso."); } //Settiamo i valori acquisiti in precedenza Temperatura(); Umidita(); Polveri_sottili(); Suono(); ThingSpeak.setField(1, temperatura); ThingSpeak.setField(2, umidita); ThingSpeak.setField(3, pm2_5); ThingSpeak.setField(4, pm10); ThingSpeak.setField(5, decibel); ThingSpeak.setStatus(stato); //Settiamo lo stato //Scriviamo sul canale di ThingSpeak int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey); if(x == 200){ Serial.println("Aggiornamento del canale avvenuto con successo."); } else{ Serial.println("Problema con l'aggiornamento del canale. Codice errore HTTP: " + String(x)); } delay(20000); //Attende 20 secondi prima di aggiornare nuovamente il canale con i nuovi dati in ingresso }
Configurazione Della Piattaforma Online
I dati acquisiti dai sensori (pm 2.5, pm 10, umidità, temperatura e rumori ambientali) vengono visualizzati sulla piattaforma online ThingSpeak . Come primo passo è opportuno creare un account sulla piattaforma e configurarla opportunamente in funzione del layout desiderato. Si possono inserire grafici o oggetti per facilitare l'interpretazione dei dati e avere uno storico degli stessi. Con l'impostazione delle soglie, è possibile evidenziare i livelli di qualità dell'aria e del rumore ambientale non accettabili. Al canale sono stati assegnati dei tags per facilitarne la ricerca all'interno del portale. Per inviare i dati sul canale è necessario recuperare l'ID e la API Key dalle impostazioni dello stesso canale ed inserirli nel file "secrets.h".
Il canale è accessibile al seguente link: canale ThingSpeak "Qualità dell'aria di Tursi"