投稿日:

    カテゴリー 技術 / デザイン / 制作タグ ,

    トイレセンサーを作ってみた



    まいど。制作部のコダマです。

    皆様、冬休みを如何お過ごしでしたか。自分は、せっかくなので自由研究と称して、トイレの個室用人感センサーを作ってみました。

    何時だったか、超大先輩と会話していた際の「トイレの個室が使われているか分かると良いよね」と言う、何気ない一言がこの企画の全ての始まりです。たまたま、数年前に遊び用に買って遊び飽きた後、長らく放置されていた Raspberry Pi があるじゃん、と言うことで、Python の勉強がてらにチャレンジすることにした次第です。たまには、技術屋らしい記事も必要ですしね。

    システムの構成イメージとしては、以下の通りです。

    はい。弊社 Chatwork を業務で活用しているので、そっちにルームを作って、Raspberry Pi で検知した状態を飛ばすようにする作戦です(必要な API の使い方については、昨年末に確認済み)。

    で、用意した物は、こちらです。

    ・Raspberry Pi 3 model B + 5V 3.0A 電源
    ・8GB microSDHC
    ・ブレットボードジャンパーワイヤー(メス-メス)
    ・HC-SR501 人体赤外線感応モジュール

    下の二つは、アマゾンで年末に発注し、今回のために新たに購入したもので、それ以外は、自宅に転がっていた物を再利用しており、現時点でかかったコストは1000円未満。まあ、Raspberry Pi は、比較的低コストで遊べるところが、最大の魅力ですね。

    OS は、Debian ベースの Raspbian の最新版である Raspbian Buster Lite を国内のミラーサイトからダウンロードしてセットアップ。これで、Python 3.7 の環境もできるので、apt で最新化した以外、pip のインストールと RPi.GPIO の組み込みを行っただけで、特に難しいこともなく、あっさり準備は整いました。

    で、人感センサーを取り付け。GND、Output、Power の三つを配線すれば良いので、GND と Power は4ピンと 6ピンから、Output は 12ピンの GPIO18 につないである。最初の写真で黒、黄、赤の順でモジュールから伸ばして配線されていると確認できると思います。

    後は、以下のようなコードを用意して、実行して確認です。コードは、同じようなことをやっていた先駆者のものに手を加えただけの手抜きですみません。

    from datetime import datetime
    import time
    import RPi.GPIO as GPIO
    import requests
    
    #interval
    INTERVAL = 3
    #sleeptime
    SLEEPTIME = 20
    #used GPIO
    GPIO_PIN = 18
    
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(GPIO_PIN, GPIO.IN)
    
    #Chatwork
    APIKEY = '################################'
    ENDPOINT = 'https://api.chatwork.com/v2'
    ROOMID = '#########'
    
    post_message_url = '{}/rooms/{}/messages'.format(ENDPOINT, ROOMID)
    
    headers = { 'X-ChatWorkToken': APIKEY }
    params1 = { 'body': '(lightbulb)' }
    params2 = { 'body': '(y)' }
    
    flag = True
    
    if __name__ == '__main__':
        try:
            print ("Cancel : CTRL+C")
            while True:
                if (GPIO.input(GPIO_PIN) == GPIO.HIGH):
                    if not flag:
                        resp = requests.post(post_message_url, headers=headers, params=params1)
                        flag = True
                    time.sleep(SLEEPTIME)
                else:
                    if flag:
                        resp = requests.post(post_message_url, headers=headers, params=params2)
                        flag = False
                    time.sleep (INTERVAL)
        except KeyboardInterrupt:
            print ("Closing...")
        finally:
            GPIO.cleanup ()
            print ("GPIO clean compleate")
    

    で、確認した結果が、以下のような感じです(都合により一部モザイク処理させていただきます)。

    弊社、日本人以外もいるので、文字よりも絵文字で状態を表しておいた方が良いと判断し、ランプの場合が「使用中」、サムアップは「空いてます」としました。

    あとは、設置すればOKと思ったのですが、ここで電源の問題が発生。設置場所は都合によりコンセントが使えないので、モバイルバッテリーでの運用になってしまうのですが、Raspberry Pi 3 は、5V 3.0A ないと動作が不安定になるので、モバイルバッテリーでの運用は現実的でない。そこで、国内販売が開始された直後に買ったのに放置していた Raspberry Pi Zero W を使うことにしました。手前のフリスクくらいの小さいやつです。

    早速、ハードを切り替えて試したいところですが、困ったことに GPIO のピンを自分で半田付けする必要があり、流石に30年ほどやってないので自信がないことから、半田付け不要の GPIO ピンを手配することにしました(写真は乗せているだけで固定されてません)。

    と言うわけで、部品が到着次第、続編の「トイレセンサーを使ってみた」を書きますので、しばしお待ちください。

    では。


    関連記事

    まだデータがありません。