2021年07月30日 更新

トイレのフタを開けるだけで流水音♪

どうも、クラゲです。
100円ショップのダイソーで100円で売っていた「LEDセンサーライト」と「RaspberryPi」「スピーカー」を使って、便座のフタを開けると音が鳴り、閉めると音が止むという機能をトイレに実装しました!

必要な部品

必要なハードウェアは以下の通りです。

  • LEDセンサーライト(100cmコード付)
  • RaspberryPi
  • スピーカー
  • ジャンパー線(オスーメス)
  • その他

LEDセンサーライトはこんなパッケージで売っていました。

※最近は見かけなくなったのでこちらの代替品も参照ください

RaspberryPiに関しては、クラゲはRaspberryPi 3Bを使っていますが、1や2でも可能かと思います。Raspbian(NOOBS)をインストールしたmicroSDと電源も必要です。

スピーカーは何でも良いです。一番コスパが良いのはダイソーで売っている「USBミニスピーカー」です。300円でした。電源がUSBなのでラズパイから電源供給できるので便利です。ちなみに、100円で売っているスピーカー(電源なし)は音が小さすぎて聞こえないので注意してください。

ジャンパー線は2本必要です。

画像引用元:http://akizukidenshi.com/catalog/g/gC-08935/

その他、ハンダごて、ハンダ、両面テープも必要です。

回路結線

詳細は以下のページを参照してください。全く同じ回路です。
https://monomonotech.jp/kurage/raspberrypi/daiso_sensorlight.html

トイレへの設置

センサー部

線なしの直方体の中には磁石が入っていて、線有りの直方体はセンサー(リードスイッチ)が入っています。可動するフタの方に線なし直方体を付けます。
便座のフタを完全に開いたときに両者が接触せず、かつセンサーとしてはONになる位置に貼り付ける必要があります。

注意点として、ドアの開閉に付ける場合と、今回のような便座のフタに付ける場合で、センサ部と磁石部の近接する面が異なります。
おそらく、磁石部の磁石は特定の面に偏って入っています。
ドアの開閉に付ける場合は元々付いている両面テープを剥がして付ければOKでしたが、今回のようなケースの場合は別途両面テープを用意して別の面に付ける必要があります。
実際に先程の参照ページのプログラムを動作させながら、ベストな位置を検討してみて下さい。クラゲの場合は、センサー部は既存の両面テープを使い、磁石部は既存の両面テープの隣面に別途両面テープを貼って設置しています。

その他

ラズパイ、スピーカーはトイレの奥の方に置きました。
トイレのコンセントを利用してラズパイを常時起動しています。

ラズパイは出来ればケースに入れることをお勧めします。

音源の準備

鳴らしたい音ファイルですが、好きなモノなんでもOKです。MP3、WAV、WMA、AAC、OGGなど様々な拡張子のメディアに対応できます。
ここではクラゲが使っている音源をご紹介しましょう。

冒頭の動画で使っているのは「効果音ラボ」の「海岸2 消波ブロック(激しい波)」です。
https://soundeffect-lab.info/sound/environment/

ループ用素材ではないため、ループ時に一瞬途切れます。
気になる人は波形編集などを行うか、別の音源を使いましょう。

必要なモジュール

先程の音源をループして再生させるためにVLCを活用します。またPythonプログラムから直接扱えるようにするためのモジュールもインストールします。
ちなみに、mpg321というMP3を再生できる簡単なモジュールもありますが、ループ再生時はあまり安定しませんでした。

VLC

最新のRaspbianなら最初からVLC自体はインストールされていると思います。
以下のコマンドでインストールされているか確認できます。

vlc -V

もしインストールされていない場合は以下のコマンドでインストールしてください。

sudo apt-get install vlc

Python-VLC

Pythonのプログラム上で制御できるモジュールです。
以下のコマンドでインストールします

sudo pip3 install python-vlc

音声出力先の設定

ラズパイの再生音はHDMIとAnalogの2通りあります。
今回のようなスピーカーを接続する場合は、スピーカーアイコンを右クリックして「Analog」を選択して下さい。

ソースコード

Python3で実行させています。

import time
import RPi.GPIO as GPIO
import vlc

GPIO.setmode(GPIO.BCM)

#GPIO18pinを入力モードとし、pull up設定とします
GPIO.setup(18,GPIO.IN,pull_up_down=GPIO.PUD_UP)

sw_status = 1
sw_status_old = 1

#音の準備
player = vlc.MediaListPlayer()
mediaList = vlc.MediaList(['wave2.mp3'])
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:
                print("OPEN ")
                player.play()
        else:
            if sw_status_old == 0:
                print("close")
                player.stop()

        sw_status_old = sw_status
        time.sleep(0.1)
    except:
        break

GPIO.cleanup()
print("end")

ちなみに、1曲だけ再生できるMediaPlayerというクラスもありますが、無限ループ指定ができなさそう(リピート回数指定は可能)なので、MediaListPlayerを使っています。

動作結果

クラゲは数日動作させてみましたが、問題なく動いています。

使ってみて感じた利点は4つあります。

  • スイッチや手かざし入力と違い、意識的な動作は不要
  • 照度センサーや人感センサーに比べ、調整が簡単
  • 着座センサーではないので、男性の小便用にも使える
  • トイレのフタを閉める習慣が付く

市販されている高価なトイレやウォシュレットを購入することでも実現可能ですが、ラズパイで作れば、好きな音楽を流したり、その日のニュースや天気を流したりと色々カスタマイズが無限大で可能です。さあ、ラズパイで君だけのハイテクトイレを作ろう! ジャー、ゴボゴボゴボッ

追記

本コンテンツと似た内容で最新のものがありますので、こちらもお勧めします。
https://monomonotech.jp/learning/contents_trial/raspi_okigashi/raspi_okigashi/