換気は大事。部屋のC02濃度の記録を採るためにやったこと

[気象庁　二酸化炭素濃度の経年変化](https://ds.data.jma.go.jp/ghg/kanshi/ghgp/co2_trend.html) によると、2018年の世界のCO2平均濃度は、前年と比べて2.3ppm増えて407.8ppm となっているそうです。

地球温暖化によってCO2濃度が増え続けていることは懸念すべきことではありますが、新型コロナウィルスが流行している今現在の目の前の心配は、「密閉」「密集」「密接」の三密のうち「密閉」のリスクを回避するためにちゃんと部屋の換気が出来ているか、ということです。

室内のCO2濃度について、
[厚生労働省　建築物環境衛生管理基準](https://www.mhlw.go.jp/bunya/kenkou/seikatsu-eisei10/) では 1,000 ppm 以下
[文部科学省　学校環境衛生の基準](https://www.mext.go.jp/a_menu/shisetu/shuppan/04062201/026.htm) では 1,500 ppm 以下
を管理基準としています。
また、[CHC GROUP さん](http://group.chcsys.net/jp/chcgroup/) がまとめて下さっているこの図も参考になりそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/55e43b82-25f9-1a56-18d3-66fb4daadd20.png)
(出典：http://group.chcsys.net/jp/chcgroup/)


基準と照らし合わせて、自分の居場所のCO2濃度がどの程度なのか、ちゃんとしたデータを持っておきたかったので、センサを用いて計測することにしました。

####用意したもの
Raspberry Pi 3 Model B
CO2センサー MH-Z19B

####OS
Debian GNU/Linux
Linux raspberrypi 4.19.97-v7+ #1294 SMP Thu Jan 30 13:15:58 GMT 2020 armv7l

[Raspberry Pi の設定] - [インターフェイス] で Serial Port を有効にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/51f38dca-0bb4-d6a7-7a44-4174dc306e94.png)

Serial Port 有効後に Raspberry Pi を再起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/a3b4fc94-2497-3a18-5391-5a69118b3793.png)


####配線
GND, Vin, TxD, RxD それぞれに配線はんだ付けを行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/d43997ca-a537-65dc-21a8-8000de961d65.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/016129dd-a46b-800a-2cdc-412b52cc5c2e.png)
（配線図 https://pypi.org/project/mh-z19/ より）

配線図にしたがって Raspberry Pi と CO2センサーを接続します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/0c765be4-d056-7ea3-c8c0-db1b79891568.png)





####パッケージのインストール
https://pypi.org/project/mh-z19/ の情報をもとにしました。
パッケージのインストール

``` 
$ sudo pip3 install mh-z19
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting mh-z19
  Downloading https://www.piwheels.org/simple/mh-z19/mh_z19-0.4.1-py3-none-any.whl
Collecting argparse (from mh-z19)
  Downloading https://files.pythonhosted.org/packages/f2/94/3af39d34be01a24a6e65433d19e107099374224905f1e0cc6bbe1fd22a2f/argparse-1.4.0-py2.py3-none-any.whl
Requirement already satisfied: pyserial in /usr/lib/python3/dist-packages (from mh-z19) (3.4)
Collecting getrpimodel (from mh-z19)
  Downloading https://www.piwheels.org/simple/getrpimodel/getrpimodel-0.1.15-py3-none-any.whl
Requirement already satisfied: requests in /usr/lib/python3/dist-packages (from mh-z19) (2.21.0)
Installing collected packages: argparse, getrpimodel, mh-z19
Successfully installed argparse-1.4.0 getrpimodel-0.1.15 mh-z19-0.4.1
```

####計測値の取得テスト
 ~~モジュール mh_z19 はディクショナリ型で結果を出力しているようです。~~
モジュール mh_z19 は JSON で結果を出力しているようです。
(@UedaTakeyuki さんから編集リクエストをいただきました。ありがとうございます。)

```
$ sudo python3 -m mh_z19
{"co2": 1456}
```

####プログラムを作成
日時とセットで計測値を出力します。

```
import datetime
import mh_z19

now = datetime.datetime.now()
now = "{0:%Y-%m-%d %H:%M:%S}".format(now)
value = mh_z19.read().get("co2")  # ex: {"co2": 1456}
out = now + ',' + str(value)
print(out)  # コンソールに出力
```
出力結果

```
2020-04-15 19:34:01,1950
```

####シェルスクリプトの作成
標準出力の結果をログファイルにリダイレクトします。
do.sh

```
#!/bin/sh

cd /home/pi/mh-z19
sudo python3 MeasureAndOutput.py >> ./log/logfile.csv
```

シェルスクリプトを実行可能モードにします。

```
$ chmod +x do.sh
```

####定期実行の設定
```
$ crontab -e
```

エディターが起動するので、毎分計測してログを出力するように設定します。

```
# m h  dom mon dow   command
* * * * * mh-z19/do.sh
```
設定が有効となるように、cronを再起動します。

```
$ sudo /etc/init.d/cron restart
[ ok ] Restarting cron (via systemctl): cron.service.
```
数分後に確認したところ、シナリオ通りにログが出力されていました。

```
$ cat logfile.csv
2020-04-15 19:34:01,1950
2020-04-15 19:35:02,1957
2020-04-15 19:36:01,1965
2020-04-15 19:37:01,1976
2020-04-15 19:38:02,1983
2020-04-15 19:39:01,1996
2020-04-15 19:40:01,2032
```
####グラフを作ってみる
出力されたログファイルをもとに、とりあえず手動でグラフを作ってみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/b0cd3811-a312-9f5f-d319-d46847c0dc12.png)


####このあとやりたいこと
・一定の濃度以上になったときにLINE Bot へアラート
・スマートスピーカーによる音声でのアラート

####参考にさせていただいたQiitaの先輩
@revsystem さん https://qiita.com/revsystem/items/76ab1e21d386c5977892
@tororu さん https://qiita.com/tororu/items/20e8625d3fb24f3e06da
@UedaTakeyuki さん https://qiita.com/UedaTakeyuki/items/c5226960a7328155635f