Prendi il controllo del monitoraggio dei gas: sensore di gas DIY con registrazione su scheda micro SD basato su sensore MQ-135 e RTC DS3231

Introduzione

L’aria che respiriamo è una risorsa vitale, ma spesso diamo per scontato la sua qualità. Il monitoraggio dell’aria tramite sensore di gas, con l’aumento delle preoccupazioni legate all’inquinamento atmosferico e alla sicurezza ambientale, è diventato una priorità globale. Il controllo e la gestione di questi gas, sia in ambienti industriali che domestici, è diventato fondamentale per garantire la salute umana e l’integrità dell’ambiente circostante.

In risposta a questa crescente necessità, ho sviluppato un progetto che permette a chiunque, anche senza competenze avanzate in elettronica, di costruire un sistema di monitoraggio dei gas personalizzato ed economico. Utilizzeremo il versatile sensore di gas MQ-135, noto per la sua affidabilità nel rilevare una vasta gamma di gas tossici e inquinanti, e il modulo DS3231 RTC, che ci permetterà di annotare con precisione i dati di monitoraggio con marcature temporali. Inoltre, i dati raccolti verranno archiviati su una scheda micro SD, consentendo un accesso facile ai dati rilevati e una loro gestione efficiente.

In questo articolo, ti guiderò passo dopo passo attraverso il processo di creazione di questo dispositivo di monitoraggio dei gas , che potrebbe essere utilizzato in varie applicazioni, come il rilevamento di fughe di gas in casa, il monitoraggio dell’aria in ambienti di lavoro, o persino per scopi didattici per sensibilizzare alla qualità dell’aria.

Imparerai a collegare i componenti, a programmare una ESP8266 per acquisire e registrare i dati, e infine a interpretare e analizzare i risultati. Questo progetto non solo ti fornirà una solida base di conoscenze pratiche nell’ambito dell’elettronica e della programmazione, ma ti darà anche il controllo diretto sulla sorveglianza della qualità dell’aria in ambienti che consideri importanti.

Inizia quindi questo viaggio verso un ambiente più sicuro e consapevole, in cui potrai prendere il controllo del monitoraggio dei gas in modo semplice e personalizzato. Prima di immergerci nei dettagli tecnici del progetto, faremo una panoramica dei vari componenti.

Come sempre, per la stesura del firmware, ci avvarremo dell’ottimo IDE Platformio.

Continua a leggere per scoprire come fare!

Di che componenti abbiamo bisogno per il sensore di gas?

La lista dei componenti non è particolarmente lunga:

  • una breadboard per connettere la NodeMCU ESP8266 agli altri componenti
  • alcuni fili DuPont (maschio – maschio, maschio – femmina, femmina – femmina)
  • un sensore di gas MQ-135
  • un modulo RTC DS3231
  • un modulo di lettura/scrittura di micro SD card con interfaccia SPI
  • una micro SD card da non più di 32GB formattata in FAT32
  • e, ovviamente, una NodeMCU ESP8266 !

Vediamo ora più in dettaglio questi nuovi componenti.

Il sensore MQ-135

Il sensore MQ-135 è un componente elettronico che appartiene alla famiglia dei sensori di gas. È ampiamente utilizzato per il rilevamento e la quantificazione di vari tipi di gas, in particolare gas tossici e inquinanti atmosferici. Questo sensore è una scelta popolare per progetti che richiedono il monitoraggio della qualità dell’aria in ambienti domestici, industriali o all’aperto.

Può rilevare gas come: ammoniaca, solfuri, GPL, propano, metano, idrogeno, alcool, fumo e monossido di carbonio e altri gas nocivi. Sebbene possa rilevare tali gas, non è in grado di distinguere la differenza tra loro.

Quello utilizzato in questo articolo è prodotto dall’azienda AZDelivery. Ecco una descrizione dettagliata del sensore MQ-135:

Principio di funzionamento

Il sensore MQ-135 opera sul principio della variazione della resistenza elettrica in risposta alla presenza di determinati gas nell’aria. Il cuore del sensore è un elemento sensibile costituito da un sottile film semiconduttore organico che reagisce chimicamente ai gas con cui viene a contatto. Per ottenere i migliori risultati di rilevamento, il sensore del gas deve essere preriscaldato. Il migliore tempo di preriscaldamento per il sensore è superiore a 48 ore.

NOTA BENE: il preriscaldamento/riscaldamento del sensore avviene alimentandolo normalmente. NON devi assolutamente avvicinarci fiamme libere!!

Rilevamento di gas specifici

Il sensore MQ-135 è noto per il suo rilevamento di vari tipi di gas, tra cui:

  1. Monossido di Carbonio (CO): il sensore MQ-135 è particolarmente sensibile al monossido di carbonio, un gas tossico inodore e insapore prodotto dalla combustione incompleta di carbonio, spesso presente nei gas di scarico dei veicoli e nelle situazioni di incendio.
  2. Ammoniaca (NH3): questo gas è spesso presente nell’agricoltura e nell’industria chimica ed è tossico per l’inalazione in elevate concentrazioni.
  3. Metano (CH4): il metano è il principale costituente del gas naturale ed è infiammabile ed esplosivo in specifiche proporzioni aria/gas.
  4. Benzene (C6H6): il benzene è un volatile chimico che può essere presente in vari ambienti industriali ed è noto per essere cancerogeno.
  5. Vapori Organici Volatili (VOCs): questi gas includono una vasta gamma di composti chimici volatili che possono essere rilasciati da prodotti chimici, solventi e materiali da costruzione.

Costruzione

Il sensore è racchiuso all’interno di due strati di sottile rete di acciaio inossidabile chiamata rete antiesplosione. Di conseguenza, è in grado di rilevare sostanze infiammabili senza incidenti. Allo stesso modo, fornisce protezione per il sensore e filtra le particelle sospese. In questo modo possono passare solo i gas all’interno della camera di rilevamento. Il modulo ha un chip comparatore LM393 integrato che converte le letture in segnali digitali e analogici.

Soglia regolabile

Il modulo offre due tipi di uscita: una digitale e l’altra analogica. Il valore in uscita da quella analogica va da 0 a 1023 ed è proporzionale alla concentrazione totale di gas rilevata. L’uscita digitale invece passa a 0 quando la concentrazione totale di gas supera una certa soglia. Il sensore MQ-135, infatti, offre la possibilità di regolare, tramite un trimmer integrato, la soglia oltre la quale la sua uscita digitale scatta (passando da 1 a 0) segnalando che la concentrazione totale di gas corrispondente alla soglia impostata è stata superata. Il sensore dispone di due LED: uno rosso e uno verde. Quello rosso indica il normale funzionamento del modulo e si accende quando questo è alimentato. Il LED verde si accende quando è stata superata la soglia regolata tramite il trimmer.

Temperatura e umidità

La precisione del sensore MQ-135 è influenzata dalla temperatura e dall’umidità ambientale. Pertanto, è importante tenere conto di queste variabili quando si utilizza il sensore in applicazioni critiche e calibrarlo di conseguenza.

Applicazioni comuni

Il sensore MQ-135 trova applicazione in una vasta gamma di settori e progetti, tra cui:

  1. Monitoraggio della qualità dell’aria: viene utilizzato per misurare la concentrazione di gas tossici o inquinanti nell’aria in ambienti interni ed esterni.
  2. Sistemi di allarme gas: può essere integrato in sistemi di allarme per rilevare fughe di gas pericolosi come il monossido di carbonio o il gas metano.
  3. Rilevamento dell’ammoniaca in agricoltura: è utilizzato per monitorare i livelli di ammoniaca in ambienti di allevamento per la salute degli animali.
  4. Progetti di automazione domestica: può essere incorporato in sistemi di automazione domestica per attivare dispositivi di ventilazione o avvisi in caso di concentrazioni di gas pericolose.
  5. Progetti didattici: il sensore MQ-135 è spesso utilizzato in progetti didattici per insegnare ai giovani studenti i concetti di rilevamento dei gas e della qualità dell’aria.

Limiti e precauzioni

Va notato che il sensore MQ-135 ha una sensibilità variabile e può essere influenzato da gas diversi dalla sostanza specifica che si intende rilevare. Pertanto, è importante calibrare accuratamente il sensore e tenere conto delle condizioni ambientali.

NOTA BENE: questo progetto ha un intento puramente didattico e non ha la pretesa di realizzare un dispositivo di monitoraggio gas preciso ed accurato come uno commerciale. Pertanto, non deve essere utilizzato per scopi di monitoraggio in ambienti potenzialmente pericolosi.

In conclusione, il sensore MQ-135 è un dispositivo versatile e affidabile per il rilevamento dei gas, ampiamente utilizzato in applicazioni che richiedono il monitoraggio della qualità dell’aria e la sicurezza ambientale. Tuttavia, è essenziale comprendere le sue caratteristiche e le sue limitazioni prima di utilizzarlo in un progetto specifico.

Il DS3231

L’RTC DS3231 (Real-Time Clock DS3231) è un componente elettronico molto utilizzato per tenere traccia del tempo in applicazioni embedded. La sua interfaccia I2C (Inter-Integrated Circuit) lo rende facile da integrare con microcontrollori, come l’Arduino, e altri dispositivi digitali (tipo ESP8266 e ESP32). Quello utilizzato in questo articolo è prodotto dall’azienda AZDelivery. Vediamo una descrizione accurata del DS3231:

Precisione estrema

Il DS3231 è noto per la sua straordinaria precisione nel tenere traccia del tempo. Ha un errore massimo di appena alcuni secondi all’anno, il che lo rende ideale per applicazioni che richiedono marcature temporali accurate.

Interfaccia I2C

L’RTC DS3231 comunica tramite l’interfaccia I2C (o I-squared-C). L’I2C è un protocollo di comunicazione seriale che consente di collegare più dispositivi su un singolo bus, rendendo il DS3231 ideale per progetti che richiedono una gestione semplice e efficiente del tempo.

Calendario completo

Oltre a tenere traccia dell’orario, il DS3231 gestisce anche un calendario completo, compresi giorni della settimana, mesi e anni, considerando anche gli anni bisestili. Questa funzionalità lo rende utile in applicazioni come sveglie, calendari digitali e orologi in tempo reale.

Memoria EEPROM integrata

Il DS3231 è dotato di una piccola memoria EEPROM (Electrically Erasable Programmable Read-Only Memory) che può essere utilizzata per memorizzare dati aggiuntivi. Questa memoria è non volatile, il che significa che i dati rimangono conservati anche in assenza di alimentazione elettrica.

Allarme configurabile

Puoi configurare due allarmi separati sul DS3231, consentendo al dispositivo di generare un segnale di interruzione o un segnale di allarme quando determinate condizioni di tempo sono soddisfatte. Questa funzione è utile in applicazioni come sveglie o controlli di temporizzazione.

Temperatura integrata

Il DS3231 dispone anche di un sensore di temperatura integrato. Questo sensore può essere utilizzato per monitorare la temperatura ambiente ed è particolarmente utile quando la precisione della temperatura è importante per un’applicazione.

Bassa alimentazione e backup batteria

Per preservare la precisione del tempo anche in caso di interruzione dell’alimentazione principale, il DS3231 può essere alimentato da una batteria tampone. Questa batteria garantisce che il dispositivo continui a funzionare e a tenere traccia del tempo anche quando l’alimentazione principale è interrotta.

Applicazioni comuni

Il DS3231 è ampiamente utilizzato in una vasta gamma di applicazioni, tra cui:

  1. Orologi in Tempo Reale (RTC): è comunemente utilizzato per aggiungere capacità di marcatura temporale precisa a dispositivi come orologi digitali.
  2. Sveglie digitali: il DS3231 può essere impiegato per creare sveglie precise che non devono essere resettate frequentemente.
  3. Controllo di dispositivi temporizzati: è utile in applicazioni che richiedono attivazioni o disattivazioni programmate.
  4. Data logger: può essere utilizzato per annotare i dati con marcature temporali in progetti di registrazione dati.
  5. Sistemi di automazione domestica: può essere integrato in sistemi di automazione domestica per programmare azioni basate sull’orario.

In sintesi, il DS3231 è un componente altamente affidabile e preciso per il monitoraggio del tempo e della data in applicazioni elettroniche. La sua interfaccia I2C semplifica l’integrazione con una varietà di dispositivi, rendendolo una scelta popolare per progetti basati su microcontrollori.

Il modulo micro SD card

Il modulo micro SD card è un componente elettronico progettato per essere utilizzato con schede Arduino e altre piattaforme di sviluppo compatibili. Questo modulo consente di leggere e scrivere dati su schede di memoria Micro SD e Micro SDHC (TransFlash) utilizzando la comunicazione SPI (Serial Peripheral Interface). Quello utilizzato in questo articolo è prodotto dall’azienda AZDelivery.

Ecco una descrizione dettagliata di questo modulo:

Interfaccia SPI

Il modulo di lettore di schede SD utilizza l’interfaccia SPI, che è un protocollo seriale di comunicazione a 4 fili comunemente utilizzato in progetti embedded. Questi quattro fili sono:

  1. MISO (Master In Slave Out): questo è il pin attraverso il quale il modulo riceve dati dal dispositivo master, che di solito è l’Arduino o un altro microcontrollore.
  2. MOSI (Master Out Slave In): questo è il pin attraverso il quale il modulo invia dati al dispositivo master.
  3. SCK (Serial Clock): questo è il pin del clock che sincronizza la trasmissione dei dati tra il modulo e il dispositivo master.
  4. CS (Chip Select): questo pin viene utilizzato per selezionare il modulo di lettura della scheda SD e inizializzare le operazioni di lettura/scrittura.

Supporto per Micro SD e Micro SDHC

Questo modulo è compatibile sia con le schede Micro SD che con le schede Micro SDHC, consentendo l’utilizzo di schede con capacità fino a 32 GB. Le schede Micro SD sono comunemente disponibili e offrono un’ampia capacità di archiviazione per dati come file di log, immagini, audio o qualsiasi altra informazione che desideri registrare.

Facile da utilizzare

Il Modulo Lettore SD è facile da integrare nei tuoi progetti Arduino. Viene fornito con una libreria Arduino preinstallata, che semplifica notevolmente la lettura e la scrittura dei dati sulle schede micro SD. Questa libreria consente di accedere facilmente ai file presenti sulla scheda e di effettuare operazioni come la creazione, la lettura, la modifica e l’eliminazione dei file.

LED di stato

Il modulo è dotato di un LED di stato che indica quando il modulo è attivo e in comunicazione con il dispositivo master. Questo LED può essere utile per il debug e il monitoraggio delle operazioni di lettura/scrittura.

Applicazioni comuni

Questo modulo di lettore di schede micro SD è ampiamente utilizzato in una serie di progetti, tra cui:

  • Data logging: per registrare dati da sensori o altre fonti su una scheda micro SD per analisi future.
  • Lettura di file multimediali: per leggere file audio o immagini da schede micro SD per la riproduzione o la visualizzazione su dispositivi.
  • Progetti IoT: in progetti basati su Internet delle cose (IoT) per registrare dati ambientali o di sensori su schede micro SD.
  • Registrazione video: in sistemi di registrazione video basati su Arduino o microcontrollori simili.

Il Modulo SD card è un componente utile e pratico per progetti che richiedono la lettura e la scrittura di dati su schede di memoria Micro SD. La sua compatibilità con Arduino e altre piattaforme di sviluppo lo rende un’aggiunta preziosa per progetti che richiedono l’archiviazione e la gestione dei dati. Grazie alla sua facilità d’uso e al supporto per schede di memoria di grandi dimensioni, è una scelta popolare tra gli appassionati di elettronica e gli sviluppatori.

Realizzazione del progetto

Lo schema elettrico

Prima di realizzare il circuito vero e proprio diamo un’occhiata al pinout della board:

Pinout del NodeMCU ESP8266
Pinout del NodeMCU ESP8266

Vediamo anche i pinout degli altri componenti:

Il pinout del modulo RTC
Il pinout del modulo RTC
Il pinout del modulo micro SD card
Il pinout del modulo micro SD card
Il pinout del modulo sensore gas
Il pinout del modulo sensore gas

Vediamo ora lo schema elettrico del progetto, realizzato come al solito con Fritzing:

Schema elettrico completo del sensore di gas
Schema elettrico completo del sensore di gas

È possibile che qualche modulo abbia bisogno di qualche connettore e quindi si renda necessario fare qualche saldatura. Se sei nuovo a questo argomento ti consiglio di dare una lettura all’articolo Un altro tutorial su come saldare.

Come puoi osservare, i moduli micro SD card e sensore di gas vengono alimentati a 5V dal terminale Vin mentre il modulo RTC è alimentato a 3.3V dal terminale 3V3 della ESP8266.

Il modulo micro SD card è collegato alla porta SPI della ESP8266 che impiega i pin:

  • D8 per il terminale CS (Chip Select)
  • D7 per il terminale MOSI (Master Out Slave In)
  • D6 per il terminale MISO (Master In Slave OUT)
  • D5 per il terminale SCK (Serial Clock)

Il modulo RTC è collegato alla porta I2C della ESP8266 che impiega i pin:

  • D1 per il terminale SCL
  • D2 per il terminale SDA

Il modulo sensore di gas è collegato ad un ingresso analogico e ad uno digitale. In particolare:

  • A0 per il valore analogico
  • D3 per il valore digitale

Lo sketch

Creiamo il progetto PlatformIO

Abbiamo già visto la procedura di creazione di un progetto PlatformIO nell’articolo Come creare un progetto per NodeMCU ESP8266 con PlatformIO.

Non installare le librerie indicate nell’articolo ma limitati ad installare la libreria RTClib by Adafruit come indicato nella foto seguente:

Installa la libreria RTClib by Adafruit
Installa la libreria RTClib by Adafruit

Ora modifica il file platformio.ini per aggiungere queste due righe:

monitor_speed = 115200
upload_speed = 921600

in modo che abbia un aspetto del genere:

[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
monitor_speed = 115200
upload_speed = 921600
lib_deps = adafruit/RTClib@^2.1.1

Ovviamente puoi scaricare il progetto dal link seguente:

Sostituisci il file main.cpp del progetto che hai creato con quello presente nel file zip.

Vediamo ora come funziona lo sketch.

Inizialmente vengono incluse le librerie necessarie:

#include <Arduino.h>
#include <Wire.h>
#include <RTClib.h> // Library for the DS3231 RTC
#include <SPI.h> // Include the SPI.h library
#include <SD.h>

Viene poi instanziato l’oggetto rtc che gestisce l’orologio:

RTC_DS3231 rtc;

Viene poi instanziato l’oggetto dataFile che rappresenta il file sulla micro SD card dove verranno scritti i dati e vengono definiti i pin chipSelect, gasDetectorDigital e ANALOGPIN0 relativi, rispettivamente, alla porta SPI del modulo micro SD card, all’uscita digitale del modulo sensore di gas e all’uscita analogica del sensore di gas.

File dataFile;
const int chipSelect = D8; // Set the CS pin of the SD Card Shield module 
const int gasDetectorDigital = D3;
#define ANALOGPIN0 A0  // ESP8266 Analog Pin ADC0 = A0

Vengono poi definite le variabili che gestiscono la temporizzazione delle misurazioni (measureDelay e lastTimeRan) e il prototipo della funzione setDateTimeFromSerial di cui parleremo in seguito.

unsigned long measureDelay = 2000;                //    NOT LESS THAN 2000!!!!!    BETTER 600000  (10 MINUTES)
unsigned long lastTimeRan;

void setDateTimeFromSerial();

Inizia quindi la funzione setup.

Abbiamo qui l’inizializzazione della porta seriale, del bus I2C, del modulo rtc, della micro SD card. Se non si riesce ad inizializzare la micro SD card lo sketch si blocca (a causa del comando return):

Serial.begin(115200);
Wire.begin();
rtc.begin();


// Initialize SPI communication with the SD module
if (!SD.begin(chipSelect)) {
Serial.println("Error initializing the SD card.");
return;
} 

Serial.println("SD card initialized successfully.");

A questo punto vengono settate la data e l’ora nel modulo RTC. Questo blocco trasferisce la data e l’ora prese dal computer al momento della compilazione dello sketch nel modulo RTC. Vedremo in seguito che lo sketch prevede anche un sistema di immissione della data e dell’ ora manuale (basato sulla succitata funzione setDateTimeFromSerial) al quale si accede digitando il carattere ‘S’ o il carattere ‘s’ nel Serial Monitor:

// Set the date and time only once if the DS3231 has not been previously initialized
if (rtc.lostPower()) {
Serial.println("RTC not initialized. I set the time...");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
Serial.println("Type 'S' or 's' to set the time and date.");

Alla fine della funzione setup troviamo la definizione dei pin di ingresso analogico e digitale dedicati alla lettura del modulo sensore di gas:

pinMode(ANALOGPIN0, INPUT); // Initializes ANALOGPIN0 as input
pinMode(gasDetectorDigital, INPUT); // Initializes gasDetectorDigital as input

Inizia ora la funzione loop. Incontriamo inizialmente un blocco if che stabilisce la temporizzazione delle operazioni di lettura dei moduli.

All’inizio viene letto il valore analogico del sensore di gas. Il valore restituito è un numero intero compreso tra 0 e 1023. Per convertirlo
in percentuale, viene utilizzata la funzione map(). Tale valore viene poi convertito in stringa.

int analogGasSensorValue = analogRead(ANALOGPIN0);
uint16_t  gasVal = map(analogGasSensorValue, 0, 1023, 0, 100);
String analogGasSensorValue_s = String(gasVal);

In seguito viene letto il modulo RTC, isolate le singole componenti (anno, mese, giorno, ore, minuti e secondi) e trasformate in stringhe:

DateTime now = rtc.now(); // Read the date and time from the DS3231    

String year_s = String(now.year());
String month_s = String(now.month());
String day_s = String(now.day());
String hour_s = String(now.hour());
String minute_s = String(now.minute());
String second_s = String(now.second());

Viene poi letto il valore del pin digitale del sensore di gas:

bool gasDetectorDigital_b = digitalRead(gasDetectorDigital);

Se il valore è true significa che il valore della soglia non è stato superato e sul file verrà scritta l’etichetta “NOALERT”, se il valore è false significa che il valore della soglia è stato superato e sul file verrà scritta l’etichetta “ALERT”:

    String gasDetectorDigital_s;
    
    if(gasDetectorDigital_b) {
        gasDetectorDigital_s = "NOALERT";
    } else {
        gasDetectorDigital_s = "ALERT";
    }

Viene poi composta la stringa da scrivere sul file nella micro SD card. Essa è data dalla concatenzazione dei vari dati separati da virgola, in modo da creare un file CSV:

String rowToLog = analogGasSensorValue_s + "%," + day_s + "," + month_s +  ","  +  year_s +  "," + hour_s +  "," + minute_s +  "," + second_s + "," + gasDetectorDigital_s;

Viene fatto poi un tentativo di apertura in scrittura del file (chiamato log.txt):

dataFile = SD.open("log.txt", FILE_WRITE);

Se il file viene aperto con successo, il descrittore del file punta alla fine del file (dataFile.seek(dataFile.size());) in modo da continuare la scrittura dal punto precedente (e non sempre dall’inizio del file) e aggiunge (appende) una nuova riga (dataFile.println(rowToLog);). Dopo di che il file viene chiuso in attesa di un nuovo ciclo.

if (dataFile) {
    Serial.println("File 'data.txt' opened successfully.");

    dataFile.seek(dataFile.size());
    Serial.println(rowToLog);
    // Write data to the file
    dataFile.println(rowToLog);
    dataFile.close();
}

In seguito troviamo una parte che rimane in “ascolto” sul Serial Monitor per capire se l’utente ha digitato il carattere “S” o il carattere “s” (come accennato più sopra). In caso affermativo viene chiamata la funzione setDateTimeFromSerial():

if (Serial.available() > 0) {
    char command = Serial.read();
    if (command == 'S' || command == 's') {
        setDateTimeFromSerial();
    }
}

delay(1000); // Update the time every second

Tale funzione non fa altro che ricevere la data e l’ora inserite manualmente dall’utente tramite il Serial Monitor:

void setDateTimeFromSerial() {
  int year, month, day, hour, minute, second;
  Serial.println("Enter the year (es. 2023): ");
  while (!Serial.available());
  year = Serial.parseInt();
  Serial.println(year);

  Serial.println("Enter the month (1-12): ");
  while (!Serial.available());
  month = Serial.parseInt();
  Serial.println(month);

  Serial.println("Enter the day (1-31): ");
  while (!Serial.available());
  day = Serial.parseInt();
  Serial.println(day);

  Serial.println("Enter the hour(0-23): ");
  while (!Serial.available());
  hour = Serial.parseInt();
  Serial.println(hour);

  Serial.println("Enter the minutes (0-59): ");
  while (!Serial.available());
  minute = Serial.parseInt();
  Serial.println(minute);

  Serial.println("Enter the seconds(0-59): ");
  while (!Serial.available());
  second = Serial.parseInt();
  Serial.println(second);

  rtc.adjust(DateTime(year, month, day, hour, minute, second));
  Serial.println("Time and date updated successfully!");
}

Una volta che l’utente ha inserito tutti i dati, aggiorna l’orologio col comando:

rtc.adjust(DateTime(year, month, day, hour, minute, second));

Ora compila e carica lo sketch. Se tutto funziona bene il dispositivo dovrebbe iniziare a fare le misurazioni e a scrivere sul file ogni measureDelay ms. Nello sketch è impostato a 2000 (cioè 2 secondi). Regola il trimmer del sensore di gas in modo da imporre la soglia desiderata.

Per controllare il file prodotto spegni prima il dispositivo, estrai la micro SD card e inseriscila nel tuo PC (magari tramite un adattatore). Una volta aperto il file ti dovrebbe apparire qualcosa del genere:

35%,23,9,2023,16,49,56,NOALERT
34%,23,9,2023,16,49,59,NOALERT
33%,23,9,2023,16,50,1,NOALERT
33%,23,9,2023,16,50,4,NOALERT
32%,23,9,2023,16,50,7,NOALERT
32%,23,9,2023,16,50,10,ALERT
31%,23,9,2023,16,50,12,ALERT
32%,23,9,2023,16,50,15,ALERT
31%,23,9,2023,16,50,18,ALERT
31%,23,9,2023,16,50,20,NOALERT
30%,23,9,2023,16,50,22,NOALERT
30%,23,9,2023,16,50,25,NOALERT
29%,23,9,2023,16,50,28,ALERT
29%,23,9,2023,16,50,31,NOALERT
29%,23,9,2023,16,50,34,NOALERT
28%,23,9,2023,16,50,37,NOALERT
28%,23,9,2023,16,50,40,NOALERT
28%,23,9,2023,16,50,43,NOALERT
28%,23,9,2023,16,50,46,NOALERT
27%,23,9,2023,16,50,49,NOALERT

Come già menzionato, il file è in formato CSV. Questo perché un file CSV (Comma-Separated Values) è un tipo di file di testo utilizzato per rappresentare dati tabulari, come tabelle o fogli di calcolo, in cui le colonne di dati sono separate da virgole o altri delimitatori. Ecco una descrizione di un file CSV:

  1. Testo puro: un file CSV è un file di testo puro che contiene dati in formato tabellare. Può essere aperto e letto con qualsiasi editor di testo.
  2. Righe e colonne: i dati sono organizzati in righe e colonne. Ogni riga rappresenta un record o un’istanza di dati, mentre le colonne rappresentano i campi o le variabili dei dati.
  3. Delimitatori: i dati nelle colonne sono separati da delimitatori, di solito virgole (,), punto e virgola (;), o tabulazioni (\t). Il delimitatore scelto determina il tipo di file CSV (CSV con virgola, CSV con punto e virgola, CSV con tabulazione, ecc.).
  4. Intestazioni: spesso, la prima riga di un file CSV contiene le intestazioni delle colonne, cioè i nomi dei campi. Queste intestazioni sono utili per comprendere il significato dei dati nelle colonne.
  5. Dati: le righe successive contengono i dati effettivi. Ogni riga rappresenta un record e ogni campo (colonna) contiene un valore specifico.
  6. Citazioni: in alcuni casi, i valori di una colonna possono essere racchiusi tra virgolette doppie (") per gestire correttamente i valori che contengono il delimitatore stesso o caratteri speciali.

Il file CSV è facilmente apribile come foglio di calcolo con programmi quali Excel o LibreOffice Calc in modo da fare calcoli, statistiche o grafici sui dati raccolti.

Newsletter

Se vuoi essere aggiornato sui nuovi articoli, iscriviti alla newsletter. Prima dell’iscrizione alla newsletter leggi la pagina Privacy Policy (UE)

Se ti vuoi disiscrivere dalla newsletter clicca sul link che troverai nella mail della newsletter.

Inserisci il tuo nome
Inserisci la tua email
0 0 votes
Valutazione articolo
guest
0 Commenti
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
Torna in alto