編集履歴一覧に戻る
oomoriのアイコン画像

oomori が 2021年02月28日23時57分25秒 に編集

コメント無し

記事種類の変更

+

製作品

本文の変更

**システム概要**  トイレの混雑具合をスマホから簡単に確認することのできるIoTを考案した. そのIoTのポンチ図を以下に示す. ![キャプションを入力できます](https://camo.elchika.com/c6329337ab00f5e6f2edafa43d12bcf383643eff/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31346534363839352d366231642d346365312d383931632d6264353165313930663035622f39323466366539612d656239332d346266302d623132652d626539343462326365373534/)

-

 トイレの混雑具合を計測するセンサーとして, 温度センサーを用いた. 温度センサーをトイレの便器に用いることで, 人の熱を感知し混雑状況が把握できるのではないかと考えたためだ. そこで私はそのIoTの一部として, RaspberryPi4に接続した温度センサーから読み取った値をSlackに通知させるシステムを開発した.

+

 トイレの混雑具合を計測するセンサーとして, 温度センサーを用いた. 温度センサーをトイレの便器に用いることで, 人の熱を感知し, その地域の平均気温などを気象情報から割り出し, 比較することで混雑状況が把握できるのではないかと考えたためだ. そこで私はそのIoTの一部として, RaspberryPi4に接続した温度センサーから読み取った値をSlackに通知させるシステムを開発した.

**ハードウェア概要**  使用した機器を以下に示す. ・RaspberryPi4 Model B ・温度センサー(MCP9700-E/TO) ・抵抗(1kΩ) ・ブレッドボード ・ジャンパ線  温度センサーのVdd, GND, DQをそれぞれRaspberryPi4の+3.3V, GND, GPIO4に接続し, +3.3VとGNDの間を抵抗でつなぐ.  回路図を以下に示す. ![キャプションを入力できます](https://camo.elchika.com/47d93b6830746bb3deba8ec9750a39b2e82e6ba9/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31346534363839352d366231642d346365312d383931632d6264353165313930663035622f66626339306163302d323634362d343539642d393765662d373666343265666137616430/)  実際に設計した回路を以下に示す. ![キャプションを入力できます](https://camo.elchika.com/e658ed4fe6e878c30a12af37937087454e178af7/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31346534363839352d366231642d346365312d383931632d6264353165313930663035622f33663566303661312d663135352d343939382d383034382d326666313930616562303636/) **ソフトウェア概要**  RaspberryPi4で1-Wireを有効化するために/etc/modulesにw1-gpio, w1-thermを書き足し, /boot/config.txt にdtoverlay=w1-gpio-pullup,gpiopin=4を書き足す. RaspberryPi4内で任意のディレクトリを作成し, 以下に示すディレクトリとファイルを作成する. ![キャプションを入力できます](https://camo.elchika.com/b13d1761167d30adfec9054adc377fc2d739300e/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31346534363839352d366231642d346365312d383931632d6264353165313930663035622f30613832353930302d326337352d346538372d613036342d663436386533356332653135/)  次にslackbotのアカウントを作成し, 作成したbotのAPIトークンをslackbot_settings.pyのソースコードに付け足す. 実際のソースコードを以下に示す. ```python: # _*_ coding: utf-8 _*_ API_TOKEN = "xxxxxxxxxxxxxxxxxxxxxx" default_reply = "what?" PLUGINS = ['plugin'] ``` default_replyには標準の返答を記述する. ここでは ”what?” とする. PLUGINSにはslackbotのソースコードがあるディレクトリ名を記入する. 上記の図にあるディレクトリ名の示す通り ‘plugin’ と記入する.    pluginディレクトリにplugin.pyというファイルを作成し, slackbotのソースコードを記述する. 記述したソースコードを以下に示す. ```python: # _*_ 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」と投稿したところ, 以下のようになった. ![キャプションを入力できます](https://camo.elchika.com/4578af6063e9c007e3bdc4bfb6bbf7bfa99e075a/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31346534363839352d366231642d346365312d383931632d6264353165313930663035622f61323635303662622d623363392d343631322d383064352d323739626261346537306565/)

+

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

**感想**

-

 今回の実験では混雑状況を知るために温度センサーを用いた. しかし温度センサーで混雑状況を知るには, その地域の平均気温などを気象情報から割り出すなどして比較することが必要となる. また, 日中と夜間では温度差が激しい日があることなども含めた上で, 再度トイレの混雑状況把握アプリを作成してみたいとも思う. また, slackよりもLINEアプリの方が広く普及しているアプリのため, LINE Notifyを経由してLINEからメッセージを送信することも有用であると考えられる.

+

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