様々なガスは、それぞれ特有の赤外線吸収波長を持っています。InfraRed)があります。赤外光源より照射された赤外線は広域の波長を含んでいますが、ガスによる吸収で、そのガス特有の波長の赤外線は、ガス濃度に応じた割合で減衰します。このガスの吸収波長と吸収の影響を受けない参照波長でのセンサーからの信号を比較することにより、ppmレベルでの高精度な分析・検知ができるといいます。NDIR方式のCO2センサーは様々なものが市販されていますが、安価な中国製のMH-Z19をトライしてみましたが、値の信頼性がいまいちでした。Sensorを入手しリニューアルしました。計測してみると、一日の変化が大きく、日中に低下し、夜間に増加するのがみられます。木々の炭酸同化作用によるものと思われます。ABという会社の製品で、国内代理店があり、amazon.co.jpやmonotaro.comのサイトから、1万5000円くらいで入手できます。センサーは、アナログ、デジタル出力のほか、UART、I2Cインターフェースをもっています。拡張性のためにI2Cをトライしてみましたが、うまくいかず、MH-Z19の場合と同じく、UARTでRaspberryPiのGPIOにつなぎます。センサーにつなぐ例が多いですが、規格表にあるとおり、かなりの間欠的な大きな電流がながれ、動作が不安定になりましたので、独立の12Vから供給することとしました。手元に古い小型パソコンから取り出した電源があり、5Vと12Vが出力でしたので、それを用いることとしました。(9Vを推奨しています。)下の図のように結線します。空気が左の穴から入り、蓋につけたFANで排気する花粉症用のマスクを適当にカットしフィルターとしている。50mm角DCファン(5Vで駆動)をつけ、冷却をかね空気の流れをつくる屋外の雨が直接かからないところに設置ケーブルは、LANとAC100VUARTの準備RaspberryPiでシリアル通信UARTを使う準備をします。rootwaitのように編集。console=serial0,115200という部分を外します。このデバイス名は、後ほどプログラムに必要です。Piで動かす、CO2センサーのよみとりプログラムをPythonで作ります。センサーは電源が入っているといつでも計測しており、レジスタに入っている最新の計測値を外部から読みに行きます。センサーには、センスエアABCアルゴリズムという自己校正機能があります。これは予め設定された時間インターバル(デフォルトは180時間)中のCO2センサの最小測定値を常に内部記録し、長期ドリフトを緩やかに補正する機能です。屋内アプリケーションを想定しており、デフォルトではこの機能はオンになっています。当方のように長期間同じ条件で計測したい場合は、オフとすべきと考えます。したがって、あらたに作りました。コメント番号にしたがって説明します。よると、ABCアルゴリズムの周期をゼロにすることにより無効にできます。そのためセンサーに次の8バイトを送ります。データの読み取りコマンドデータの読み取りの前にセンサーに次のコマンドを送ります。valueを読んでresultに代入3バイト目と4バイト目にCO2濃度(ppm)が入る。ファイル出力CO2data.txtというCSV形式のファイルができる。201908CO2data.txtを、親機のパソコンからよんで、適宜グラフ化します。10分ごとに移動平均した結果をこちらに示します。長期間のドリフト性能については、これから評価します。