M5Stack + MH-Z19BでCO2濃度を測定してみた
きっかけ
職場の換気状況が悪そうな気がしたので…。
開発環境
M5Stackは、Arduino IDEで開発します。
ライブラリやボード情報の導入が必要ですが、解説しているサイトは山のようにあるため割愛します。
結線
レベル変換等は何もなし。以下のように繋ぐだけです。
M5Stack | MH-Z19B |
---|---|
P17(Tx2) | Rx |
P16(Rx2) | Tx |
5V | Vin |
GND | GND |
CO2濃度の測定
UARTで以下のコマンドを送れば良いです。
uint8_t readCommand[9] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};
9バイトのレスポンスが返ってくるので、そこから濃度が分かります。
読み取り部だけのコードをまとめると、こんな感じ。
uint8_t readCommand[9] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79}; uint8_t resetCommand[9] = {0xFF, 0x01, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78}; uint8_t response[9] = {}; void loop() { Serial2.write(readCommand, 9); Serial2.readBytes(response, 9); if (response[0] == 0xFF && response[1] == 0x86) { ppm = (256 * response[2]) + response[3]; } }
ついでにresponse[4] - 40
で温度も読めるようです。
キャリブレーション
このセンサーは外気下(400ppm)でキャリブレーションしてからでないと、正しい値になりません。
キャリブレーションする場合は、UARTで以下のコマンドを送れば良いです。
uint8_t resetCommand[9] = {0xFF, 0x01, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78};
画面表示
アナログメーター風と、通常の数値表示の2パターン用意しました。
コード
GitHubをご参照ください。
アナログメーター風
ディジタルメーター
参考
M5Stackで家とオフィスの二酸化炭素濃度を計測してみた
オフィス換気のため Co2 センサー作り ー Arduino, BME280, MH-Z19編