Edited at

Wio LTEで複数のCo2センサを比較してみた

More than 1 year has passed since last update.


始めに

以前の記事GroveのCo2センサの使い方を解説しましたが、Groveではないですが他のCo2を借りたので出力される値の比較を行ってみました。


NDIR式CO2(二酸化炭素)センサモジュール CDM7160

もう一つのCo2センサはフィガロ技研のCDM7160というセンサです。I2CやUARTでマイコンと繋げられるので、Wio LTEにも接続可能です。ただし、このセンサも5Vで動作するため、繋ぐためには5Vを用意する必要があります。

CDM7160で計測できる範囲はGrove Co2センサが400ppm~2000ppmなのに対し300~5000ppmという広い範囲になっています。


接続

Grove Co2センサはUART、CDM7160はI2CでWio LTEに接続します。



CDM7160は借り物のため回路部分は非公開とさせてください。3.3Vから5Vにする回路があるぐらいです。

Grove Co2センサも3.3Vから5Vにする回路を間に挟んでいます。


スケッチ

GroveのCo2センサもCDM7160もライブラリを作りましたので、公開してます。

あと出力値をグラフで見るため以前に作ったAmbientのライブラリも使いました。

試したスケッチは30秒ごとにそれぞれのCo2センサの値をAmbientにアップするようにしました。

#include <WioLTEforArduino.h>

#include <Co2Sensor.h>
#include <CDM7160.h>
#include <Wire.h>
#include "Ambient.h"

#define APN "soracom.io"
#define USERNAME "sora"
#define PASSWORD "sora"
#define INTERVAL (30 * 1000)

Co2Sensor grove_co2;

CDM7160 cdm7160_co2;

WioLTE Wio;
WioLTEClient WioClient(&Wio);

unsigned int channelId = 100;
const char* writeKey = "...writeKey...";
const char* userKey = "...userKey...";
Ambient ambient;

bool connectLTE() {

SerialUSB.println("");
SerialUSB.println("--- Connect LTE ---------------------------------------------------");

SerialUSB.println("### Power supply ON.");
Wio.PowerSupplyLTE(true);
delay(500);

SerialUSB.println("### Turn on or reset.");
if (!Wio.TurnOnOrReset()) {
SerialUSB.println("### ERROR! ###");
return false;
}

SerialUSB.println("### Connecting to \""APN"\".");
if (!Wio.Activate(APN, USERNAME, PASSWORD)) {
SerialUSB.println("### ERROR! ###");
return false;
}

SerialUSB.println("### Connect completed.");

return true;
}

void setup() {
// 初期化
Wio.Init();
// Groveの電源をON
Wio.PowerSupplyGrove(true);
// I2C開始
Wire.begin();

// CMD7160 Co2センサとの通信準備
cdm7160_co2.begin();

// Grove Co2センサとの通信準備
grove_co2.begin(&Serial);
grove_co2.calibration();

// LTEに接続
connectLTE();
// Ambientへの接続準備
ambient.begin(channelId, writeKey, &WioClient);
}

void loop() {
unsigned long stime = millis();

// CDM7160からデータが取れるかチェック
if(!cdm7160_co2.readData()) return;

// Grove Co2センサからデータが取れるかチェック
if(grove_co2.readData()){
// Co2センサが初期化完了してない場合はAmbientに送信しない
if(!grove_co2.getInitEndStatus()) return;
}
else return;

// 2つのセンサ共に値が取れたらAmbientへ送信
// 取得したデータをシリアルモニタに表示
SerialUSB.print("CDM7160 CO2: ");
SerialUSB.print(cdm7160_co2.getCo2());
SerialUSB.println("");
SerialUSB.print("Grove CO2: ");
SerialUSB.print(grove_co2.getCo2());
SerialUSB.println("");

// Ambientに送信
ambient.set(1, cdm7160_co2.getCo2());
ambient.set(2, grove_co2.getCo2());
ambient.send();

// インターバル時間に合うように残り時間をディレイする
unsigned long elapse = millis() - stime;
if (elapse < INTERVAL) delay(INTERVAL - elapse);

}


出力されたグラフ

Ambient上でグラフを確認したところ次のようになりました。

青がCDM7160で、赤がGroveのCo2センサです。

変化の過程は同じに見えますが、ちょっとオフセットがのったような形になってます。

ほぼ同じ場所に置いていたので、センサの構造上のセンサに当たる空気の度合いの違いか、ソフトウェアのバグかは別途調査していきます。

とりあえず変化の具合が同じなのでセンサ自体は正常に動作してそうです。

次は市販のCo2センサと比較して、確認したいと思います。


最後に

執筆しているWio LTEのkindle書籍については近々出版予定です。Groveの種類が多く、ページ数も膨らんでしまったので何冊かに分けて出版することにしました。

今回紹介したCo2センサの詳細な扱い方なども掲載しています。

以下、書籍の情報です。

出版形式:kindle(電子書籍)

価格:1,000円(予定)

その他:書籍の中で、扱っているライブラリやスケッチ例はGitHubからダウンロードできるようにします。

〇目次

Groveとは

Groveの種類

 電圧の違い

 インターフェースの違い

Groveリファレンス

 Grove IoT Starter kit

  Grove - ボタン

  Grove - ブザー

  Grove - 磁気スイッチ

  Grove - 温湿度センサー

  Grove - 超音波距離センサー

  Grove - GPS

  Grove - 3軸デジタル加速度センサー(±16g)

 さまざまなGroveモジュール

  Grove - 水センサ

  Grove - I2C タッチセンサ

 そのまま繋げられないGroveモジュール

  Grove - CO2センサー

 自作Groveモジュール

  e-DISP4

  BME680 温湿度・気圧・ガスセンサモジュール

  VEML6070 UV紫外線センサ・モジュール

 付録

  ライブラリの追加方法

  複数のI2Cモジュールの繋げ方