Smarter Mirrors and How They’re Made
A while ago I made a smart mirror for my bathroom. Maybe you’ve seen it. It started with a particular image in my mind. I wanted to build a piece of technology for the home that feels new and futuristic, yet simple and clean. The mirror blends in seamlessly with its environment and doesn’t aggressively compete for my attention. I wrote about how it works and the parts I used, source code included.
It’s been two years, and I’ve been using this prototype every day. I’ve since added a couple of features to the software that the initial version didn’t have. For example, I connected it to my smart scale to show my weight trend, and it tells me the traffic to work each morning.
Over time I’ve been asking myself some questions about the hardware. What if it wasn’t so bulky? What if it fit into any room? What if it wasn’t square? What if it had a better display? What if it had a camera? Eventually, I put together a new prototype.
You’re looking at a small table mirror with a USB cable coming out the back and some familiar Roboto Thin on its surface. It can show me the weather, time, traffic, and more. I put the first one on my kitchen island.
The first prototype was still a little rough around the edges. I had cut the mirror to shape by hand and made a few mistakes along the way, which left me somewhat unsatisfied with the result. I used these lessons learned to build a second prototype. This time, I picked a different color and used a laser cutter for better precision, magnets for mounting, and a nicer cable. I also added an entirely new component: a light ring along the edge to illuminate what the camera sees.
These new prototypes have been a useful platform for all kinds of software experimentation. I’ve been able to build richer user experiences while keeping with the original theme of blending in and staying out of your way. For example, I played with a few different applications of face detection with the front-facing camera. One of them allows you to take pictures simply by smiling.
And then there’s that one unresolved matter from last time:
I didn’t. This time though, I’m sharing a detailed look inside the new prototypes, and I’ll take you behind the scenes of the build process, complete with pictures and links to my sources.
First, I had to remove the mirror glass from the metal shell. This isn’t meant to happen at all, so that part was a little difficult. After breaking and separating the glass, I also removed everything else inside. We need that room for the electronics.
There’s a USB cable for getting power and data to the components inside. I considered routing it through the base, but couldn’t make that work mechanically. Instead, the cable simply goes through a small hole in the metal back plate.
The main computer for this mirror is an Android tablet. I went looking for the thinnest one that would fit into the dimensions of the shell. I found the Samsung Galaxy Tab S2 8.0, which has a nice high-resolution OLED display, a front-facing camera, Wifi, Bluetooth, Android with Play Services, and all that good stuff. It’s pretty thin at 0.22", but I still had to shave down one metal part with a Dremel.
The light ring version also needs a small Arduino board, which we’ll come back to. It shares the USB connection to the outside with the tablet. There’s a tiny hub inside to achieve that.
The two-way mirror goes right on top of the tablet. I used acrylic this time instead of glass because it’s easier to handle. Black adhesive cardboard and black tape cover the space around the display and hold it all together. Initially, I cut all the pieces to shape by hand. For the second round, I was able to use a laser cutter. That made things a lot easier.
I wanted to be able to easily turn the lights on and off or change colors, all directly from an Android app. There’s an Arduino board controlling the LEDs, and I wasn’t able to connect it over USB and provide power at the same time. So now it’s talking Bluetooth LE to the tablet right next to it. It’s not pretty, but it works. At the app level, all this is abstracted away into high-level method calls (see source code).
There were a few detours I didn’t show here. I tried for a while to add a USB port in the back but couldn’t make it work well within the limited space. I’ve also since upgraded one of the prototypes from acrylic to glass, which makes for a clearer picture and scratches less easily.
So there’s my new experimental platform for prototyping smart home user interfaces. Let me know what you think! Maybe I’ll build some more.