Progress: 2nd Iteration - Software

A project log for Reflectrum - Smart Mirror

A new smart mirror design.

chris-gervangChris Gervang 04/20/2016 at 05:080 Comments

Just after christmas Michelle joined the project. This iteration of the mirror was all about adding software she could use everyday to the hardware I gave her for Christmas. As a designer, she redid the UI, color palette, and visual design. As a developer, she made mirror apps. I focused on developing mirror apps as well, and I spent a considerable amount of time experimenting with different control interfaces for the mirror.

In this post I'll focus on the software we created and the number of false starts I made towards a satisfying human control interface (hereon written as HCI).

The code for iteration is in the 'legacy' branch, and release 0.5 is the final working version before starting the 3rd iteration.

Our lego prototype of the HCI (from the video above) was way too large, but the concept of a clickable scroll wheel similar to the digital crown on the Apple Watch stuck around.

A scroll wheel was only one among many approaches we've considered. The 1st iteration of the mirror was designed with a scroll action and a separate 'mode' button that could handle a click and click-hold action.

Ideas for implementing this ranged from capacitive and resistive touch button and panels, voice control, thin linear potentiometers, scroll wheels from a mouse, leap motion, basically anything that could scroll and do a single click.

The first approach prototyped was this flat linear potentiometer and a button. I found the result disappointing because the resolution of the potentiometer and my microcontroller wasn't high enough, and it was hard to reason about edge cases.

The lego scroll wheel from the video was actually the second prototype, coming after the flat potentiometer. It uncovered a key insight by combining the scroll action and button action into the same device.

The design was a technic bar on a pivot with gears adjacent to each other along the side, a large lego wheel spinning the gears, a rotary encoder, and a push button that was hit when pressing the wheel. I don't have a good picture unfortunately and gave up on the idea after a night of trials.

Also considered was voice control and touch control. I've used voice control on my past home automation projects, like Clyde, and found the experience overall lacking for me personally. I don't particularly enjoy uttering out loud at a machine every time I need to interact, and quality/accuracy/latency will suck unless you're really kick ass like Amazon and their Echo.

Touch control remains an option to look into. The mirror at the time of writing doesn't have any touch components, though I have gathered Alibaba quotes for some of the required parts. For example, I could construct a touch screen mirror three layers:

27" Glass Touch Panel on top of Observation Glass on top of a high brightness LCD display module would do the trick.

The devils in the details, so in the end discovered rotary encoders with integrated buttons. These looked most promising and come in all sorts of sizes!


Merry Christmas!

The software for this iteration was written with JQuery and Python Flask - trying to keep it simple while getting a hang of what the features would feel like.

We built a menu!

And a favorite quotes page!

And a weather page!

And a friend of ours, Joel Terry, developed a Google Calendar page!

Once valentine's day came around these pages were ready to go, but some features like nested menus and smooth page loading were missing and it will require a full rewrite to get these and few more features into the mirror.