Piに22ドルの二酸化炭素(CO2)センサーをつなぐ中国のお店が中国国外に売る通販モールAliExpressで、センサーをいくつか購入しました。Piにつないでみました。なんと、黄金に輝く✨ゴージャスなセンサーです!www.aliexpress.com中国の河南省にあるWinsenというガスセンサーメーカーの製品MH-Z14Aです。前回までメーカーもよく分からないノーブランドの安いセンサーモジュール(大手メーカーのセンサーを基板に載せただけのブレイクアウトボード)ばかり紹介してきましたが、今回はちゃんとしたメーカー品です。Amazon.co.jpのマーケットプレイスでも手に入るみたいです。二酸化炭素を検出LaDichaAmazonAliExpressにはメーカー公式店もあり、そこでは2個セットで44ドル(記事執筆現在)となっています。他のお店では1個だけのばら売りもされています。私が見た時はこのセンサーがセール中のお店があり、値段はなんと$14.4でした!20ドル以下で売っている店はあまりなかったのでお買い得でした!(ちゃんと届くか心配でしたが、無事届きました)趣味のDIYには高価💸とはいえ、1個から買える二酸化炭素センサーとしては、安いのではないでしょうか。(私は違いがよくわかっていませんが...)。どちらも、UARTのコマンドインターフェースは共通のようですので、同じPythonプログラムが使えます。二酸化炭素濃度とは?二酸化炭素(CO2)はものを燃やしたり🔥、人間など動物の活動🏃‍♂️によりできる気体です。逆に植物🪴は二酸化炭素と光を使って光合成をすることで、栄養を作って成長します。人間の吐く息には4%くらいの二酸化炭素が含まれているようなので、人がいる室内だと屋外より二酸化炭素濃度が高くなります。石油ストーブやコンロなど火をを使うと、さらに二酸化炭素が発生します。換気しないといけませんね。換気せず放っておくと光合成に影響が出て作物の出来に影響したりもするそうです。大気中の二酸化炭素濃度は変動あるものの、気象庁の観測によれば410ppmくらいのようです。(400ppm)を突破しています。温室効果ガスの中でも、気候変動への影響が大きいようです。二酸化炭素の濃度は快適性や健康に影響を与えるそうです。密閉された室内に人がいると二酸化炭素濃度が上昇するので、換気が必要です。1000ppm以下なら十分換気されていて快適な環境です。2000~5000ppmくらいになってくると、集中力の低下や眠気、頭痛などが起こることがあるようです。10000ppmを越えるようだと、健康に影響を及ぼす事態になりかねません。ちなみにppmとは100万分のいくらかという割合を示す単位です。10,000ppm=1%、100ppm=0.01%です。学校🏫では平均で1500ppm以下を保つことなどが国の基準が定められています。今であれば、新型コロナウィルス対策で換気が十分かを示す目安としても使えるかもしれませんね。スポンサーリンクMH-Z14Aとは?私にしては珍しくとても高価で高級なセンサーを買ってしまったので、前置きが長くなりました。AliExpressのお店で注文して待つこと約3週間、ついにセンサーが到着しました。こちらがMH-Z14Aです。ピンヘッダをはんだ付けした後の写真です。金色に輝く✨センサー部分がかっこいいですね。メーカー品だけあって、ちゃんと公式サイトやデーターシートもあります。)という方法で測定するセンサーです。私は詳しくないので説明できないのですが、Webで検索すると測定原理の解説記事が出てきます。金メッキが施されているのは、長期的に安定して測定するためのようです。このセンサーで0~5000ppmの二酸化炭素濃度を測定できるとのことです。普通のご家庭ならこれだけ測れれば十分でしょう。この上限を越えるようなら直ちに換気!!インターフェース電源は5Vで、センサー値はUART、PWM、アナログ電圧の3通りの方法で読み出せます。PiにつなぎやすいUARTを使用しました。電源は5Vですが、UARTは3.3V(5Vトレラント)です。電源に5Vを用意する必要はありますが、5V、3.3Vどちらのマイコンにもつなぎやすくなっています。コネクタとスルーホールの2通りの接続方法が選べます。今回はスルーホールにピンヘッダをはんだ付けして使用しました。スルーホールの左下4つのピンがUARTと電源になっています。Piのピンヘッダは上図のように機能が割り当てられています。このモジュールはUARTで通信するので、次のピンに接続します。(MH-Z14B→RasPi)UARTは2つの機器を1対1でつなぐ通信方式で、A→B、B→Aの片方向ごとに1本ずつ線があり、2本の線で通信します。一方の機器の送信端子(TX)をもう一方の受信端子(RX)につなぎます。このような接続になります。WHに接続すると、次のようになりました。WHの場合、1番ピンはSDカードスロットの横にあたります。OSのインストール直後はUARTが無効になっています。有効化するには、raspi-configのメニューから設定できます。UART"選択してください。serial?"と聞かれます。UARTをログインシェルとしても利用できるのですが、今回はセンサーを接続したいのでNoを選びます。enabled?"と聞かれます。ここでYesを選びます。以上でUARTの有効化ができました。Linux上からUARTへは/dev/ttyS0というデバイスファイルとしてアクセスできます。OSからMH-Z14Aにアクセスできる準備が整いました。Pythonからアクセスしてみましょう。PythonライブラリのインストールPythonからUART通信をするには、pySerialというライブラリの利用が便利です。pythonhosted.org次のようにして簡単にpySerialをインストールできます。pyserialこれで準備が完了です。MH-Z14Aのセンサ値読み取り方法MH-Z14AはUARTでどのようにセンサー値を出してくるのでしょうか?データシートを見てみましょう。MH-Z14Aデータシート9600bpsで通信し、5つのコマンドを使って設定や二酸化炭素濃度読み取りを行うようです。二酸化炭素濃度読み取りコマンドは、0x86ですね。このセンサーはキャリブレーションにも対応しています。このセンサーを屋外に放置してキャリブレーションコマンドを実行することで、その濃度を400ppmとして記憶し、補正を行います。時々これを実行することで、長期的に安定して正確な値が測定できると思います。ご家庭のDIYならそこまで精度はいらないので、キャリブレーションは行わずに使います。MH-Z14Aデータシート二酸化炭素読み取りコマンドの詳細がこちらの表です。9バイトのコマンドを送ると、9バイトの応答がセンサから帰ってくるようです。コマンドは常に固定でいいみたいですね。応答の2バイト、3バイト目(※0バイト始まり)が二酸化炭素濃度です。これを踏まえて、Pythonプログラムを作ってみましょう。スポンサーリンク動かしてみよう簡単ではありますが、次のようなプログラムを作ってみました。s.read(9)で応答の9バイトを受信します。あとは応答がちゃんと受信できたかを確認し、最後に2バイト目と3バイト目から二酸化炭素濃度を計算して表示します。コマンドが単純ですし、pyserialを使えばドライバも簡単に書けますね。このプログラムをread_co2.pyなどのファイルに保存して、実行してみましょう。ppm...このように二酸化炭素濃度が読み取れました!1000ppmを下回っているので、換気は十分のようですね。試しに窓を開けてみると、400ppm台に下がりました。»スポンサーリンクスポンサーリンクプロフィール無線モジュールのファームウェア開発を中心に、IoTサービス全般の開発に携わるエンジニアです。reserved.引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。