IoTを駆使してトイレの個室空き状況を検知してWEBで確認できるアプリを会社で運用してみました。

小原正大
6332

2016年2月5日 追記

本エントリの内容につきまして一部の方からご指摘をいただきました。
リクルートライフスタイルでは業務を円滑に回すための施策として座席のレイアウト変更およびそれに伴う従業員の出入りが頻繁に発生し、また部署やフロアにより男女比もさまざまであるという背景があります。これに伴い、トイレブース ( 個室 ) と従業員の割合は入居フロア全体 ( 複数階 ) のトイレブース数と従業員数とで算出しております。
これにより従業員に対するトイレブース数は法令上クリアされているとの認識です。

読者の皆さまならびに関係各位にご迷惑をお掛けしましたことをお詫びするとともに、ここに訂正させていただきます。

こんにちは、2015年度新卒フロントエンドエンジニアの小原正大です。 IoTでトイレの個室空き状況をWEBで閲覧できるサービスをつくりました。 今回はリクルートライフスタイルに出向中の望月駿一氏と共同で開発を行いました。2016年2月現在、トイレの混雑に悩まされているとの声が多かったリクルートライフスタイルが入居しているオフィスに協力頂いて試験運用しています。

どんな場所で運用したの?

SDIM0040

都内の某ビル35F男子トイレで運用を行いました。このビルには23~41階に弊社のオフィスが入っており、従業員は普段自席のあるフロアのトイレを使うのですが、満室で(体力的に)厳しい時は他の階の空いているトイレを探すといった運用をしています。各階に4つ男子トイレの個室が用意されており、この35Fでは全従業員約500人(うち男性は300人ほど)です。つまり約75人につき1つのトイレ個室を使っている状態で普段とても混んでいます。

モチベーション

トイレ満室

『トイレに行ったら満室』人数が多いオフィスだとこれはよくあることだと思います。また僕のようなお腹虚弱体質者にとっては『別階でもいいのでとにかく空いているトイレを探したい』という事態が頻繁に発生します。現在自分がいる付近で、 個室の開いてるトイレがあらかじめ分かることができれば最高 ということで今回の取り組みをしてみました。

仕組みの概要

仕組みの概要図

扉の開閉を感知するセンサーを作成してトイレの個室ごとに設置 しました。それらをRaspberryPiに接続して扉の開閉情報をAPIサーバーにリクエストを送って記録します。またクライアントアプリケーションを通してAPIを叩くことで、一目でトイレの空き情報が分かるようなサービスを提供しました。APIの実装にはGo言語を使って、WEBのクライアントアプリケーションはReact.jsを使って実装しました。

操作画面

アプリケーションのスクリーンショット

このような画面で現在のトイレの空き状態を確認することができます。現在は検証中なので、ひとつのフロア(35F)に対してのみ情報提供を行っていますが、他のフロアからも導入に期待する声が高まれば、正式に規模の拡大を図りたいところです。そうなれば、各フロア別、時間帯別、曜日別などの使用状況のデータが集まり、それを元にユーザ別に利用個室の推薦・誘導などを行って、各フロアの個室利用状況を最適化していくことなどもできそうです。

トイレの使用状況の計測

各時間帯における空き部屋数の占める時間の変化

1月27日の各時間帯における空き部屋数の占める時間の変化のグラフです。4つある個室のうち各時間帯(それぞれ60分間)で、個室が0〜4つ開いていた時間が何分間あったかを棒グラフは示しています。縦軸は滞在時間、横軸は時間帯を表しています。棒グラフの色は開いている個室数に対応しており、赤の棒が全個室が閉まっていた(=満室)の時間の長さになります。

各時間帯における満室状態の占める時間の変化

これは1月27日の各時間帯における満室状態の占める時間の変化であり、上の図を満室状態を強調したものです。各時間で11:00-17:00にかけて、満室時間を示す赤い棒が30分を超えて伸びている時間があり、これはランダムなタイミングにいくと大体半分以上の確率で待ち時間が発生する状態です。タイミングを見計らうなり他の階のトイレにいくなり何か対処を打ちたいところです。

個室滞在時間のヒストグラム

1月27日の個室滞在時間のヒストグラムです。大体の人が10分以内くらいで退出していることがわかります。自分はお腹が弱い方なのでこれでいうと少し遅めの10-15分くらいいることもあるグループに含まれているかと思います。このサービスを通して満室状況が可視化されることで他にトイレが我慢できない人のためにできるだけトイレを譲り合っていけるような体制が自然と生まれてくればと思います。

このアプリを使った結果

このような大変な混み状況であることが分かりましたが、アプリを利用した人は比較的スムーズにトイレに入ることができました。しかし現状個室滞在時間の短縮や空室状態をうまく運用すれば多少改善の余地はあるものの、やはり他の空いている階に人を流さないと本質的な解決になっていないことがデータからわかります。サービスを全階に導入できたら人の流れがどう変わり満席状態にどのような変化がおこるのかを今後も計測していきたいです。

実装

センサーの実装

センサーの実装概要図

ホールセンサーを使った磁気センサーを作りセンサーとネオジム磁石のセットを扉と柱に貼り付けることにより、トイレ個室の扉の開閉状況を検知して個室が使用中か否かを判定してRaspberry Piに信号を送る仕組みを作りました。

センサーに使ったパーツ

デバイス名 料金(税込) 購入数
ホールセンサーA1324LUA-T ¥150 4
定電流ダイオード(15mA)E-153 ¥30 4
カーボン抵抗(炭素皮膜抵抗) 1/4W 1kΩ (100本入) ¥100 4
16ホールユニバーサル基板(2.54mm) ¥30 4

センサーの回路図

センサーの回路図

センサーの写真

センサーA
センサーB
センサーC

1枚目の写真が上記の回路図通りにセンサーの回路と延長用の三芯ロボットケーブルを16ホールユニバーサル基板に半田付けしたものです。
2枚目の写真はセンサー部分に保護パーツをつけてケーブルをまとめたものです。センサーは個室分の合計4つ用意しています。
3枚目の写真は実際にセンサーを扉に貼り付けている写真です。扉が閉まっている時に磁石がセンサーに近づくようになっておりこの磁力を感知して扉の開閉判定を行っています。

Raspberry Pi側の実装

Raspberry Piからの情報送信

センサーから送られてくる信号を処理する他に、Wi-Fi環境下で扉の開閉状態をでAPIサーバーに通信する機能があります。
これだけの機能であればRaspberry Piを使わずともFlashAirなどを使って安価に制作することもできるのだろうと思いますが、今回はMVPということでRaspberry PiにUSB式Wi-Fiトングルを装着して利用しました。

写真

ラズパイA
ラズパイ2B

1枚目の写真はセンサーとRaspberry Piの接続部分の写真です。接続は半田付けが不要で便利なブレッドボードを使用しました。写真ではわかりにくいですがロボットケーブルから三線がでています。白色の線で電源供給、黒色の線でグランド、赤色の線でセンサーからRaspberry Piへのそれぞれの扉の開閉情報(磁力検知しているかどうか)を出力しています。
2枚目の写真はそれぞれの部屋から天井を伝って這わせたケーブルを1つの個室へ集めています。Raspberry Piへの電源供給はトイレ個室にある電源を利用しています。

ソースコード

センサーからの出力(電位差)の変化を検知してPOST処理するだけなのでこれだけです。GPIOをRubyで操作するPiPiperを利用しました。

require 'pi_piper'
require 'net/http'
require 'uri'
require 'json'
include PiPiper
pin = Pin.new pin:22, direction: :in, pull: :up
URL = 'http://hogehoge.com'
http = Net::HTTP.new(uri.host, uri.port)
req = Net::HTTP::Post.new uri.request_uri
req["Content-Type"] = "application/json"
# POSTする情報を設定する
json = {
  "roomId"=>3501,
  "openStatus"=>nil
}
loop do
  # GPIOピンでセンサーの検知情報を読む
  if pin.read == 0
    json["openStatus"] = 1
  else
    json["openStatus"] = 0
  end
  req.body = payload.to_json
  res = http.request(req)
  sleep 10
end

参考

APIサーバーとクライアントサイドの実装

今後、他の人がクライアントアプリケーションの開発にコミットしやすいように、API用のサーバーとクライアントサイドを切り分けて実装しました。サーバーサイドはGo言語に軽量フレームワークであるEchoを使って実装しました。WEBクライアントサイドはReact.jsにフレームワークであるReduxを用いて実装しました。

今後の開発予定

空き個室のあるフロアへの誘導や個室が空いてきたら通知を送るなど待ち時間緩和のための追加機能を実装していって待ち時間の負担をできるだけ取り除くこと、それによる業務改善成果がわかりやすく定量化していけるようなサービス開発を行っていきたいと考えています。

感想とお礼の言葉

トイレの個室待ち問題は多くの従業員の間で顕在化していた負であったので、空き情報をモニターするだけでも様々な声が聞けたのが嬉しかったです。アプリのリリース時にはメールで広報されたりなどスピード感もありました。またリリース後利用ユーザーが徐々に伸びており一週間で一日のUUが200人とPVが350ほどになり35階の男性300人で計算すると約67%ほどの方が一日に1、2回利用してくれている状態で少しづつ習慣化されているのかと感じています。

コスト面についてこのセンサーは数百円くらいで作ることができており、今回のにわかな実装でも全部合わせて8千円ほどで設置できています。コスト面でボトルネックになっているRaspberry Piやケーブルはものや実装を変えればより低いコストな運用ができます。デバイスの量産体制も立ててみたいですね。

次に所感としてはデバイスをつくることでWEBオンリーでは提供できない価値を身近な人々へリアルな体験として提供することができて面白いなあと感じました。そのなかでユーザーの声がダイレクトに入ってきてはっと驚く出来事がありました。『車椅子の方がトイレ探しに困っていると切なくなる。なんとかできないものか。1)車椅子の方々にも利用できる個室があるのですが、この個室は各フロアに一つしかありません。そのため、彼らがトイレを利用する場合、その唯一の個室が空くまで待っていなければなりません。この様子を切なく思ったある方に声を頂きました。』この声を頂いて、空室の多目的トイレを見つけるのは困難なのことに気づき通常トイレとは別に空き情報が分かるアイコンを追加しました。リアルに近いからこそ聞こえる声もあって、困っている人のために手段を選ばずさまざまな方法を探求・調査していけるよう挑戦を続けていきたいと改めて強く思うきっかけになる出来事でした。がんばるぞ。

最後に、また立ち上げからサポートをしていただいたリクルートライフスタイルの南氏、金子氏、設置の許可を出していただいたビル管理主のご担当者様、その他様々な方面でサポートをしていただいた方々にこの場を借りてお礼申し上げます。

脚注

脚注
1 車椅子の方々にも利用できる個室があるのですが、この個室は各フロアに一つしかありません。そのため、彼らがトイレを利用する場合、その唯一の個室が空くまで待っていなければなりません。この様子を切なく思ったある方に声を頂きました。