CO2センサ SCD4x ブレイクアウトボードまとめ (2021年9月版)

Sensirion社 の CO2センサ SCD40/SCD41 を搭載したボードが色々と出てきたので一覧にまとめてみる。価格はメーカー直販で $45~$60、国内で購入可能なところでは 7,000円前後くらい。

SCD40 と SCD41 の違いについては、こちら を参照。精度以外に、SCD41 には消費電力を抑えるための “Low power single shot” モードに対応している違いがある。

メーカー
製品名
型番
搭載デバイスサイズ
W x D x H (mm)
価格(2021/9/18時点)
直販 / スイッチサイエンス
I2C Interface
コネクタ、動作電圧
ソフトウェア環境
特徴
Seeed Technology
Grove CO2 & Temperature & Humidity Sensor SCD41
SKU 101020952
SCD4120.0 x 20.0 x ?$52.90 / 7,403円Grove/ピンヘッダ、2.4~5V
Arduino/Raspberry Pi
MikroElektronika
HVAC CLICK
PID: MIKROE-4290
SCD4125.4 x 42.9 x ?$45.003.3V or 5V
mikroSDK
SPS30センサー(微粒子計測)追加に対応
Adafruit
Adafruit SCD-40 – True CO2, Temperature and Humidity Sensor – STEMMA QT / Qwiic
PRODUCT ID: 5187
SCD4025.5 x 22.8 x 7.7$49.50 / –Qwiic/ピンヘッダ、3.3~5.0V
Arduino
Adafruit
Adafruit SCD-41 – True CO2 Temperature and Humidity Sensor – STEMMA QT / Qwiic
PRODUCT ID: 5190
SCD4125.5 x 22.8 x 7.7$59.50/-Qwiic/ピンヘッダ、3.3~5.0V
Arduino
スイッチサイエンス
Conta™ CO2センサ SCD40搭載
SKU#7169
SCD4020.2 x 20.2 x ?6,930円ピンヘッダ(はんだ付け済み)、2.4~5V
Arduino
Contaベースシールドなどに搭載可能
スイッチサイエンス
SCD40搭載CO2センサピッチ変換基板
SKU#7168
SCD4015.24 x 16.51 x ?6,930円基板上に直接はんだ付け/ピンヘッダ、2.4~5V
Arduino
Sparkfun
CO₂ Humidity and Temperature Sensor – SCD40 (Qwiic)
SPX-18365
SCD4025.4 x 25.4 x ?$49.95Qwiic/ピンヘッダ、3.3V
Arduino
※SparkX 製品
Sparkfun
CO₂ Humidity and Temperature Sensor – SCD41 (Qwiic)
SPX-18366
SCD4125.4 x 25.4 x ?$59.95Qwiic/ピンヘッダ、3.3V
Arduino
※SparkX 製品
Sensirion
評価キットSEK-SCD41
SEK-SCD41-Sensor
SCD4124x28x7.26,127円 (Mouser)JST PH(2.0mmピッチ)/ピンヘッダ、2.4~5V
Arduino/Raspberry Pi
CO2センサ SCD4x ブレイクアウトボード一覧表

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

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 の仕様比較