注意:本記事はIoTを活用したシステム開発の学習を目的としたものです。きちんとした熱中症の対策については環境省の「熱中症予防情報サイト(http://www.wbgt.env.go.jp/)」等を参考に、適宜ご自身でご判断いただければと思います。)

高田征宏です。普段は、組み込み機器のソフトウェア設計を行っています。趣味で、Raspberry PiやArduinoなどを使って、電子工作を行なっています。
本記事ではsakura.ioとRaspberry Piを組み合わせた「熱中症予防・メールお知らせシステム」の作り方について紹介させていただきます。

熱中症予防・メールお知らせシステム

夏になると、多くなるのが熱中症です。熱中症を引き起こす主な要因には、「環境」が挙げられます。「環境」には、気温が高い/湿度が高いなどがあります。
そこで、あらかじめ設定した熱中症の目安値と、センサーから取得した周囲の温度と湿度を比較することで、熱中症危険度レベルを算出し、その結果から危険度が高いと判断された場合、携帯端末にメールなどで通知することで水分補給を促すシステムを作ろうと思います。
システムの構築には、温湿度センサー、sakura.io、Raspberry Piを使います。

前編となる本記事では、以下を行います。

  1. 温湿度センサー(DHT22)の使い方
  2. Raspberry Piからsakura.ioへのデータ送信方法
  3. Raspberry Piとsakura.ioからデータの取得方法

熱中症予防・メールお知らせシステムの全体図

まずは熱中症予防・メールお知らせシステム全体の流れと各機能について説明させていただきます。
以下がシステムの全体図です。
熱中症予防システムの全体図

システムの各機能の動作概要は以下となります。

  1. step1. 周囲の環境を温湿度センサーにより取得します
  2. step2. 計測した温度/湿度をsakura.ioに送信します
  3. step3. sakura.ioに送信されたデータを取得し、熱中症の危険度を算出します
  4. step4. 熱中症の危険度が高い場合、メールにて通知します

使用する機材の一覧

本システムで使用する機材は、以下となります。

表1 機材一覧
機材名 数量 内容 購入先例
sakura.io通信
モジュール
1 データの通信に使用します 購入先一覧
Arduino
シールドボード
1 さくらの通信モジュールとRaspberry Piとの接続に使用します 購入先一覧
Raspberry Pi 3 2 OSは、RASPBIAN date:2017-04-10で確認しています
本ガジェットでは、Raspberry Piを2つ使用するため、
以降、Raspberry Pi[計測]とRaspberry Pi[監視]と記述します
秋月電子通商
ケースなし

Amazon
ケース付き
マイクロ
SDカード
2 OSのインストール、ストレージとして利用します。
本記事では、microSDHC東芝UHS-I Class10を使用しました
秋月電子通商
Amazon
マイクロ
USBケーブル
2 Raspberry Pi用の電源ケーブルとして使用します 秋月電子通商
Amazon
USB電源
アダプタ
2 Raspberry Pi用の電源として使用します
出力が高いもの(2A、2.4Aなど)を選びます
秋月電子通商
Amazon
DHT22
(AM2302)
1 温度・湿度センサーです。
通販サイトによっては、AM2302とのみ記載されている場合があります
秋月電子通商(4pinタイプ)で購入の場合、
別途抵抗が必要になります
秋月電子通商
Amazon
ジャンパー
ワイヤー
10
程度
Raspberry Piとセンサー及びArduinoシールドボードと接続に使用します
・Raspberry Piとセンサー接続する場合、メス-メスを使用
・Raspberry PiとArduinoシールド接続する場合、オス-メスを使用
・ブレッドボード内で接続する場合、オスーオスを使用
秋月電子通商
オスーメス

秋月電子通商
オスーオス

Amazon
オスーメス
タクトスイッチ 1 Raspberry Piに物理スイッチをつけます 秋月電子通商
ブレッドボード 1 タクトスイッチを接続する際に使用します 秋月電子通商
Amazon
スペーサー
ナット
2 Arduinoシールドボードを固定する際に使用します
プラスチックのものを使用しました
秋月電子通商
(抵抗4.7kΩ) 1 DHT22 4pinタイプ時、必要となります
3pinタイプの場合は、不要です
秋月電子通商
Amazon

step1. センサーで温度/湿度データを取得する

温湿度センサーとRaspberry Piを接続し、温度を取得する方法について説明します。
以下が、step1で使用する機材です。

表2 step1で使用する機材
機材名 数量 内容
Raspberry Pi 3[計測] 1 RASPBIAN JESSIE WITH PIXEL-Release date:2017-04-10にて動作確認
DHT22
(AM2302)
1 温度・湿度センサー
ジャンパーワイヤー 3 Raspberry Piとセンサーを接続します

センサーとRaspberry Piを接続する

DHT22は、1本のデータ線で通信する温湿度センサーです。
まず、Raspberry Pi3[計測]とDHT22を接続します。

ジャンパーワイヤーを使用して、以下のように、接続してください。

表3 Raspberry PiとDHT22の接続
Raspberry Pi側 DHT22側
3.3V 1: Vcc1
GPIO26 2 : Data
GND 3 : GND

DHT22接続回路(プルアップ抵抗なし)

以下が実際の接続図となります。
DHT22とラズベリーパイ接続図

※センサー側(DHT22-3ピン)にプルアップ抵抗が内蔵されています。
そのため、Raspberry Piと直接接続しています。
センサー(DHT22-4pin)を使用する場合は、プルアップ抵抗が別途必要です。
その場合、以下の回路図を参考にしてください。

DHT22接続回路(プルアップ抵抗あり)

センサーの値を取得する

センサーからデータを取得するためのプログラムは、Github等に公開されているライブラリを使用することで、簡単に作ることができます。
今回は、MyPyDhtのライブラリを使用します。
Raspberry Piへのライブラリのインストールは、以下の手順で行います。

pythonのインストール

pythonをインストールします。

$ sudo apt-get update  
$ sudo apt-get install build-essential python-dev

以上で、pythonがインストールされます。

DHTライブラリのインストール

DHTライブラリをインストールします。

$ sudo git clone --recursive https://github.com/freedom27/MyPyDHT
$ cd MyPyDHT/
$ sudo python3 setup.py install

以上で、DHTライブラリ及びサンプルプログラムがインストールされます。

温度と湿度を確認

サンプルプログラムを修正し、温湿度の測定を行います。
作業フォルダを”sio_module”として、確認を行います。

$ cd
$ mkdir sio_module
$ cd sio_module

確認用のプログラムは、以下となります。
ファイル名:measure.py

#!/usr/bin/python
# coding: utf-8

############################################## 
# センサー制御取得 - ここから
# 
import MyPyDHT

# 測定の開始(26は、接続したGPIOポート)
humidity, temperature = MyPyDHT.sensor_read(MyPyDHT.Sensor.DHT22, 26)

# 結果の表示
print("Temp=" + str(temperature) + "*C, Humidity = " + str(humidity) + "%")

# 
# センサー制御取得 - ここまで
##############################################

実行とその結果は、以下のようになります。

$ python3 measure.py 
Temp=24.7*C, Humidity = 46.4%

上記の結果から、温度が24.7度、湿度が46.4%とわかります。
step1の実行結果

※失敗する場合、回路図との接続を確認してください。

※DHT22の制御ライブラリは、いろいろな方や団体が提供しています。
Python2系、Python3系のライブラリが混在しています。
[step.2]にて、sakura.ioと接続にて、Python3のライブラリを使用します。
そのため、本ライブラリは、Python3で動作するものを選択しています。

次の記事では、温度と湿度をsakura.ioに送信する手順について説明させていただきます。