環境モニタを作ろう with ESP32 DEV Module 〜 No7. 二酸化炭素を計測しよう MH-Z14A

IoT環境モニター

ここまででできたこと

  1. 環境モニタを作ろう with ESP32 DEV Module 〜 No1. まずは動かして見よう
  2. 環境モニタを作ろう with ESP32 DEV Module 〜 No2. 温度湿度センサーをつけよう
  3. 環境モニタを作ろう with ESP32 DEV Module 〜 No3. wifiに接続して、https通信を試してみよう
  4. 環境モニタを作ろう with ESP32 DEV Module 〜 No4. 温度と湿度データをクラウドに入れたい!AWS-IoTを使ってみよう #aws-iot
  5. 環境モニタを作ろう with ESP32 DEV Module 〜 No5. ESP32からAWS-IoTへデータをPublish #aws-iot
  6. 環境モニタを作ろう with ESP32 DEV Module 〜 No6. AWS-IoTからDynamoDBへ #aws-iot

DynamoDBまでセンサーのデータが格納できることがわかったので、他のセンサーも取り付けていきましょう。

温度湿度センサーに加えて、今回は二酸化炭素濃度を測るセンサーをつけてみましょう。

MH-Z14A NDIR赤外線二酸化炭素センサモジュール

 

 

今回はこれを使います

仕様書はこちらです。

MH-Z14 Intelligent Infrared Gas Module User’s Manual

二酸化炭素センサとESP32 DEV Moduleをつなげます

ESP32 DEV Moduleと二酸化炭素センサの接続は以下のようにしています

ESP32   MH-Z14A
GND1(黒)
5V2(赤)
IO173(青)
IO164(緑)

ハードウェアシリアル通信を使います

 

温湿度センサーの時は、I2Cという規格のシリアル通信を使いましたが、今回の二酸化炭素センサは、ハードウェアシリアル通信を使います。

 

ESP32には、ハードウェアシリアル通信については、UART0, UART1, UART2 の3系統あります。UART1は、パソコンと通信するのに使っているので、今回は、UART2(IO16,IO17)を使います。

 

二酸化炭素センサから値を取得します

 

ハードウェアシリアル通信で、UART2を使うよという宣言をsetupの中でします。

#include <HardwareSerial.h>

HardwareSerial serialCO2(2);

void setup() {
// put your setup code here, to run once:
// initialize both serial ports:
Serial.begin(115200);
serialCO2.begin(9600);}

loopで二酸化炭素の値を取りに行きます

void loop() {
  // put your main code here, to run repeatedly:
  getCO2();
  delay(10000);
}

コマンドを生成して、実行して値を取り出して計算して出力します!

void getCO2()
{
    byte getcmd[9] = { 0xff, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79 };
    sendCO2(getcmd);
}
void sendCO2(byte cmd[])
{
    const int len = 9;
    byte value[9];
    int val;

    serialCO2.write(cmd, len);
    int retry = 0;

    while (! serialCO2.available()) {
        delay(100);
        if (retry++ > 0) {
            break;
        }
    }

    while (serialCO2.available() > 0) {
        for (int i = 0; i < len; i++) {
            value[i] = serialCO2.read();
        }

        // printArray(value, len);

        if (value[0] == 0xff && value[1] == 0x86) {
            val = value[2] * 256 + value[3];
            Serial.println( (float)val ) ;
        }
    }
}

二酸化炭素の濃度は?

シリアルモニターで確認して見ましょう。

 

二酸化炭素の濃度はppmです。だいたい400ppmあたりですね。

厚生労働省の建築物環境衛生管理基準について、のサイトに空気環境の基準があり、

二酸化炭素の含有率100万分の1000以下(=1000 ppm以下)

とされているので、ここの環境は基準を下回っているので、よし!ですね。

 

センサーに息を吹きかけてみると値が上がるのがわかるかと思います。

これで、二酸化炭素の濃度は測れるようになったので、次は一酸化炭素濃度を測れるようにしてみましょう!