Raspberry Piでスマートホーム トイレの臭いを可視化しちゃおう
【準備】Raspberry Pi に 臭気センサ基盤 をセットアップ
- Raspberry Pi Zero WH に 臭気センサ拡張基盤 を接続
- 必要パッケージをインストール
- Raspberry Pi の設定変更とOS再起動
- 臭い計測プログラム作成(Python)
臭気センサ部分は 非常に高温となります 。取り扱いにはご注意ください。
今回は小型のRaspberry Pi Zero WHを使って構築します。ラズパイ3や4でも動作可能です。
Raspberry Pi Bit Trade One 【ラズパイ在庫チェッカー】ネットショップの在庫/価格をリアルタイムに確認しよう Raspberry Pi Zero WH に 臭気センサ拡張基盤 を接続左の丸いところが臭いセンサ。 高温注意と記載あり 。さらにアナログセンサを2つ接続可能なGroveコネクタを備えています。
おなじみのRaspberry Pi Zero WH。今回はGPIOヘッダピン付きを使います。
接続後はジャンパ線もなくシンプル(当たり前)。拡張基盤を接続すると厚みが出るため ラズパイケースは使えません 。
必要パッケージをインストール臭気センサによる「臭いの可視化」にCPUパワーはほぼ使いません。Raspberry Pi Zero, Raspberry Pi 3, Raspberry Pi 4 どのラズパイでも動作しますが、省エネ観点でZeroをおすすめします。
最新Raspberry Pi OS bullseye での構築例を紹介します。以前のRaspberry Pi OS buster等では python ⇒ python3 pip ⇒ pip3 と読み替えて実行してください。
【初心者必見】ラズパイ初期設定の極意!長寿命化して長期安定稼働させるインストール方法を紹介 sudo apt update sudo apt install -y python3-pip pip install smbuspip install smbus : pythonプログラムからI2Cを制御するためのパッケージ
Raspberry Pi の設定変更とOS再起動 sudo raspi-config nonint do_serial 2 sudo raspi-config nonint do_i2c 0 sudo raspi-config nonint do_spi 0 sudo rebootdo_serial 2 : シリアルポートを有効化してシリアルコンソールを無効化(2つ設定)do_i2c 0 : I2Cを有効化do_spi 0 : SPIを有効化
臭い計測プログラムを作成(Python)Bit Trade OneさんのGitHubに説明やサンプルプログラムが置いてあります。こちらのソース「adrszOD-sample.py」をベースに必要部分を切り出してプログラムを書いてみました。
RasPi-Zero-One-Series/5th/ADRSZOD_Odd_Sensor at master · bit-trade-.Raspberry Pi Zero用拡張基板 “ゼロワン”シリーズ. Contribute to bit-trade-one/RasPi-Zero-One-Series development by creating an account on GitHub.
ファイル名:toilet.py
import sys, smbus, time, datetime ########## 設置環境に応じて設定変更が必要 ########## # 1.最大臭気計測モードに移行する閾値電圧 threshold_volts_upper = 0.73 # 2.通常モードに戻る閾値電圧 threshold_volts_lowwer = 0.68 ###################################################### # Raspberry Pi I2C BUS番号である1を指定 i2c = smbus.SMBus(1) # デバイスのアドレスを指定 addr=0x68 # 電圧計算用の定数 Vref=2.048 # 最大臭気計測モードのフラグ kusai_flag = False # 最大臭気記録用の変数 volts_max = 0 # 電圧計算用のビット演算関数 def swap16(x): return (((x > 8) & 0x00FF)) # 電圧計算用のビット演算関数 def sign16(x): return ( -(x & 0b1000000000000000) | (x & 0b0111111111111111) ) # メイン処理 while True: # 臭気センサの電圧を取得 i2c.write_byte(addr, 0b10011000) #16bit time.sleep(0.2) data = i2c.read_word_data(addr,0x00) raw = swap16(int(hex(data),16)) raw_s = sign16(int(hex(raw),16)) volts = round((Vref * raw_s / 32767),5) # 現在時間と臭気センサ電圧を出力 time_str = datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S, ') print(time_str + str(volts)) # 何やら臭くなり閾値電圧を超えた場合、最大臭気計測モードに移行 if (kusai_flag == False and volts > threshold_volts_upper): print("トイレの臭いがちょっと臭くなりました") start_time=time.perf_counter() start_time_str = datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S") kusai_flag = True # 臭いが落ち着き閾値電圧を下回った場合、通常モードに移行 elif (kusai_flag == True and volts < threshold_volts_lowwer): print("トイレの臭いが正常に戻りました") end_time=time.perf_counter() end_time_str = datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S") print("・トイレの臭い検知時刻=" + start_time_str) print("・トイレの臭い解消時刻=" + end_time_str) print("・臭いポイント[v]=" + str(volts_max)) print("・臭い滞留時間[s]=" + str(int(end_time-start_time))) volts_max = 0 kusai_flag = False # センサ電圧値がこれまでの最大値を超えた場合に更新 if (kusai_flag == True and volts_max < volts ): volts_max = volts sys.stdout.flush() # 電圧取得の0.2秒と合わせ5秒ごとに計測となるようにsleepさせる time.sleep(4.8)テストプログラムを動かして お酒や口臭や握りっぺ等 で動作チェック!※反応は個人差あり
プログラム実行例:python toilet.py
2022/04/26 21:50:16, 0.84196 トイレの臭いがちょっと臭くなりました 2022/04/26 21:50:21, 0.86853 <中略> 2022/04/26 21:56:47, 0.69602 2022/04/26 21:56:52, 0.69071 2022/04/26 21:56:57, 0.67915 トイレの臭いが正常に戻りました ・トイレの臭い検知時刻=2022/04/26 21:50:16 ・トイレの臭い解消時刻=2022/04/26 21:56:57 ・臭いポイント[v]=0.86853 ・臭い滞留時間[s]=400【実践】トイレに設置して臭いデータを収集!分析してみよう
トイレ設置場所を検討ウォシュレット付きのトイレであれば電源コンセントがトイレ内にあると思います。ここからラズパイの電源を取りましょう。無線LANについても電波が届いている事が前提となります。
設置場所として 埃や水が付きにくい場所 を探します。うちのトイレ(TOTO:ネオレストTCF9783J)は側面後方のカバーが外せます。ちょうど埃や水が掛からなそうなのでここに設置。ここならラズパイのケースが無くても安心。
お父さんと娘の 臭い対決結果を公開!盗撮、盗聴、 盗臭? (そんな単語ないか)と言われたくないので家族の同意を取りデータ分析開始!
「お父さん VS 娘」トイレ臭い対決の結果
お父さんのうん〇のほうが臭い 事がIoT技術により判明されました ・・・。いやいやいや!統計学的にサンプル数が少なくこんなの証明にならない!と言い訳を残し再びリベンジ予定。
- やはり お父さんのうん〇の方が臭かった (敗北) ストレスや老化等の影響か・・・
- 臭いの変化は検知できたが人間が感じる不快なにおいを定量化するには改善の余地あり
- 複数のガスセンサを試して「 うん〇の臭い検知に特化したベストセンサ 」を見つけたい
これぞ Internet of Toilet !ストレスとうん〇の臭いについても分析したい
ウォシュレット操作をリモコンで操作するトイレの場合、ラズパイから赤外線リモコン経由で トイレ遠隔操作が可能 です。臭いがキツイ時に強制的に流したり、 ウォシュレット強制発射 による嫌がらせで退出を促す等、未来を感じるスマートホーム化が実現可能(笑)
スタンフォード大学が未来のトイレを先取りすぎていて凄いので紹介! トイレで肛門認証 ・・だと!?これは家族でも同意得るのが難しい内容ですね・・・
スタンフォード大学、肛門認証をするスマート・トイレを作る 記事の誤り指摘やコメント等がありましたらお気軽にこちらまで コメントをキャンセル 関連記事 ラズベリーパイでできること スマートホームでの面白い使い方を紹介 ラズパイでカメラを使ってスマートホーム監視システムを構築しよう ラズパイとドローンTelloでほこり掃除を自動化。エヴァンゲリオン風に「世界一カッコいいほこりハタキ」をスマートホームに実装。 ラズパイでイケてるスマートリモコンを作ろう!赤外線制御で家電のIoT化Raspberry Pi で Nintendo Switch を自動化!単純作業を効率化しちゃおう
【ラズパイ在庫チェッカー】ネットショップの在庫/価格をリアルタイムに確認しよう ラズパイでイケてるスマートリモコンを作ろう!赤外線制御で家電のIoT化 Midjourneyの使い方!AIに可愛い(kawaii)を理解させよう! Stable Diffusion「呪文詠唱」パターン集!見習い召喚士必見! Stable Diffusionをローカル環境のラズパイで動かす方法(苦行)- 【準備】Raspberry Pi に 臭気センサ基盤 をセットアップ
- Raspberry Pi Zero WH に 臭気センサ拡張基盤 を接続
- 必要パッケージをインストール
- Raspberry Pi の設定変更とOS再起動
- 臭い計測プログラムを作成(Python)
- トイレ設置場所を検討
- お父さんと娘の 臭い対決結果を公開!