GreenDuino

by GreenDuino in Circuits > Arduino

1486 Views, 1 Favorites, 0 Comments

GreenDuino

perprof..PNG

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

Arduino.jpg
1.jpg
1b.jpg
1c.jpg
1d.jpg
1a.jpg
PASSAGGIO1.jpg
PASSAGGIO 2.jpg
PASSAGGIO 3.jpg
passaggio4.jpg
passaggio4a.jpg
passaggio4b.jpg

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

Schermata 2020-02-20 alle 20.04.16.png
Schermata 2020-02-21 alle 19.20.08.png
Schermata 2020-02-21 alle 19.05.55.png
Schermata 2020-02-21 alle 19.10.59.png
Schermata 2020-02-21 alle 19.12.18.png
Schermata 2020-02-21 alle 19.32.04.png
Schermata 2020-02-21 alle 19.14.23.png

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

TU.png
PM.png
Ru.png

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"