二酸化炭素計測構成と雑記
前回は製作中の変遷と画面構成について記載しました。
今回は構成部品について記載します。
専門用語が多くなりますので説明を含め、ややくどい表現となる部分がありますがご了承下さい。
比較用のマスタとして
CO2MG-022 (東亜産業)
全国で半額専門店トーアマートを展開している東亜産業が販売している二酸化炭素センサ
当社で制作した構成との差がどのくらい出るか妥当性の確認用に1台購入
分解して確認したところセンサ型式は異なるものの二酸化炭素センサと温度・湿度センサをマイコンに繋ぐ形で構成は当社のものと似たものとなっていました。
二酸化炭素センサ
MH-Z19B , MH-Z19C (Zhengzhou Winsen Electronics Technology Co., Ltd.)
NDIRという赤外線の反射率から気体中の二酸化炭素を計測する方式
赤外線の強さで検出しているためセンサを直射日光や水銀灯の光に当てると高い計測値が出てしまうというデメリットもあるようです。
製作中に後継機種が発売されたためMH-Z19B , MH-Z19Cの2型式を使用しています。
MH-Z19Bは低い計測値が上記マスタと一致せず、上記マスタの値が700ppm以上のときを参考値として当センサの値をソフト的にオフセットすると換気したい付近の濃度では計測が一致していました。センサ個体差によりますが+80~+200程度オフセットが必要になるようなので600ppm以下は測れない印象。
MH-Z19Cについては普通にキャリブレーションすれば上記マスタと大体同じ値になっていました。
センサ毎に個体差があるようなのでハード的にキャリブレーションする他に朝5時付近の計測値が420ppm程度になるようにソフト的にオフセットしたほうが良さそうに思います。こちらについてはMH-Z19Bと比べると600ppm以下も安定して計測できている印象です。
こちらは-50~+50くらいの範囲でオフセットすると上記マスタと一致しますが、そもそもセンサの測定精度が±50ppmとなっているので誤差の範囲に収まっていると考えて良さそう。
HDピンを0Vに接続することで手動でキャリブレーションを行えますが、やり方が悪かったのかあまりうまく行かない印象。
400ppmの環境に20分置いてからHDピンに0Vを接続するにするとありますが、400ppmだと室内ではなく外気に置いたほうがよいこと、外気だとセンサに直射日光が当たる可能性が高いことなどからうまくいかなかったような気がしています。
手でセンサを覆いながらHDピンに0Vを接続してみたりもしたのですが・・・
自動キャリブレーションでは24時間の中で最低だった計測値を400ppmとして調整し直すので手動キャリブレーションと比べて安定感あり。
ただし、密閉度の高い部屋などで二酸化炭素濃度が下がりきらない場合はキャリブレーション後の値が狂ってしまうのでよく換気できる部屋で行う必要あり。
室内で自動キャリブレーションをオンにしたままだと換気の影響か日によってばらつきが出たので一度安定したら自動キャリブレーションを無効化して後はソフト的にオフセットするのが良さそうです。
また、キャリブレーションで最低値を400ppmとしていますが、下記埼玉県の計測値を見ると外気430ppm程度で実際は400ppmまで下がることは無さそう。
430ppmと400ppmならセンサの測定精度±50ppmに収まっているので無視して良いレベルの気はします。
http://www.kankyou.pref.saitama.lg.jp/CO2/co2data.html
安価で手に入りラズパイの他、M5stackなどでも使用できるのでネット上で設定やソフトのソースコードなどすぐに見つけられると思います。
温度センサ
BME280 (BOSCH)
正確にはBME280を搭載した別型式の部品となりますが、ネット上の情報はBME280の方が見つけやすいと思いますのでこちらで記載します。
温度・湿度・気圧を計測可能、接続もI2C、SPIを使用可能なので利便性は高いと思われます。
湿度がやや低く計測されているような印象を受けますがセンサ毎のばらつきは少なく計測値についてはかなり信頼できそうな印象です。
グラフ表示を行う場合は風の影響など外乱要素で数値が乱れやすいのでソフト上で多少のフィルタ処理は行ったほうが良いかもしれません。
こちらも安価で手に入りラズパイの他、M5stackなどでも使用できるのでネット上で設定やソフトのソースコードなどすぐに見つけられると思います。
親機
Raspberry Pi 4B
Raspberry Pi (以下ラズパイ)公式の7インチタッチスクリーンを使用してマウス・キーボード無しで操作可能としました。
時系列データベースとグラフ表示ソフトをインストールし、子機から書き込まれたデータの保管とグラフ表示を行っています。
また、データベースのデータを1日毎にcsv化しgoogleクラウドにアップロードしています。
ラズパイ公式の7インチタッチスクリーンは解像度が800x480と低いため表示内容を割り切って削減しないとレイアウトが苦しいか文字が小さすぎて読めなくなることが多いようです。
OSについては作成途中でRaspberry Pi OS Bullseye(Debian11)が公開されましたが、動作に影響がないためRaspberry Pi OS Buster(Debian10)のままとなっています。
親機と子機の通信については社内のネットワークを使用できる場合はそれを使用、駄目な場合には親機をWifiアクセスポイントとして子機を親機に接続するなどとすれば良いと思います。親機をアクセスポイントとする場合は電波の届く範囲を考慮して子機のレイアウトの中心あたりに親機を配置、後は壁の枚数と材質次第になるかと思います。
SAMBAで親機のフォルダを共有しておくと子機の動作を変更した際にソースコードを保管、他の子機に展開など子機の台数が多いときに対応が楽になると思います。
ラズパイはハードとして時計機能RTC(リアルタイムクロック)を搭載していないため親機は起動直後にインターネット上のNTP(時刻修正のための通信使用)で時刻を修正。親機と子機の時間を合わせるため親機にNTPサーバーを立てて子機は親機のNTPで時間を修正するとしました。
親機をオフラインで使用する場合(親機をアクセスポイントとして子機を接続する場合)は別途RTC(リアルタイムクロック)モジュールを購入して取付する必要があります。この場合も親機にNTPサーバーを立てて子機は親機に合わせれば良いのでモジュールは1つでOKです。
子機
Raspberry Pi Zero WH、Raspberry Pi 3A
初期は計測のみを目的としていたためラズパイ Zero WHを使用、後に音声警告を追加したいためイヤホン端子を搭載したラズパイ 3Aに変更しました。
後にPWMを使用してGPIOピンからも音声再生できることが確認できたためラズパイ Zero WHでも同様の制御が可能であることが確認出来たのですが、CPUがシングルコアとクアッドコアの違いもあり性能が大幅に違うこと値段の差が大きくないことから最終的に3Aを選定しました。
今選定するのであれば、ラズパイ 3Aとほぼ同等のスペックなので昨年発売されたラズパイ Zero2の方がよいのかも。
ラズパイはDAC(デジタルオーディオコンバータ)を搭載しておらずPWMによる疑似音声再生のため本体からの音声はノイズが多いです。
また、ラズパイ自体にそのままスピーカーを接続すると音声出力が小さいためほとんど聞こえない状態に・・・
アンプを使用し抵抗でLPF回路作成することにより大きい音量でそれなりに聞こえるようにしました。
音声警報と警告のしきい値変更を容易にするため親機のタッチパネルで子機の設定を行い、設定ファイルをSAMBAで共有化したフォルダに保存
子機は親機から設定読み出しということも行いましたがwifi接続のためか、たまに親機との接続が切れて安定しなかったため現在は無効化しています。
子機のSDカード破損を防ぐためオーバーレイ(ファイル処理をメモリ上で行いSDカード書込を禁止して保護するモード)を有効にしているため親機から変更できるようにするのは構成としても理想的だとは考えていますが・・・
現在ラズパイの全ての型式が入手困難となっているので、同様の計測を行うならラズパイではなくM5stackまたはM5stickあたりでも良いかもしれません。
まとめ
当社の構成では親機25000円程度、子機15000円程度の部材費がかかるため計測だけを目的とするのであればマスタとして購入したCO2MG-022 (1台 6000円程度)を使用したほうが安く確認できると思います。離れた建屋に設置してある端末をリモート接続出来るのでラズパイを採用した値段分の価値はあったとも考えていますが。
本プロジェクトについては当社でラズパイの使用経験が少なかったこと、コロナ禍で換気の目安となるセンサを用意したかったことなど条件が重なったためここのように運用。
結果としてラズパイのメモリ量、CPU性能の違いで何ができるかの確認と理解は深まったと感じています。