みなさん、こんにちは。
IoT開発の中でもよく話題になるのが、CO₂センサーを使った室内環境の可視化です。CO₂濃度の上昇は、換気不足や集中力の低下に直結します。そのため、オフィスや教室などでCO₂アラートシステムを導入するケースが増えています。
今回は、M5Stackと組み合わせて使える2種類のセンサーを実際に試し、それぞれの精度や使い勝手、導入時に直面した「誤差」の体験談について紹介したいと思います。
今回使用したセンサーは以下の2つです。
どちらもM5StackのGroveポートに接続できるので、ハードウェアのセットアップは簡単です。では、この2つのセンサーの違いについて、測定原理を中心に見ていきましょう。
測定原理の違い
SGP30(eCO₂計算)
SGP30は、金属酸化物(MOX)型センサーで、揮発性有機化合物(TVOC)を検知し、そこから推定されるCO₂濃度(eCO₂)を出力します。
つまり、直接CO₂を測定しているわけではないのがポイントです。
MOX方式は安価で小型、しかも省電力というメリットがありますが、香水や洗剤、料理の匂いなどにも反応しやすいため、正確なCO₂濃度を求める用途には不向きな面もあります。
SCD30(NDIR方式)
一方、SCD30はNDIR(非分散型赤外線吸収)方式を採用しています。赤外線の吸収特性を利用して、CO₂分子の濃度を直接測定します。
NDIR方式は産業用途でも広く使われる信頼性の高い手法で、さらに温度・湿度の補正機能も内蔵されています。長期的な安定性や精度という点でも優れています。
接続と使用感
どちらのセンサーも、M5StackのGroveポートにそのまま接続可能です。
インターフェースはI²Cで、アドレスはSGP30が0x58、SCD30が0x61となっています。
Arduino用に提供されているサンプルコードを使えば、数行のコードでセンサ値を取得できるので、ソフトウェア面でも導入はとても簡単です。
実際に構築してみて…
私はまず、価格が手頃なSGP30を使って「CO₂濃度が1,000ppmを超えたらディスプレイを赤く点灯させる」アラートシステムを作りました。
最初はうまく動いているように見えましたが、日常生活の匂いや湿度の変化に敏感に反応し、eCO₂の値が突然2,000ppmを超えることが度々発生しました。
別の信頼性の高いCO₂センサーで確認したところ、実際のCO₂濃度は1,000ppm未満。
つまり、アラートは鳴るけど換気の必要はない状態が何度も起きたのです。
誤差は通常時でも200~300ppmに及び、長期的にはさらにドリフトが加わることもありました。
「このままでは正確なアラートシステムとして運用できない」と判断し、最終的にSCD30へ切り替えることにしました。
SCD30に変えた途端、測定値は安定し、環境の変化にも左右されにくくなりました。
特に換気をしたタイミングで数値が明確に低下する挙動が確認でき、「ようやく実運用に耐えるシステムができた」と実感しました。
精度と価格のトレードオフ
項目 | SGP30(eCO₂) | SCD30(NDIR) |
---|---|---|
測定方式 | 推定(TVOCから計算) | 赤外線による直接測定 |
精度 | ±15%程度 | ±(30ppm + 3%) |
接続方式 | I²C(0x58) | I²C(0x61) |
価格帯 | 約2,000円 | 約11,500円 |
実用度 | 限定的(目安程度) | 高(業務利用にも対応) |
SGP30は傾向をざっくり確認する用途には便利ですが、正確なアラートや記録を目的とするシステムには向いていません。
一方でSCD30は価格が高いものの、高精度・高信頼性で、長期運用にも耐える選択肢です。
おわりに
今回の経験を通じて痛感したのは、センサーは価格や見た目ではなく、「何を測りたいか」に応じて選ぶべきということです。
たとえセンサーの値が取得できても、その精度が目的に合っていなければ、システムは期待通りに動きません。
センサーの値が取れたとしても、その精度が用途に合わなければ、システムは期待どおりに動きません。
一見似たようなスペックのセンサーでも、測定原理や精度は大きく異なるため、アラートや制御用途ではしっかりと性能評価をした上で選ぶ必要があります。
これからもIoT開発を進める上で、こうした基本を忘れずに取り組んでいきたいと感じました。
本日も最後までお読みいただきありがとうございました。
それでは、よいIoTライフを!