Skocz do zawartości

[ESP8266] pomiar jakości powietrza przy pomocy MQ135


Pomocna odpowiedź

Napisano

Cześć,

Szukałem podobnych tematów jednak nie znalazłem rozwiązania. Do swojego projektu chcę dorzucić pomiar jakości powietrza za pomocą MQ135. Czujnik ten jest zasilany 5V, aby nie uszkodzić ESP8266 zbudowałem dzielnik napięcia, który na wyjściu daje ok 2.97 V (schemat w załączniku). Problem w tym, że MQ135 zwraca bardzo niskie wartości. Z góry dzięki za pomoc.

#include "MQ135.h"

const int analogInPin = A0;  // ESP8266 Analog Pin ADC0 = A0
MQ135 gasSensor = MQ135(A0);
void setup() {
  // initialize serial communication at 115200
  Serial.begin(115200);
}

void loop() {
  float airQuality = gasSensor.getPPM();
  Serial.print("Air quality: ");
  Serial.print(airQuality);
  Serial.println(" PPM");
  Serial.println();
  delay(1000);
}

 

schemat.png

2020-10-31 10_56_27-montion-detecion _ Arduino 1.8.13.png

Cześć @Treker,

Korzystam z tej biblioteki, obecnie wprowadziłem następujące zmiany w poniższej funkcji.
 

float MQ135::getResistance() {
  int val = analogRead(_pin);
  return ((1023./(float)val) * 3. - 1.)*RLOAD; // wcześniej było return ((1023./(float)val) * 5. - 1.)*RLOAD;
}

 MQ135 zwraca nadal bardzo niskie wartości, nie rozumiem skąd tak wysoka wartość rzero...
RZero=3965.71
PPM=0.01
PPM Corrected=0.01

Wartości są zwracane przy pomocy tego kodu.

void getAirQuality(){
  float airHumidity = hum;
  float airTemperature = temp;

  rzero = gasSensor.getRZero(); 
  Serial.print("RZero=");
  Serial.println(rzero); 
   
  ppm = gasSensor.getPPM(); 
  Serial.print("PPM=");
  Serial.println(ppm); 
  
  ppmbalanced = gasSensor.getCorrectedPPM(airTemperature, airHumidity); 
  Serial.print("PPM Corrected=");
  Serial.println(ppmbalanced);
}

Myślałem, że problem leży w źle zdefiniowanej wartości RZERO, zgodnie z tym poradnikiem, zdefiniowałem w pliku mq135.h zwracaną wartość RZERO (3659). Otrzymałem poniższe wyniki. Na początku ESP8266 był podłączony do USB w laptopie, przez ten czas rejestrował wartości na poziomie ok 300 PPM. Następnie odłączyłem ESP od laptopa i podłączyłem do ładowarki (5V/1A), MQ135 cały czas jest zasilany przez moduł zasilania płytek stykowych, która jest zasilana przez osobą ładowarkę 5V/1A i wyszedłem z mieszkania. Po chwili wartość PPM skoczył na ponad 1K 🤨. Zauważyłem jeszcze jeden problem, gdy chcę zasilać ESP i MQ135 z płytki stykowej, MQ135 nie zwraca żadnej wartości. Dioda zasilania świeci się ale jak widać po wykresie między 12 a 14, MQ135 zwraca 0. Czyżby za duży pobór prądu?

Z góry dziękuję

bryla

comment_1604241590SN0mP0F92dgTnpeKHUaLS3,w400.jpg

Zajmowałem się podobnymi czujnikami dawno temu.Czujnik tego typu jest elementem wykorzystującym zjawisko adsorpcji w temperaturze ok 350oC kiedyś a teraz jak widzę 250oC.Grzałka podgrzewa półprzewodnik.Przez grzałkę płynie dość duży prąd bo ok. 200mA.Jak jest czyste powietrze to przy powierzchni półprzewodnika gromadzi się tlen,który powoduje,że oporność półprzewodnika jest stosunkowo duża.W chwili pojawienia się węglowodorów,tlenku węgla następuje katalityczne utlenianie powszechnie zwane spalaniem.Pozbawienie tlenu przy powierzchni powoduje spadek oporności półprzewodnika.Posłużenie się płytką stykową to nie jest najlepszy pomysł.  Połączenia powinny być pewne czyli najlepiej lutowane.Zasilacz powinien być dobrej jakości z dobrze filtrowanym napięciem.Napięcie zgodnie z notą katalogową 5V + -0,1V.Jak to zrobisz odpadnie Ci problem z połączeniami i zasilaniem .W nocie katalogowej znajdziesz tabelkę

obraz.thumb.png.4033d8a6169fca006ad644b2fdbe43a0.png

Producent sugeruje by przed użyciem  czujnik wygrzać.To wygrzewanie powinno trwać od 48 h  do 168h w zależności od czasu nieużywania.W Twoim przypadku powinno być to 168 godzin.

Rezystor RL o tolerancji 1%  i mniejszej jeśli jest dostępny.Dobrze by się stało gdybyś do czujnika podłączył wzmacniacz operacyjny  w układzie wtórnika napięciowego i dopiero do wyjścia podłącz  dzielnik napięcia ale to opcja.Zamiast jednego rezystora 4,7k zastosuj dwa np 2,2k i 2,5k o tolerancji jak wcześniej pisałem.Rezystory nie takie zwykłe ale metalizowane i dobrze by było je postarzyć wkładając do zamrażarki a następnie do piekarnika i tak kilkadziesiąt razy.Kiedyś producenci udostępniali wykresy obrazujące  zmianę rezystancji w czasie.Chodzi o to by pomiar był wiarygodny.Pamiętaj taki czujnik jest na tyle czuły,że wykrywa to co się z Ciebie wydobywa i  w szczególności może służyć jako alkomat.

  • 2 tygodnie później...

Dziękuję za obszerną odpowiedź @szymonw. Obecnie czujnik jakby się ustabilizował. Wychodzi na to, że za krótko go wygrzewałem. Czy proces wygrzewania można jakoś powtórzyć, np schładzając czujnik i podpinając go do stabilnego zasilania ponownie? 

Proces wygrzewania ma na celu usunięcie wszelkich związków chemicznych,które osadziły się na aktywnej części czujnika.Producent to opisał.Podłącz do stabilnego zasilania i niech się wygrzewa. 168 godzin to tydzień -7 dób( wiesz z czym nie mylić😄). Jeśli musisz zrobić dzielnik napięcia to kup porządne  metalizowane rezystory i je zastosuj. Niestety "świeże "  rezystory mogą "pływać" to znaczy ich rezystancja się zmienia w czasie.Te zmiany są quasi-statyczne co powoduje ,że z  upływem czasu pomiar może być niewiarygodny.Powodzenia

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...