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


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

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