最近、テレワークに移行した人が多いからか、自宅の環境向上のためにCO2濃度を測る、というのがネタとして流行っているようです(結構前からかもしれませんが)。
CCS811とMH-Z19Bを使うのが定番のようなので、それぞれ遊んでみましたのでメモ。
CCS811については、
- お値段は1500円ぐらい。アマゾンでKEYESTUDIOというところで購入。
- 動作電圧はチップ自体は3.3Vですが、KEYSTUDIOは5Vになっています。電源電圧はレギュレータで3.3Vに落としているようです(SDA/SDLがレベル変換ができているかはよくわかりませんが、そのまま5Vつないでも大丈夫のようです?)
- 測っているのは純粋なCO2濃度ではなくて、eCO2(equivalent CO2)とかTVOC(Total Volatile Organic Compounds、総揮発性有機化合物)というもののようです。
- 測定に際してはキャリブレーションが必要で、外気で一定時間(20分)回すと値が落ち着いてくることになってます。
- キャリブレーションはリセットでクリアされてしまうのですが、BASELINEレジスタというのがセンサーの状態を示しているので、それを読み取って保存しておいて、リセット・起動後に書き戻すことでキャリブレーション後の状態を回復できるという仕組みのようです。
- 何故か使っている個体だと、数日でBASELINEレジスタへの書き込みができなくなってしまいました(書いて読み出しても書いた値が読み出されない。最初は読み出せていました)。
- そのせいかわかりませんが、どうも値がドリフトしてしまうようで、夜間で人がいない状態でもどんどん値が上がってしまいます。後述のMH-Z19Bの2~3倍ぐらいの値が出てしまいます(5000ppmとか、ちょっと?な値が出てきます)。
- 結局、あまり良くわからない感じになってしまったので一旦お蔵入り。
MH-Z19Bについては
- お値段は結構します。国内だと4000円ぐらい。MH-Z19Cという後継機種もあるようでもう少し安いようですが、電源が5V±0.1Vを要求して結構シビアに精度に響くようです。
- センサの値は比較的体感と合うようです。窓をあけると下がり、部屋にこもっていると上がっていきます。絶対値として正しいかどうかは、もちろんわかりません。
- 読み出し方法は、UART、PWM、アナログの三通りがありますが、UARTで読み出すことにしました。
制御はいずれもArduino Nanoを使いました。アマゾンでELEGOOさんの3つ入りのパッケージを1500円ほどで購入。
Arduinoを使うのは初めてですが、やはりUSB接続が簡単なのがとてもよろしいです。USB内蔵のPICだと、開発ツールやライブラリがついてこない(MCC非対応とか)ことがあるので。
元々、特殊な簡易言語(スケッチ?)を使うことに抵抗があったのですが、改めて見てみると食わず嫌いだったようで、setup/loopという専用構文を除けば、ほぼC/C++でした。
MH-Z19Bについては、ESP32と組み合わせてAWS IoTとつないでロギングさせようとしていますが、これはまた別途で。