{"id":11816,"date":"2021-06-12T11:15:52","date_gmt":"2021-06-12T11:15:52","guid":{"rendered":"https:\/\/wolles-elektronikkiste.de\/mh-z14-and-mh-z19-co2-sensors"},"modified":"2025-06-05T16:34:17","modified_gmt":"2025-06-05T16:34:17","slug":"mh-z14-and-mh-z19-co2-sensors","status":"publish","type":"post","link":"https:\/\/wolles-elektronikkiste.de\/en\/mh-z14-and-mh-z19-co2-sensors","title":{"rendered":"MH-Z14 and MH-Z19 CO2 Sensors"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">About this Post<\/h2>\n\n<p>In this article I deal with CO2 sensors for monitoring indoor air quality. Most sensors of this type work either based on metal oxides (MOx) or on infrared technology (NDIR). I will limit myself here to the latter, namely the CO2 sensors of the MH-Z series from <a href=\"https:\/\/www.winsen-sensor.com\/sensors\/co2-sensor\/\" target=\"_blank\" rel=\"noopener\">Zhengzhou Winsen Electronics Technology.<\/a><\/p>\n<p>Specifically, I will cover the following:<\/p>\n<ul>\n<li>The measuring principle (NDIR)<\/li>\n<li>Technical characteristics of the sensors<\/li>\n<li>Calibration<\/li>\n<li>Measured value output (analog, serial, PWM)<\/li>\n<li>Control with and without library<\/li>\n<\/ul>\n<p>Finally, I check the accuracy of the sensors. For this purpose, I use a home-made CO2 measuring chamber and the Technoline WL 1030 CO2 measuring device.&nbsp;<\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/mh_z14_und_mh_z19-1024x389.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"389\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/mh_z14_und_mh_z19-1024x389.jpg\" alt=\"Representatives of the MH-Z14 and MH-Z19 CO2 sensors\" class=\"wp-image-11731\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/mh_z14_und_mh_z19-1024x389.jpg 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/mh_z14_und_mh_z19-300x114.jpg 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/mh_z14_und_mh_z19-768x292.jpg 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/mh_z14_und_mh_z19-1536x584.jpg 1536w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/mh_z14_und_mh_z19-2048x778.jpg 2048w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/mh_z14_und_mh_z19-1320x502.jpg 1320w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Representatives of the MH-Z14 and MH-Z19 series<\/figcaption><\/figure>\n\n<p>At this point, I would also like to point out a <strong>good alternative to the MH-Z14 \/ MH-Z19 modules<\/strong>, namely the <strong>SCD4x modules<\/strong>, which I discuss <a href=\"https:\/\/wolles-elektronikkiste.de\/en\/scd4x-co%e2%82%82-sensors\" target=\"_blank\" rel=\"noopener\">here<\/a>. <\/p>\n\n<h2 class=\"wp-block-heading\">NDIR measuring principle of the CO2 sensors<\/h2>\n\n<p>Non-dispersive infrared sensors (NDIR) measure the CO2 content of the air via the absorption of infrared light. The fact that CO2 absorbs infrared light is something you know from the greenhouse effect. Sunlight passes relatively unhindered through the atmosphere and the CO2 it contains. The heated surface of the earth radiates the energy partly in the form of infrared light, i.e. thermal radiation. Unfortunately, this radiation is absorbed by CO2, which then leads to the warming of the atmosphere.<\/p>\n<p>In the NDIR sensor there is an IR lamp and a detector. In between is the air to be measured. The more CO2 it contains, the more IR radiation is absorbed and correspondingly less arrives at the detector. &#8220;Non-dispersive&#8221; means that, unlike infrared spectroscopy, you don&#8217;t bother to split the infrared light into small wavelength ranges. A good explanation of the measuring principle can be found <a href=\"https:\/\/www.figaro.co.jp\/en\/technicalinfo\/principle\/ndir-type.html\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n\n<p>I &#8220;dissected&#8221; an MH-Z19 (a fake model that unfortunately did not work). You can see the photos below. The white felt-like covers ensure that the air containing CO2 can enter, but the dust stays outside. So don&#8217;t remove them. Under the upper cap you find the measuring chamber. You can see the IR lamp and the sensor. The IR lamp is framed in such a way that it radiates only in one direction. The radiation is reflected by the opposite housing wall and then directed onto the detector via a mirror. Through this detour, the IR light travels a longer distance. As a result, more IR light is absorbed, leading to higher sensitivity The electronics are located under the measuring chamber.<\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH_Z19_dismantled-1024x350.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"350\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH_Z19_dismantled-1024x350.png\" alt=\"\" class=\"wp-image-11737\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH_Z19_dismantled-1024x350.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH_Z19_dismantled-300x102.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH_Z19_dismantled-768x262.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH_Z19_dismantled-1536x525.png 1536w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH_Z19_dismantled-1320x451.png 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH_Z19_dismantled.png 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Interior view of an MH-Z19 (but a fake model)<\/figcaption><\/figure>\n\n<h2 class=\"wp-block-heading\">Technical characteristics of the MH-Z CO2 sensors<\/h2>\n\n<p>The MH-Z14 sensors are much larger than the representatives of the MH-Z19 series. Otherwise, they are quite similar in terms of their technical specifications. You have to pay 20 to 30 euros for an MH-Z19, and about 10 euros more for the MH-Z14. If you are patient and can wait a bit, I recommend buying from AliExpress because it is much cheaper.<\/p>\n<p>I have taken the following information from the data sheets:<\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH_Z_series_data-1024x374.png\"><img decoding=\"async\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH_Z_series_data-1024x374.png\" alt=\"\" class=\"wp-image-11717\"\/><\/a><figcaption class=\"wp-element-caption\">Overview of the MH-Zxx CO2 sensors family (please note comments below!)<\/figcaption><\/figure>\n\n<p>At least <em>there are<\/em> data sheets, which is not always the case with Chinese modules. Oddly enough, however, they omit some relevant information. Among other things, it is not clear which measuring ranges can really be set. For example, I could only use the default range of 0 &#8211; 5000 ppm for the MH-Z14, although the data sheet tells something different. On the other hand, the adjustment of the measuring range of the MH-Z19C was no problem. And In both data sheets the serial command for setting the measuring range is not documented.<\/p>\n\n<p>For room air monitoring, you only need the range up to 2000 ppm, as you should have ventilated the room long before. Commonly used assessments of the room air regarding the CO2 concentration are:<\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/airing_rules.png\"><img decoding=\"async\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/airing_rules.png\" alt=\"\" class=\"wp-image-11776\"\/><\/a><figcaption class=\"wp-element-caption\">CO2 concentration vs. indoor air quality<\/figcaption><\/figure>\n\n<p>I found an excellent article about the MH-Z19B <a href=\"http:\/\/web.archive.org\/web\/20230324092606\/https:\/\/unsinnsbasis.de\/co2-sensor-mhz19b\/\" target=\"_blank\" rel=\"noopener\">here<\/a>. You will find more information about the selection of measured ranges, calibration methods, fake models (beware if the board is black and not green!) and other things.<\/p>\n\n<h2 class=\"wp-block-heading\">Pinout<\/h2>\n\n<h4 class=\"wp-block-heading\">MH-Z14 &#8211; Series<\/h4>\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/05\/connectors_mhz_14-1024x193.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"193\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/05\/connectors_mhz_14-1024x193.jpg\" alt=\"Connections of the MH-Z14\" class=\"wp-image-11721\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/05\/connectors_mhz_14-1024x193.jpg 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/05\/connectors_mhz_14-300x57.jpg 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/05\/connectors_mhz_14-768x145.jpg 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/05\/connectors_mhz_14-1536x289.jpg 1536w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/05\/connectors_mhz_14-1320x249.jpg 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/05\/connectors_mhz_14.jpg 1926w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Connections of the MH-Z14<\/figcaption><\/figure>\n\n<p>The MH-Z14 sensors are not stingy with connections, but most of them are double or triple. The connection bar of the MH-Z14B looks a little different, but the labels and functions are the same. (see table).<\/p>\n\n<h4 class=\"wp-block-heading\">MH-Z19 &#8211; Series<\/h4>\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/connectors_mh_z19-1024x290.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"290\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/connectors_mh_z19-1024x290.jpg\" alt=\"Connections of the MH-Z19\" class=\"wp-image-11724\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/connectors_mh_z19-1024x290.jpg 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/connectors_mh_z19-300x85.jpg 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/connectors_mh_z19-768x218.jpg 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/connectors_mh_z19-1536x435.jpg 1536w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/connectors_mh_z19-1320x374.jpg 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/connectors_mh_z19.jpg 1994w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Connections of the MH-Z19<\/figcaption><\/figure>\n\n<p>The connections within the MH-Z19 series are the same. Sometimes the analog output is not labeled.<\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/Pinout_MH_Zxx-1024x304.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"304\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/Pinout_MH_Zxx-1024x304.png\" alt=\"Pins of the MH-Z CO2 sensors\" class=\"wp-image-11740\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/Pinout_MH_Zxx-1024x304.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/Pinout_MH_Zxx-300x89.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/Pinout_MH_Zxx-768x228.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/Pinout_MH_Zxx.png 1166w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Pins of the MH-Z CO2 sensors (* V0 is not necessarily documented)<\/figcaption><\/figure>\n\n<h2 class=\"wp-block-heading\">Calibration of the MH-Zxx CO2 sensors<\/h2>\n\n<p>There are three calibration methods for the MH-Zxx sensors:<\/p>\n<ol>\n<li><strong>Zero point calibration<\/strong>: For this, the sensor must be in a well-ventilated environment for 20 minutes. The sensor assumes that the CO2 concentration under these conditions is 400 ppm, which is roughly the current global average. There are two methods to initiate this type of calibration:\n<ul>\n<li>the HD pin is connected to GND for more than 7 seconds<\/li>\n<li>via a serial instruction (we&#8217;ll get to that)<\/li>\n<\/ul>\n<\/li>\n<li><strong>Span Point Calibration<\/strong>: Calibration at a defined CO2 concentration &#8211; probably very few will be able to realize this. That&#8217;s why I don&#8217;t go into it and advise you: better not play around with it.<\/li>\n<li><strong>Background calibration (self-calibration)<\/strong>: The modules can calibrate themselves in 24-hour intervals (in this regard I am not sure about the MH-Z14 without suffix!). To put it simply, they consider the lowest value over the day to be 400 ppm. Of course, this only works if the device is in a room that is effectively ventilated daily. If this is not the case, then your zero point will shift. This calibration method is active by default. You can switch it off via a serial command. But then you should do a manual calibration from time to time.<\/li>\n<\/ol>\n<p>An error in calibration methods 1 and 3 leads to an offset of the measured values. I will come back to that later.<\/p>\n\n<h2 class=\"wp-block-heading\">Measured value output<\/h2>\n\n<p>Internally, the MH-Z sensors record a measured value every second. You can recognize this by the regular flashing. The measured values of the MH-Zxx CO2 sensors can be read in three different ways:<\/p>\n<ul>\n<li>Calculation from the analog voltage signal<\/li>\n<li>Via the PWM (pulse width modulation) signal<\/li>\n<li>Via serial (we come to this in serial communication)<\/li>\n<\/ul>\n\n<h3 class=\"wp-block-heading\">Analog signal<\/h3>\n\n<p>The analog signal is a voltage V between 0.4 and 2.0 volts. This means that the selected measuring range is mapped in this voltage range of 1.6 volts:<\/p>\n\n<p><\/p>\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 40px;\"><span class=\"ql-right-eqno\"> &nbsp; <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/ql-cache\/quicklatex.com-fcc248fc116c50d22c07270968b848cd_l3.png\" height=\"40\" width=\"255\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#91; &#92;&#116;&#101;&#120;&#116;&#123;&#67;&#79;&#50;&#125;&#92;&#59;&#91;&#92;&#116;&#101;&#120;&#116;&#123;&#112;&#112;&#109;&#125;&#93;&#32;&#61;&#32;&#92;&#102;&#114;&#97;&#99;&#123;&#40;&#86;&#32;&#45;&#48;&#46;&#52;&#41;&#92;&#99;&#100;&#111;&#116;&#32;&#114;&#97;&#110;&#103;&#101;&#125;&#123;&#49;&#46;&#54;&#125; &#92;&#93;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n\n<p>I can not recommend this method. In my experiments it showed significant deviations. With a good A\/D converter like the <a href=\"https:\/\/wolles-elektronikkiste.de\/en\/ads1115-a-d-converter-with-amplifier\" target=\"_blank\" rel=\"noopener\">ADS1115<\/a> it might be better. <\/p>\n\n<h3 class=\"wp-block-heading\">PWM Signal<\/h3>\n\n<p>The signal on the PWM pin has a total length of 1004 milliseconds (+\/- 5% according to data sheet). The higher the CO2 concentration, the longer the HIGH signal T<sub>H<\/sub> compared to the LOW signal T<sub>L.<\/sub> As a further parameter, the measuring range must be considered:<\/p>\n\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 41px;\"><span class=\"ql-right-eqno\"> &nbsp; <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/ql-cache\/quicklatex.com-f4102442c25623a483280f3ff0ae643d_l3.png\" height=\"41\" width=\"306\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#91; &#92;&#116;&#101;&#120;&#116;&#123;&#67;&#79;&#50;&#125;&#92;&#59;&#91;&#92;&#116;&#101;&#120;&#116;&#123;&#112;&#112;&#109;&#125;&#93;&#32;&#61;&#92;&#102;&#114;&#97;&#99;&#123;&#84;&#95;&#72;&#45;&#50;&#92;&#116;&#101;&#120;&#116;&#123;&#109;&#115;&#125;&#125;&#123;&#84;&#95;&#72;&#43;&#84;&#95;&#76;&#45;&#52;&#92;&#116;&#101;&#120;&#116;&#123;&#109;&#115;&#125;&#125;&#92;&#99;&#100;&#111;&#116;&#32;&#114;&#97;&#110;&#103;&#101; &#92;&#93;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n\n<p>Some examples for the measuring range 0-2000 ppm:<\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/pwm_vs_ppm_co2-1024x496.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"496\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/pwm_vs_ppm_co2-1024x496.png\" alt=\"PWM signal depending on the CO2 concentration (range 0...2000 ppm)\" class=\"wp-image-11734\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/pwm_vs_ppm_co2-1024x496.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/pwm_vs_ppm_co2-300x145.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/pwm_vs_ppm_co2-768x372.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/pwm_vs_ppm_co2.png 1210w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">PWM signal depending on the CO2 concentration (range 0&#8230;2000 ppm)<\/figcaption><\/figure>\n\n<p>You can read the PWM signal with the <code>pulseIn()<\/code> function.<\/p>\n\n<h2 class=\"wp-block-heading\">Serial communication<\/h2>\n\n<p>Serial commands and responses of the MH-Z CO2 sensors consist of nine bytes. Unfortunately, not every MH-Zxx model &#8220;understands&#8221; every command. Even more annoying is that the data sheets are not reliable in this respect. Elsewhere, I read that this depends not only on the model, but also on the firmware version.<\/p>\n<p>Byte 0 is always 0xFF. Byte 8 is always the checksum calculated according to the following formula:<\/p>\n\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 57px;\"><span class=\"ql-right-eqno\"> &nbsp; <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/ql-cache\/quicklatex.com-23e625fde308b1a7f934a1a9d40a8c1a_l3.png\" height=\"57\" width=\"304\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#91; &#99;&#104;&#101;&#99;&#107;&#115;&#117;&#109;&#32;&#61;&#32;&#92;&#116;&#101;&#120;&#116;&#123;&#48;&#120;&#70;&#70;&#125;&#45;&#92;&#108;&#101;&#102;&#116;&#40;&#32;&#92;&#115;&#117;&#109;&#95;&#123;&#105;&#61;&#49;&#125;&#94;&#123;&#55;&#125;&#123;&#98;&#121;&#116;&#101;&#95;&#105;&#125;&#92;&#114;&#105;&#103;&#104;&#116;&#41;&#32;&#43;&#49; &#92;&#93;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n\n<p>Bytes 1 to 7 are added, this value is subtracted from 255 and finally 1 is added up. If the sum of the bytes is greater than 255, then the overflow is simply truncated.<\/p>\n<p>For commands, byte 1 is commands 0x01. Byte 2 is actually the control byte. The value of the remaining bytes depends on the type of command and the parameters that may be passed.<\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH_Zxx_Commands_Results-1024x320.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"320\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH_Zxx_Commands_Results-1024x320.png\" alt=\"The most important settings\/commands for the MH-Zxx CO2 sensors\" class=\"wp-image-11748\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH_Zxx_Commands_Results-1024x320.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH_Zxx_Commands_Results-300x94.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH_Zxx_Commands_Results-768x240.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH_Zxx_Commands_Results.png 1292w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">The most important settings\/commands for the MH-Zxx CO2 sensors<\/figcaption><\/figure>\n\n<p>For byte 6 and byte 7, the following applies to the measuring range setting:<\/p>\n\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 18px;\"><span class=\"ql-right-eqno\"> &nbsp; <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/ql-cache\/quicklatex.com-7aeee37eaf247e11d977a7a4f5052afc_l3.png\" height=\"18\" width=\"427\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#91; &#76;&#83;&#66;&#32;&#61;&#32;&#114;&#97;&#110;&#103;&#101;&#92;&#59;&#32;&#92;&#38;&#32;&#92;&#59;&#32;&#92;&#116;&#101;&#120;&#116;&#123;&#48;&#120;&#70;&#70;&#125;&#32;&#92;&#59;&#92;&#59;&#92;&#59;&#92;&#59;&#32;&#92;&#116;&#101;&#120;&#116;&#123;&#117;&#110;&#100;&#125;&#32;&#92;&#59;&#92;&#59;&#92;&#59;&#92;&#59;&#32;&#77;&#83;&#66;&#32;&#61;&#32;&#114;&#97;&#110;&#103;&#101;&#32;&#62;&#62;&#32;&#56; &#92;&#93;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n\n<p>The byte 1 in an answer to a measured value query is the control byte 0x86. The most significant byte (MSB) of the measured value is byte 2, the least significant byte (LSB) is byte 3:<\/p>\n\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 19px;\"><span class=\"ql-right-eqno\"> &nbsp; <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/ql-cache\/quicklatex.com-985a9ba17a834c572ef94d558b80e624_l3.png\" height=\"19\" width=\"468\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#91; &#92;&#116;&#101;&#120;&#116;&#123;&#67;&#79;&#50;&#32;&#91;&#112;&#112;&#109;&#93;&#125;&#32;&#61;&#32;&#77;&#83;&#66;&#92;&#99;&#100;&#111;&#116;&#32;&#50;&#53;&#54;&#32;&#43;&#32;&#76;&#83;&#66;&#32;&#61;&#40;&#77;&#83;&#66;&#32;&#60;&#60;&#32;&#56;&#41;&#32;&#43;&#32;&#76;&#83;&#66; &#92;&#93;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n\n<h3 class=\"wp-block-heading\">Other serial settings<\/h3>\n\n<p>There are other undocumented commands and queries. For these, too, the applicability depends on the model and the firmware. You can find a good overview <a href=\"https:\/\/revspace.nl\/MH-Z19B#Protocol_.28operation_mode_0.29\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n\n<h2 class=\"wp-block-heading\">How to control the CO2 sensors with a microcontroller<\/h2>\n\n<h3 class=\"wp-block-heading\">Wiring<\/h3>\n\n<p>The wiring is basically the same for all MH-Zxx CO2 sensors:<\/p>\n<ul>\n<li>VIN\/GND: Connection to a stable power supply.<\/li>\n<li>RX \/TX: RX to TX and TX to RX, preferably via SoftwareSerial.<\/li>\n<li>HD: if you want or need to calibrate manually, I would connect this pin to GND via a push-button or connect it to an I\/O pin. OUTPUT\/LOW for &gt; 7 seconds starts the calibration.<\/li>\n<li>PWM: is hooked to any I\/O pin.<\/li>\n<li>Analog Out: is connected to an analog input or A\/D converter.<\/li>\n<\/ul>\n\n<h3 class=\"wp-block-heading\">How to control the sensors with libraries<\/h3>\n\n<p>For the MH-Zxx CO2 sensors, a number of libraries are available. However, the selection for MH-Z14 models is smaller. I tried two libraries.<\/p>\n<p>The MH-Z19 library by Jonathan Dempsey is, as the name suggests, written specifically for the MH-Z19 sensors. It works with both the B and C variants. My attempt to use it for the MH-Z14 failed. The MH-Z19 library is characterized by the fact that it uses many of the undocumented commands, such as the query of the range or the firmware version. Thanks to the many example sketches, it is easy to use. You can find the library <a href=\"https:\/\/github.com\/WifWaf\/MH-Z19\" target=\"_blank\" rel=\"noopener\">here<\/a> on GitHub or you install it directly via the library manager of the Arduino IDE.<\/p>\n<p>Then I tried the library MH-Z CO2 Sensors by Tobias Sch\u00fcrg. It can also be found on GitHub (<a href=\"https:\/\/github.com\/tobiasschuerg\/MH-Z-CO2-Sensors\" target=\"_blank\" rel=\"noopener\">here<\/a>)as well as in the Arduino library management. The library worked with both the MH-Z14 and the MH-Z19. However, I needed to make a small adjustment in MHZ.cpp. If this is (still) the case for you, search for the line <code>if (!isReady()) return STATUS_NOT_READY;<\/code> and comment it out. It&#8217;s line 110 in the current release. I hope the author resolves the problem. At least it is reported as an issue. For the MH-Z14 I adjusted the example sketch:<\/p>\n\n<div class=\"scroll-paragraph-long\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"MHZ19B example sketch modified for MHZ14\" data-enlighter-title=\"MHZ19B example sketch modified for MHZ14\">\/\/#include &lt;ESP8266WiFi.h&gt;\n#include &lt;SoftwareSerial.h&gt;\n#include &lt;MHZ.h&gt;\n\n\/\/ pin for pwm reading\n#define CO2_IN 9\n\n\/\/ pin for uart reading\n#define MH_Z19_RX 10\n#define MH_Z19_TX 11\n\nMHZ co2(MH_Z19_RX, MH_Z19_TX, CO2_IN, MHZ14A);\n\nvoid setup() {\n  Serial.begin(9600);\n  pinMode(CO2_IN, INPUT);\n  delay(100);\n  Serial.println(\"MHZ 14A\");\n\n  \/\/ enable debug to get addition information\n  \/\/ co2.setDebug(true);\n\n\/\/  if (co2.isPreHeating()) {\n\/\/    Serial.print(\"Preheating\");\n\/\/    while (co2.isPreHeating()) {\n\/\/      Serial.print(\".\");\n\/\/      delay(5000);\n\/\/    }\n\/\/    Serial.println();\n\/\/  }\n}\n\nvoid loop() {\n  Serial.print(\"\\n----- Time from start: \");\n  Serial.print(millis() \/ 1000);\n  Serial.println(\" s\");\n\n  int ppm_uart = co2.readCO2UART();\n  Serial.print(\"PPMuart: \");\n\n  if (ppm_uart &gt; 0) {\n    Serial.print(ppm_uart);\n  } else {\n    Serial.print(\"n\/a\");\n  }\n\n  int ppm_pwm = co2.readCO2PWM();\n  Serial.print(\", PPMpwm: \");\n  Serial.print(ppm_pwm);\n\n  int temperature = co2.getLastTemperature();\n  Serial.print(\", Temperature: \");\n\n  if (temperature &gt; 0) {\n    Serial.println(temperature);\n  } else {\n    Serial.println(\"n\/a\");\n  }\n\n  Serial.println(\"\\n------------------------------\");\n  delay(5000);\n}<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n\n<h3 class=\"wp-block-heading\">Control without library<\/h3>\n\n<p>For the control without library I wrote a sketch myself. I successfully tested it with an MH-Z14 and an MH-Z19C. However, you must make sure that the measuring range you have selected can actually be set. You will see that a measuring range has not been set if the values you receive via PWM and the serial query are significantly different. And &#8211; as already mentioned &#8211; not all commands work with every model.<\/p>\n<p>For the PWM query, I decided against the convenient <a href=\"https:\/\/www.arduino.cc\/reference\/en\/language\/functions\/advanced-io\/pulsein\/\" target=\"_blank\" rel=\"noopener\">pulseIn() method<\/a> because it only determines the HIGH phase. HIGH and LOW phase together should be 1004 milliseconds. According to the data sheet, however, this value can vary by up to 5%. A determination of HIGH <em>and<\/em> LOW phase should compensate for this error.<\/p>\n<p>I selected pins 10 and 11 for SoftwareSerial. I hooked the PWM pin to pin 9 and the HD pin for calibration to pin 8. The analog signal is read via A0.<\/p>\n<p><code>getCO2AndTemp()<\/code> gets its parameters as references and does not return a value. This is a solution to the problem that C++ cannot return two values.<\/p>\n<p>The 9-byte commands are &#8220;assembled&#8221; piece wise and stored in the byte array &#8220;cmd&#8221;. The responses of the MH-Zxx sensors are stored in the byte array &#8220;message&#8221;.<\/p>\n<p>Otherwise, I hope the code is reasonably understandable.<\/p>\n\n<div class=\"scroll-paragraph-long\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"MHZxx.ino\" data-enlighter-title=\"MHZxx.ino\">#define RANGE_2000  0x07D0\n#define RANGE_5000  0x1388\n#define RANGE_10000 0x2710\n#define TEMP_CORR 38  \/\/ seems to differ from module to module!\n\n#include &lt;SoftwareSerial.h&gt;\nconst int pwmPin = 9;\nconst int hdPin = 7;\nunsigned int rangeFactor = 5000; \/\/not every range works for every MH-Zxx!\n\nSoftwareSerial myMHZ(10, 11); \/\/ RX, TX\n\nvoid setup(){\n  pinMode(hdPin, OUTPUT);\n  digitalWrite(hdPin, HIGH);\n  pinMode(pwmPin, INPUT);\n  Serial.begin(9600);\n  myMHZ.begin(9600);\n  while(!Serial){}\n  while(!myMHZ){}\n    \n  setRange(RANGE_2000); \n  Serial.print(\"Range: \");\n  Serial.println(getRange()); \/\/ does not work with all MH-Zxx sensors\n  Serial.print(\"Firmware: \");\n  Serial.println(getFirmwareVersion()); \/\/ does not work with all MH-Zxx sensors\n  \n  \/\/ for calibration your MH-Zxx needs to run in a 400 ppm CO2 environment for 20 min!!!\n  \/\/ if the MH-Z module supports it, you can calibrate via serial commands\n  \/\/ if not, choose the HD - method)\n  \/\/ calibrateMHZ(); \/\/ calibration via serial command\n  \/\/ calibrateMHZByHD(); \/\/ calibration via HD pin\n  \/\/ activate\/deacvtivate the permanent calibration which is happening in the background (if supported):\n  \/\/ activateCalibrationMode(true);\n  \n  Serial.print(\"Self Calibration Mode: \");\n  if(getSelfCalModeStatus()){ \/\/ does not work with all MH-Zxx sensors\n    Serial.println(\"ON\"); \n  }\n  else Serial.println(\"OFF\");\n}\n\nvoid loop(){\n  unsigned int ppmCO2PWM = 0;\n  unsigned int ppmCO2Serial = 0;\n  float ppmCO2Analog = 0.0;\n  int temperature = 0;\n   \n  ppmCO2PWM = getCO2PWM();\n  getCO2AndTemp(ppmCO2Serial, temperature);\n  ppmCO2Analog = (((analogRead(A0))\/1023.0 * 5.0) - 0.4)\/1.6 * rangeFactor;\n   \n  Serial.print(\"CO2 in ppm (PWM): \");\n  Serial.println(ppmCO2PWM);\n  Serial.print(\"CO2 in ppm (Serial): \");\n  Serial.println(ppmCO2Serial);\n  Serial.print(\"CO2 in ppm (Analog): \");\n  Serial.println(ppmCO2Analog);\n  Serial.print(\"Temperature [\u00b0C]: \");\n  Serial.println(temperature);\n  \n  Serial.println(\"**********************\");\n  delay(1000);\n}\n\nvoid setRange(unsigned int range){\n  rangeFactor = range;\n  sendCommand(0x99, range);\n  delay(100);\n}\n\nvoid calibrateMHZ(){\n  sendCommand(0x87, 0x00);\n}\n\nvoid calibrateMHZByHD(){\n  Serial.println(\"Calibration - please wait for initialization\");\n  digitalWrite(hdPin, LOW);\n  delay(10000);\n  digitalWrite(hdPin, HIGH);\n  Serial.println(\"Done\");\n}\n\nvoid activateCalibrationMode(bool activate){\n  if(activate){\n    sendCommand(0x7A, 0x00); \/\/ my own command for activation\n  }\n  else{\n    sendCommand(0x79, 0x00); \n  }\n  delay(100);\n}\n\nunsigned int getRange(){\n  byte message[9]; \n  getResponse(message, 0x9B);\n  unsigned int range = (unsigned int)(message[4]&lt;&lt;8) + message[5];\n  return range; \n}\n\nvoid getCO2AndTemp(unsigned int &amp;ppmCO2, int &amp;temp){\n  byte message[9];\n  getResponse(message, 0x86);\n  ppmCO2 = (unsigned int)(message[2]&lt;&lt;8) + message[3];\n  temp = (int)(message[4] - TEMP_CORR);\n}\n\nString getFirmwareVersion(){\n  byte message[9];\n  String firmware = \"\";\n  getResponse(message,0xA0);\n  for(int i=2; i&lt;6; i++){\n    firmware += (char)message[i];\n  }\n  return firmware;\n}\n\nbyte getSelfCalModeStatus(){\n  byte message[9]; \n  getResponse(message, 0x7D);\n  return message[7]; \n}\n\nvoid sendCommand(byte cmdByte, unsigned int range){\n  byte cmd[9] = {0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\n  cmd[2] = cmdByte;\n  if(cmdByte==0x99){\n    cmd[6] = range&gt;&gt;8;\n    cmd[7] = range &amp; 0xFF;\n  }\n  \n  if(cmdByte==0x7A){ \/\/ my own command for activation of self calibration\n    cmd[2] = 0x79;\n    cmd[3] = 0xA0;\n  }  \n  cmd[8] = getCheckSum(cmd);\n  myMHZ.write(cmd,9);\n}\n\nunsigned int getCO2PWM(){\n  unsigned long highPeriod = 0;\n  unsigned long lowPeriod = 0;\n  unsigned long startTime = 0;\n  unsigned int ppmCO2 = 0;\n  \n  while(digitalRead(pwmPin)){}\n  while(!digitalRead(pwmPin)){}\n  startTime = millis();\n  while(digitalRead(pwmPin)){}\n  highPeriod = millis() - startTime;\n  startTime = millis(); \n  while(!digitalRead(pwmPin)){}\n  lowPeriod = millis() - startTime;\n  \n  ppmCO2 = rangeFactor*(highPeriod - 2)\/(highPeriod + lowPeriod - 4); \n\n  return ppmCO2; \n}\n\nvoid getResponse(byte msg[], byte cmdByte){\n  unsigned long maxWaitTime = 1000;\n  while(myMHZ.available()){\n    myMHZ.read();    \/\/ removes \"rubbish\"\n  }\n  sendCommand(cmdByte, 0x00);\n  unsigned long startTime = millis();\n  \n  while(!myMHZ.available()){\n    if((startTime-millis())&gt;maxWaitTime){ \/\/ if the MH-Zxx does not respond\n      break;\n    }\n  }\n  \n  myMHZ.readBytes(msg,9);\n}\n\nbyte getCheckSum(byte *seq){\n  byte checkSum = 0;\n  for(int i=1; i&lt;8; i++){\n    checkSum += seq[i];\n  }\n  checkSum = 255 - checkSum + 1;\n  return checkSum;\n}<\/pre>\n<p>&nbsp;<\/p>\n<div>&nbsp;<\/div>\n<\/div>\n\n<h2 class=\"wp-block-heading\">Accuracy of the MH-Zxx CO2 sensors<\/h2>\n<div class=\"wp-block-image is-resized\">\n<figure class=\"alignright size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/gas_detection_box-768x1024.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/gas_detection_box-768x1024.jpg\" alt=\"Measuring chamber for CO2 sensors\" class=\"wp-image-11760\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/gas_detection_box-768x1024.jpg 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/gas_detection_box-225x300.jpg 225w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/gas_detection_box.jpg 1125w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><\/figure>\n<\/div>\n<p>I checked the accuracy of the MH-Zxx CO2 sensors with the <a href=\"https:\/\/www.technoline-berlin.de\/product\/de\/WL_1030\" target=\"_blank\" rel=\"noopener\">Technoline WL 1030<\/a>, a commercially available CO2 measuring device. This model was the 2021 winner of the German test institute &#8220;Stiftung Warentest&#8221; in the category of CO2 measuring instruments. Nevertheless, the question naturally arises as to how accurately it measures itself, especially as it appears to be based on an MH-Zxx sensor or similar, if you look at how it works and the technical data.&nbsp;<\/p>\n<p>For this purpose, I have built a CO2 measuring chamber. The basis was a box made of acrylic plastic, which is usually used to exhibit things like action figures or model cars. I fed the CO2 through a small, sealable hole with a syringe. An electric motor with propeller ensured the even spread of the gas. Then I glued in a breadboard and installed access for electrical connections. I placed the Technoline WL 1030 in the chamber and drilled a hole for the power supply cable into the box. The CO2 was provided by my water carbonator.<\/p>\n<div class=\"wp-block-image is-resized\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/syringes-1024x447.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"447\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/syringes-1024x447.jpg\" alt=\"\" class=\"wp-image-11763\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/syringes-1024x447.jpg 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/syringes-300x131.jpg 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/syringes-768x335.jpg 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/syringes-1536x670.jpg 1536w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/syringes-1320x576.jpg 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/syringes.jpg 1685w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Syringes for CO2 dosing<\/figcaption><\/figure>\n<\/div>\n<h3 class=\"wp-block-heading\">Test of the Technoline WL 1030<\/h3>\n\n<h4 class=\"wp-block-heading\">The experiment<\/h4>\n<div class=\"wp-block-image is-resized\">\n<figure class=\"alignright size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/gas_injection-1024x626.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"626\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/gas_injection-1024x626.jpg\" alt=\"\" class=\"wp-image-11781\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/gas_injection-1024x626.jpg 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/gas_injection-300x183.jpg 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/gas_injection-768x469.jpg 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/gas_injection-1536x939.jpg 1536w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/gas_injection-1320x807.jpg 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/gas_injection.jpg 1813w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<p>I ran the Technoline WL 1030 for several days and calibrated it according to the operating instructions. This works in principle as with the MH-Zxx CO2 sensors. Before the measurements, I aired the room well to achieve a starting value of 400 ppm.<\/p>\n<p>The internal dimensions of the box are 13 cm x 13 cm x 20 cm = 3380 cm<sup>3<\/sup>. For the Technoline WL 1030 I estimated a volume of 260 cm<sup>3.<\/sup> However, it consists for the most part of &#8220;air&#8221;. In the end, I took 130 cm<sup>3<\/sup> for the measuring device and the breadboard. Thus, the remaining volume in the measuring chamber is about 3250 cm<sup>3<\/sup>. If I am wrong by 50 cm<sup>3<\/sup>, that is an error of 1.5%. An addition of one milliliter of CO2 should increase the CO2 concentration by 1\/3250 = approx. 308 ppm.<\/p>\n<p>I fed 0.5 or 1 milliliter of CO2 at a time and waited for a reasonably stable value. This took about 5 minutes each. Since my measuring chamber is not absolutely gas-tight, the measured value slowly decreased again after reaching a maximum. In total, I fed 4 ml of CO2 into the chamber. These are the measured values:<\/p>\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/Technoline_Test-1024x512.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"512\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/Technoline_Test-1024x512.png\" alt=\"Test of the Technoline WL 1030\" class=\"wp-image-11765\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/Technoline_Test-1024x512.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/Technoline_Test-300x150.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/Technoline_Test-768x384.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/Technoline_Test-860x430.png 860w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/Technoline_Test-1320x660.png 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/Technoline_Test.png 1377w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Test of the Technoline WL 1030<\/figcaption><\/figure>\n\n<h4 class=\"wp-block-heading\">Evaluation of results<\/h4>\n\n<p>The final value after feeding 4 ml of CO2 should have been 1632 ppm. I measured a maximum of about 1500 ppm. However, the chamber is not really gas-tight. To estimate the error, I repeated the experiment, but this time I fed 4 ml of CO2 in one step. The final value was about 1550 ppm (green rhombus). After another 5 minutes, the concentration dropped to slightly below 1500 ppm (yellow circle) due to leakage, i.e. a loss of about 50 ppm. I had waited for the first measured value for 5 minutes. Assuming a constant leak rate, I would have to add 50 ppm to the first reading. This is very close to the theoretical 1632 ppm. Admittedly, this was the best measurement. Repeat measurements showed some variation, but the results were not off by more than 5% (after correction for leakage). Outliers are of course also caused by other errors, e.g. that I may have added a little air when drawing up the syringe.&nbsp;<\/p>\n<p>My conclusion is that you can rely on the measured values of the Technoline 1030 &#8211; careful calibration provided.<\/p>\n\n<h3 class=\"wp-block-heading\">Measurements using the MH-Zxx CO2 sensors<\/h3>\n\n<p>I then took the Technoline WL 1030 to test the MH-Zxx sensors. First, a small video about it:<\/p>\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"gas sensor check\" width=\"731\" height=\"411\" src=\"https:\/\/www.youtube.com\/embed\/-jYNas877JI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n<p>In my experiments with the MH-Zxx CO2 sensors, I found that they responded more slowly than the Technoline WL 1030. Perhaps this is simply design related, and it takes longer for the CO2 to penetrate the MH-Zxx sensors. There may also be a damping algorithm running in the background. In any case, the effect is that the measured values of the MH-Zxx sensors were still increasing, while the measured values of the Technoline WL 1030 were already decreasing. As a result, the measured values of the Technoline were somewhat higher in the addition phase. After the addition phase, the CO2 concentration slowly decreased due to the leakage of the measuring chamber. Here, too, the MH-Zxx sensors reacted more slowly and delivered correspondingly higher values. Here is an example of a result for the MH-Z14 sensor:<\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MHZ14_Test-1024x507.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"507\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MHZ14_Test-1024x507.png\" alt=\"MH-Z14 vs. Technoline WL 1030\" class=\"wp-image-11768\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MHZ14_Test-1024x507.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MHZ14_Test-300x149.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MHZ14_Test-768x381.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MHZ14_Test-1320x654.png 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MHZ14_Test.png 1322w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">MH-Z14 vs. Technoline WL 1030<\/figcaption><\/figure>\n\n<p>The results for the MH-Z19C looked very similar. Overall, I was as surprised as I was pleased with the good measurement results. However, it is also important here that the zero point calibration (more precisely the 400 ppm calibration) is carried out carefully.<\/p>\n\n<h4 class=\"wp-block-heading\">And this happens with poor calibration<\/h4>\n\n<p>If you perform the calibration in a not thoroughly aired environment, you shift the 400 ppm starting point accordingly. This happened to me in the measurement shown below with an MH-Z19C. At first, I just wanted to discard the data, but then I found it quite interesting. You can see that the measured values are shifted in parallel. The incorrect calibration does not have an influence on the slope.<\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH19C_Test-1024x508.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"508\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH19C_Test-1024x508.png\" alt=\"Measured values in case of poor calibration\" class=\"wp-image-11771\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH19C_Test-1024x508.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH19C_Test-300x149.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH19C_Test-768x381.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH19C_Test-1320x655.png 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/MH19C_Test.png 1371w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Measured values in case of poor calibration<\/figcaption><\/figure>\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n<p>The MH-Zxx CO2 sensors provide reliable values, but you have to calibrate them correctly. Either you perform a manual calibration from time to time or you use the automatic calibration. For the latter, however, you have to make sure that the sensor is in a room that is regularly ventilated. Under no circumstances are the MH-Zxx sensors suitable for quickly switching them on to carry out ad hoc CO2 measurements.<\/p>\n\n<h2 class=\"wp-block-heading\">Acknowledgement<\/h2>\n\n<p>I found the post picture on <a href=\"https:\/\/pixabay.com\/de\/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=5806920\" target=\"_blank\" rel=\"noopener\">Pixabay.<\/a> It comes from <a href=\"https:\/\/pixabay.com\/de\/users\/intermalte-1666512\/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=5806920\" target=\"_blank\" rel=\"noopener\">Malte Reimold<\/a>. I just cropped it square.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>With CO2 sensors of the MH-Z14 and MH-Z19 series you can monitor the indoor air quality. I show how you how to control the sensors and I check their accuracy. <\/p>\n","protected":false},"author":1,"featured_media":11780,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[572],"tags":[1466,556,1117,1465,558,1457,1458,1459,1460,1461,1462,1463,1464,588],"class_list":["post-11816","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sensors","tag-accuracy","tag-arduino-en-2","tag-calibration","tag-co2-sensor-en","tag-library-en-2","tag-mh-z-en","tag-mh-z14-en","tag-mh-z14a-en","tag-mh-z14b-en","tag-mh-z19-en","tag-mh-z19b-en","tag-mh-z19c-en","tag-ndir-en","tag-without-library-en"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>MH-Z14 and MH-Z19 CO2 Sensors &#8226; Wolles Elektronikkiste<\/title>\n<meta name=\"description\" content=\"With CO2 sensors of the MH-Zxx series you can monitor the indoor air quality. I show you how to control the sensors and I check their accuracy.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wolles-elektronikkiste.de\/en\/mh-z14-and-mh-z19-co2-sensors\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"MH-Z14 and MH-Z19 CO2 Sensors &#8226; Wolles Elektronikkiste\" \/>\n<meta property=\"og:description\" content=\"With CO2 sensors of the MH-Zxx series you can monitor the indoor air quality. I show you how to control the sensors and I check their accuracy.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wolles-elektronikkiste.de\/en\/mh-z14-and-mh-z19-co2-sensors\" \/>\n<meta property=\"og:site_name\" content=\"Wolles Elektronikkiste\" \/>\n<meta property=\"article:published_time\" content=\"2021-06-12T11:15:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-05T16:34:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/spheres-5806920_1920.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"1280\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Wolfgang Ewald\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Wolfgang Ewald\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/mh-z14-and-mh-z19-co2-sensors#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/mh-z14-and-mh-z19-co2-sensors\"},\"author\":{\"name\":\"Wolfgang Ewald\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#\\\/schema\\\/person\\\/b774e4d64b4766889a2f7c6e5ec85b46\"},\"headline\":\"MH-Z14 and MH-Z19 CO2 Sensors\",\"datePublished\":\"2021-06-12T11:15:52+00:00\",\"dateModified\":\"2025-06-05T16:34:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/mh-z14-and-mh-z19-co2-sensors\"},\"wordCount\":2907,\"commentCount\":15,\"publisher\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#\\\/schema\\\/person\\\/b774e4d64b4766889a2f7c6e5ec85b46\"},\"image\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/mh-z14-and-mh-z19-co2-sensors#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2021\\\/06\\\/spheres-5806920_1920.jpg\",\"keywords\":[\"accuracy\",\"Arduino\",\"Calibration\",\"CO2 Sensor\",\"Library\",\"MH-Z\",\"MH-Z14\",\"MH-Z14A\",\"MH-Z14B\",\"MH-Z19\",\"MH-Z19B\",\"MH-Z19C\",\"NDIR\",\"without library\"],\"articleSection\":[\"Sensors\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/mh-z14-and-mh-z19-co2-sensors#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/mh-z14-and-mh-z19-co2-sensors\",\"url\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/mh-z14-and-mh-z19-co2-sensors\",\"name\":\"MH-Z14 and MH-Z19 CO2 Sensors &#8226; Wolles Elektronikkiste\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/mh-z14-and-mh-z19-co2-sensors#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/mh-z14-and-mh-z19-co2-sensors#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2021\\\/06\\\/spheres-5806920_1920.jpg\",\"datePublished\":\"2021-06-12T11:15:52+00:00\",\"dateModified\":\"2025-06-05T16:34:17+00:00\",\"description\":\"With CO2 sensors of the MH-Zxx series you can monitor the indoor air quality. I show you how to control the sensors and I check their accuracy.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/mh-z14-and-mh-z19-co2-sensors#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/mh-z14-and-mh-z19-co2-sensors\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/mh-z14-and-mh-z19-co2-sensors#primaryimage\",\"url\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2021\\\/06\\\/spheres-5806920_1920.jpg\",\"contentUrl\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2021\\\/06\\\/spheres-5806920_1920.jpg\",\"width\":1280,\"height\":1280},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/mh-z14-and-mh-z19-co2-sensors#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"MH-Z14 and MH-Z19 CO2 Sensors\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#website\",\"url\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\",\"name\":\"Wolles Elektronikkiste\",\"description\":\"Die wunderbare Welt der Elektronik\",\"publisher\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#\\\/schema\\\/person\\\/b774e4d64b4766889a2f7c6e5ec85b46\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#\\\/schema\\\/person\\\/b774e4d64b4766889a2f7c6e5ec85b46\",\"name\":\"Wolfgang Ewald\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/cropped-Logo-1.png\",\"url\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/cropped-Logo-1.png\",\"contentUrl\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/cropped-Logo-1.png\",\"width\":512,\"height\":512,\"caption\":\"Wolfgang Ewald\"},\"logo\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/cropped-Logo-1.png\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"MH-Z14 and MH-Z19 CO2 Sensors &#8226; Wolles Elektronikkiste","description":"With CO2 sensors of the MH-Zxx series you can monitor the indoor air quality. I show you how to control the sensors and I check their accuracy.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wolles-elektronikkiste.de\/en\/mh-z14-and-mh-z19-co2-sensors","og_locale":"en_US","og_type":"article","og_title":"MH-Z14 and MH-Z19 CO2 Sensors &#8226; Wolles Elektronikkiste","og_description":"With CO2 sensors of the MH-Zxx series you can monitor the indoor air quality. I show you how to control the sensors and I check their accuracy.","og_url":"https:\/\/wolles-elektronikkiste.de\/en\/mh-z14-and-mh-z19-co2-sensors","og_site_name":"Wolles Elektronikkiste","article_published_time":"2021-06-12T11:15:52+00:00","article_modified_time":"2025-06-05T16:34:17+00:00","og_image":[{"width":1280,"height":1280,"url":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/spheres-5806920_1920.jpg","type":"image\/jpeg"}],"author":"Wolfgang Ewald","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Wolfgang Ewald","Est. reading time":"18 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wolles-elektronikkiste.de\/en\/mh-z14-and-mh-z19-co2-sensors#article","isPartOf":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/mh-z14-and-mh-z19-co2-sensors"},"author":{"name":"Wolfgang Ewald","@id":"https:\/\/wolles-elektronikkiste.de\/en#\/schema\/person\/b774e4d64b4766889a2f7c6e5ec85b46"},"headline":"MH-Z14 and MH-Z19 CO2 Sensors","datePublished":"2021-06-12T11:15:52+00:00","dateModified":"2025-06-05T16:34:17+00:00","mainEntityOfPage":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/mh-z14-and-mh-z19-co2-sensors"},"wordCount":2907,"commentCount":15,"publisher":{"@id":"https:\/\/wolles-elektronikkiste.de\/en#\/schema\/person\/b774e4d64b4766889a2f7c6e5ec85b46"},"image":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/mh-z14-and-mh-z19-co2-sensors#primaryimage"},"thumbnailUrl":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/spheres-5806920_1920.jpg","keywords":["accuracy","Arduino","Calibration","CO2 Sensor","Library","MH-Z","MH-Z14","MH-Z14A","MH-Z14B","MH-Z19","MH-Z19B","MH-Z19C","NDIR","without library"],"articleSection":["Sensors"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wolles-elektronikkiste.de\/en\/mh-z14-and-mh-z19-co2-sensors#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wolles-elektronikkiste.de\/en\/mh-z14-and-mh-z19-co2-sensors","url":"https:\/\/wolles-elektronikkiste.de\/en\/mh-z14-and-mh-z19-co2-sensors","name":"MH-Z14 and MH-Z19 CO2 Sensors &#8226; Wolles Elektronikkiste","isPartOf":{"@id":"https:\/\/wolles-elektronikkiste.de\/en#website"},"primaryImageOfPage":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/mh-z14-and-mh-z19-co2-sensors#primaryimage"},"image":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/mh-z14-and-mh-z19-co2-sensors#primaryimage"},"thumbnailUrl":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/spheres-5806920_1920.jpg","datePublished":"2021-06-12T11:15:52+00:00","dateModified":"2025-06-05T16:34:17+00:00","description":"With CO2 sensors of the MH-Zxx series you can monitor the indoor air quality. I show you how to control the sensors and I check their accuracy.","breadcrumb":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/mh-z14-and-mh-z19-co2-sensors#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wolles-elektronikkiste.de\/en\/mh-z14-and-mh-z19-co2-sensors"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wolles-elektronikkiste.de\/en\/mh-z14-and-mh-z19-co2-sensors#primaryimage","url":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/spheres-5806920_1920.jpg","contentUrl":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2021\/06\/spheres-5806920_1920.jpg","width":1280,"height":1280},{"@type":"BreadcrumbList","@id":"https:\/\/wolles-elektronikkiste.de\/en\/mh-z14-and-mh-z19-co2-sensors#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/wolles-elektronikkiste.de\/en"},{"@type":"ListItem","position":2,"name":"MH-Z14 and MH-Z19 CO2 Sensors"}]},{"@type":"WebSite","@id":"https:\/\/wolles-elektronikkiste.de\/en#website","url":"https:\/\/wolles-elektronikkiste.de\/en","name":"Wolles Elektronikkiste","description":"Die wunderbare Welt der Elektronik","publisher":{"@id":"https:\/\/wolles-elektronikkiste.de\/en#\/schema\/person\/b774e4d64b4766889a2f7c6e5ec85b46"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wolles-elektronikkiste.de\/en?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/wolles-elektronikkiste.de\/en#\/schema\/person\/b774e4d64b4766889a2f7c6e5ec85b46","name":"Wolfgang Ewald","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2019\/03\/cropped-Logo-1.png","url":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2019\/03\/cropped-Logo-1.png","contentUrl":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2019\/03\/cropped-Logo-1.png","width":512,"height":512,"caption":"Wolfgang Ewald"},"logo":{"@id":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2019\/03\/cropped-Logo-1.png"}}]}},"_links":{"self":[{"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/posts\/11816","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/comments?post=11816"}],"version-history":[{"count":4,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/posts\/11816\/revisions"}],"predecessor-version":[{"id":24044,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/posts\/11816\/revisions\/24044"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/media\/11780"}],"wp:attachment":[{"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/media?parent=11816"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/categories?post=11816"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/tags?post=11816"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}