Probleme mit dem Co2 Sensor MHZ19b

Hallo zusammen,

Ich versuche verzweifelt den Sensor zum laufen zu bekommen. Ich nutze Dazu die Bibliothek von wifwaf .

Der Sketch sieht wie folgt aus:

1. #include <MHZ19.h>
2. #include <MHZ19PWM.h>

3. #include <Arduino.h>
4. #include "MHZ19.h"                                        
5. #include <SoftwareSerial.h>                                // Remove if using HardwareSerial

6. #define RX_PIN 10                                          // Rx pin which the MHZ19 Tx pin is attached to
7. #define TX_PIN 11                                          // Tx pin which the MHZ19 Rx pin is attached to
8. #define BAUDRATE 9600                                      // Device to MH-Z19 Serial baudrate (should not be changed)

9. MHZ19 myMHZ19;                                             // Constructor for library
10. SoftwareSerial mySerial(RX_PIN, TX_PIN);                   // (Uno example) create device to MH-Z19 serial

11. unsigned long getDataTimer = 0;

12. void setup()
13. {
14.     Serial.begin(9600);                                     // Device to serial monitor feedback

15.     mySerial.begin(BAUDRATE);                               // (Uno example) device to MH-Z19 serial start   
16.     myMHZ19.begin(mySerial);                                // *Serial(Stream) refence must be passed to library begin(). 

17.     myMHZ19.autoCalibration();                              // Turn auto calibration ON (OFF autoCalibration(false))
18. }

19. void loop()
20. {
21.     if (millis() - getDataTimer >= 2000)
22.     {
23.         int CO2; 

24.         /* note: getCO2() default is command "CO2 Unlimited". This returns the correct CO2 reading even 
25.         if below background CO2 levels or above range (useful to validate sensor). You can use the 
26.         usual documented command with getCO2(false) */

27.         CO2 = myMHZ19.getCO2();                             // Request CO2 (as ppm)
28.         
29.         Serial.print("CO2 (ppm): ");                      
30.         Serial.println(CO2);                                

31.         int8_t Temp;
32.         Temp = myMHZ19.getTemperature();                     // Request Temperature (as Celsius)
33.         Serial.print("Temperature (C): ");                  
34.         Serial.println(Temp);                               

35.         getDataTimer = millis();
36.     }
37. }

und bei Zeile 9 bringt er mir den Fehler:

no matching funktion for call to ´MHZ19::MHZ19()´

kann mir da vielleicht jemand weiter helfen?

Danke im Voraus

Ok das Problem wurde gelöst. Es gab Überschneidungen mit einer Anderen Bibliothek nachdem ich alle entfernt habe und nur die von wifwaf aufgespielt habe lief alles einwandfrei.

Dann mach mal einen Haken dran bei "gelöst" / "Solution" - Danke.

So. Also das Problem der Kommunikation ist jetzt zwar gelöst doch leider tritt ein neues Problem auf.

ich habe

int8_t Temp;

mit float Temp;

ersetzt um mit den Temp Wert mit kommastelle anzeigen zu lassen.

Problem:

bei int8_t zeigt er 17°C an und bei float zeigt er mit zwischen 17,2 und 17,9°C an. mein Thermometer direkt daneben sagt aber bei im Raum sind 26,6°C.

meint ihr es könnte mit den 5V an Rx/Tx zusammen hängen?
Laut Datenblatt läuft die Signalübertragung mit 3,3V (5V kompatibel).

Dann zeig mal deinen aktuellen Sketch und bitte auch den Link der verwendeten Libraries.

#include <Arduino.h>
#include "MHZ19.h"
#include <SoftwareSerial.h>                                // Remove if using HardwareSerial

#define RX_PIN 10                                          // Rx pin which the MHZ19 Tx pin is attached to
#define TX_PIN 11                                          // Tx pin which the MHZ19 Rx pin is attached to
#define BAUDRATE 9600                                      // Device to MH-Z19 Serial baudrate (should not be changed)

MHZ19 myMHZ19;                                             // Constructor for library
SoftwareSerial mySerial(RX_PIN, TX_PIN);                   // (Uno example) create device to MH-Z19 serial

unsigned long getDataTimer = 0;

void setup()
{
  Serial.begin(9600);                                     // Device to serial monitor feedback

  mySerial.begin(BAUDRATE);                               // (Uno example) device to MH-Z19 serial start
  myMHZ19.begin(mySerial);                                // *Serial(Stream) refence must be passed to library begin().

  myMHZ19.autoCalibration();                              // Turn auto calibration ON (OFF autoCalibration(false))
}

void loop()
{
  if (millis() - getDataTimer >= 3000)
  {
    int CO2;

    /* note: getCO2() default is command "CO2 Unlimited". This returns the correct CO2 reading even
      if below background CO2 levels or above range (useful to validate sensor). You can use the
      usual documented command with getCO2(false) */

    CO2 = myMHZ19.getCO2();                             // Request CO2 (as ppm)

    Serial.print("CO2 (ppm): ");
    Serial.println(CO2);

    float Temp;
    //int8_t Temp;
    Temp = myMHZ19.getTemperature();                     // Request Temperature (as Celsius)
    Serial.print("Temperature (C): ");
    Serial.println(Temp);

    getDataTimer = millis();
  }
}

GitHub - WifWaf/MH-Z19: For Arduino Boards (&ESP32). Additional Examples/Commands., Hardware/Software Serial hier der Link der library.
https://www.winsen-sensor.com/d/files/infrared-gas-sensor/mh-z19b-co2-ver1_0.pdf und hier noch das Datenblatt.

In dem Datenblatt steht etwas von „Temperatur Kompensation“ und nicht nur von „Temperatur“. Darum vermute ich, dass der Temperaturwert, den Du angezeigt bekommst, ein Kompensationswert zur Berechnung der molekularen Dichte von CO2 verwendet wird. Die Gasdichte ist von der Temperatur und vom Luftdruck abhängig.
Der gemessene PPM Wert ist von der Gasdichte abhängig.

Ich verstehe. Das würde Sin machen. D.h. im Endeffekt ist der interne Temp. Sensor nicht für die ausgabe eines Temp. wertes gedacht sondern dient lediglich zur Berechnung des ppm Wertes?

Oder habe ich das falsch verstanden?

Nein, ich denke nicht.

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