CO2 čidla MH-Z19B a MH-Z14

Hodnota koncentrace CO2, tedy oxidu uhličitého, se dostává čím dál tím více do popředí. Víme, že zvýšená koncentrace oxidu uhličitého ve vzduchu přispívá k únavě, později k bolesti hlavy až k nevolnostem. 

KOncentrace CO2 se tak měří ve školách, ale čím dál tím častěji i v domácnostech bastlířů.

V tomto článku vysvětlíme, jaká čidla můžeme vybrat a jak je vlastně použít. V článku zároveň najdete i vzorové příklady.

Princip měření

Čidla používají k měření koncentrace CO2 optickou detekci zvanou NDIR.

Princip je jednoduchý, molekuly CO2 absorbují některé vlnové délky z infračerveného spektra. Na jedné straně trubice je emitor infračerveného záření, na straně druhé je pak čidlo s filtrem, který tuto absorpci detekuje a měří.

Zdroj: https://en.wikipedia.org/wiki/Nondispersive_infrared_sensor

Změřenou hodnotu můžeme poté vyčíst pomocí připojeného mikrokontroléru – například Arduino Uno nebo NodeMCU s čipem ESP8266.

Pro náš článek jsme vybrali vývojový kit ESP32-LPkit https://www.laskarduino.cz/laskakit-esp32-lpkit-pcb-antenna/ 

MH-Z19B

Parametry čidla jsou následující:

  • napájecí napětí od 4.5V do 5.5V
  • rozsah 0 – 5000 ppm
  • přesnost +- 50 ppm +- 3% z naměřené hodnoty
  • průměrný odběr < 20 mA při 5V
  • špičkový proud 150 mA
  • výstupní sběrnice: UART (9600, N, 8, 1), PWM, Analogový výstup oid 0.4V – 2V
  • napětí sběrnice: 3.3V/5V
  • čas nahřívání 90s
  • doba odezvy je menší než 120s

Pro MH-Z19B můžeme využít tuto knihovnu s názvem ErriezMHZ19B, kde najdeme i tři vzorové kódy. Tu můžete použít jak s Arduino Uno, tak i třeba Wemos D1 Mini. Nezapomeňte ale, že napájecí napětí musí být větší než 3.6V. 

Katalogový list najdete na https://www.winsen-sensor.com/d/files/MH-Z19B.pdf 

/*
 * Test code for MH-Z19B with ESP32-LPkit
 * Serial2 is used as interface for CO2 sensor
 * RX - GPIO16
 * TX - GPIO17
 * 
 * 2021 made by laskarduino
 * 
 * Libraries:
 * https://github.com/Erriez/ErriezMHZ19B
 */

#include <ErriezMHZ19B.h>

#define mhzSerial Serial2 // Definition of Serial2, RX GPIO16; TX GPIO17

ErriezMHZ19B mhz19b(&mhzSerial); // Create a object

void setup() {
  Serial.begin(115200); // initialization of Serial;
  mhzSerial.begin(9600); // Set the baudrate for Serial2 for MH-Z19B

  delay(500);
  Serial.println("Test code for MH-Z19B");

  // Detect sensor
  while ( !mhz19b.detect() ) 
  {
      delay(2000);
      Serial.println("Sensor not detected.");
  };

  Serial.println("Sensor is detected.");
  Serial.println("Waiting for warming.");

  // Wait for warming-up completion
  while ( mhz19b.isWarmingUp() ) 
  {
      delay(2000);
      Serial.println("Warming-up.");
  };  
  Serial.println("Warming is done.");
}

void loop() {
    // wait for minimal interval
    if (mhz19b.isReady()) 
    {
      // Read and print CO2
      Serial.println(mhz19b.readCO2());
    }
}

Nejnovější verzi vzorového kódu najdete na našem GitHubu:
https://github.com/LaskaKit/Testcode_examples/tree/main/Sensors/MH-Z19B 

Výstup měřené koncentrace CO2 vypsaný v Serial Plotter.

MH-Z14

Parametry čidla jsou následující:

– napájecí napětí od 4.5V do 5.5V

– rozsah 0 – 5000 ppm

– přesnost +- 50 ppm +- 5% z měřené hodnoty

– průměrný odběr < 85 mA

– výstup: UART (9600, N, 8, 1), PWM a analogový signál (0.4 – 2V)

– napětí sběrnice: 3.3V

– předehřev 90s

– doba odezvy je menší než 90s

Katalogový list najdete na https://www.winsen-sensor.com/d/files/MH-Z14.pdf 

Pro MH-Z14 můžeme použít různé knihovny, ale v našem příkladu jsme se obešli bez něj.

/*
 * Test code for MH-Z14 with ESP32-LPkit
 * Serial2 is used as interface for CO2 sensor
 * RX - GPIO16
 * TX - GPIO17
 * 
 * 2021 made by laskarduino
 * 
 * Libraries:
 * -
 */

#include <WiFi.h>

#define RXD2 16 // RX of Serial2
#define TXD2 17 // TX of Serial2

byte addArray[] = {
0xFF, 0x01, 0x86,
0x00, 0x00, 0x00,
0x00, 0x00, 0x79
};

char dataValue[9];
String dataString = "";

void setup() {
  Serial.begin(115200); // initialization of Serial;
  Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2); // Set the baudrate for Serial2 for MH-Z14

  delay(500);
  Serial.println("Test code for MH-Z14");

}

void loop() {
  int co2 = 0;
  
  Serial2.write(addArray, 9);  
  Serial2.readBytes(dataValue, 9);  // read Values from MH-Z14
  co2 = (256*(int)dataValue[2])+(int)dataValue[3];  // Formula for CO2 divided into 2 bytes

  Serial.print("CO2 value: "); Serial.print(co2); Serial.println(" ppm");
  delay(2000);
}

Nejnovější verzi vzorového kódu najdete na našem GitHubu: https://github.com/LaskaKit/Testcode_examples/tree/main/Sensors/MH-Z14 

Sdílet článek

Jedna odpověď

  1. Mám doma čidlo MH-Z14A, stejné jako je na obrázku. Tak jako na obrázku jsou piny 4 a 5 spojené. Nechápu jak mohou být na těchto pinech rozdílná napětí. (Vout1 a Vout2). Najde se někdo kdo mi to vysvětlí?

Napsat komentář: Milan Valenta Zrušit odpověď na komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Mohlo by se také líbit