パチもののMH-Z19Bにがっくり来てしまい、いろいろググっていたところ、SensirionのSCD30というCO2センサがあることを知りました。精度も高いようで価格もMH-Z19Bが3個分くらいで手が出ない価格ではありません。この微妙な価格付けとパチものショックで、つい手に入れてしまいました。
テスト環境を作る
テスト環境はまたSeeeduino Xiao + Arduino IDEで作ることにしました。まずはテストなのでキャラクタ液晶で動かします。液晶はとりあえず秋月で売っているAQM0802Aとピッチ変換基板を使うことにしました。チープなキャラクタ液晶の表示は嫌いなので、最終的にはグラフィック液晶にします。ピッチ変換基板上でI2Cバスのプルアップを有効にしておきます。
液晶表示ライブラリはオレ工房さんのライブラリを使わせていただくことにして、テストしてみました。サンプルプログラムはもちろん動いたので、少し改造して遊んでみましたが、問題なく動きます。
SCD30を動かしてみる
SCD30のライブラリはSparkfunのSCD30 Arduino Libraryを使うことにします。これはライブラリマネージャからSCD30で検索するとすぐに見つかります。
まずは、電源(3.3V)、GND、SCL、SDAを接続して、サンプルプログラム Example1_BasicReadingsを動かしてみます。
こんな感じであっけなく動作しました。
キャラクタ液晶に表示してみる
サンプルプログラムにキャラクタ液晶に表示するコードと追加してみました。
湿度の表示が24%と出ていますが、これは温度を表示しちゃっていました。あと、最初の頃に1000ppmオーバーの表示をしていた名残(?)で、ppmのmが2個表示されちゃっていますが、無事に動きました。
ソースコードはオレ工房さんのライブラリとSparkfunのSCD30 Arduino Libraryがよくできているので、とてもシンプルです。
#include <Wire.h>
// 液晶ライブラリ
#include <ST7032.h>
ST7032 lcd;
// SCD30ライブラリ
#include "SparkFun_SCD30_Arduino_Library.h"
SCD30 airSensor;
void setup()
{
// 液晶サイズ設定&コントラスト設定
lcd.begin(8, 2);
lcd.setContrast(32);
// メッセージ表示
lcd.setCursor(0, 0);
lcd.print("SCD30");
lcd.setCursor(0, 1);
lcd.print(" CO2 SNS");
Serial.begin(115200);
Serial.println("SCD30 Sensor Test Program");
Wire.begin();
if (airSensor.begin() == false)
{
Serial.println("Air sensor not detected. Please check wiring. Freezing...");
while (1)
;
}
}
uint16_t co2;
float temp,hum;
void loop()
{ // SCD30からデータを読み出せる場合にはシリアルとキャラクタ液晶に表示する
if (airSensor.dataAvailable())
{
co2 = airSensor.getCO2();
Serial.print("co2(ppm):");
Serial.print(co2);
lcd.setCursor(0, 0);
lcd.print(co2);
lcd.print("ppm ");
temp = airSensor.getTemperature();
Serial.print(" temp(C):");
Serial.print(temp, 1);
lcd.setCursor(0, 1);
lcd.print(temp,1);
hum = airSensor.getHumidity();
Serial.print(" humidity(%):");
Serial.print(hum, 1);
lcd.setCursor(5, 1);
lcd.print(hum,0);
lcd.print("%");
Serial.println();
}
else
Serial.print(".");
delay(500);
}
MH-Z19Bで作成した2つと並べてみました。
右下が本物のMH-Z19Bで作ったもの、右上がパチもののMH-Z19Bで作ったもの、左が今回のSensirion SCD30です。窓を開けてしばらく待った結果ですが、400ppmまでは下がっていません。
SCD30はケースがないせいもあって応答速度がかなり速く、息を少し吹きかけただけでも大きく値が変動します。また、こうしてみると、パチもんのMH-Z19Bでも目安としては使えそうな気がしてきます(笑)。
とりあえず、SCD30は動作することがわかったので、グラフィック液晶での表示の作り込みとケースへの組み込みを考えてみようかと思います。