датчик MH-Z19B - измеряем CO2

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем dpro, 16 июл 2017.

Метки:
  1. dpro

    dpro Нерд

    датчик брал здесь: 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.
     
    Последнее редактирование: 17 июл 2017
    irvdev и sys нравится это.
  2. dpro

    dpro Нерд

    Код (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) };
     
     
    Последнее редактирование: 1 окт 2017
    ИгорьК и irvdev нравится это.
  3. dpro

    dpro Нерд

    Есть еще у меня дешманский датчик MQ135
    измерения оставляют желать лучшего, с разными библиотеками пробовали - работает не ахти, поэтому мой друг Антон, спасибо ему огромное, написал кастомную реализацию:
    https://gist.github.com/dpr0/e978cf46d8ad896a132c4ede20509d2d
    использовали его в паре с MHZ-19B для сравнения и настройки показаний.
     
    irvdev, Ampermeter и sys нравится это.