Automating our office entertainment room
One of our awesome interns walks us through the project he’s been working on with us: the automation of our entertainment room.
The entertainment room is used for different purposes – hosting our High Five presentations, streaming keynotes, taking a break on the PlayStation, to name a few – but the existing setup was annoyingly complex. There was a remote overload, and enough different settings and use cases that there were a few how-to diagrams attached to the wall.
The existing setup of the entertainment room consisted of five different devices:
- An Onkyo TX-NR809 A/V receiver with 3 zones, controlled over the network,
- An Epson EH-TW5910 projector, controlled with an infrared remote,
- A third-gen AppleTV, controlled with an infrared remote,
- A Telenet AD2200 Digicorder (for local digital TV), controlled with an infrared remote,
- And finally, a WeMo Insight switch, controlled over the network.
For my thesis project, I worked on the automation of these devices, with a single, easy-to-use device and presets/recipes and a Spencer integration.
Let’s dive right into the hardware! You can see the full bill of materials in the table above, but we’ll walk you through the process in this article (of course).
We’d started experimenting with this project with the standard setup of our hardware team: a Particle Photon development board for low-level hardware control, and a Raspberry Pi Zero. For the actual device, we decided to build our PCB with SMD components (surface mount devices) to save some space. At this stage, we replaced the Particle Photon with the P1 module, which essentially contains just the Photon’s processor and Wi-Fi chip. We then started designing the other main elements: a custom voltage regulator, status LEDs, and RESET+MODE buttons.
We selected the NeoPixel LEDs to install inside the rubber button pad. These are small and reasonably-priced multicolor LEDs with one big advantage: only one pin of the P1 is needed to activate several of these LEDs, while most alternatives require a pin per LED. Mounting the NeoPixels did require creating a custom PCB footprint. We looked at designs by Adafruit (Trellis) and Sparkfun, but those turned out to be too small to add a NeoPixel in the center.
Once the PCB and button pad were complete and hooked up, we designed and 3D-printed its casing. It exists of two parts: a body that offers stable mounting for the PCB and Raspberry Pi Zero, and a top that exposes the buttons, display, and volume knob to the end user.
For this project, we used software written for a Raspberry Pi to control the plethora of devices in our entertainment room. We found useful Python libraries for the Onkyo Receiver and the WeMo switches, and kept working in Python throughout the entire project – happily, as it’s an easy to use, fun language to work in. The software combines and coordinates those two libraries with the LIRC (Linux Infrared Remote Control) project.
Together, this ensures that all devices can be controlled with simple software commands (or with a press on the hardware buttons). We also included some background listeners for the supported devices (Onkyo and WeMo), so we always know the actual state and configuration of these devices.
The firmware was based on November Five’s existing domotics-photon-bootstrap project. This setup for the Photon allows easy integration in the Spencer backend, which was a crucial element for this bit of office automation (more on that later). We used an Adafruit SSD1306 library to control the OLED display, and controlled the NeoPixels with the SparkCore-NeoPixel library.
The firmware communicates hardware actions (button presses, volume knob turns, etc.) to the Raspberry Pi to execute commands, and receives device state updates from the Pi to stay up-to-date.
Of course, no office automation project is complete without a Spencer integration! November Five’s own Spencer use cases have been expanding a lot in the last months, offering more and more options to control our office environment with the app. Particle offers cloud functions and events for its devices, which is why we’re partial to using them in our hardware endeavours.
For the entertainment room, we exposed a cloud function to send commands. The Spencer backend can link those codes to specific device actions. The cloud events are then published to keep Spencer up-to-date with the latest device states.
This means we can now control the different devices from the entertainment room from the app – a fact that has lead to some messing around and sudden bursts of loud music (because of course), but also brings us one step closer to total office control…
Do you have similar visions of grandeur? You can apply for an internship with us here, or check out the Join page on this website to see our full-time openings!