Materials

  1. Computer Monitor. Buy used and look for cable inputs that point down or sideways instead of straight out. 22" recommended (I used Acer AL2216 )
  2. Video cable. Whatever fits your monitor (I used HDMI to DVI adapter)
  3. Raspberry Pi 3, 16GB Micro SD Card, 5V Micro USB power supply, any RPi case
  4. Wood. I bought four 3ft lengths of 3"x1"
  5. 8 Angle brackets
  6. Short wood screws.
  7. Gorilla glue.
  8. Electrical tape.
  9. Extension Cord with multiple plugs.
  10. 50cm x 70cm Ikea STROMBY frame.
  11. Gila Mirrored Window Film
  12. USB Sound Card, Lapel Mic, any USB powered speaker *

*****Bonus Alexa Materials

Additional required tools/supplies are: scotch tape, a squirt bottle, dish soap, a drill or screwdriver, exacto knife, scissors, and a saw.

March 10, 2018 update: I'm currently in the process of trying out an actual two way mirror as well instead of the window film. If you're interested in this I can recommend this mirror which comes in several sizes. I'll have a post coming soon with instructions for how to mount it.

Creating the Two Way Mirror

The two way mirror is the most essential part of this build. To create this component, you just apply Gila Mirrored Window Film to any piece of glass or acrylic. This works equally well for glass and acrylic, and only takes about 15 minutes.

Ikea STROMBY with Gila Mirrored Privacy Film applied.

Remember, this is a budget solution so there is some compromise in optical quality. It's good enough for a non essential decorative mirror, but probably not a primary bathroom mirror.

Here you will need scotch tape, a squirt bottle, exacto knife, scissors, and a squeegy or scraper. There are lots of videos online with instructions too.

Applying the film:

  1. Fill the squirt bottle with water and add about 0.5 tablespoons of dish soap. Basically just one squirt.
  2. Cut off a piece of reflective film about 1 inch larger than your surface in all directions.
  3. Clean your surface, and then spray generously with dish soap mixture.
  4. Put scotch tape on both corners of the film, and pull it apart to remove the plastic protective liner. Peel the liner, spraying dish soap mixture between protective liner and the film sheet.
  5. With the film sheet generously coated in soap mixture, lay it flat on your surface.
  6. Squeegy down the middle, and then from the middle out to the sides. Keep spraying and smoothing until all the air bubbles are gone.
  7. Use scissors or the exacto knife to trim excess materials from edge.

You're done! Let it sit for a while before moving, as it hasn't really stuck in place until all the soap mixture dries.

Building the frame

This frame simply facilitates holding the monitor, and attaching the mirror to your monitor. It will also serve as the enclosure for your Raspberry Pi.

Building materials

Start by finding a monitor, and ripping the bezel off by removing screws and jabbing a knife or paint scraper in the seam of the monitor. There may be some parts hanging free off the back of the monitor, which can be attached using electrical tape. Insulate the back of any menu buttons with electrical tape as well to prevent short circuiting.

Once you have ripped the bezel off, it's time to build the frame. Use your most basic woodworking skills to size the wood frame, and then use the 90 angle brackets to attached the inner corners. Note, this will be hidden, so you can do an ugly job. I placed 4 small screws in the front and back corners to hold the monitor in place.

Wooden monitor bezel

I also painted my frame black for aesthetic reasons, however it's completely hidden by the frame overhang, so this is not necessary.

Sticking it all Together

Now we need to attach our mirror and monitor. I did this by cutting a hole in the rigid frame backing of my Ikea frame, and gorilla gluing some angle brackets to the backing to attach to the outside of the frame.

Lining up monitor over frame backing with removed section(right).

The hole in the frame backing was done using multiple passes of an exacto knife. Then I lay the monitor flat over the hole, centred everything, and used the all surface gorilla glue to fasten 4 angle brackets around each edge. I used 3d printed parts for this, but any 90 degree bracket with sufficient strength will work.

Once the glue has set, you simply screw the bracket into the monitor frame.

Gorrilla glue setting on 90 degree angle bracket.

It's up to you how to arrange your components. I punched some holes in the frame to run wires for my speaker and mic using a drill, and another trough for the power cable using a hand saw.

My pi case is just wedged in place. I should probably glue that or something...

Raspberry Pi Setup

So you've built your hardware! That's awesome, now it's time to get the raspberry pi running the MagicMirror and Alexa software. Of course the first step is just getting an operating system. I strongly recommend raspbian jessie, which already has a great install guide.

Once the Pi starts up, run the following in terminal to get the software up to date:

$> sudo apt-get update
$> sudo apt-get upgrade

You should also follow these steps to enable VNC Viewer, a remote desktop tool that allows to you acces your RPi desktop from any computer on the same network. This lets you work remotely once you've finished the initial setup, without plugging in a keyboard and mouse.

Install MagicMirror

With the basic setup done, we will now install the core application called MagicMirror. There is a guide on the website to install MagicMirror, but it didn't entirely work for me.

First I had to update NodeJs and electron:

**$>**curl -sL https://deb.nodesource.com/setup\_4.x — Node.js v4 LTS "Argon" | sudo bash -
**$>**sudo apt-get install nodejs
**$>**sudo npm install electron

Oct 12 2017 update: if electron fails to install, try running the following for the last command:
**$>**sudo npm install electron@1.7.6)
Then I downloaded and installed magic mirror using:

$> curl -sL https://raw.githubusercontent.com/MichMich/MagicMirror/master/installers/raspberry.sh | bash

If these run succesfully, you can just navigate to the MagicMirror directory, and run:

**$>**npm start

This should show the default dashboard. To edit this, navigate to the MagicMirror/config/config.js file and add custom location, calenders, moldules, etc.

There are also some additional configuration details regarding screen orientation, screensaver settings, and wifi.

Installing Alexa

If you've already got a computer on your wall, you may as well add some voice interaction. This can be done by installing and running Alexa on your raspberry pi as well. I covered this in a previous post.

Alexa and MagicMirror will then run simultaneously on the same raspberry pi (at about 25% CPU). I am hoping to create some skills to change the magic mirror layout, add to do lists, etc, but for now it's just stock Alexa.

Congratulations, now you've got a smart mirror, and maybe a personal assistant! Have fun never looking at your smart phone again. If you'd like to add some custom behaviour to Alexa, checkout this post on how to do it.