Introduction: DIY SmartMirror

Yes, it is very smart.

Step 1: Initial Design and Evolution

My initial idea was to create a smart-mirror that will display all types of information that you need when you are getting ready for the day. Weather, news and stocks were my initial ideas to include in the design. I also wanted to have voice recognition to turn on the display and tell you important information. This proved to be too deep a rabbit hole to cover in one semester, so I almost immediately axed the idea of voice recognition.

The original idea had some kind of board like a Pi or an Arduino to drive the display and get data from the internet. After some research I decided on a 7' LCD display and a Raspberry Pi3 with a decoder for the display. After that I had to find a suitable API to give me all the relevant information for weather (for free hopefully) and a GUI to display the information. Once I began coding, I realized that adding features other than weather would not be feasible within the time constraint.

My final design is the display connected to a decoder which communicates with the Raspberry Pi3. The Pi runs a python script that fetches the weather with an API called OpenWeatherMap and displays the data using the GUI Kivy.

Step 2: Research

I already had the idea for making a smart-mirror in my head from many Youtube tutorials I saw on the subject. Many of those people though used an API that they had to pay for that had a built in GUI. I didn't want to pay, and not coding it yourself felt like cheating.

This project was relatively easy to research. I had a clear set of materials I needed for the project: a display, a computer to drive the display, and a mirror.

I choose a Raspberry Pi3 because it had a large library of already finished projects I could look at if I ever encountered problems, which there were a few of. The display I choose was the most affordable and largest display I could find that was thin enough to fit behind the profile of a mirror. I ended up having to construct my own mirror because I could not find with the right size and cheap.

In conclusion, I found it much cheaper just to make it yourself, as long as you are okay with it having a sub-professional look most likely.

Step 3: Difficulties and Help

One of the first difficulties was a blunder on my part. I failed to check the pin output from the display and the input on my Pi. The pin output was 40 but the Pi input was 32. But luckily I found a decoder online that was cheap and took pressure off the Pi, which is a plus. It did cost me an extra couple dollars in shipping, if I had looked over it before I ordered all the parts.

The next obstacle I encountered was finding a GUI. I didn't even know what one of them was called, a Graphical User Interface. Luckily, my professor Chuck had some suggestions on where to start. He gave me several suggestions that I had to decide on on my own. I ended up coming to a conclusion rather quickly, with the help of some online suggestions also.

One way I think M5 can streamline the learning in this class is have a description on the staff board of what they really know a lot about. Examples like 'Python' or 'RaspberryPi' under each person would help in finding who to go to when I had questions. Most of the time, I would find the nearest person, and they would say something along the lines of "Oof, I don't really know. But, so-and-so definitely will." Then I would find that person and hopefully get an answer. If I could go to the board and see if I see any skills that pertain to my problem, it would help greatly in getting help.

Step 4: Acomplishments

One of my biggest accomplishments is the journey and completion of this project. This is the first major project that I had to complete on my own, and there was a lot of learning in the realm of project and time management. The process of going from design to implementation was difficult and it renewed my faith in planning. From researching parts to simply structuring python code efficiently, the act of planning and keeping organized was difficult in the moment. But once I realized this, I sat down and planned it out, not because it was assigned or because I needed a good grade, but I organically came to the conclusion it was necessary.

The other accomplishments I am most proud of is my increased proficiency in python and my introduction to GUI. This was the first GUI I had ever coded, and it had a steep learning curve with it. Learning widgets (kivy 'objects') and how the general structure of a GUI works was alien to me. I now feel more well rounded, and I am most definitely better off when it comes to learning other GUI in the future.

Step 5: Replication

The first thing I would do to reconstruct this project to decide your scale and objectives.

If you want to make a smart-mirror DIY style, follow my design but feel free to diverge from the path.

If you just want a finished project, you can copy all of my steps and I have the code on my Github.

Step 6: Upgrades

The first thing I will do is get a new mirror. Although mine works, it has imperfections from my application.

The next thing I would add to the display is the other ideas like news and stocks banner to the GUI, and probably upgrade the display to a monitor or bigger LCD to fit all the information.

If all these were completely, lastly I would add either motion sense or a sleep function so it isn't always on, or add voice recognition so again the display is not always on.