※現在、ブログ記事を移行中のため一部表示が崩れる場合がございます。
順次修正対応にあたっておりますので何卒ご了承いただけますよう、お願い致します。

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


2019年 05月 28日

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だと作業が困難になると。

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