オフィスのトイレの空室状況が分からず不便に感じていた為、トイレをIoT化してみました。
先にトイレのIoT化後の結果から
下記のように、トイレの蓋の開閉をトリガーに流水音が鳴ったり、LEDが点灯したり、ウェブ側で空室チェックが可能になりました。
■流水音
■LED
トイレの蓋が開くと赤灯し、閉じると消灯します。
■ウェブ
トイレの蓋が開くと左画像の画面になり、閉じると右画像の画面になります。
PC及びスマホのブラウザから閲覧できて、リロードなしでリアルタイムに状態が変わります。
オフィスからのみ閲覧できます。
トイレのIoT化でやりたかったこと
先に結果から記載しましたが、やりたかったことは下記です。
トイレの蓋を開けると自動で
- 音姫のように音を流す。
- トイレ外に設置するLEDを点灯させて、一目で使用中と分かるようにする。
- ウェブから使用中と分かるようにする。
トイレの蓋を閉じると自動で
- 音を止める。
- トイレ外に設置するLEDを消灯させて、一目で空室と分かるようにする。
- ウェブから空室と分かるようにする。
トイレのIoT化に辺り購入したもの
- Pi4 B 2GB スターター キット V2 32GB 透明 [RASST42STA0322]
https://raspberry-pi.ksyic.com/
今回は初めてラズパイ購入で色々パーツを持っていなかったので、スターターキットを購入しました。
特にPi4である必要はないので、実現できるものであればPi3やPi2などでも問題ありません。
- LEDセンサーライト 100cmコード付
本来はダイソーにて購入だが、入手できなかった為メルカリで購入
- USBミニスピーカー 3w x 2 USBケーブル付
ダイソーにて購入
- ブレッドボード・ジャンパーワイヤ(オス-メス) 15cm(白) (10本入) DG01032-0024-WH-015
http://akizukidenshi.com/catalog/g/gC-08935/
- ブレッドボード・ジャンパーワイヤ 15cm白 (10本入) 0116-719-09-015
http://akizukidenshi.com/catalog/g/gP-02936/
- 耐熱テープ(ポリイミドテープ) 6mm幅 IT-9000-6mm
http://akizukidenshi.com/catalog/g/gT-09378/
- 3mm赤色LED LT3U31P 250mcd (10個入) LT3U31P
http://akizukidenshi.com/catalog/g/gI-02320/
- カーボン抵抗(炭素皮膜抵抗) 1/4W330Ω (100本入) CF25J330RB
http://akizukidenshi.com/catalog/g/gR-25331/
抵抗が330Ωの理由は、下記サイトが参考になります。
LEDになぜ330Ωの抵抗を使うか? | Hornet|静岡拠点のWeb、ホームページ制作
https://hombre-nuevo.com/microcomputer/raspberrypi/raspberrypi0009/第20回 LEDに接続する抵抗値を計算する│ツール・ラボ
https://tool-lab.com/raspberrypi-startup-20/
ラズパイへのOSインストール
スターターキットということもあり、今回は同梱されていたmicroSDカードにOSが書き込まれていたのでそのまま使用しました。
各パーツのラズパイへの取り付け
※詳細は後述の参考サイトに記載があるため省きます。
LEDセンサーライトを分解すると、下記画像のようになっています。
メインで必要になるのは赤枠のパーツです。
青枠のパーツは後ほどLEDの赤灯を拡散させる為に再利用します。
基盤に溶接されているケーブルはハンダゴテを使って基盤から分解します。
だいぶ省略しますが、購入した他のパーツと組み合わせると、
となります。
トイレへの設置
トイレへ設置するとこうなります。
後ろにスピーカーを置き、ラズパイを適当なところに設置して電源は画面右下のコンセントから供給しています。
先程分解したLEDセンサーライトのパーツをトイレの蓋が開くと近づくように設置して、お互いが近づくと磁石の力で通電します。
ソースコード
API連携部分は、URLやリクエストパラメーターはボカして記載しています。
mp3はどこかで配布されているものを拾ってくるか購入するかして準備ください。
事前にターミナルなら、音声再生に必要なVLCとPython-VLCもインストールしておきます。
1 2 | $ sudo apt install vlc $ sudo pip3 install python-vlc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | import time import RPi.GPIO as GPIO import vlc import requests MP3_PATH = '/home/pi/toilet/taki.mp3' STATUS_PUSH_API = 'https://example.com/xxxxx' def status_api_push(status): requests.post( STATUS_PUSH_API, { 'status': status } ) if __name__ == '__main__': GPIO.setmode(GPIO.BCM) # GPIO18pinを入力モードとし、pull up設定とする GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP) # GPIO4pinをLEDとして使用する led_pin = 4 GPIO.setup(led_pin, GPIO.OUT) sw_status = 1 sw_status_old = 1 # 音の準備 player = vlc.MediaListPlayer() mediaList = vlc.MediaList([MP3_PATH]) player.set_media_list(mediaList) player.set_playback_mode(vlc.PlaybackMode.loop) while True: try: sw_status = GPIO.input(18) if sw_status == 0: if sw_status_old == 1: player.play() GPIO.output(led_pin, True) status_api_push('inuse') else: if sw_status_old == 0: player.stop() GPIO.output(led_pin, False) status_api_push('unused') sw_status_old = sw_status time.sleep(0.1) except: break GPIO.cleanup() |
あとはtoilet.pyをバックグラウンドで実行しておけば完了です。
最後に
トイレは二重扉になっていた関係で、一つドアを開けてみないと使用中か分からず不便でした。
しかしIoT化後は一目で分かるようになって便利になった気がします。
座席にいる場合はブラウザから確認でき、そうでない場合もLEDから確認できるので確認の煩わしさもありません。
なお、トイレのIoT化に辺りやりたいことが非常に似ていた下記の記事を大いに参考させて頂きました。誠にありがとうございました。
https://jellyware.jp/kurage/iot/toilet_sensor.html
https://jellyware.jp/kurage/raspi/daiso_sensorlight.html
【動確環境】
Respberry Pi:Raspberry Pi 4 Model B 2GB
OS:Raspbian GNU/Linux 10 (buster)
Python:3.7.3
VLC media player:3.0.8
コメントを残す