2021年3月14日日曜日

「密」の見える化、CO2センサを試してみた

相変わらずのテレワーク・自粛生活が続いていますが、そのおかげか花粉症の症状が例年より軽くて助かっています。FMラジオの基板が届くまでしばらく時間がかかるので別の工作に手を出しました。

「密」の見える化で話題になったCO2センサです。秋月で取り扱いが始まっていたMH-Z19CというCO2センサを購入してみました(2,480円)。CO2濃度がPWMとUARTの2通りで出力されます。取り合えずSeeeduino XIAOとUARTで繋いで動かしてみました。TX,RXの2本の線で繋ぐだけです。あとは電源5VとGND。


以下、10秒毎に測定した結果をArduino IDEのシリアルプロッタでグラフ化したものです。
CO2濃度は1,000ppm以下が望ましいようですが、部屋の中は丁度その位あって少し高めでした。グラフが下がっているのは、ドアを開けっぱなしにして部屋を出た様子。再び上昇しているのは部屋に戻ってきたからです。一人で居ても換気が必要なことが見えました。


キャリブレーション機能もありますが、まだ使っていません。外気環境でキャリブレーションするとその時のCO2濃度が400ppmになるらしい。現在の地上のCO2濃度が丁度その位なので。また、24時間ごとに自動キャリブレーションも動くようですが、どんな原理なのでしょうか? もし、そのとき屋内でCO2が高かったらそれが400ppmになるのは変だし。

以下、スケッチです。バグがあるかも知れません、無保証です。
//----------------------------------------------------------------
//                                                  '21.03.14 naka
//  CO2センサー
//
//  CO2 Sensor      : MH-Z19C
//  micro controler : Seeeduino XIAO (UART接続)
//----------------------------------------------------------------
#include<Wire.h>

void setup() {
  Serial1.begin(9600);  // TX(6),RX(7) <---> Co2 sensor MH-Z19C 
  Serial.begin(115200);
}
 
void loop() {
  //                Start,Reserved,Command,    -,    -,    -,    -,    -, Checksum 
  byte Command[9] = {0xFF,    0x01,   0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};
  struct {
    byte start;
    byte command;
    byte concentration_high;
    byte concentration_low;
    byte temp;
    byte emp[3];
    byte checksum;
  } Return;

  Serial1.write(Command, sizeof Command);
  Serial1.readBytes((char *)&Return, 9);

  if (Return.start!=0xff || Return.command!=0x86 ) {
    return;
  }
  else {
    byte checksum = getCheckSum((byte *)&Return);
    if (Return.checksum!=checksum) {
      return;
    }
  }
  int ppm = Return.concentration_high*256 + Return.concentration_low;
//  int temp = Return.temp - 40;
  
  Serial.printf("%d\n",ppm);
  delay(10000);
}

byte getCheckSum(byte *packet) {
  byte i,checksum = 0;
  for(i=1;i<8;i++) {
    checksum += packet[i];  
  }
  return (0xFF - checksum) + 1;
}

MH-Z19Cのデータシートには記載がなかったのですが、ネット情報だと温度も取れるようです。スケッチ内にコメントアウトして記載してあります。ただし、測定の補正用に使っているものらしく、高めにでるとのこと。確認したら確かに室温より少し高めでした。

一応、動作確認できたので次は小型LCDを繋いで、数値表示とグラフ表示の切り替え機能を付けようかと思っています。

なお、このセンサはアマゾンでも扱っています(3~4,000円位)。

0 件のコメント:

コメントを投稿