Raspberry Piで部屋の空気コンディションモニタを作る方法
こんにちは、TAKUYAと申します。個人開発で生計を立てています。
部屋の空気の質を知ることは、自身の生産性を高く保つためにとても重要です。
換気を怠ると、思っている以上にパフォーマンスに悪影響が出てしまいます。
リモートワークで自宅で仕事をしていてなんとなく集中できないな…と感じている方は、ぜひ換気を意識してみてください。
今回は、気温、湿度、気圧、そしてCO2濃度を表示するエアクオリティモニタを作ってみました。
CO2レベルが1,000ppm以上になると音で知らせるようにし、換気のタイミングが分かるようにしました。本記事ではその制作過程をウォークスルー形式でご紹介していきます。
雑誌感覚で楽しめるように写真をふんだんに添付しました。では始めましょう。
Architecture
こちらがアーキテクチャです。
Raspberry Pi Zero Wをメインとし、Nginxを走らせ、ANAVI Infrared pHATにいくつかのセンサーを取り付けています。
好きなデバイスでブラウザから閲覧できます。
Raspberry Pi Zero W
SanDisk 32GB MicroSD Card
Anker 2-in-1 USB C Memory Card Reader
Raspberry Pi Imagerのダウンロード
Raspberry Pi OS を SD Cardに書き込む
Wi-Fi接続を設定する
ラズパイをWi-Fiネットワークに接続するには、wpa_supplicant.conf
というファイルをSDカードのルートディレクトリに作成します。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP
network={
ssid="<Name of your wireless LAN>"
psk="<Password for your wireless LAN>"
}
<Name of your wireless LAN>
と <Password for your wireless LAN>
をご自身のWi-Fiネットワークのものに書き換えましょう。
SSHサーバを有効にする
ネットワーク経由でSSHサーバにログインできるように、SSHサーバを有効にします。
ssh
という名前の空ファイルを touch
コマンドでルートディレクトリに作成します。
Raspberry Piを起動する
Wi-Fiネットワークに接続されたか確認する
ping raspberrypi.local
Raspberry PiにSSHで接続する
ssh pi@raspberrypi.local
デフォルトのユーザとパスワードは以下のとおりです:
- user:
pi
- pass:
raspberry
ANAVI Infrared pHAT
ANAVI Infrared pHATはラズパイ向けのアドオンで、赤外線でエアコンなどをコントロールする用に作られました。
オプションでセンサモジュールが付いてきて、これがとても便利です。
Advanced Kitを購入すると、以下の空気センサモジュールが付いてきます:
- HTU21D - 温度 & 湿度
- BMP180 - 温度 & 気圧
- BH1750 - 明るさ
ANAVI Infrared pHATをRaspberry Pi Zeroにインストールする
繋げるだけです。ソルダリング不要。
I2Cスロットにセンサーを繋ぐ
MH-Z19 - CO2濃度センサ
MH-Z19は安価で手に入るCO2濃度センサです。
MH-Z19をUARTスロットに繋ぐ
MH-Z19が作動してる事を確認する
上記のように白い窓が定間隔で点滅します。かわいい。
Raspberry Piのパッケージを更新する
sudo apt update
sudo apt upgrade -y
git と ビルドツールをインストールする
sudo apt install git build-essential
python-smbus と i2c-tools をインストール
sudo apt install python-smbus i2c-tools
I2Cインターフェースの有効化
sudo raspi-config
'Interface Options' -> 'I2C' -> 'Yes'.
その後、再起動します。
I2Cインターフェースが動作してるか確認する
sudo i2cdetect -y 1
センサモジュールをテストするためにサンプルコードをダウンロードする
git clone https://github.com/AnaviTechnology/anavi-examples.git
cd anavi-examples
wiringpiをインストール
sudo apt install wiringpi
サンプルコードをビルドする
cd ./sensors/HTU21D/c
make
./HTU21D
シリアルインターフェースを有効化する
sudo raspi-config
'Interface Options' -> 'Serial Port' -> 'No' -> 'Yes'.
再起動。
python-pipをインストール
sudo apt install python-pip
mh-z19用のPythonモジュールをインストール
sudo pip install mh-z19
テスト:
sudo python -m mh_z19
# -> {"co2": 5000}
いい感じですね。でも値がおかしいです。キャリブレーションしましょう。
MH-Z19を外にしばらく置く
ZERO point calibrationを実行する
デバイスを外に置いてしばらく経ったら、ZERO point calibrationを実行してキャリブレーションします:
sudo python -m mh_z19 --zero_point_calibration
すると、値が最低値まで下がります:
sudo python -m mh_z19
# -> {"co2": 400}
nginxをインストールする
Webサーバを入れましょう。
sudo apt install nginx
Web UIを入れる
GitHubに僕が作ったWebインターフェースを公開してあります。
こちらを再利用します。
cd ~
git clone https://github.com/craftzdog/anavi-phat-sensors-ui
cd anavi-phat-sensors-ui
センサーのCプログラムをビルドする
サンプルをいじってJSON出力するようにしたものをビルドします。
cd sensors/BH1750
make
cd ../HTU21D
make
cd ../BMP180
make
テストデータを用意する
いったん手動でセンサーデータを作ります。
cd ~/anavi-phat-sensors-ui
mkdir data
./sensors/HTU21D/HTU21D > ./data/HTU21D.json
./sensors/BMP180/BMP180 > ./data/BMP180.json
./sensors/BH1750/BH1750 > ./data/BH1750.json
sudo python -m mh_z19 > ./data/MH_Z19.json
nginxを設定する
sudo vi /etc/nginx/sites-available/default
以下の行を編集します:
root /var/www/html;
以下のように:
root /home/pi/anavi-phat-sensors-ui;
そしてnginxを再起動します。
sudo /etc/init.d/nginx restart
Web UIをブラウザから開く
わーい!
rootのcrontabを設定して5分ごとにセンサーデータを更新するようにする
sudo crontab -e
以下のように編集します:
*/5 * * * * /usr/bin/python -m mh_z19 > /home/pi/anavi-phat-sensors-ui/data/MH_Z19.json
*/5 * * * * /home/pi/anavi-phat-sensors-ui/sensors/HTU21D/HTU21D > /home/pi/anavi-phat-sensors-ui/data/HTU21D.json
*/5 * * * * /home/pi/anavi-phat-sensors-ui/sensors/BMP180/BMP180 > /home/pi/anavi-phat-sensors-ui/data/BMP180.json
*/5 * * * * /home/pi/anavi-phat-sensors-ui/sensors/BH1750/BH1750 > /home/pi/anavi-phat-sensors-ui/data/BH1750.json
Raspberry Piをケーブルボックスに入れる
センサー部分をちょっとだけ出すようにします。ピョコっと。
以上です。ご参考になれば幸いです。エンジョイハッキング。
- 元の英語記事: How to build an air quality monitor using Raspberry Pi Zero W https://blog.inkdrop.info/how-to-build-an-air-quality-monitor-using-raspberry-pi-zero-w-c6a71b8dbb3b
Discussion
質問なのですが、 ANAVI Infrared pHAT はCo2濃度を測るだけなら、必須ではない認識で大丈夫でしょうか?(当方、NatureRemoを持っているので温度・湿度等はそちらでカバーできる為。)
いりません。
返信遅くなりましたが、無事完成しました。
ありがとうございます。
Congrats!