As our small company has grown, so has the demand on our shared resources… particularly the restroom. The typical approach of locking the resource does work. However, it’s really not a very good user experience. It’s really awkward to hover outside the door in a queue. It’s also very time consuming and disheartening to commit to the walk of shame - trudging all the way down the office hallway to check for vacancy - just to be denied.

It's disheartening to commit to the walk of shame - trudging all the way down the office hallway to check for vacancy - just to be denied.

We then saw an idea online. A company had built a monitoring system for their restroom with an Arduino. (I’m sorry whoever you were. I couldn’t find your blog again to credit you.) We love all things geeky and even had a spare Arduino floating around. The idea was sparked and we decided that we might as well go for it and create a monitoring system as well.

Bill of Materials

  1. Arduino Micro Controller
  2. Arduino Ethernet Shield
  3. Various Wires
  4. Ethernet Cable
  5. 5v Power Cord
  6. Magnetic Switch
  7. Project Box

Arduino Side

We took the micro controller and plugged it into the Ethernet shield. We assigned it a static IP for our LAN so it would be easy for clients to find. We then wired the switch into the doorframe so the Arduino could tell if the door was open or closed. It was then mounted in a project box hung on the wall.

The Arduino polls the switch regularly and keeps track of state. It averages out the last several switch reads to reduce false positives. When a client connects to the Arduino it returns the current state information in either JSON or HTML.

Mac Client

Everyone in the office is on a Mac so we wrote a quick program to update the status bar. It shows a different Icon based on the restrooms status.

Vacant:

Occupied:

Danger:

When the door is closed it will always show as “Occupied”. Once the door is opened again the app will show in a “Danger” state for the same amount of time the restroom was closed for - a nice little air-quality-indication feature we're all grateful for. Once the air has cleared the status will return to “Vacant". Being busy, we realized we didn't always have time to watch the icons. So we implemented a reminder that plays an audible sound once the restroom is available to use.

Remind Me:

So we implemented a reminder that plays an audible sound once the restroom is available to use.

The fun part of technology is when you get to use it to solve an everyday problem. This was really just a “downtime” project but several members of the staff got involved. The designers made the fun graphics, an all-staff naming brainstorm exploded our inboxes, and various developers tinkered with the Arduino code, wrote the Mac client and an Android widget was even created.

Best of all, our restroom inconvenience has been eliminated. So we can get back to real work.