室内空気質(IAQ)センサー Renesas ZMOD4410 を試してみる

今年1月に、CO2センサーを探している中で、CO2相当(eCO2)の測定が可能なセンサーがいくつかあり、その中で室内の空気質の指標が取得可能な Renesas の 空気質(IAQ)センサー ZMOD4410 を搭載した エアクオリティセンサ基板(Crescent) を、スイッチサイエンスで購入。価格は 4,800円(税込)。

このキットにはセンサー基板(左側)に加えて、センサーからのデータを CO2等の値への変換を行うマイコン搭載の専用変換基板(右側)、2つの基板を接続する Grove互換のケーブルが含まれている。
製品の注意書きにもある通り、空気中の有機物から間接的に CO2 に換算するため、厳密な CO2 の測定には向かないとのこと。

センサー基板には Renesas の 空気質(IAQ)センサー ZMOD4410 と、温湿度センサー HS3001 が搭載されている。

ZMOD4410 は、室内環境の指標とされる総揮発性有機化合物(TVOC) を MOX(Metal Oxide)方式で測定、測定値から eCO2 や 空気質の指標をファームウェアで算出する。
昨年6月の ニュースリリース によると、ニューラルネットワークによる学習済みファームウェアの提供により、従来より精度の高い の測定が可能とのこと。また、硫黄系の臭気(トイレの悪臭など)とエタノール系の臭気(消臭剤の香りなど)の区別が可能になったとのこと。
エアクオリティセンサ基板の サポートサイト(GitHub) の概要には、このファームウェア(20/10/19リリース版)が使用されているとの記載あり。

早速、エアクオリティセンサ基板のサポートサイトのサンプルコードをベースに、今回一緒に購入した M5Stack CoreInk への表示処理と、データ蓄積のためのクラウドサービス ThingSpeak へのアップロード処理を追加して、測定値を確認してみた。

今回、CoreInk を扱うのは初めて、実際使ってみると見易く、EInk ディスプレイが手軽に扱えるのは嬉しい。更新頻度の少ないセンサーデータの表示や、ブザーを内蔵しているので、換気のタイミングなどを知らせたりするといったことも可能。
いつものように、レゴブロックで簡単なスタンドを作成、 エアクオリティセンサ基板は CoreInk の下に配置してみた。

CoreInk の表示は、取得可能なセンサーの値、温度、湿度、CO2、IAQ、TVOC、EtOH に加え、現在の時刻や WiFi接続状態なども表示しているので、文字は小さめ。

以下、左側のグラフが ThingSpeak にアップロードした CO2 の測定結果。
右側のグラフは同じ部屋にある空気質モニター Awair の NDIR方式の CO2センサーの結果。
測定環境としては、5.5畳の寝室で、0~7時までは閉め切った状態、7~17時はドアを開け部屋に誰もいない状態で確認。

  • 1時以降の就寝後、朝にかけて上昇、6時前に 1100ppm を超える
  • 7時過ぎには誰もいないこともあり 400ppm 近くまで大幅に下がる
  • Awair の結果と比較すると、大まかな傾向は同じような結果
    ただ、0時過ぎ辺りの比較では Awair が 1500ppm を超えているが、ZMOD4410 は 700ppm 以下と大きく異なることもある

次のグラフは空気質の指標 IAQ の値、2未満が非常に良く、5以上は非常に悪いとのこと。
6時ごろに 3.8まで上昇、10時以降は 3前半をキープ。

引き続き、他の CO2 センサーとの比較、また今回は違いが判らなかった TVOC と EtOH の値について、どういった環境で違いが出るのかなど気になるところもあるので、確認して行きたい。
また、今回 CoreInk ではあくまでも数値の確認がメインだったため、今後は空気質モニターとして見易く換気タイミングを知らせるなどの機能も追加して行きたい。

CO2センサー Sensirion SCD4x の校正(キャリブレーション)を試してみる

SCD4x の校正方法は、Forced recalibration (FRC) と、Automatic self-calibration (ASC) の 2つ。FRC は リファレンスの CO2値を指定して校正する方法、ASC は 1週間の間で最も低い値を 400ppm とみなして自動校正する方法。詳細は データシート の “3.7 Field Calibration” を参照。

今回 ASC だと時間がかかるので、既にある空気質モニター Awair の値をリファレンスとして FRC による校正を試してみた。FRC を行うプログラムは、 評価キットページ からのリンク先の、Arduinoサンプル にある SCD4x_I2C_FRC_Forced_Recalibration_Example.ino をベースに、M5StickC で動作するように修正して使用。 FRC の実際の手順は “3.7.1 perform_forced_recalibration” に記載されていて、以下のような流れ。

  1. periodic measurement mode で 3分以上 CO2 が一定の環境で動作させる
  2. periodic measurement mode を止めて、500ms 待つ
  3. perform_forced_recalibration コマンドを実行

具体的な perform_forced_recalibration の実装は、サンプルコードの 111行目~ で行っている。calibration で指定した値を、I2C の、perform_forced_recalibration コマンド(0x362f) の 3バイトのパラメーターに指定して書き込みを行う流れ。
今回は、calibration の値を、リファレンスの Awair の値に修正して実行してみた。

  // assuming an external reference shows 650 ppm
  calibration = 650;
  
  // prepare buffer with data for calibration
  // calculate CRC for each 2 bytes of data
  data[0] = (calibration & 0xff00) >> 8;
  data[1] = calibration & 0x00ff;
  data[2] = CalcCrc(data);
  
  // send command for perform_forced_recalibration
  Wire.beginTransmission(SCD_ADDRESS);
  Wire.write(0x36);
  Wire.write(0x2F);
  // append data for calibration
  // 2 bytes calibraion, CRC
  Wire.write(data[0]);
  Wire.write(data[1]);
  Wire.write(data[2]);
  ret = Wire.endTransmission();

M5StickC に書き込んでいる間にも CO2 の値は変化してしまうので、多少のずれは発生してしまう。今回はおおよそ合っていれば良いということで、以下は校正後の Awair との比較してみた結果。
Awair が 875ppm に対して、SCD41 が 887ppm、2000ppmくらいまで変化した場合でも、ほぼ同じくらいの値になることも確認。

一旦、それなりの値が取れるようになったので、次はクラウドサービス ThingSpeak や、Ambient へのデータ蓄積を行えるようにして、Awair ともう少し長い時間での比較ができるようにするのと、SCD41 の Low Power operation によりどの程度消費電力を抑えられるかも試してみたいところ。