LoginSignup
2
1

ArduinoとPmod AQSでCO2を測定する

Last updated at Posted at 2020-04-03

キャプチャ.JPG

Arduino と Pmod AQS を使って CO2 の測定を行います。
この記事では Arduino Nano を使用しています。配線は異なりますが、回路とプログラムは Arduino Uno にも対応しています。

Arduino 自体の使い方については他の記事をご参照ください。

Pmod AQS の特徴

  • CCS811 使用
  • I2C 接続
  • 3.3V 駆動(5V不可
  • eCO2: 400~8,192 ppm の範囲で測定可
  • TVOC: 0~1,187 ppb の範囲で測定可

eCO2 は 二酸化炭素相当量、TVOC は総揮発性有機化合物のことです。
このセンサは TVOC の値から CO2 の値を推測するため、eCO2 のように「相当量」と表現しています。

センサの精度について

上記ツイートの指摘通り、精度を求める用途には不向きです。

しかし「制御には使わないが、だいたいの値を知りたい」というユースケースであれば十分です。
また、このセンサの強みは I2C 接続です。配線量を少なくしつつ、他の I2C 接続のセンサICも並行して使いたい場合にはとても使いやすいセンサです。さらに秋月電子で取り扱いがあり、入手しやすいデバイスです。

用意するもの

部品名 画像 はんだ付け 入手先 (参考)
Arduino Nano
(Arduino UNO でも可)
Arduino Nano 必要なし 秋月電子
Pmod AQS Pmod AQS 必要なし 秋月電子 など
AE-PCA9306
I2Cバス用双方向電圧レベル変換モジュール
AE-PCA9306 必要 秋月電子

Arduino Nano は 5V で駆動し、ロジックレベル(IOピンの電圧レベル)も 5V のため、3.3V で駆動する Pmod AQS に直接接続できません
3.3V は Arduino Nano に搭載されているレギュレータから供給しますが、5V <-> 3.3V のロジックレベル変換回路は別途用意しなくてはなりません。

ブレッドボード、ジャンパ、ケーブル、はんだ用具などは別途お好きなものをご用意ください。

回路

回路図

Arduino Uno も同様の配線となります。VREF1 に 5V、VREF2 に 3.3V を印加してください。
Pmod AQS の WAKE 側を短絡させると I2C との通信が有効になります。

Pmod AQSのジャンパ

Pmod AQSには JP1, JP2, JP3 のジャンパが存在します。

JP1, JP3 は常時短絡、JP2 は I2C のプルアップ抵抗が必要な場合のみ短絡してください。
今回はレベルシフタ側にプルアップ抵抗が内蔵されているため Pmod AQS 側のプルアップ抵抗は使わず、画像の通り JP2 は2つとも開放します。

スケッチ

Pmod AQS の公式サイトにライブラリがあります。
Library and example code からZIPファイルをダウンロードし、 PmodAQS.hPmodAQS.cpp を参照可能なパスに置いてください。

以下のスケッチにて PmodAQS.h をインクルードしています。

pmod_aqs.ino
#include "PmodAQS.h"

#define I2C_ADDRESS_CCS811 0x5b

PmodAQS ccs;

void setup() {
  Serial.begin(9600);

  if (!ccs.begin(I2C_ADDRESS_CCS811)) {
    Serial.println("Failed to start sensor! Please check your wiring.");
    while (1) ;
  }

  // calibrate temperature sensor
  while (!ccs.available()) ;
  ccs.setTempOffset(ccs.calculateTemperature() - 25.0);
}

void loop() {
  delay(5000);

  if (!ccs.available())
    return;

  ccs.calculateTemperature();

  if (!ccs.readData())
    return;

  Serial.print("eCO2: ");
  Serial.print(ccs.geteCO2(), DEC);
  Serial.print("ppm, ");

  Serial.print("TVOC: ");
  Serial.print(ccs.getTVOC(), DEC);
  Serial.println("ppb");
}

Arduino への書き込み後にシリアル通信を開くと 5 秒ごとに eCO2 と TVOC が表示されます。

動作風景

以下のように表示された場合は接続を誤っています。電源を切って配線を再確認してください。

Failed to start sensor! Please check your wiring.

計測の注意点

電源投入から 10 分程度は値が不安定で最低値の 400ppm となることが多く、それまでは観測値を捨てる(無視する)などして対応してください。

一方でセンサの感度が高いため軽く息を吹きかけただけで eCO2 が瞬時に 1,000ppm を上回ります。人感センサの用途でない限りノイズ源(例えば人体)とは 1m 以上は離しておくとよいでしょう。

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1