RaspberryPi で熱中症メータを制作
はじめに
2020年初頭から起こったコロナウィルス感染拡大の防疫対策として、マスクを着用することが日常になったかと思います。これから(2020年5月執筆時)梅雨に向け気温湿度があがり、熱中症が懸念されます。当社のお客様も、工場の現場でマスクを着用しながら温湿度の高い環境で作業することになり、熱中症だけでなく酸欠の心配もあるので熱中症指数を簡単に計測できるユニットを作ってくれないか、と依頼があり作成しました。このキットはラズパイと温湿度センサーDHT11を使うと、とても簡単に作成することが可能です。作り方と測定プログラムをご紹介します。
温湿度センサーDHT11
温湿度センサーDHT11はアマゾンでも購入可能です。スペックは以下の通りです。
湿度測定範囲:20%~90%(0℃~50℃範囲)、湿度測定誤差:±5%
温度測定範囲:0℃~50℃、温度測定誤差:±2℃
動作電圧:3.3V~5V
ラズパイ
ラズパイはmodel3Bを使っています。
モデル:Model 3B
OS: Raspbian Buster
https://www.raspberrypi.org/downloads/raspbian/
ケース:オリジナルケース
センサーとラズパイの接続
DHT11からは4本のピンが出ています。使用したDHT11はそのうち二つが短絡されており、3つのピンにハーネスを接続できるようになっています。
画像の通り、LEDがついている面を上にして左からGND(黒)、信号(茶)、電圧(赤)のハーネスを取り付けます。
次にこのハーネスをラズパイに取り付けます。
赤を2の5V、茶を7のGPIO、黒を6のGNDに取り付けます。きわめて簡単です。
dht11関連モジュールのダウンロード
DHT11は温度と湿度は40bitのLow(0)とHigh(1)値を返しますが、このビットのエラーチェック、温湿度への変換のコードはszazoさんがライブラリー化してGithubにアップしているのでこちらを使います。
プログラムを置くディレクトリ上で以下のコマンドでgit cloneします。
$ git clone https://github.com/szazo/DHT11_Python.git
DHT11_Pythonディレクトリが作成されて配下に以下のファイルがインストールされます。
DHT11_Python
├─DHT11_Python
├─LICENSE.md
├─README.md
├─dht11.py
├─dht11_example.py
├─dht11
├─__init__.py
LICENSE.md:MITライセンス
README.md:ReadMe、RaspberryPiで使用可能
__init__.py:dht11.pyをimportした時に実行
dht11_example.py:サンプルプログラム
熱中症指数の計算
熱中症指数は、温度と湿度から求めることができます。この場合屋内限定です。以下のような換算表があります。温度と湿度の1対1で指数が記載されていますが、ここは回帰式を使います。熱中症指数(WBGT値)と温度、湿度の関係は以下の回帰式で求めることができます。
WBGT指数=0.725x温度+0.0368x湿度+0.00364x温度x湿度-3.246
プログラム作成
ではDHT11から温度、湿度を測定し、その結果から熱中症指数WBGTを取得するプログラムを以下の通り作成します。
import RPi.GPIO as GPIO
import dht11
import time
import datetime
import csv
def measure():
#initialize GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()
# read data using pin 14
instance = dht11.DHT11(pin=4)
interval=10
while True:
result = instance.read()
if result.is_valid():
print("Last valid input: " + str(datetime.datetime.now()))
print("Temperature: %d C" % result.temperature)
print("Humidity: %d %%" % result.humidity)
Ta=result.temperature
RH=result.humidity
WBGT=0.725*Ta+0.0368*RH+0.00364*Ta*RH-3.246
print("WGBT: "+format(WBGT, '.3f'))
time.sleep(interval)
if __name__ == "__main__":
measure()
ここで、GPIOアドレスを#4にしています。ほかのアドレスを使う場合は必ず変更してください。
実行結果
プログラムの実行結果は以下の通りです。
10秒間隔で温湿度を取得してprintしています。
Last valid input: 2020-05-27 08:50:11.219115
Temperature: 24.0 C
Humidity: 66 %
WGBT: 22.351
まとめ
ラズパイとDHT11を使って熱中症指数センサーを制作することができました。正しく作ることができれば、1時間もかからないと思います。
熱中症センサキットのご紹介
この記事でご紹介しました熱中症センサキットをご提供します。
この後連載予定ですが、測定したデータをCSVに保存、グラフ表示、LINEへのアラーム送信といった実用的なプラグラムもご用意しております。
この記事が気に入ったらサポートをしてみませんか?