💭

Raspberry Piで部屋の空気コンディションモニタを作る方法

2021/05/14に公開4

こんにちは、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インターフェースを公開してあります。

https://github.com/craftzdog/anavi-phat-sensors-ui

こちらを再利用します。

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をケーブルボックスに入れる

センサー部分をちょっとだけ出すようにします。ピョコっと。


以上です。ご参考になれば幸いです。エンジョイハッキング。

Follow me online

ブログの更新通知をメールで受け取る

My YouTube channel

Discussion

namikirinamikiri

質問なのですが、 ANAVI Infrared pHAT はCo2濃度を測るだけなら、必須ではない認識で大丈夫でしょうか?(当方、NatureRemoを持っているので温度・湿度等はそちらでカバーできる為。)

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy