ラズパイ を使ってお部屋の二酸化炭素(CO₂)の濃度を測ってみます。
なんでそんなことをするのかというと…..
●数多くの臨床研究が、1000ppmの室内CO₂濃度レベルに達すると人のパフォーマンスや意思決定を損なわせるということを示している
●平均して、CO₂濃度レベルが600ppmから1000ppmに増加すると、ひとのパフォーマンスや意思決定力は約20%低下し、1400ppmでの平均低下率は50%、2500ppmでは低下率は65%に達する
のだそうです。
そこでラズパイ Zero WH にセンサーをつないで測定してみます。
センサーはピンキリで、値段相応の性能だそうです。
で、あまり高価ではないものの、そこそこの性能を示すという評価のあるMH-Z19の中から
MH-Z19Cというセンサーを使ってみます。3000円半ばの値段です。
ラズパイ Zero WHと接続
メスーメスのジャンパー線を使って以下のように結線します。
MH-Z19Cは通電するとココの部分が点滅します。
Python3 でMH-Z19C を使う
ラズパイ Zero WHのOS設定などはこちらを参照。
Interface Options ではI6 のシリアルポートを有効にしておきます。
設定が済んだら、再起動しておきます。
pip3を使うので未だの場合は以下を実行しておきます。
1 |
sudo apt install python3-pip -y |
ライブラリをインストール
1 |
sudo pip3 install mh-z19 |
屋外に置くか、屋内の場合は2、30分換気して人がいない状態で
キャリブレーションを実行
1 |
sudo python3 -m mh_z19 --zero_point_calibration |
コマンドで取得してみます。
1 |
sudo python3 -m mh_z19 |
こんな感じで取得されます。単位はppm
{“co2”: 405}
データを取得するPythonコードはこんな感じです。
【co2.py】
1 2 3 4 5 6 7 8 |
import mh_z19 def read_mh_z19(): dat = mh_z19.read() return str(dat)[8:-1] if __name__=='__main__': co2=read_mh_z19() print(co2) |
データ取得
1 |
sudo python3 co2.py |
cron に設定して定期的にデータ取得
メール転送エージェントを入れておいて
1 |
sudo apt-get install postfix -y |
一旦再起動します。
co2.pyはsudoで実行します。
あなたのユーザーでcrontabを設定してsudoを実行させると、多分端末が無いというエラーになります。
回避の方法はいろいろあるようですが、ここでは、sudo su で root になって、root の crontabでsudoを実行します。
sudoを使わない通常のcronの場合はあなたのユーザーでcrontabに設定します。
10分ごとにco2濃度をあなたのユーザーホームのファイルに書き出すというジョブを登録してみます。
【co2.py】
1 2 3 4 5 6 7 8 9 10 11 |
import mh_z19 def read_mh_z19(): dat = mh_z19.read() return str(dat)[8:-1] if __name__=='__main__': co2=read_mh_z19() print(co2) f = open("dat.txt","a") f.write(str(co2) + " ppm" + "\n") f.close() |
rootになってcrontabに記述
1 2 3 |
sudo su crontab -e |
以下のジョブを書き込んでrootから復帰
*/10 * * * * cd /home/<あなたのユーザー名>;sudo python3 co2.py
Ctrl + D
cron 再起動
1 |
sudo /etc/init.d/cron restart |
このままだと、データの採取は2回目以降になります。
cronの開始
sudo /etc/init.d/cron start
cronの停止
sudo /etc/init.d/cron stop
cronの再起動
sudo /etc/init.d/cron restart
ronのステータス確認
sudo /etc/init.d/cron status
Appendix
Leave a Reply