Monday, August 3, 2015

Making Room Ninja: A Mission to Improve Our Conference Room Status Display


This post is a part of a blog series focused on the Digital Maker Movement. The Digital Maker Movement celebrates craftsmanship in digital fabrication--think bits, not atoms. Learn more about what being a Digital Maker means to us at Rightpoint.

It all started when Ron (our Director of Operations) mentioned some issues with the conference room status devices mounted outside most of the conference rooms in our Chicago office. On my train ride home that night, I poked around the EWS (Exchange Web Services) API to see if it exposed the information necessary to implement an alternate system–a list of rooms, and a list of meetings booked in those rooms. Sure enough, it did. I worked up a quick POC in .Net, and had a simple WebAPI service that returned the raw appointment data from EWS.

A few weeks later, I found a touchscreen on to attach to the top of a Raspberry Pi, and the idea really started to take shape. I could run Chromium in kiosk mode pointing at a web app to show the status of the room and allow control over it. I could have a background tool using the GPIO ports on the Pi to control some LEDs to show its status. A bit of tinkering, and soon enough I had a .Net WebAPI backend with an AngularJS web app to show status on the screen, and a Node.JS app to control the LEDs:

clip_image002 clip_image004

Sure, it leaves a bit to be desired, but this seems like the hardware MVP–now we just have to put a case on this and figure out how to power it. But first, I brought the prototype into the office and we played with it a bit. One thing quickly emerged–this 3” screen was not going to cut it…

Onwards to v2! Find a 5” touchscreen, connect it to a controller board on the Pi, and now we have a 5” model. I also wired up the LEDs to a protoboard to make them more portable, and it was starting to take shape. But we needed something to hold the hardware + POE splitter, and mount them on the wall. I recently got a 3D printer at home, and figured I should be able to design something serviceable for early prototypes, so I started using an online design tool called Tinkercad to work up some designs for a case plus wall-mount hardware.

clip_image006 clip_image008

clip_image010 clip_image012

Turns out, 2 LEDs aren’t enough to light up the whole case, so we switched to a strip of RGB LEDs powered by a small 5V-to12v step up regulator. Stuff all that into a case, and we have something to stick on a wall and start user testing with.

clip_image014 clip_image016

Unfortunately, our user testing revealed a drawback of this 5” screen–it is resistive touch, not capacitive, and required a relatively hard press to trigger the button (one user mentioned having to punch it to get it to work).

I found a 5” capacitive touch-screen available for a BeagleBone Black, so after a bit of hackery to get things working on its image, we were back in business, but with a bigger case due to the way the screen and BeagleBone Black were designed to mount together. After a bit more tinkering with case designs, we had one that was workable.

clip_image018 clip_image020

The problem we now faced was a bulky device; about 1.5 inches deep, and a little shorter than 7 inches square. This, and the difficulty we had finding a 5” capacitive touch-screen triggered another thought...could we just use a tablet for this? We had initially discarded the idea of a tablet because we really wanted LEDs to show the room status, (green for available, red for in use), but Ron had the idea of putting something on the screen that would scatter light from part of the screen to give off a glow. Jeremy Williams suggested taking a half-sphere of acrylic, sanding the spherical part, and attaching the flat back to the screen somehow. We put together a prototype with 3D printed hollow parts and it seemed to work. So, we worked up a two-corner tablet mount that would have a spot to pop in our sanded half-sphere.

clip_image022 clip_image024

This worked okay, except for two basic problems–the plastic holding the sphere in was too thin, and I hadn’t updated the software to move the buttons away from the spot where the sphere was going to go…. While updating the design for the top right corner retaining post, I started playing with some code I had seen to allow an Arduino to act like a USB HID device. I thought maybe I could use something like that to wire up LEDs to the USB port that I could control from a small .Net service. During one of many uploads of code to the Arduino and debugging via output over the serial console, I realized that if I installed the Arduino drivers on the tablet, I could communicate with it as a serial port device instead of all this USB HID mess. A few code updates and a revised corner bracket, and I now had an Arduino Pro Micro wired up to my LED strip and running simple software that allowed the LEDs to be controlled by simple serial commands. Add a .Net service to update the LED status based on the room’s availability, and you have the next revision of this device.

clip_image026 clip_image028

The software needs a bit of fine tuning yet, but we’re close.

Want to get involved?  The code that runs this at, including the server-side .Net application, the AngularJS+Bootstrap app to show availability, and a couple of options for showing status.  Ideas, issues, and pull requests welcome. The tablet mount design is available here.

To stay updated with the latest Rightpoint maker news, follow us at @Rightpoint #WeHeartMakers