スキップしてメイン コンテンツに移動

「密」を測ろう

COVID-19 のパンデミックでみんながお家にこもるようになりました。 でも、たまにはお出かけしたいですよね。 

お出かけするときに気になるのが、そこで換気がしっかり行われているかどうか、です。

換気の目安となる CO2 濃度を測る測定器が欲しくなり、以下の記事を参考に自作してみました。

 おうちの二酸化炭素濃度を計ってみる 

使用しているセンサーは MH-Z19B というセンサーで、非分散赤外線吸収法 (non-disperse infrared, NDIR) という赤外線の吸収により CO2 濃度を測るしくみのようです。このセンサーのデジタル出力を、arduino という小型コンピュータで読み出して、ディスプレイに表示するしくみですね。Arduino は安い arduino nano 互換機、ディスプレイは 128 × 64 ドットの有機ELディスプレイ (organic light-emitting diode, OLED) を使いました。一番高価なのは CO2 センサーですね。

ついでに、LED でおおまかな換気状態を表示することにしました。arduino の D2, D3, D4, D5 ピンに 150 Ωの抵抗を介してそれぞれ、青、緑、黄色、赤の LED を接続し、以下のように制御しました。

void setup() {
  MHZ19Serial.begin(9600);
  Serial.begin(115200);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

  pinMode(2, OUTPUT); //D2 pin blue
  pinMode(3, OUTPUT); //D3 pin green
  pinMode(4, OUTPUT); //D4 pin yellow
  pinMode(5, OUTPUT); //D4 pin red
}

void LED(const word ppm) {
  if (ppm < 500) {
     digitalWrite(2, HIGH); // 500 ppm 未満は青色点灯 (ほぼ外気)
     digitalWrite(3, LOW);
     digitalWrite(4, LOW);
     digitalWrite(5, LOW);
  } else if (ppm <= 1000) {
     digitalWrite(2, LOW); // 500-1000 ppm は緑(通常) ビル衛生管理法の基準
     digitalWrite(3, HIGH);
     digitalWrite(4, LOW);
     digitalWrite(5, LOW);
  } else if (ppm <= 1500) {
     digitalWrite(2, LOW); // 900-1500 ppm は黄色(注意)学校環境衛生基準
     digitalWrite(3, LOW);
     digitalWrite(4, HIGH);
     digitalWrite(5, LOW);
  } else if (ppm < 2000) {
    digitalWrite(2, LOW); // 1501-1999 ppm はオレンジ(黄色+赤)(予備的警告)
    digitalWrite(3, LOW);
    digitalWrite(4, HIGH);
    digitalWrite(5, HIGH);
  } else {
    digitalWrite(2, LOW); // 2000 ppm 以上は赤(警告)
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
    digitalWrite(5, HIGH);
  } 
}

あとは loop() の中で LED(ppm) を呼ぶようにして、LED を点灯させることができました。

古いモバイルバッテリーから USB で給電するようにして、穴を開けた箱に詰め込んだら、冒頭の写真のような持ち歩きできる CO2 センサーになりました。

続きがあります。

コメント

このブログの人気の投稿

MH-Z19B の自動校正をオフにする

前回 MH-Z19B を使った持ち歩きできる CO 2 センサーを作りました。 このセンサーは24時間で最低の CO 2 濃度を 400 ppm とみなす、という自動0点補正の機能が、出荷時に ON になっています。 しかし、持ち歩いて使うときだけ電源を入れる使い方をすると、 CO 2 濃度がめったに外気と同じにならないということもありそうなので、自動校正を OFF にしたいと思いました。 MH-Z19B のマニュアル を読んで、自動校正 OFF のプログラムを書きました。 #include<SoftwareSerial.h> #include<Wire.h> #include<Adafruit_GFX.h> #include<Adafruit_SSD1306.h> Adafruit_SSD1306 display(-1); SoftwareSerial MHZ19Serial(A0, A1); byte Request1[9] = {0xFF, 0x01, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86}; byte Request2[9] = {0xFF, 0x01, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78}; void setup() { MHZ19Serial.begin(9600); Serial.begin(115200); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); } void loop() { MHZ19Serial.write(Request1, sizeof Request1); delay(100); //念のため delay 入れた。たぶんいらない。 MHZ19Serial.write(Request2, sizeof Request2); display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(0, 0); displ...