概要
M5stack社のガスセンサユニットの紹介です。主にCO2濃度を測定するときに利用することが多いセンサになります。
商品
- TVOC/eCO2 ガスセンサユニット(SGP30)(スイッチサイエンス)
- TVOC/eCO2 Gas Sensor Unit (SGP30)(公式ストア)
上記で購入できます。私はDigi-Keyから買いました。

小さいタイプのユニットになります。端子は赤いのでI2C接続ですね。利用しているセンサはSGP30になります。

パッケージと同じ中身とケーブルが付属しています。

裏側です。
SGP30について
上記がデータシートになります。気をつけないと行けないのはCO2センサではなく、eCO2センサとなります。このeはequivalentで同等を意味しています。つまりCO2センサ同等に使えるというものです。これは実際にCO2濃度を測定しているのではなく、ガスセンサの値からCO2濃度を推測しています。
どのように使うかによるのですが、オナラなどCO2以外のガスにも反応をしてしまいます。空気が汚れているとの判定はできますが、厳密のCO2の濃度を測定しているわけではないので注意してください。
とはいえ、多くの場合数値が悪化した場合には換気が必要ですので、換気の目安として利用するのは非常に妥当なセンサだと思います。純粋なCO2センサは非常に高価なので、なかなか使うのは難しいです。
UIFlowでの使い方

UIFlowでユニットを追加してみたところ、7個の値が取得可能でした。

とりあえずラベルを7個おいてすべての値を見てみました。
| 項目 | 値 |
| iaq baseline | [0, 0] |
| TVOC | 0 |
| baseline TVOC | 0 |
| eCO2 | 400 |
| baseline eCO2 | 0 |
| H2 | 13258 |
| Ethanol | 1703 |
上記のような値になりました。

値が取れていない項目があったので、起動直後は数値が取れないようでした。上記のように更新するようにして、起動してから少し時間が経過するとすべての値が取得可能でした。
iaq(Indoor Air Quality)は室内空気質と呼ばれるガス成分量みたいです。TVOCは総揮発性有機化合物量で、シックハウス症候群とかの原因になるやつみたいですね。eCO2はCO2濃度を推測した値。H2は水素、Ethanolはアルコールの一種であるエタノールですね。
Arduinoでの使い方
上記にサンプルがありました。Adafruit_SGP30ライブラリを利用していますね。ただし、GitHubのものを比べたところ、ちょっと違うバージョンが入っていました。この手のがちょっとM5Stackは困るんですよね、、、
#include "Adafruit_SGP30.h"
Adafruit_SGP30 sgp;
int i = 15;
long last_millis = 0;
void setup() {
Serial.begin(115200);
delay(1000);
Wire.begin(32, 33); // M5StickC
Serial.println("SGP30 test");
if (!sgp.begin()) {
Serial.println("Sensor not found");
while (1);
}
Serial.print("Found SGP30 serial #");
Serial.print(sgp.serialnumber[0], HEX);
Serial.print(sgp.serialnumber[1], HEX);
Serial.println(sgp.serialnumber[2], HEX);
}
void loop() {
if (! sgp.IAQmeasure()) {
Serial.println("Measurement failed");
return;
}
Serial.print("TVOC "); Serial.print(sgp.TVOC); Serial.print(" ppb\t");
Serial.print("eCO2 "); Serial.print(sgp.eCO2); Serial.println(" ppm");
delay(1000);
}
ライブラリマネージャからAdafruit_SGP30をインストールして、上記のコードで動作確認しました。
TVOC 0 ppb eCO2 400 ppm
TVOC 8 ppb eCO2 401 ppm
TVOC 4 ppb eCO2 400 ppm
TVOC 6 ppb eCO2 405 ppm
TVOC 5 ppb eCO2 414 ppm
TVOC 176 ppb eCO2 6292 ppm
TVOC 470 ppb eCO2 9842 ppm
TVOC 658 ppb eCO2 4673 ppm
TVOC 708 ppb eCO2 2761 ppm
TVOC 658 ppb eCO2 1742 ppm
TVOC 576 ppb eCO2 1275 ppm
TVOC 521 ppb eCO2 948 ppm
TVOC 456 ppb eCO2 790 ppm
上記のような出力がでて、息を吹きかけたところで数値が急にあがっていることがわかると思います。
まとめ
ちょっと長期に動かして数値を確認しないといけないはずです。また、このセンサーは最初に屋外などの空気がきれいと思われる環境に置くことでキャリブレーションが行われるはずです。一番キレイだった値を内部で覚えていて、そこからの悪化を測定している動きのようです。なので複数のセンサを並べてもキャリブレーション結果により結果がオフセットされている形になるようです。
このセンサに関してはeCO2ということを念頭に、空気の汚れ具合を簡易的に測定するものになります。どれぐらいの値で換気をしたほうがいいかはキャリブレーション結果により変わってきますのでそこは注意してください。



コメント