書庫の湿度と温度の記録を採るためにやったこと

[国立国会図書館の温湿度管理のページ](https://www.ndl.go.jp/jp/preservation/collectioncare/humiditycontrol.html) には次のような説明が書かれています。

＝＝＝＝＝＝＝＝＝＝
国立国会図書館の書庫では、温度と湿度を制御できる空調機を設置しており、書庫内の温湿度をこまめにチェックし、「書庫内で人が作業できる温度」「65％以下の湿度」を目指し、1年間を通じて、また1日の中でも、温湿度を急激に変動させないことを目指しています。また、閲覧室との温湿度差ができるかぎり小さくなるようにも心がけています。
＝＝＝＝＝＝＝＝＝＝

また、温度が高いほど飽和水蒸気量が大きくなるため湿度を制御するためには温度を最適に調節する必要があることも記載されています。

湿度が65%を越えたらアラートを出すしかけを作りたいのですが、その前に私の環境での１時間ごとの湿度と温度を、ついでに気圧の記録を採り続けてみようと考えました。

そのためにやったことを書き残しておきます。

####用意したもの
[Raspberry Pi Zero W](https://www.switch-science.com/catalog/3200/)　ピンヘッダを別途購入してはんだ付けしました。
[Raspberry Pi Zero用赤外線+環境センサ｢RPZ-IR-Sensor｣Rev2.0(端子実装済+外付けセンサ)](https://www.switch-science.com/catalog/5321/)

####OS
Debian GNU/Linux
Linux raspberrypi 4.19.97+ #1294 Thu Jan 30 13:10:54 GMT 2020 armv6l

[Rasperry Pi の設定] - [インターフェース] で I2C を有効にしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/e16ee73f-fda7-32e7-fe9c-6a1fab688e18.png)


####組み立て
①Raspberry Pi Zero W
②電源供給
③マウス、キーボードへ
④ディスプレイへ
⑤Raspberry Pi Zero用赤外線+環境センサ
⑥温度・湿度・気圧センサ
⑦端子実装済+外付けセンサ　の温度・湿度・気圧センサ
⑧赤外線通信端子（今回は使用しません）
⑨光（照度）センサ（今回は使用しません）
注：⑥はRaspberry Pi Zero の発熱も感知してしまうため、⑦の計測値を用います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/d1d8d3bd-3a0f-64d8-7980-d4dc17a1b782.png)

####用意されたサンプルプログラム
[https://www.indoorcorgielec.com/products/rpz-ir-sensor/](https://www.indoorcorgielec.com/products/rpz-ir-sensor/)
のサンプルプログラム rzp-sensor.zip を解凍してをそのまま使いました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/db68f6d4-d5fe-bcf0-ebc2-ac5f88d888dc.png)

readme.txt の最後にログ出力の方法が記載されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/573efa8d-5d5e-e189-3c05-63ab7fdc6d68.png)

####サンプルプログラムのテスト
```
$ python3 rpz_sensor.py
BME280 0x76
 Temp     : 19.9C
 Pressure : 1006.0hPa
 Humidity : 38.6%

BME280 0x77
 Temp     : 23.0C
 Pressure : 1005.6hPa
 Humidity : 35.0%

TSL2572
 Lux : 176.3lux
```

BME280 0x76　は組み立て⑦の計測値です。
BME280 0x77　は組み立て⑥の計測値です。⑦より3℃ほど高いのは、RaspberryPy Zero の発熱による影響とみられます。⑦よりも温度が高いため湿度の値が低めになってしまっています。
TSL2572　は組み立て⑨の計測値です。

####シェルスクリプトを作ってでログ出力のテスト
do.sh

```
#!/bin/sh

date +"%Y/%m/%d %T"
cd rpz-sensor/python3
python3 ./rpz_sensor.py -l ./log/logfile.csv
```
シェルスクリプトを実行可能モードにします。

```
$ chmod +x do.sh
```
実行してみます。

```
$ rpz-sensor/do.sh
2020/04/14 18:37:07
BME280 0x76
 Temp     : 21.9C
 Pressure : 1008.8hPa
 Humidity : 45.7%

BME280 0x77
 Temp     : 22.7C
 Pressure : 1008.4hPa
 Humidity : 44.8%

TSL2572
 Lux : 170.7lux
```
ログが出力されています。

```
$ cat logfile.csv
Time,Temp ch1,Temp ch2,Pressure ch1,Pressure ch2,Humidity ch1,Humidity ch2,Lux
2020/04/14 18:37,21.9,22.7,1008.8,1008.4,45.7,44.8,170.7
```

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

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

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

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

```
cat logfile.csv
Time,Temp ch1,Temp ch2,Pressure ch1,Pressure ch2,Humidity ch1,Humidity ch2,Lux
2020/04/14 18:37,21.9,22.7,1008.8,1008.4,45.7,44.8,170.7
2020/04/14 19:00,21.6,22.8,1009.6,1009.2,47.5,45.7,15.6
2020/04/14 20:00,18.7,22.4,1010.8,1010.3,60.6,50.2,87.9
2020/04/14 21:00,18.7,22.3,1011.3,1010.9,57.5,48.3,88.9
```

####ディレクトリ構成
次のような構成でやってみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/9dc70bc8-d0c4-1d60-d302-442480e48279.png)

```
pi@raspberrypi:/home $ ls
pi
pi@raspberrypi:/home $ cd pi
pi@raspberrypi:~ $ ls
Desktop    Downloads  Music     Public     Videos
Documents  MagPi      Pictures  Templates  rpz-sensor
pi@raspberrypi:~ $ cd rpz-sensor
pi@raspberrypi:~/rpz-sensor $ ls
do.sh  python3  readme.txt
pi@raspberrypi:~/rpz-sensor $ cd python3
pi@raspberrypi:~/rpz-sensor/python3 $ ls
__pycache__  bme280i2c.py  log  rpz_sensor.py  tsl2561.py  tsl2572.py
pi@raspberrypi:~/rpz-sensor/python3 $ cd log
pi@raspberrypi:~/rpz-sensor/python3/log $ ls
logfile.csv
```

####参考図書
[ラズパイZero工作ブック](http://www.ric.co.jp/book/contents/book_1164.html)

####このあとやりたいこと
・ログデータをもとにしたグラフ表示の自動化
・一定の湿度以上になったときにLINE Bot へアラート