CO2センサーT6703の値をAWS IoTに送る

CO2センサーMH-z19の値をAWS IoTに送る に続いてI2Cインタフェースを持つCO2センサー T6703 の値をAWS IoTに送るようにしてみた。

[2018年8月27日補足] Fritzing ファイルを追加しました。

ハードウェア

使用したハードウェアは以下の通り。

  • MH-ET Live Minikit ESP32
    • ESP32 ボード
    • WeMos D1 mini 互換のピン配列
  • WeMos D1 mini OLED Shield
    • CO2濃度などを表示するため
    • なくてもAWS IoTへのデータ送信には影響しない
  • WeMos D1 mini Dual Base
    • MH-ET Live Minikit ESP32 と CO2センサーボードを接続するため
    • 現在 Aliexpress の Lolin のショップで販売されている Dual Base は Dual Base V2.0.0 for LOLIN (WEMOS) D1 mini (Tripler Base と同様に、ユニバーサル基板のような穴とランドがある)であるが、WeMosのDual Base V1よりもシールド間の間隔が狭くなっていて、MH-ET Live Minikit ESP32と他のシールドを並べることが難しくなっている。
  • CO2センサーT6703 ボード
    • 後で説明する。

ハードウェア全体のブレッドボード図

T6703モジュールの上に配線があるなど実際とは異なる点がある。

図からはわかりづらいが、WeMos D1 mini Dual Base の上に、CO2センサーT6703 ボード (下図では左側)と MH-ET Live Minikit ESP32 が載っている。さらに、MH-ET Live Minikit ESP32 の上に WeMos D1 mini OLED Shield を載せている。

ハードウェア全体の回路図

Fritzingファイル

上記の図ではわかりづらい場合には、Fritzingのファイルをダウンロードして参照していただきたい。

Private File - Access Forbidden

CO2センサーT6703ボード

小型でI2Cで通信が可能なCO2センサー Amphenol Telaire T6703を利用したもの。

必要なパーツ

Amphenol Telaire T6703

非分散赤外線吸収法(Non-dispersive Infrared absorption method – NDIR)による小型な (30 mm X 15.6 mm X 8.6 mm) CO2センサーモジュール。

T6703 はシングルビーム(チャネル)の安価な(精度の低い)センサー。サイトによってはT6703の記載がないところがあるので、廃盤になっている可能性もある。

精度の高いものとしてT6713 がある。T6713は販売されている。

デュアルビームのT6715 も計画されているようであるが、販売はされていない模様。

I2Cインターフェスを有しており、ピン数の少ないESP8266などで複数のセンサーを利用する際には使いやすい。ESP32でも配線が少なくて済むのでUARTを利用する MH-z19 よりは便利だと思う。

後述の技術資料のマニュアルによれば、電源は5V (4.5V~5.5V)だが、インタフェースは3.3Vと5Vの両方に対応しているとのこと。3.3VインタフェースのESP32と接続する際にレベルコンバーターなしで良いことになる。

I2C通信を行うためには、ピン6をGNDに接続すれば良いようだが、マニュアルには10~100kΩでGNDにpullとも書いてある。ここに示すものでは、Frtizing の回路図通り GND とピン6を(抵抗を使うことなく)直接接続している。

データシート

データシートは Amphenol Advanced Sensors のサイトからアクセス可能。

https://www.amphenol-sensors.com/en/telaire/co2/525-co2-sensor-modules/3215-t6700

サンプルコード

サンプルコードは次のGitHubからアクセス可能。

Arduino Code to communicate and measure AAS Telaire Sensors

https://github.com/AmphenolAdvancedSensors/Telaire/tree/T6700_Series

技術資料

技術資料は、なぜかしらAmphenol のサイトからはアクセスできない。

CO2Meter.com のサイトからの方が詳細な情報が得られる。t6713とt6703は精度などを除けば同じもののようである。

https://www.co2meter.com/collections/0-1-co2/products/t6713-miniature-co2-sensor

マニュアルは http://www.co2meters.com/Documentation/Manuals/Manual-AMP-0002-T6713-Sensor.pdf でアクセスできる。

もしくは、Mouserのサイトから以下の資料にアクセスできる。

https://www.mouser.com/catalog/additional/Telaire_T6700_Series_CO2_sensor_Module_Application_Note.pdf

T6703ボードのブレッドボード図

(ブレッドボードは使っていないが、ブレッドボード図とする)

配線がT6703の上に表示されていたり、T6703と配線の結合箇所が同じなど、実際とは異なるが、線の対応は以下の通り。

実際には、配線はPrototype board上にあり、一番下の列には6ピンソケットがある(配線は下から2列目の穴を通して、裏面でピンソケットの端子に接続)。

T6703モジュールには6ピンヘッダが下向きに取り付けてあり、6ピンソケットの上で接続している。

T6703ボードの回路図

ソフトウェア

センサーの操作部分以外は基本的に、CO2センサーMH-z19の値をAWS IoTに送る で利用したソフトウェアと同じ。以下では異なるファイルのみ示す。

開発環境は、PlatformIO IDE for VSCode である。開発環境については必要に応じて、PlatformIO IDE for VSCode でESP32のプログラム開発 を参照してください。

main.cpp

下記でハイライトしてある行が CO2センサーMH-z19の値をAWS IoTに送る で利用したコードと異なる点である。

t6703-i2c.cpp

T6703のI2C制御を行う。

また、取得したCO2のデータを 関数 updateT6703 でArduinoJsonのオブジェクトに設定する。

  • int readCO2()
    • CO2濃度(ppm)を取得する
  • void getT6700status()
    • 状態を取得して、正常時以外にはLog.errorで状態を表示する
  • void setT6700ABCLogic()
    • 自動較正を有効にする
  • void startT6700SinglePointCalibration()
    • 手動較正を行う
  • void setupT6703(char deviceNameBuffer[])
    • T6703の初期化を行う
  • int updateT6703(JsonObject &jsonObject)
    • T6703からCO2濃度を取得し、jsonObjectに結果を格納する

実行結果

T6703の測定結果が安定するまでには長い時間が必要なことがある。

自動較正の Automatic Background Logic (ABC Logic)を上記のプログラムの setT6700ABCLogic を呼び出して有効化しても、最初に通電してからは数日の単位で待たないと、換気した部屋でもっともらしい値(400ppm~1000ppm)にならないことがあった。安定するまでは、2桁の数値や5桁の数値が得られることもあった。

実行時の風景

T6703の内部が定期的に光っていることがわかる。

AWS IoT コンソールでのメッセージ

AWS IoT Consoleのテストで iot/[MACアドレス]/update を subscribe すると、ESP32からのMQTTメッセージを正しく受信できていれば、次のように確認できる。

電源に関する失敗

最初テストしている際に、Brownout detector was triggered メッセージが出てハード的にリセットされることが頻繁に起きた。T6703の電源には5Vを接続する必要があったが、3.3Vに誤接続をしているためであった。Brownout が発生したのは 3.3Vの電源容量不足と思われる。

MH-ET Live ESP32 Minikitでは、ME6211-3.3Vがレギュレータとして使われているが、最大出力電流が500mAになっている。T6703はピーク電流が200mAとなっている。WiFi通信時にはESP32の消費電力が大きくなるので、Brownout が発生するようだ。

T6703の電源電圧が4.5~5.5Vと書いてあり、電源を5Vに接続することでBrownout は発生しなくなったが、3.3Vで消費電力の大きなものを接続する場合には注意が必要である。T6703のインタフェースは5Vでも3.3Vでも動作するとのことなので、I2C接続時にレベルコンバータなどは必要ない。

補助電源としてLolin(WeMos)のBattery Shield  (最大1A) やDC Power Shield (最大1A)などを使うことで5Vの出力電流を増やすことは可能だが、3.3Vの出力電流は増えない。3.3Vの電源容量が不足する場合には追加デバイスごとに3.3Vに変換するレギュレータを追加する必要がある。