oomoriのアイコン画像
oomori 2021年02月28日作成 (2021年02月28日更新)
製作品 製作品 閲覧数 851
oomori 2021年02月28日作成 (2021年02月28日更新) 製作品 製作品 閲覧数 851

トイレの混雑状況把握アプリの作成

システム概要
 トイレの混雑具合をスマホから簡単に確認することのできるIoTを考案した. そのIoTのポンチ図を以下に示す.
キャプションを入力できます
 トイレの混雑具合を計測するセンサーとして, 温度センサーを用いた. 温度センサーをトイレの便器に用いることで, 人の熱を感知し, その地域の平均気温などを気象情報から割り出し, 比較することで混雑状況が把握できるのではないかと考えたためだ. そこで私はそのIoTの一部として, RaspberryPi4に接続した温度センサーから読み取った値をSlackに通知させるシステムを開発した.

ハードウェア概要
 使用した機器を以下に示す.
・RaspberryPi4 Model B
・温度センサー(MCP9700-E/TO)
・抵抗(1kΩ)
・ブレッドボード
・ジャンパ線
 温度センサーのVdd, GND, DQをそれぞれRaspberryPi4の+3.3V, GND, GPIO4に接続し, +3.3VとGNDの間を抵抗でつなぐ.
 回路図を以下に示す.

キャプションを入力できます

実際に設計した回路を以下に示す.
キャプションを入力できます

ソフトウェア概要
 RaspberryPi4で1-Wireを有効化するために/etc/modulesにw1-gpio, w1-thermを書き足し, /boot/config.txt にdtoverlay=w1-gpio-pullup,gpiopin=4を書き足す. RaspberryPi4内で任意のディレクトリを作成し, 以下に示すディレクトリとファイルを作成する.
キャプションを入力できます

次にslackbotのアカウントを作成し, 作成したbotのAPIトークンをslackbot_settings.pyのソースコードに付け足す. 実際のソースコードを以下に示す.

# _*_ coding: utf-8 _*_
API_TOKEN = "xxxxxxxxxxxxxxxxxxxxxx"
default_reply = "what?"
PLUGINS = ['plugin']

default_replyには標準の返答を記述する. ここでは ”what?” とする. PLUGINSにはslackbotのソースコードがあるディレクトリ名を記入する. 上記の図にあるディレクトリ名の示す通り ‘plugin’ と記入する.
 
 pluginディレクトリにplugin.pyというファイルを作成し, slackbotのソースコードを記述する. 記述したソースコードを以下に示す.

# _*_ coding: utf-8 _*_
from slckbot.bot import respond_to, listen_to
import re
import RPi.GPIO as GPIO
import shutil

GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP)
shutil.copyfile("/sys/bus/w1/devices/28-000006470bec/w1_slave","s1_slave.txt")
f = open('w1/slave.txt', 'r', encoding='UTF-8')

data = f.read()
data = data.split(" ")
data = data[9]
data = data.split("=")
data = data[1]

@listen_to("toilet")
@respond_to("toilet")
def ohayou(message, *something):
        message.reply(round(data,1) + " degree")
 f.close()

上記のプログラムを順を追って説明する.

① 必要なモジュールをimportする.
② RaspberryPi4のGPIOを設定する.
③ この温度センサーは, ある特定のファイルに読み取った値を書き込んでいる. そのファイルの内容をpluginディレクトリ内のw1_slave.txtにコピーする.
④ ファイルに書き込まれているデータの温度部分だけを選出する.
⑤ “toilet” と入力された時, 読み取った温度を小数点第1位まで求め表示する.

結果
 配線を行いソースコードを実行し, slackのアカウントに「toilet」と投稿したところ, 以下のようになった.
キャプションを入力できます

実現できていない部分の実装方法
 気象情報からの平均気温は国土交通省の気象庁ページから, 最新の気象情報ファイルをダウンロードし, 自身の住んでいる地域の気象情報が何行目に書かれているかを把握する. そしてソースコード内でf.readlines()[何行目]を実行することで, 自身の住んでいる地域の気象情報を取得し, data2 = split(" ")を実行させることで, data2[11]にその日の気温を抽出させる事ができる. data2[11]とdataを比較する事で, 正確なトイレの混雑状況を把握するできる.

感想
 日中と夜間では温度差が激しい日があることなども含めた上で, 再度トイレの混雑状況把握アプリを作成してみたいとも思う. また, slackよりもLINEアプリの方が広く普及しているアプリのため, LINE Notifyを経由してLINEからメッセージを送信することも有用であると考えられる.

ログインしてコメントを投稿する