チープなCO2センサー (CM1107)

Aliexpress に チープな CO2センサーのお勧めが出てきたので、買って試してみた。NDIR デュアルチャンネル CO2センサーが安く販売されていた。以前、CM1106 と思われるチープなCO2センサーを売っていた販売店である。

販売ページを見ると、ジャンク品と思われるような、酷く汚れていたり、ピンが曲がったりしている写真が載っていて動作するかはっきりしない感じであった。1個 約7ドルで、2個で送料が4ドル弱だったので動作すれば儲けものと思って買って試してみた。販売ページには、前回と異なり、型番がCM1107 と書かれていた。

届いたセンサー

届いたセンサーは、小さな傷などはあるが、販売ページの写真ほどひどくはない外観で、ピンも曲がっているところはなかった。

以下の写真の上段が以前購入したCM1106と思われるセンサーで、下段が今回のCM1107である。写真では照明の関係でCM1107は暗くなっているが、CM1106と同じ金属メッキがされている。

動作確認

動作させるために「チープなCO2センサー」で作った M5Atom のものを使おうとしたが、センサーの厚さが以前のCM1106よりも大きく、ATOM Hub プロトキットには収まらなかった。

とりあえず、UARTでの動作だけを確認すると、Netatmo が 648 ppm の際に 621 ppm を示しており、正常に動作しているように思えた。

M5Stack Base26 Proto

ATOM Hub プロトキットには納まらなかったので、「M5Stackでのオゾン濃度測定」と同様に M5Stack Gray と M5Stack Base 26 Proto を使って収めることにした。

ピンの対応

ピンは以下のように対応させた。 CM1107の R/T 端子からGNDの途中に、ジャンパーピンを入れて、UARTとI2C を切り替えて試せるようにした。

CM1107 CON5 (5pin側) M5Stack-Gray
pin 1 – 3.3V open
pin 2 – RX/SDA GPIO16 – RXD2
pin 3 – TX/SCL GPIO17 – TXD2
pin 4 – R/T GND for I2C, open for UART
pin 5 – CA open

CM1107  CON4 (4pin側) M5Stack-Gray
pin 1 – 5V 5v
pin 2 – GND GND
pin 3 – Alarming open
pin 4 – PWM open

基板

M5Stack プロトタイプ基板に通常のピンソケットを使ったところ、CM1107センサーの厚みのために、うまく納まらなかった。少し薄い CM1106 を試したところ、CM1106は大丈夫であった。

ピンソケットにlow profileのものを使ったプロトボードを作ったところ、CM1107もBase26 Protoに納まるようになった。次に作成したボードの写真を示す。

動作確認プログラム

CUBIC CM1106 I2C library を利用して I2C での動作確認をしたところ、CM1107は、I2Cで動作することがわかった。

ちなみに、先日買ったチープで型番が明示されていなかったCM1106 と思われるセンサーはI2Cでは動作しなかったが、念のために今回のボードで動作するか調べてみた。やはり、動作しなかった。そもそもI2Cスキャナーのプログラムで調べてもセンサーが見つからない。

開発ツールには、PlatformIO IDE for VSCode を利用した。

CM1106_I2C.ino

ライブラリ CUBIC CM1106 I2C library のサンプルプログラムを基にして TFT_Terminal.h を使って、表示するようにした。

TFT_Terminal.h

M5Stackでのオゾン濃度測定」のTFT_Terminal.cpp で外部から利用する関数の宣言を TFT_Terminal.h としてまとめた。

TFT_Terminal.cpp

M5Stackでのオゾン濃度測定」のTFT_Terminal.cppと基本的には同じ。

platformio.ini

動作状況

起動したばかりの時には550ppmを示すが、その後変化していく。センサーのインタフェースに I2C と UART のどちらでも使える点は良いと思った。

精度は正直言ってはっきりしないが、CM1107が示すCO2濃度とNetatmo Weather Station の二酸化炭素濃度との差は、おおむね 100ppm 以内になっている。センサーの Dual Channel NDIR の効果がどの程度あるかはわからない。