STEMMAで広がるArduinoの世界⑦Step1 空気品質センサSGP40
VOC(揮発性有機化合物)センサSGP40(Sensirion)は、室内でエタノール、トルエンなどを検知し、換気すべき状態の指標を出力するセンサです。
IC自体が1.8/3.3Vの低い電源で使うデバイスのため、5V->3.3VのレギュレータとI2Cの信号レベル変換回路が入っています。SDA/SCL信号のプルアップ抵抗は10kΩが入っています。
●Adafruitのブレークアウト・ボード
STEMMA QT(JST SH 4ピン)コネクタは2か所に装着されていて、どちらにつないでもかまいません。このコネクタを使ってI2Cで制御する場合、特に、ジャンパ線をつなぐなどは不要です。
Adafruit SGP40 Air Quality Sensor
●湿度センサSGP40のおもなスペック
- 電源電圧 1.7~3.6V
- 測定範囲 0~1,000 ppmのエタノール当量
- センサ出力 ディジタル16ビット無加工信号
- 処理済み出力 ディジタルVOCインデックス信号
- 応答時間 10秒未満(tau 63 %)
- インターフェース I2C(0~400kHz)
- スレーブ・アドレス 0x59(固定)
(※)エタノール当量という言葉が不明です。エタノールやトルエンなどの揮発成分の総量をエタノールの濃度で表すという意味合いかもしれません。
●使用環境
- Arduino UNO R3
- Arduino IDE 1.8.13
- Windows10 20H2
●接続
電源は5V を使いました。Arduino UNO R3のI2Cは、SCLとSDA端子がありますが、SCLはA5に、SDAはA4につながっています。どちら側につないでもかまいません。白色のリード線は見えないので、黄色で配線図を描きました。
●スケッチ
利用手順は、Adafruit SGP40 Air Quality Sensor Overviewに書かれています。
ライブラリを導入します。メニューのツールから、「ライブラリを管理」を選び、検索欄にSGP40を入力します。見つけてきたAdafruit SGP40 Sensorのインストールをクリックします。
同時にサンプル・スケッチも導入されます。
メニューのファイルからサンプルの入っているスケッチ例を選択します。そこから、Adafruit SGP40 Sensor - sgp40testを選択します。
実行中の様子です。
もう一つのサンプル・スケッチsgp40_vocを読み込んで実行します。このスケッチは、湿度センサSHT31を併用して計測します。Grove用SHT35があったので、変換ケーブルを作ってつなぎました。SHT35はSHT31の確度の良い選別品のようです。インターフェースや読み書きのタイミングは同じです。スレーブ・アドレスが0x45だったので、スケッチを修正しました。
センサSGP40の立ち上がり時間は約1分です。そのため、当初Voc Indexは0です。インデックス値は、
- 0~100 きれい
- 100~500 きれいではない
の範囲を取ります。
●CRC
SGP40のデータシートには、2バイトのデータの後にCRC8が送られてくるとあります。データシートには、C言語のCRC8サンプル処理プログラムが掲載されています。
AdafruitのソースでもCRCを計算しています。なので、このライブラリを使って、CRCエラーがおこったら、そのデータは無視するような処理にすれば、ある程度ケーブルを延ばして使えそうです。