Illumigami - The Hero Conference Rooms Deserve
Here at the Viget Boulder office we have four conference rooms for shared use between a dozen people (+/- 5 on any given day). Given that we’re a remote office with two other locations to collaborate with, the rooms get a fair amount of scheduled use, as well as impromptu “I need a room for a quick call” use. All of our rooms are hooked into Google Calendar, so it is possible to check the status of a room through that interface, but that process is … not Google’s finest user experience work.
So what do you do when you have a slightly annoying yet persistent problem? Build something cool!
Introducing: Illumigami. Every conference room is now dressed with its very own Illumigami Lantern, indicating the status of the room.
(These things look the coolest at night — pictures of which are at the end of this carousel of photos -> actually click through this carousel for once)
- Green - Available
- Yellow - Available now, Booked in the next 10 minutes
- Red - Booked
- Blue - Booked now, Available in the next 5 minutes
The ability to glance quickly at a room and know instantly if you’re able to hop in it has been huge. No longer do you get kicked out of a room unexpectedly for a scheduled meeting, and if you do need a room for an important call it’s easy to spot who’s in a booked meeting and who’s just squatting.
We picked up some origami skills making of these Lanterns; Mike’s box making expertise produced the first, and the internet provided instructions for the rest. Origami links for those interested - box, sphere (video), crane, stellated icosahedron. If you’re curious about the inner workings, a more detailed description below.
How They Work
The brains behind the operation is a fairly simple web app that pings the Google Calendar API every minute, and the muscle is all handled by the Spark Core. These things are so awesome, they’re more or less an Arduino with embedded wifi out of the box. There’s a great community around them, and they just work (unless you try to power them with 12 volts instead of 5, then they don’t work anymore … forever). The web app determines the status of the room based on a series of rules and the data gathered from the Calendar API, and sends messages to the Spark Core with simple instructions along the lines of “make this Lantern Green”, “make this Lantern Red”, or “party” (what good are glowing origami lanterns if they can’t do cool synchronized art displays?).
Every Lantern is internally equipped with up to one foot of an LED strip (way cheaper here) wrapped around a ball of paper. One end of that strip is soldered to four wires (one for Power, and one each for Red, Green, and Blue control) and run along the wall to the Spark Core base. We used an ethernet cable to cleanly run that many wires across long distances.
Two Spark Cores are needed to control the four Lanterns due to the the physical limitations of the Cores. Here's what everything looks like when it's all hooked up, along with a diagram of a Spark Core and the components required to control one of the LED strips within a Lantern:
We need two different power levels coming in to control all of the components here. 12 volts are required to power the LED strips within each Lantern, and 5 volts are required for the Spark Core. As somewhat mentioned before, you can’t power a Spark Core with 12 volts like you can an Arduino UNO (by can’t I mean you fry the Core if you try -- don’t do this). Since we already had a 12V power source from a wall wart, we just needed to drop that down to 5V to power the Cores. Turns out the best way to do this is to obtain some cheap car cell phone chargers (which convert 12V to 5V), bust one open, and swap in your own wires. Easy peasy!
So we have 2 power rails on our breadboard, the top is running 5V and powering our Spark Core with a wire into the VIN pin, and the bottom is running 12V and passing power into the LED strips (denoted by “R G B POWER” in the diagram).
Now that everything’s powered up properly, we run wires out of some PWM (Pulse Width Modulation) pins on the Spark Core and into the gates of N-Channel MOSFETs. These components let us control high voltages (12V running through the LEDs) with lower voltages (3.3V which the Spark Core provides), much like a light switch, but tiny, made with chemicals, and very very fast. We need one wire each to control the Red, Green, and Blue light amounts, and we use PWM pins so we can fake the sending of lower voltages by quickly pulsing the 3.3V output -- this allows you to turn on the various colors at a percentage of their brightness giving you the whole color spectrum at your fingertips.
The Spark Cores allow you to wirelessly flash code onto them, and program in functions which can be called over the internet. This lets me, through the internet, tell a Core to change a specific Lantern to a specific color. Using the Ruby Spark gem, the syntax looks like this:
<code>core = RubySpark::Core.new(core_id) core.function("crane", "red") core.function("sphere", "green") </code>
The first function call there will call the
crane function on the Core with an argument of
"red". In real life, the Crane Lantern turns red. I used Rails and Active Admin to quickly spin up an app that lets me manage the rooms and Spark Cores used for this project. A room belongs to a Spark Core so when the app determines a room's status has changed, it knows which Core to send the right message to.
This project has been a blast to work on. There's nothing better than combining web and hardware hacking skills to come up with something neat looking and useful. Big thanks to our very own Jeremy Fields for the great idea and Mitch Daniels for the brilliant name. Comments are welcome below.