Sensor Auslesen MQ-135

Guten Abend,

ich bin gerade dabei meinen CO2-Sensor MQ-135 die auf dem Datenblatt vorgeschriebene Einlaufzeit laufen zu lassen.
Dabei lese ich die Werte über den Seriellen Monitor aus. Nun zu meiner Frage: Ist es möglich ohne einen schon kalibrierten Sensor einen genauen Wert des CO2-Gehalts in der Luft in ppm zu bestimmen?
Aktuell liegt der angezeigte Wert bei ca. 140. Mir ist bekannt, dass ich über die zuvor im Skript importierte Bibliothek den "Normal" Wert, also den Wert an frischer Luft so angleichen kann, dass dieser stimmt. Allerdings habe ich nur minimale Schwankungen wenn ich beispielsweise den Sensor anhauche oder ähnl.
Wie kann ich hier genaue Werte ermitteln?
Im Internet bin ich auf folgendes gestoßen:

The graphic above seems a power function
y = ax^b
so
ppm = a
(Rs/Ro)^b
using power regression, we can obtain scaling factor (a), and exponent (b), for the gas we would like to measure

Then
Ro = Rs * sqrt(a/ppm, b) = Rs * exp( ln(a/ppm) / b )

-Davide Gironi blog: Cheap CO2 meter using the MQ135 sensor with AVR ATmega

Allerdings werde ich daraus nicht schlauer.
Wäre nett wenn mir jemand weiterhelfen könnte, da ich auch in anderen Threads/Foren nichts für mich verständliches zum Thema gefunden habe.

Mit freundlichen Grüßen
Philipp :wink:

Hallo,
das Ding wollte ich mir einmal für das Raumklima besorgen.
Das Problem ist, das Du keine Referenz hast. Es bleibt immer das Gefühl des "Schätzeisen.
Mal müßte sich einmal ein CO2-Messgerät leihen. Schornsteinfeger? Dann könnte man Vergleiche anstellen.
Gruß und Spaß
Andreas

Ja, ich merks auch immer mehr...
Ohne einen vernünftigen Vergleichswert geht leider nichts.

Aber theoretisch könnte man das doch auch über eine Tabelle laufen lassen, falls man so etwas im Internet findet, oder nicht?!

Ich habe dann aber noch einmal eine Frage zu der angegebenen Formel. Was kann man mit dieser dann herausfinden? Eigentlich sollte man doch über diese zu einem genauen ppm Wert kommen?! Oder denke ich dabei in eine völlig falsche Richtung?

Mfg
Philipp

Ich habe gerade auch noch etwas neues gefunden.
Wenn man die Library vom Sensor öffnet findet man unteranderem folgendes:

class MQ135 {
private:
uint8_t _pin;

public:
MQ135(uint8_t pin);
float getCorrectionFactor(float t, float h);
float getResistance();
float getCorrectedResistance(float t, float h);
float getPPM();
float getCorrectedPPM(float t, float h);
float getRZero();
float getCorrectedRZero(float t, float h);
};
#endif

kann man hier nicht über "float getPPM();" einen genauen Wert auslesen?!

Ich bin allerdings gerade zu blöd diesen Teil in mein Skript mit einzuarbeiten...

Oder bin ich auch hier auf dem Holzweg?!

So nun noch mal ein Statusupdate:

Ich habe jetzt den Sensor mit folgendem Skript am laufen

#include "MQ135.h"
MQ135 gasSensor = MQ135(1);

float rzeroMin;
float rzeroMax;

void setup() {
  rzeroMin = 10000;
  rzeroMax = 0;
  Serial.begin(9600);
}

void loop() {
  float rzero1 = gasSensor.getRZero();

  if ( rzero1 > rzeroMax)
  {
  rzeroMax = rzero1;
  }

  if ( rzero1 < rzeroMin)
  {
  rzeroMin = rzero1;
  }

  Serial.print("Min: ");
  Serial.println(rzeroMin);

  Serial.print("Max: ");
  Serial.println(rzeroMax);

  Serial.print("Now: ");
  Serial.println(rzero1);

  float ppm = gasSensor.getPPM();
  Serial.print("ppm: ");
  Serial.println(ppm);
  Serial.println("----------");
  delay (10000);
}

Das läuft auch soweit. Habe mich jetzt mal raus gesetzt und den Sensor so kalibiriert, dass er als ppm Wert 400 ausgibt. Wenn ich jetzt allerdings den Sensor anhauche, fällt der ppm Wert ab. Normalerweise sollte er steigen. Des Weiteren fällt er nicht sehr weit nur um ca 15 - 20 ppm.
Liegt das an der Bibliothek oder woran liegt das?! Mittlerweile gehen mir die Lösungswege aus.

Was mir auch noch auffällt ist, dass der Sonsor selbst nachdem er wieder ungestört an der frischen Luft steht nicht seinen vorherigen ppm Wert ausgiebt. Also da passt noch gar nichts :frowning:

Ich hoffe jemand kann mir weiterhelfen.

Mfg
Philipp

Hallo,
da wird auch nichts passen. Du brauchst eine Referenz um den einzustellen.
Da sitzt ne´Heizung drinn, daher die 24Std. einlaufzeit.

Du kannst Dir einmal den Wert für eine grüne Wiese raussuchen. Dann fährst Du auf die selbe und
gleichst den Sensor auf diesen Wert ab.
Ob er Dir dann in der Wohnung den richtigen Wert ausgibt- bezweifel ich.
Hier haste noch was zum spielen. Viel Spaß dabei...

A

B

C

Gruß und Spaß
Andreas

Ok ich probiere noch ein wenig rum vielleicht finde ich ja doch noch eine Lösung. Aber bin mittlerweile auch davon überzeugt, dass es nicht so funktionieren wird wie ich mir das vorstelle.

Trotzdem vielen Danke für deine Hilfe :slight_smile:

Hallo,
etwas Licht ins Dunkle.
Gruß und Spaß
Andreas

Danke für den Link!
Allerdings wird mir daraus ersichtlich, dass ich ohne die Berücksichtigug von Temperatur und Druck einen falschen Wert erlange. Somit müsste ich noch 2 Sensorwerte mit in mein Projekt aufnehmen um einen exakten Wert zu erlangen.

Dabei stehe ich allerdings immernoch vor dem Problem, dass ich für die erstmalige Kalibrierung einen genauen Vergleichswert benötige.

Mit freundlichen Grüßen
Philipp

Mich lässt das ganze irgendwie nicht locker...

Ich habe mich jetzt noch einmal ein bischen im Internet umgeschaut und es gibt so viele Beiträge und Videos zu den Gassensore, da habe ich mich einfach noch einmal selber probiert:

#include "MQ135.h"
float ppm;
MQ135 gassensor = analogRead(A0);
void setup() {
  Serial.begin(9600);
  pinMode(A0, INPUT);
  

}

void loop() {
  ppm = gassensor.getPPM();
  Serial.print("CO2-Gehalt: ");
  Serial.print(ppm*1000);
  Serial.println(" ppm");
  Serial.println("--------");
  delay (2000);
}

Mit dem recht simplen Code habe ich es geschafft, dass der Arduino mir mal einigermaßen vernünftige Werte ausspuckt. Ich werde ihn jetzt noch einmal kalibrieren. Danach hoffe ich das Rätsel vorerst einmal gelöst zu haben. Allerdings steht dann im nächsten Schritt an Temperatur und Druck mit in die ppm Berechnung mit einfließen zu lassen.

Hallo,
also, dieser MQ-135 kann im Grunde genommen nichts. Er ist nur in der Lage,
CO2 zu dedektieren. Wie er das macht, und was dabei rum kommt- das entscheidest
Du.
Wenn Du die Standard-Sketche benutzt, dann wird der in seiner Genauigkeit ein
Ergebnis liefern, was immer damit interpriert sein mag.

Jetzt mußt Du Dir überlegen was Du willst. Soll der Sensor Dir den genauen
CO2-Gehalt Deiner Luft liefern, oder willst Du vergleichen.

Wenn Du den Gehalt Deiner Luft messen willst, dann brauchst Du eine Referenz
die Dir einen genauen Wert liefern kann.
Dieser Wert ist dann aber nur für eine bestimmte Temperatur gültig, den Druck
lassen wir einmal.
Driftet jetzt die Temperatur ab, dann driftet auch Deine Sensor.
Du brauchst also für jedes Grad Celsius einen Referenz-Sensor-Wert. Damit
bastels Du Dir eine Tabelle für Deinen MQ-135- und bekommst immer richtige
Werte angezeigt.
Also den tatsächliche CO2-Gehalt in Deiner Luft.
Da der MQ-135 nicht kalibriert ist- mußt Du das auf diesem Wege selbst
machen.

Wenn Du jetzt vergleichen willst (das machen fast alle Arduino-User- in dem
Irrglauben CO2 zu messen), dann mußt Du da anders rangehen.

Wir gehen mal davon aus, das Du in einem bestimmten Raum den CO2-Gehalt der
Luft feststellen willst.
Jetzt mußt Du dafür sorgen, das in diesem Raum das Raumklima über die
Temperatur, Luftfeuchte, Druck und frische Luft- in einem Bereich liegt-
der Dir als angenehm suggeriert ist.
Nun nimmst Du Deinen Sensor und kalibrierst ihn über 24Std auf genau dieses
Klima.
Dieser- nach 24Std-Wert ist Deine Referenz.
Nun feierst Du mit Deinen Kumpels in diesen Raum, der CO2-Wert steigt- dann
kannst Du das auswerten und den Arduino etwas machen lassen.

MEHR KANNST DU MIT DEM MQ-135 (ohne Referenz) NICHT MACHEN!

Bei frischer Aussenluft im Raum sollte der CO2-Gehalt so bei max. 400ppm liegen.
Von 500 bis 1000ppm wird es als angenehm empfunden.
Ab 1000ppm wird es als störend empfunden werden.
800 ppm sind sehr gute Luftverhänisse im Raum.
Du solltest also dafür Sorge tragen, das der ppm-Wert 1000 nicht übersteigt.

Wenn Du also mit Deinem MQ-135 den tatsächlichen (echten) CO2-Gehalt Deiner
Luft feststellen willst- dann mußt Du das ganze gelumpe- Temperatur, Feuchte
und Druck in Deinen Berechnungen mit einbeziehen.

Ich habe mir ein Raumklima-Messgerät mit dem Arduino gebastelt. Dazu gehört
aber auch der CO2-Gehalt der Luft. Als ich dann aber bemerkt habe, was für
einen Aufwand man mit dem MQ-135 betreiben muß, habe ich diesen Sensor sofort
verworfen.
Es gibt OEM-CO2-Sensoren- die- die UmgebungsBedingungen gleich mit messen und
verrechnen. Gehen aber so ab 70€ los. So einen werde ich mir mal besorgen,
wenn die BastelKasse gut gefüllt ist.

Mehr kann ich Dir dazu nicht sagen. Du mußt entscheiden, was Du mit Deinem
MQ-135 machen willst. Es wird immer ein erheblicher- und Fehler-anfälliger
Aufwand zu betreiben sein.
Gruß und Spaß
Andreas

RaumKlima.jpg

Wie in dem Link gesagt, die Sensoren messen genau genommen gar nicht ppm. Sondern die Dichte das Gases (Moleküle pro Volumen). Wenn sich jetzt Druck oder Temperatur ändert, dann ändert sich die Dichte obwohl die eigentliche Anzahl der Moleküle gleich bleibt.