MQ135 come si usa?

ciao a tutti, sono abbastanza nuovo qui e sto creando un piccolo progetto di controllo della qualità dell'aria per la mia cantina, ho comprato un MQ135 e l'ho collegato usando questa libreria: GitHub - NuclearPhoenixx/MQ135: 📚🌀 Arduino library for the MQ135 air quality sensor. Allows for temperature and humidity corrected readings.

purtroppo non ho trovato su Internet una spiegazione chiara su come interpretare i valori che il sensore restituisce (magari sono io che non ho capito eh) qualcuno può spiegarmi in modo SEMPLICE cosa sono i valori:

  • getResistance
  • getCorrectedResistance
  • getPPM
  • getCorrectedPPM
  • getRZero
  • getCorrectedRZero

aggiungo che ho collegato un sensore di temperatura e umidità per passare alla libreria questi due valori in modo dinamico

grazie a tutti!

Buongiorno e benvenuto nella sezione Italiana del forum,

cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazione NELL'APPOSITA DISCUSSIONE (... quello che vedi in blu è un link, fai click su di esso per raggiungere la discussione) spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Grazie,

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto. :wink:

fatto! chiedo scusa non avevo capito che la presentazione era obbligatoria :slight_smile: spero di aver fatto tutto giusto!

1 Like

Questi sensori hanno una resistenza che deve essere riscaldata. Quando sono calde il valore della resistenza dipende dalla concentrazione di varie sostanze chimiche in aria. I sensori non sono mai sensibili a una sostanza singola. Inoltre la loro risposta dipende dalla temperatura ambientale e dall umiditá.

La libreria ha degli esempi. Hai gia provato di guardarli?

Ciao Uwe

ciao! grazie mille per la tua risposta, la domanda riguardava soprattutto il modo di interpretare i dati che leggo dal sensore, sono riuscito senza grossi problemi a collegarlo e a leggere ma... non so come dire, non so bene cosa sto leggendo :smiley:

quali valori indicano un'aria pulita, quali una situazione non ottimale e quali una situazione di pericolo?

questo è lo sketch che sto usando:

#include <LiquidCrystal_I2C.h>
 
#include <SimpleDHT.h>

#include <MQ135.h>

#define T_VIS 5000
#define T_MSG 1000

int totalColumns = 20;
int totalRows = 4;

LiquidCrystal_I2C lcd(0x27, totalColumns, totalRows);

SimpleDHT22 dht22(2);

MQ135 mq135(A1);

long vis;
long msg;

int status = 0;

float temp = 0.0;
float hum = 0.0;

float correctedPPM = 0.0;

int dhtErr;

void setup() {

  Serial.begin(9600);

  vis = msg = millis();

  lcd.init(); 
  lcd.backlight(); // use to turn on and turn off LCD back light

}

void loop() {

  delay(500);

  if( millis() >= ( vis + T_VIS ) ) {
    vis = millis();
    status++;
    if( status > 1 ) {
      status = 0;
    }
  }

  switch( status ) {

    case 0:
      if( millis() >= ( msg + T_MSG ) ) {
        msg = millis();
        dht22.read2( &temp, &hum, NULL );
        correctedPPM = mq135.getCorrectedPPM(temp, hum);
        float correctedRZero = mq135.getCorrectedRZero(temp, hum);
        float resistance = mq135.getResistance();
        Serial.println("visualizzo la temperatura e l'umidità");
        Serial.println( temp );
        Serial.println( hum );
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("TEMP ");
        lcd.print( temp );
        lcd.print("C ");
        lcd.setCursor(0,1);
        lcd.print("UMID ");
        lcd.print( hum );
        lcd.print("% ");
      }
    break;

    case 1:
      if( millis() >= ( msg + T_MSG ) ) {
        msg = millis();
        dht22.read2( &temp, &hum, NULL );
        correctedPPM = mq135.getCorrectedPPM(temp, hum);
        float correctedRZero = mq135.getCorrectedRZero(temp, hum);
        float resistance = mq135.getResistance();
        Serial.println("visualizzo la qualità dell'aria");
        Serial.println( correctedPPM );
        Serial.println( correctedRZero );
        Serial.println( resistance );
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("PPM ");
        lcd.print( correctedPPM );
        lcd.setCursor(0, 1);
        lcd.print("ZERO ");
        lcd.print( correctedRZero );
        lcd.setCursor(0, 2);
        lcd.print("RES ");
        lcd.print( resistance );
      }
    break;

  }

}

Sul display LCD leggo correttamente temperatura e umidità, ma non so come interpretare i valori che leggo come PPM, RZERO e RESISTANCE

grazie mille!

  • getCorrectedPPM() restituisce una stima della concentrazione di gas in parti per milione (ppm) , basata sulla resistenza del sensore e sulla curva di riferimento che puoi trovare nel datasheet (corretta in funzione dei valori di temperatura ed umidità attuali).
  • getCorrectedRZero() restituisce il valore di resistenza del sensore in aria pulita (R₀), utile per la calibrazione (corretta in funzione dei valori di temperatura ed umidità attuali).
  • etc etc.

Per tutti i metodi della libreria disponibili e la relativa spiegazione, puoi far riferimento al file MQ135.cpp che è ben commentato.

Queste sono domande non semplici da rispondere e che non posso dare una risposta esaudiente.
Questo tipo di sensore non é sensibile a una sostenza ma a una varietá di sostanze.
La pagina del produttore: SNS-MQ135 menziona
"Detects NH3, NOx, alcohol, benzene, smoke, CO2, etc." Il grafico della sensibilitá nel Dataseet menziona anche CO e NH4 (che dovrebbe essere un errore) non NH3.

Sono tutto eccetto la CO2 sostanze nocive o cancerogene (benzene). La CO2 diventa problematica a concentrazione olte qualche % in aria, mortale a5% (corisponde a 50000ppm)

Non so dirti se un valore letto corisponde a una concentrazione (per esempio) di 200ppm CO o 20ppm di CO2. il primo é molto procupante il secondo é insignificante visto che l' aria ne contiene ca 400ppm.

Oltre questo la temperatura e l'umiditá influenzano molto la misura.

Non so se hai un rilevatore di CO nella Tua cucina che suona regolarmente quando apri una bottiglia di vino in soggiorno.
Questo é come funziona questo sensore.

Ciao Uwe

il fatto è che sembra che il sensore dia delle letture pseudocasuali forse c'è qualche errore nel codice?

scusate mi sento stupido ma non riesco a capire cosa sbaglio





ciao a tutti, vi aggiorno casomai la mia esperienza possa essere utile a qualcuno :smiley:

il problema delle letture casuali del sensore era dovuto al cavetto della massa che non faceva contatto bene, mi spiego meglio, i sensori devono avere la massa in comune con Arduino e nel mio caso avevo usato un jumper che non faceva contatto bene, quindi sostituendolo ho risolto il problema!

se a qualcuno interessa posso postare il codice definitivo del progetto e lo schema elettrico originale

ciao a tutti!

Ciao, a quanto gia correttamente detto da uwefed, aggiungo solo che MQ135 e' un sensore "generico" per la qualita' dell'aria, ed andrebbe usato solo per dare una generica misurazione della possibile percentuale di inquinanti (con la funzione di rilevare solo se ce ne sono troppi), in quanto oltre a non discriminarli fra loro, e' sensibile anche alla CO2 (anidride carbonica, diversa da CO, monossido di carbonio), e se misurasse zero anche di quella, allora avresti comunque un problema.

Mi spiego meglio, una certa percentuale (minima, tipo 0.5% mi sembra di ricordare) di CO2 e' non solo necessaria, ma anche indispensabile, in quanto la totale assenza di essa (o comunque al di sotto di una certa soglia, molto bassa), puo causare alcalosi respiratoria, rischio di apnea (se il riflesso respiratorio si arresta) ed effetto Bohr inverso (roba tecnico-medica relativa al peggioramento dell'ossigenazione dei tessuti a causa del malfunzionamento dell'emoglobina, ma non essendo un medico, non ne so molto di piu).

Questo riflesso respiratorio automatico negli esseri umani (e nella maggior parte dei mammiferi), e' quello che ti fa respirare anche quando non ci pensi o non te ne accorgi ... questo riflesso e' innescato dall'anidride carbonica rilevata nel sangue (e parzialmente dipendente anche dall'anidride carbonica presente nell'atmosfera), e se e' assente c'e' il pericolo che si smetta di respirare in automatico senza accorgersene.

Un "vero" sistema di controllo della qualita' dell'aria (o almeno, uno che possa dare informazioni piu precise di quel sensore) e' di solito costituito da un gruppo di piu sensori, ognuno specifico per certi tipi di gas e sostanze, pero' c'e' anche da dire che le unita' da laboratorio, per quanto siano precise, costano un paio di spropositi e non avrebbero senso in un'apparecchio autocostriuto ... si potrebbero invece usare alcuni sensori economici che' per quanto abbastanza "generici" (nel senso che danno comunque indicazioni relative ad una classe o ad un gruppo di sostanze, invece che a singole sostanze), ti consentirebbero di farti una centralina di controllo piu efficente e con indicazioni piu complete.

Ad esempio, un sistema multisensore di questo tipo:

MQ2, sensibile a molti gas infiammabili, GPL, butano, propano, metano, alcool, idrogeno

MQ3, molto piu sensibile all'alcool che al resto

MQ7, questo e' sensibile al monossido di carbonio e all'idrogeno, oppure MQ307A, molto piu sensibile al monossido di carbonio e molto meno all'idrogeno ... questi sensori, contrariamente agli altri, richiedono alimentazione ad "impulsi", con il riscaldatore tenuto per 60 secondi a 5V e per 90 secondi ad 1.4V (30 secondi a 0.9V e 120 a 0.2V per il 307a), alternati, con le letture prese nel periodo di alimentazione a bassa tensione, prima di rimetterlo a quella di riscaldamento, e le tensioni sono abbastanza critiche, quindi serve fargli un circuito apposta.

Se si vuole, anche un MQ137, sensibile all'ammoniaca ed un po anche all'etanolo.

Per la CO2, meglio un sensore ad infrarossi che elettrochimico, ce ne sono di abbastanza economici anche di quelli, pure montati su breakout, tipo il senseair S8 o simili.

Gia con questi, ed "interpretando" le varie letture fra loro, e' possibile costruire qualcosa che, anche senza essere uno strumento di laboratorio, puo dare indicazioni piu precise di "ok, puoi respirare" oppure "trattieni il fiato o sei morto" (esagero ovviamente, ma neppure troppo :grin: ) ... ad esempio, se MQ2 e MQ3 salgono insieme, e' piu probabile che sia alcool, mentre se MQ2 sale ma MQ3 no, e' piu probabile che siano altri gas combustibili, e cosi via, integrando altri sensori si puo, ovviamente entro un certo limite, discriminare di piu.

1 Like

grazie mille di tutto cuore, era esattamente quello che mi serviva di sapere, inoltre mi hai fornito un sacco di informazioni interessanti!

credo proprio che seguirò il tuo consiglio e aggiungerò un po' di sensori più specifici :slight_smile:

grazie davvero!!!

Figurati ... "Uno e' lieto di poter servire" :grin:

spero di poter essere utile anch'io qualche volta! :smiley:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.