датчик брал здесь: https://ru.aliexpress.com/item/MH-Z...32774038947.html?spm=2114.13010608.0.0.OHzqKM datasheet MH-Z19: http://www.winsen-sensor.com/d/files/PDF/Infrared Gas Sensor/NDIR CO2 SENSOR/MH-Z19 CO2 Ver1.0.pdf datasheet MH-Z19B: http://www.winsen-sensor.com/d/files/infrared-gas-sensor/mh-z19b-co2-ver1_0.pdf Ещё один способ определения качества воздуха на Arduino — с передачей данных в сеть статья от 12.02.2016: https://geektimes.ru/post/270958/ Обзор инфракрасного датчика CO2 MH-Z19 статья 4.03.2016: https://geektimes.ru/post/272090/ Контроль качества воздуха (со2 и температуры) в офисе и дома, своими руками статья 20.05.2016: https://habrahabr.ru/post/301296/ Климатическая система в квартире своими руками статья 28.06.2016: https://geektimes.ru/post/277820/ Измеряем концентрацию CO2 в квартире с помощью MH-Z19 статья 7.07.2016: https://geektimes.ru/post/278178/ Отслеживаем содержание CO2 в воздухе при помощи WeMos D1 Mini Pro, ThingSpeak и MHZ-19 статья 20.11.2016: https://blog.kvv213.com/2016/11/ots...moshhi-wemos-d1-mini-pro-thingspeak-i-mhz-19/ Компактный монитор домашнего воздуха (CO2, температура, влажность, давление) с Wi-Fi и мобильным интерфейсом статья 31.01.2017: https://geektimes.ru/post/284994/ Тёмная сторона MH-Z19 статья 21.02.2017: https://geektimes.ru/post/285572/ Монитор качества воздуха в помещении статья 7.03.2017: https://habrahabr.ru/post/322080/ CO2-Лампа (mh-z19) статья 31.03.2017: https://geektimes.ru/post/287340/ Код (Javascript): Serial3.setup(9600, {rx: P0, tx: P1}); function print_data(data) { a = []; for (var i=0; i < data.length; i++) { a.push(data.charCodeAt(i)); } crc = 256 - (a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7])%256; if (crc == a[8]) { console.log("temp: " + (a[4]-40) + ", co2: " + a[2] * 256 + a[3]); } } function check_co2() { Serial3.write("\xFF\x01\x86\x00\x00\x00\x00\x00\x79"); print_data(Serial3.read(9)); } setInterval(check_co2, 10000); // Serial3.write("\xFF\x01\x87\x00\x00\x00\x00\x00\x78"); ZERO POINT CALIBRATION // Serial3.write("\xFF\x01\x79\x00\x00\x00\x00\x00\x86"); ABC logic off // Serial3.write("\xFF\x01\x79\xA0\x00\x00\x00\x00\xE6"); ABC logic on Первым делом отключил автокалибровку. Новый датчик изначально показывал 4900-5000ppm После ZERO POINT CALIBRATION стал показывать на свежем воздухе 393-403ppm. В маленькой проветренной комнате через пол часа - 750, через час - 940.
Код (Javascript): var MHZ19 = function(opts) { opts = opts || {}; this._tx = opts.tx || P1; this._rx = opts.rx || P0; this._serial = opts.port || Serial3; this._serial.setup(opts.speed || 9600); }; MHZ19.prototype.calibrate = function() { this._serial.write("\xFF\x01\x87\x00\x00\x00\x00\x00\x78"); } MHZ19.prototype.abc_on = function() { this._serial.write("\xFF\x01\x79\xA0\x00\x00\x00\x00\xE6"); } MHZ19.prototype.abc_off = function() { this._serial.write("\xFF\x01\x79\x00\x00\x00\x00\x00\x86"); } MHZ19.prototype.read = function() { this._serial.write("\xFF\x01\x86\x00\x00\x00\x00\x00\x79"); var data = this._serial.read(9); var a = []; for (var i=0; i < data.length; i++) { a.push(data.charCodeAt(i)); } var status = (256 - (a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7])%256) == a[8]; var co2 = a[2] * 256 + a[3]; var temp = a[4]-40; return { status: status, co2: co2, temp: temp }; }; exports.connect = function(opts) { return new MHZ19(opts) };
Есть еще у меня дешманский датчик MQ135 измерения оставляют желать лучшего, с разными библиотеками пробовали - работает не ахти, поэтому мой друг Антон, спасибо ему огромное, написал кастомную реализацию: https://gist.github.com/dpr0/e978cf46d8ad896a132c4ede20509d2d использовали его в паре с MHZ-19B для сравнения и настройки показаний.