Arduinoで作る二酸化炭素濃度チェッカー(仮)

新型コロナの影響で、外出を自粛するよう言われている。家でできる趣味も限られているので、新しい趣味として電子工作を始めるためにArduinoを購入した。元々、趣味でPICを構っていたが、PICで調べているのにArduinoのことが出てくるくらい電子工作界隈では盛り上がっている。試しに使ってみたが、確かに簡単に扱える。今まで、PICを扱う際には開発環境とライターが必要だったが、Arduinoを扱う上で別途用意する必要はない。Arduino IDEという開発環境がシンプルなのがいい。記述自体も、AD変換やPWMなどが一行で済んでしまう。とはいえ、PICでも関数を自作すればこのように扱えることはできる。しかし、電子工作を始めたばかりのユーザーには難しい。元から関数が用意されているからArduinoはヒットしたのだと思う。例えると、PICはMT、ArduinoはATである。

Arduinoを使い始めるに辺り、書籍を購入した。インターネットで検索すれば、Arduinoに関する知識は入手できる。しかし、インターネットの海から探すにはまだ知識が足りない。リファレンス的な意味も含めて初心者向けそうな書籍を選んだ。p175のSCLとSDAの配線が間違っているので、この部分は書籍を信用していたので手こずった。電子工作において、動かない時は大抵しょうもないミスによるものなので、「ここは大丈夫だろう」という部分でもしっかり確認することが重要である。さて、世間では在宅勤務が新たな働き方となっている。在宅勤務では、通勤時間が無くなり自由時間が増えるなどの利点がある反面、集中力を継続するのが困難であったり、誘惑が多い自室は仕事環境に適さないなどの問題も起きている。その中で、私が注目した問題は集中力の低下である。原因の1つは、二酸化炭素濃度の上昇である。米ローレンス・バークレー国立研究所とニューヨーク州立大学の研究チームは、仕事中の眠気の原因が二酸化炭素濃度の上昇であることを実験で突き止めた*1。実験内容は、二酸化炭素濃度が600ppm*2、1000ppm、2500ppmの環境で意思決定能力を調べるテストを実施した。結果は、二酸化炭素濃度が高くなるにつれてテストの結果も低下した。一般的に、屋外の二酸化炭素濃度が400ppm前後であることからも、実験で用いられた2500ppmというのは息苦しさを感じると思われる。ここまでの数値とまでいかなくとも、換気が不十分な室内では、意思決定能力を低下させるに足る二酸化炭素濃度に達する可能性がある。しかし、常に窓を開けっぱなしにしていると、外の環境音*3がマイクに入り込むし、花粉も入ってくる。適切なタイミングで適切な時間だけ換気を行うのは容易ではない。Arduinoを用いて、自室で在宅勤務中の適切な換気タイミングを知るための二酸化炭素濃度チェッカーを自作する。今回は動作確認までとする。

用意するもの

Arduino


・CCS811搭載空気品質センサモジュール
www.switch-science.com

・ブレッドボード
・ジャンパ線

参考にしたサイト

blog.akanumahiroaki.com

配線

f:id:nmzfish:20200518200158j:plain
配線(Fritzingで作成)
ArduinoとCCS811搭載モジュールの配線は、GNDと電源3.3V、I2C用のSDAとSCLの4本である。データシートによれば、CCS811の電源絶対最大定格は3.6Vなため、5Vに繋げないように注意。
また、CCS811のデータシートによると、エージングに48時間、センサのウォームアップに20分が推奨されている。二酸化炭素濃度の測定レンジは400~8192ppmである。空気中の二酸化炭素濃度が約400ppmである。1000ppmを超えると、思考力や集中力が低下する。5000ppm以上は8時間-TWA(8時間/日の作業限界密度)*4となる。在宅勤務中の二酸化炭素濃度を測るには十分なレンジである。

プログラム

プログラムはSparkFunのライブラリにあったサンプルプログラムをほぼ丸々使用した。シリアルプロッタでモニタリングしやすいように、CO2[ppm]を最初に送信している。あとは、CCS811搭載モジュールからの信号を送り続けているだけである。
github.com

#include <SparkFunCCS811.h>

#define CCS811_ADDR 0x5B

CCS811 mySensor(CCS811_ADDR);

void setup() {
  Serial.begin(9600);
  Serial.println("CO2[ppm]");
  
  Wire.begin();

  if (mySensor.begin() == false)
  {
    Serial.print("CCS811 error. Please check wiring. Freezing...");
    while (1);
  }
}

void loop() {
  if (mySensor.dataAvailable())
  {
    mySensor.readAlgorithmResults();
    
    Serial.println(mySensor.getCO2());
  }
  
  delay(10);
}

動作確認

Arduino IDEのシリアルプロッタは、センサーから得られた値を簡単にグラフで確認できる。まだエージングで推奨されている48時間には達していないが、正常に動作している。

f:id:nmzfish:20200519084004j:plain
起動から約20分後の自室の二酸化炭素濃度
センサーに息を吹きかけると値が上昇する。
f:id:nmzfish:20200519084413j:plain
センサーに息を吹きかける

おわりに

センサーの精度、応答性、得られた結果の処理についてはこれから調査が必要である。チェッカーとして、Arduinoとセンサ類を筐体に収めたい。なるべく小型化したいので、Arduino microにするなどが考えられる。