室内空気質(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 によりどの程度消費電力を抑えられるかも試してみたいところ。

M5Stack PM2.5 大気質センサキット を試してみる

2月にスイッチサイエンスでの取り扱いが開始されて、すぐに購入。
製品詳細については、スイッチサイエンスの 製品ページ、M5Stack の 公式のページ を参照。

春になると花粉や黄砂が増え、室内の PM2.5 がどう変化するか、またほとんど気にせず標準のまま使用している24時間換気フィルターを PM2.5 対応にしたら効果があるのか気になったのが購入の大きな理由。

この大気質センサキットは、PM2.5 の測定を行う PLANTOWER の PMSA003 というユニットと、 温度・湿度センサー Sensirion SHT20 が一緒になった PM2.5ベースと、M5Stack Basic、表示が見易い角度で設置可能なスタンドがセット。
PM2.5ベース と M5Stack Basic を接続し、スタンドと M3ネジ 2本で組み立てて完成。
購入後そのまま電源を入れればセンサーの測定値が確認できるのはキットならではの良いところ。

USB Type-C で電源を供給すると、以下のように、画面上段に PM1.0/2.5/10 の測定値 μg/m3 と、下段に PM0.3/0.5/1.0/2.5/5.0/10 の粒子の数?、温度・湿度が表示される。
温度・湿度は内部の発熱のせいか、実際より温度が+5度、湿度が-10%くらいの値になってしまうのが少し残念。

購入後そのまま電源を入れた状態

以下は、背面の様子。黒い部分にあるファンにより銀色の金属部分の右側から空気を取り込み、取り込んだ空気に含まれる粒子をレーザー散乱法で検出するとのこと。

背面の様子、銀色の金属の部分が、PM2.5センサー PMSA003 のユニット
下のスタンド両側の脚の奥に見える M3ネジ で本体と固定されている

購入時のままだと、その場で確認するだけなので、元のプログラム をベースに、クラウドサービスでのデータ蓄積のためプログラムを作成。
今回対応したサービスは、ThingSpeakAmbient。ThingSpeak は以前から使っていたので、そのコードを流用。Ambient は今回初めて使うので、チュートリアル などを参考にしながら、以下のような感じで温度・湿度、PM1.0/2.5/10 を 5分おきに送信し保存できるように実装。

ThingSpeak のデータについては、スマホ(Android) の ThingShow というアプリのウィジェットで、ホーム画面で以下のような感じでいつでも確認できるように。
一番下の表示が今回の PM2.5 大気質センサキット の値、一番上は市販製品の空気品質モニター Awair のウィジェット表示、5つのセンサーの総合的な数値や、個別の数値を5段階の色で表示されるので直感的に分かり易い。
真ん中は別のセンサーで、こちらは別途レビューを書く予定です。

あと、住んでいる周辺の PM2.5 などがどう変化しているか、公開されている情報がないかを調べてみると、環境省大気汚染物質広域監視システム、愛称 そらまめ君 というサイトで公開されていることを知る。
気になって他にも公開されている情報がないか調べてみると、環境省黄砂飛来情報 (キャラクターは黄砂ライダー)や、花粉は 環境省花粉観測システム、愛称 はなこさん というサイトがあり、室内のデータとの比較などで色々と活用できそう。
さらにこれらのデータが WebAPI で扱えないかと調べたところ、MMソリューション という会社が開発・公開していて、無償利用可能とのこと。

今後は、蓄積データと環境省データとの比較、 PM2.5 対応フィルターの効果について確認進めて行く予定。

CO2センサー SCD41 を試してみる

在宅時間が増え、特に冬場は部屋を閉め切ることが多いので、CO2濃度が気になるところ。以前から、低コストで CO2モニターが作れなか、色々と調べてみると非分散型赤外線(NDIR)方式のCO2センサーだと 6,000円 を超えてしまう。CO2相当の eCO2が計測可能なセンサーもあるけど、それなりの精度は欲しいところなので、NDIR方式で調べてみる。

候補としては、Sensirion の SCD30、SeeedStudio の Arduino用 Grove CO2&温度&湿度センサー(SCD30)が良さそうで、購入しようとしたところ在庫なし。
もう少し調べていたところ、Sensirion の SCD4x という新製品が出ているとのこと。まだモジュールとしては見つからず、さらに調べたところ Sensirion から SCD4x Evaluation Kit(SEK-SCD41-Sensor) という SCD41モジュール を含む評価キットを発見。
国内で取り扱っているところは見つからず、DigiKey は在庫なし、在庫があった Mouser から購入。価格は 5,651円で 2つ購入、送料は 6,000円以上で無料、3/4に注文して、届いたのが 3/13 なので 10日ほど。現時点(3/20)だと在庫なしで、次回入荷予定は 4/14 とのこと。

この SCD4x は、NDIR方式ではなく、Sensirion 独自の PASens技術 という、光音響検出原理により NDIR方式のようにある程度の光学ビーム経路を必要としないため、構造もシンプルで体積も 約1cm3 と小型で、コスト効率が良いとのこと。また、CO2 以外に温度、湿度センサーも内蔵。

評価キットの Webサイト には、クイックスタートやデータシートへのリンクや、Arduino などのサンプルコードへのリンクが分かりやすくまとめられている。キットには SCD41 development board/Jumper wireset/Adapter cable が含まれていて、Adapter cable は SensorBridge に接続するためのものとのことで今回は未使用。通信方式は I2C で、接続に関しては M5StickC の Groveポートと、SCD41モジュールのJSTコネクタのピンの並びが異なるので注意。Grove の白(SDA)を SCD41モジュールの緑に、後は同じ色(黄:SCL/赤:VDD/黒:GND)で接続。

早速 Arduino のサンプルコード をベースに、M5StackC での表示の処理を追加して試してみる。以下のような感じで、無事表示を確認。ただ CO2 がかなり高めなので、校正が必要。

以下、SCD30 と、SCD4x の仕様を比較してみた。(データシートより)
CO2含め、温度・湿度の測定範囲/精度は SCD30 が高いけど、実用的な測定範囲と精度で問題なければ、サイズ・コスト面では SCD4x が良さそう。

型番CO2
測定範囲 / 精度
温度
測定範囲 / 精度
湿度
測定範囲 / 精度
SCD30400ppm~10,000ppm /
±(30ppm +読み取り値の3%)
-40~70 ℃ /
±(0.4℃ + 0.023 × (T[℃]-25℃))
0%~100%RH /
± 3%RH
SCD40400ppm~2,000ppm /
±(50ppm +読み取り値の5%)
-10~60 ℃ /
0.8℃ (15~35 ℃)
1.5℃ (-10~60 ℃)
0%~100%RH /
6%RH (15~35 ℃)
9%RH (-10~60 ℃)
SCD41400ppm~5,000ppm
±(40ppm +読み取り値の5%)
-10~60℃ /
0.8℃ (15~35℃)
1.5℃ (-10~60℃)
0~100%RH /
6%RH (15~35℃)
9%RH(-10~60℃)
SCD30 と SCD4x の仕様比較