google-site-verification: google3bd66dd162ef54c7.html
fc2ブログ

Arduinoを使った二酸化炭素モニターの改良

◆まえがき
6月頃に作ったアナログ表示付きの二酸化炭素濃度計を実際に使っています。動作に問題は無さそうで、部屋の中の人数や換気状態によって二酸化炭素の濃度が変わるのが判って面白いです。

・外観
二酸化炭素センサー

アナログ表示があるので、離れた所からでも二酸化炭素濃度が判るので使い易いです。ただ、アナログ表示では変化の傾向までは判りません。時系列の変化はグラフ表示を見れば判るのですが、画面が小さいので近くに行かないと見えません。また、OLED画面の焼き付き対策として、値が変した時だけ表示しているので、常に表示が出ている訳ではありません。

そんな問題を解決するために、二酸化炭素濃度の変化の傾向をLEDの色で表示する機能を付けてみました。

◆回路図
二酸化炭素濃度計の回路図
以前公開した回路にLED1とLED2を追加しただけです。

◆プログラム
値が変化した場合にLEDの表示を更新すれば良いので、時計の針を移動させるタイミングでLEDを点灯させるようにしました。もちろん回転方向によって点灯させるLEDの色を変えています。ちなみに、CO2の濃度上昇時は赤色、減少時は緑色のLEDを点灯しています。あと、また、針の運針パルスを利用してLEDを点滅させているので変化があったことが判り易くなっています。

プログラムコードは以下からダウンロード可能です。(拡張子を.inoに変更要)
1) 20210802_MH-Z19C_CO2meter-sjis (Shift-JIS)
2) 20210802_MH-Z19C_CO2meter-utf8 (UTF-8)
3) 20210802_MH-Z19C_CO2meter-utf8-bom (UTF-8 + BOM)

これまでプログラムは Shift-JIS エンコードしたものを公開してきました。これはWebブラウザで読んだ時に日本語のコメントが文字化けすることがあったためです。ただ、最近は海外の読者の方も少し増えていて、そういう方にとっては Shift-JIS のファイルは扱いにくいはずです。そんなことで、UTF-8 のファイルも BOM無しとBOM付きの両方で公開することにしました。なお、UTF-8 の方が一般的だと思うので、将来的にはShift-JIS での公開は止めたいと思っています。

あと、今回のプログラムの更新にはVSCode for Arduino を使ってみました。

◆表示例
濃度現象中は緑LED
CO2濃度が下がった時は、左下のLEDが緑色に点灯します。(上昇時は赤色LEDが点灯します)

◆空気を読む
ここまでの話と関係ありませんが、この二酸化炭素モニターのOLED画面は、CO2センサーの値が変化した時に点灯するようにプログラムしてあります。そんなことで、人が近付いてこのモニターを見ていると、吐く息(に含まれる二酸化炭素)に反応してセンサーの値が上昇し、OLEDの画面が自動点灯します。

これって反応速度は遅いものの、人感センサーとして動作していることになります。それより面白いのは、本当に「空気を読んでいる」わけで、なかなかしゃれの効いた仕掛けだと思います。

◆まとめ
LEDの色で二酸化炭素濃度の増加/減少の傾向が判るようになりました。遠くから状況が判るので便利です。

ただ、単に最後に変化した方向(増減)を表示しているだけなので、値がほとんど変化していない場合でも必ず赤か緑のいずれかが点灯しているので、ちょっと煩わしいかも知れません。同じ状態が例えば5分続いたらLEDを消灯させるようにした方が良いかも知れません。

アナログ表示のCO2モニタ(換気メーター)の製作(ハード/ソフト解説編)

◆まえがき
Arduinoを使った二酸化炭素濃度計(CO2メーター、換気モニタ)作りの話のたぶん最終回、今回はハード、ソフトの解説です。

◆外観
何度も写真を出していますが、こんな物です。
・正面
アナログ表示のCO2濃度計(換気メーター)

・背面
CO2メーターの背面

◆回路図 (図をクリックで別窓に拡大図)
Circuit scheme of CO2 meter

1) ネットでセンサーのMH-Z19Cを使った事例を見ると、シリアルのTX/RXと電源の+-の合計4本だけを配線していることが多いのですが、機能をフルに試したかったので、マニュアルゼロ調端子(HD)も配線してSW1に接続しておきました。
2) CO2濃度のオフセット調整を自動/手動に切替えるためのジャンパーを設けました(Zero Calib mode)
3) 時計のパルスモーターとの接続(D5, D6)の詳細は過去記事参照ください。
4) UNOの+5Vピンから電源を供給していますが、同時にUSB側から電源供給することも可能にしています。2系統から給電出来るので、モバイルバッテリーを使うことで電源を落とさずにコンセント間を移動することが出来て便利です。なおこれは、厳密には問題のある使い方(Vinのシリーズレギュレーターに逆電圧が掛かるなど)なので、何か問題が発生しても文句を言えないのですが、まあ大丈夫かと。

◆実装の状態
・基板ケース内部
制御基板

・基板拡大
プリント基板
基板はスカスカです。実はセンサー用の電源を入れる予定があったのでスペースを空けています。

・裏側
基板背面
いつもなら信号には青色のETFE線を使って配線するのですが、在庫が無くなったので赤色の線で接続しました。赤色は電源に使うと決めているので気持ち悪いのですが、コロナの影響で買い出しに行けないので仕方ありません。

・時計のムーブメントとOLED
ムーブメントとOLED
OLEDはケースにホットボンドで接着しています。

◆ソフト (Software)
プログラムは下記リンクからダウンロード下さい。
(program code available from following link.)
20210617_MH-Z19C_CO2meter.txt シフトJISエンコードになっています。拡張子を .inoに変更)
(File is encoded shift-JIS (ASCII extended), change extension .txt -> .ino )

操作方法や表示画面は過去の記事と同じです。
最初はCO2濃度の測定に合わせてLEDを点灯させていましたが、ピカピカ光って煩わしいのでパルスモーターの駆動時、つまりアナログ指針の移動時にだけLEDを点灯させるように変更しました。

CO2濃度を示すアナログメーターの指針には原点復帰機能が無いため、ソフト側からは現在の針の位置(pv)が判りません。そこで、起動時は針が400ppmの位置にあるものとみなしています (pv = sv = 400)。なお、もし指針の位置がズレている場合は、時計の時間合わせツマミを使って手動で針を合わせることになります。

◆動画


◆まとめ
これまでの記事で書き漏らした点を以下にまとめておきます。

・起動時のCO2濃度の表示
コールドスタート時(電源OFFの状態から開始)は、最初の約60秒間はCO2濃度を500ppm(あるいは512ppm)と表示し、その後実際のCO2濃度の表示に移ります。最初はセンサーのウォーミングアップをやっているのだと思います。
ホットスタート時(電源が入った状態でリセット)には、最初から現在のCO2濃度を表示します。

・Auto Zero機能
センサーのマニュアルに説明があるので良く読むことをお勧めします。ただ、どういう反応になっているのか確認するのに24時間単位の時間が必要なので自分でも良く判っていないです。あと、HDピンをGNDに落とす(7秒以上)とその時のCO2濃度を400ppmと見なす機能がありますが、これはAutoZero が Autod でも Manual でも同じ効果がある感じですが、詳しくは確認出来ていません。

・センサーの電源電圧
MH-Z19Cのデーターシートによると、電源電圧は 5.0±0.1V とかなり高い精度が要求されています。この条件を普通のUSB電源で満たすのは無理なので、専用の電源回路を用意する必要があります。そこで、その電源回路を入れるためのスペースをプリント基板に用意しておきました。(無駄に基板のスペースが開いているのはそのためです)
しかし実際に動かしてみると、電源電圧が0.1V以上変わっても測定結果に違いは感じませんでした。ということで、センサーへの専用電源を使った電源供給は止めました。

二酸化炭素濃度計(CO2メーター、換気メーター)のケースの作成

◆まえがき
CO2濃度をアナログ表示するためのプログラムの準備が出来たので、二酸化炭素濃度計の形が見えてきました。いつもなら、このあたりでハード解説、ソフト解説の記事を書くのですが、もう少し手直ししたいところがあります。

ということで、先にケースと言うか外観を紹介します。

◆外観
・正面
二酸化炭素濃度計(換気メーター)
100円ショップのアナログ時計をそのままベースに使いました。電源はUSBの5Vから供給します。

・背面
背面(右後ろ)
本来は壁にぶら下げて使う物ですが、簡単なスタンドを付けて自立出来るようにしました。

背面(左後ろ)
正面の左下には緑色のLEDを仕込んで動作表示をさせています。穴を開けていないので白い平面が丸く緑色に光って綺麗です。(穴を開けるのが面倒だったので手抜きしたという噂も、、)

◆操作ボタン
操作スイッチ
右がEnter/Dispボタンでメニューの起動/設定とOLEDの画面の点灯/消灯に使います。左はSelectでグラフのレンジ設定に使います。

◆表示
表示部拡大
CO2濃度をアナログメーターで表示します。メーターの目盛は400~1000、1000~2000、2000ppm〜 の3ゾーンに分けて感度を変えていて、通常使用する1000ppm以下の領域を拡大表示して見易くしています。

指針の中心のベンツのマークみたいな物は秒針の軸に取付けてあり、ボロ隠しと共に動作表示にもなっています。

あと、CO2濃度の値だけでは判り難いので、400~800ppmを換気良好、800~1200ppmを注意、1200~1500ppmを換気要、1500ppm以上を危険、とゾーン別に色分けして表示することで判り易くしています。

・OLED (SD1306 0.96inch 128x64pix)
OLED

文字盤の中にOLEDを組み込みました。このOLEDにはCO2濃度をデジタル表示すると共に、変化の様子をグラフで表示します。このグラフには最小/最大値を表示しているので、過去の履歴が判って便利です。なお、このOLEDは焼き付き防止のために一定時間経過後に自動消灯しますが、CO2濃度が1000ppmを超えると自動で点灯して注意を促します。

説明が後になってしまいましたが、OLEDを取り付ける場所を確保するため、時計のムーブメントの電池ボックスの部分を切り取っています。

・文字盤のファイル(図をクリックすると別窓に拡大)
文字盤
主にパワポで作ったので細かい所でアラが目立ちます。もし同じ物を作られる方がいたら、ダウンロードして使ってもらって構いません。修正などもOKです。

◆基板
背面、基板とセンサー
小さなナイロンケース(確かAitendoで部品を買うと付いてくるケース)の中に Arduino NANOとセンサーのMH-Z19Cを入れました。センサー付近のケースには通気口を開けて換気を良くすると共に、発熱対策としています。

◆まとめ
なかなか良い物に仕上がってきたと思います。ここまでの機能を持った二酸化炭素濃度計(CO2メーター)は市販品には無さそうです。

アナログ表示は離れた場所からでも見易くて便利です。人が集まる場所に置いておくと、換気の状態が判るので、新型コロナウィルス対策に役立つと思います。

ただ、今回ベースに使った時計のサイズは15cm角で、自宅で使うのにはちょっと大きすぎな感じです。そんなことで、もう二回りくらい小さな時計を見つけたら作り直しても良いかな、と考えています。

冒頭に書いたように、この後はソフト、ハード解説の記事により、詳細を解説する予定です。あと、関連記事が増えてきたので
二酸化炭素濃度計のカテゴリ
にまとめました。
カレンダー
11 | 2023/12 | 01
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 - - - - - -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。
記事の内容のご利用は読者の自己責任でお願いします。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード