TIM Labs

部屋が息苦しいと思ったら、二酸化炭素濃度センサで計測してみよう

MH-Z19 という二酸化炭素濃度センサーを入手した。

気体センサーの専門メーカのようで、各種センサーがあり、ドキュメントもきちんと用意されてる。

MH-Z19 のWEBページ

5000ppmまでの濃度を計測できるのを入手した。

Arduinoとの結線は実に簡単だ。

5VとGNDの2本で電源を与え、残りの1本で情報を取得する。

DSCN4609-600.JPG

このセンサーは中国のZhengzhou Winsen Electronics Technology Co., Ltdというセンサーの会社の製品のようだ。

このセンサーの詳しい説明のPDFが用意されているので、詳しく知りたい場合は読むと良いだろう。

超簡単に説明すると、センサーからの出力が、HIGHとLOWを二酸化炭素濃度に従って変化するのだ。

次の図のようにHIGTの時の時間幅(th)とLOWの時の時間幅が延々と繰り返し出力され、それぞれの幅(tl)をArduinoで計測し、簡単な計算で二酸化炭素濃度をppmの単位で求めることができるのだ。

CO2-Sensor-Timing.JPG

プログラムも、とても簡単で、ライブラリなど使う必要もない。

プログラムもネットに転がっているのだが、このセンサだけの動作チェックとして作られていて、他のセンサと組み合わせたりするのに都合が悪かったので、既存のプログラムを参考にしながら以下のように作ってしまった。

// CO2 senser  MH-Z19   on Arduino

#define pwmPin 7
 
long th, tl, h, l, ppm;
 
void setup() {
  Serial.begin(115200);
  pinMode(pwmPin, INPUT);
}

void loop() {
  int ppm = readCO2(pwmPin);
  Serial.println("PPM = "+String(ppm));

  delay(3000);
}
 
int readCO2(int pin) {
  waituntil(pin,LOW);  
  waituntil(pin,HIGH);
  long t0 = millis();
  waituntil(pin,LOW);
  long t1 = millis();
  waituntil(pin,HIGH);
  long t2 = millis();

  long th = t1 - t0;
  long tl = t2 - t1;
   
  return (int)(5000 * (th - 2) / (th + tl - 4));
}

void waituntil( int pin, int hl ) {
  while( digitalRead(pwmPin) != hl )
    ;
}

二酸化炭素の濃度は400〜500ppm程度が外気と同程度で快適な情況であり、人が増えると二酸化炭素が増えて、息苦しさを感じるようになる。

1000ppmを超えると頭がちゃんと回らなくなり、眠くなったりするので換気をしなくてはならない。仕事や勉強のパフォーマンスが落ちると言われている。

2000ppmを超えるようだと、体調不良を起こす人が出てきて、このセンサーの上限である5000ppmだと作業が困難になると。

二酸化炭素濃度をちゃんと測定して、適宜換気をしよう。

このブログ記事について

このページは、fujiが2019年5月28日 00:00に書いたブログ記事です。

ひとつ前のブログ記事は「超小型PCと各種センサーを集めてみた」です。

次のブログ記事は「BOSCHの温湿度・気圧センサーをArduinoに繋いでみた」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ