My Smart Mirror is made up of a raspberry pi 3, configured code from a Github repository, an originally designed wooden frame using CAD in Solidworks, an acrylic mirror, and a few other mechanical components. It currently features a calendar for upcoming events, SF weather forecast, commute times, image gallery, and much more!
Area of Interest
Software Engineering, Mechanical Engineering
Lowell High School
Hi! My name is Bernice and I’m an incoming sophomore at Lowell High School! I’m on the Lowell robotics team, Team 4159 Cardinalbotics, as well as the Cardinalbotics Manufacturing Team! I also recreated the team website and the team’s scouting application with two of my robotics teammates. In my free time, I enjoy learning new programming languages and playing the piano. I’ve been interested in going into an engineering field for awhile now, and I hope to become a software engineer one day!
At Bluestamp, I gained many valuable experiences that I will never forget. Although it was a bit intimidating to go into an environment where nearly everyone in the class was older than me, it was ultimately a learning experience for everyone and I’m very grateful to have had the opportunity to be a part of that.
My favorite part of my Smart Mirror project is the fact that it has taught me a lot about using Github and the Terminal Command Line, as I needed to use both applications to install and configure the modules. I also enjoyed designing the frame on CAD because it was truly a rewarding experience to see the finished product of the frame after days of hard work assembling each individual part and finally putting them all together.
Although this project had many challenges and unexpected problems, I’m glad that I was able to persevere through the hard times and finish my customized Smart Mirror! Overall, this project incorporated aspects of software engineering, mechanical engineering, design elements, and much more, and I’m very proud of what I’ve accomplished during these six weeks.
Over the next few days, I plan to integrate Amazon Alexa voice services to my Smart Mirror so that it can render voice commands, making it much easier to interact with. In the future, I plan to continue working on different projects and pursue a career in software engineering!
Final Milestone and Modifications
Milestone #3: Complete Base Project with Modifications
For my last Milestone, I fully assembled my Smart Mirror and added modifications to personalize it.
First, I used tape to measure out where I wanted to cut the acrylic plexiglass. I used scissors to cut alongside the edge of the tape because I learned that the plexiglass sheet is very fragile and can crack easily after conducting research and experimenting with different methods of cutting the plexiglass on the edge of the mirror. Despite my efforts, there were still a few cracks, but I was able to cover them with tape to avoid cutting myself from the sharp side of the mirror.
After cutting the acrylic plexiglass mirror, I used super glue to glue it onto the top frame through the frame’s interior. One challenge was that the middle frame was in the way of my hand, preventing me from being able to reach the frame with super glue. To solve this, I took apart part of the frame to give myself more space to move around. Another problem was that the super glue spread onto the mirror where it was visible on the front side of the plexiglass, so I used acetone to wipe it off. However, the acetone melted the mirror film so that it was no longer a reflective surface and I had to restart the process.
After getting the frame ready for full assembly, I worked on modifications for my Smart Mirror. the first modification I added was getting my Smart Mirror to start up when I turn my monitor on. To do this, I followed the instructions in the MichMich Magic Mirror repository for “Auto Starting the Magic Mirror”.
The second modification that I added was a module that allowed me to track my daily commute time from my house to a certain destination using the Google Cloud Platform. First, I executed commands in the terminal. Then, I followed the instructions from the MMM-MyCommute module to get the Google API Key and finished the configuration in my config.js file, which I found in the “MagicMirror” directory. All Command line and configuration instructions can be found in my documentation here. One of the challenges I faced was when I got errors about my configuration file that prevented my Smart Mirror from starting up. After a lot of research and experimentation, I fixed my Google API key by enabling a few services that I initially skipped over. Another challenge I faced for this module was in the configuration code, as I wasn’t able to get more than four destinations on the Smart Mirror display. This could’ve been because of the lack of space on my monitor screen. Additionally, some of the locations were causing errors so I checked over my code in the configuration file and retyped the Google Maps locations.
Another module that I installed was the MMM-OnScreenMenu module. This module allowed me to turn my monitor off, refresh, reboot, or shut off my monitor remotely through my laptop when connected to VNC. To install this module, I followed the installation instructions in the repository and pasted the default configuration code in my config.js file.
The next module that I added was the MMM-AlexaOnOff module. This module allows me to connect my Smart Mirror to a Amazon Alexa Echo Dot to turn my monitor on and off using simple voice commands. I just followed the installation instructions and used one of the configuration examples, which can also be found in my Command Line documentation.
In addition to the modules listed above, I also added the MMM-ImageSlideshow module, which allowed me to show pictures on my Smart Mirror one at a time as they rotated every few seconds. One of the challenges I faced was that there weren’t any installation instructions for this module, so I just used the commands that I learned from installing the other module repositories. Another challenge was that I wasn’t able to get the images to show up. After hours of experimenting with different commands in the terminal, changing the image file names, and fixing the syntax in my configuration code, the module still wouldn’t show up, but the other modules in the Smart Mirror were about to run without giving me any error messages. In the end, I found out that it was because the images were named with “.jpeg”, and only “.jpg” was able to run with this module. Another challenge I faced was that the images were rotated sideways on the Smart Mirror display even though they were in the correct orientation when I checked in my files. To fix this, I looked up a few commands for rotating pictures and changing image sizes.
Milestone #2: Code Backup and Frame
For my Second Milestone, I finished the frame for my Smart Mirror! First, I planned out the dimensions by sketching different frame designs on paper. Then, I modeled the frame design on Solidworks 2018-2019 using Computer Aided Design (CAD). Afterwards, I cut the pieces of wood using a hand saw and used sandpaper to smooth out the wooden surfaces.
The first challenge that I faced was using the hand saw for the first time. Despite my past experience in using a band saw, the cutting technique of the handsaw was quite different, as less pressure was required and I learned that I had to slowly pull it back towards myself to start off each cut. Cutting straight downwards was also a challenge because I kept angling the saw toward the right side when cutting, causing the sides of the wood to become sharper and uneven at the end.
After cutting all of the wood, I realized that some pieces were too short to use. After further investigation I discovered that it was because I measured the monitor one inch shorter than it actually was. As a result, I had to redo all of the horizontal sides of the frames. Luckily, I was able to use a saw block, which helped me straighten my cuts into the wood.
Another challenge I faced was getting all the wood for the middle frame to be the same height. I solved this by cutting longer parts off and sanding all of the pieces again. Afterwards, I started putting together the back frame so I could piece the other frames on top of it. I used a 90 degree corner bracket to position the wood and glue the pieces together using wood glue. However, the wood glue was taking too long to dry and there was only one corner bracket, which meant that each corner of the 3 frames would need to be glued together one at a time. To solve this problem, I used metal brackets and screws to create the back support frame, which would serve to prevent the monitor from slipping out through the back.
After the back frame was completed, I aligned the pieces of wood for the middle frame on top of the back frame and screwed into the back frame, working my way into the middle pieces. I kept the pieces of the top frame gluing together while working separately on the other frames in order to save time. Since the top frame wasn’t drying quick enough, I decided to glue the 3 pieces of wood that were already connected, onto the middle frame and leave the last piece to attach separately. This way, the whole frame would have time to dry overnight, as opposed to having the frames stay separate and be forced to spend more time gluing it down the following day. Lastly, the remaining piece of the top frame was glued onto a piece of the middle frame that could be unscrewed to easily slide the monitor in and out.
After assembling the frame, I attached a total of four brackets on the inside of the frame against the back frame to hold the monitor in place. Then, I used wood finish to darker the color of the wood for finishing touches.
Frame Design in CAD on Solidworks 2018-2019
Dimensions in Inches (length x width x height):
Front/Top Frame: Side/Middle Frame: Back Frame:
15 x 2 x 0.75 13.75 x 0.75 x 2 15 x 2 x 0.75
23.5 x 2 x 0.75 22.75 x 0.75 x 2 19.5 x 2 x 0.75
Milestone #1: Software Setup
Today I finished my first Milestone! In this milestone, I connected my raspberry pi to the monitor to display the Smart Mirror screen. First, I downloaded a Magic Mirror repository from github by Mich Mich. Then, I followed the documentation to install the dependencies, set up the software, and configure the modules.
This repository’s default setting for location was set to New York, so I edited a few lines of code from the config.js file in my Smart Mirror folder by using the default text editor on my monitor. First, I changed the location from “New York” to “San Francisco”. Then, I registered for an account on a website called Open Weather Map to get the API Key, which I pasted into the section for APPID in the text editor. I also searched up my location ID on http://bulk.openweathermap.org/sample/ and used that instead of the default one. Next, I edited the “Compliments” module so that it changes what gets displayed on the Smart Mirror screen.
A challenge that I faced was using the command line for the first time. It was very confusing and I didn’t know what each command meant, which was frustrating. Now, I’m gradually starting to understand each part of the commands a bit more.
Another challenge was when I used multiple repositories, modules, and instructional videos that didn’t correspond to one another. In the beginning, I used another repository, but it got too confusing since I also used other websites when researching instructions for the file configuration, which made it even more chaotic because the folders and files from the websites were named differently than the ones from the repository even though they were under the same project name: Smart Mirror. As a result, I got many error messages in the command line that I didn’t understand at the time, and after researching for awhile, I found out that this was because the files that I wanted to access were nonexistent in the repository. Therefore, I used a different repository (Magic Mirror by Mich Mich) so I didn’t have to install the modules separately, as the modules were already part of the repository.
By my next milestone, I plan to have my monitor connected to my raspberry pi through VNC, my Smart Mirror frame completed, and the final setup of my Smart Mirror in progress.
Starter Project: Minty Boost
For my starter project, I chose to do the Minty Boost. For this project, I soldered all of the individual parts onto the circuit board, used wire cutters to trim off the excess wires on the back of the circuit board, and used tin snips to cut a rectangular hole on one end of the Altoids tin for the USB jack to stick out of.
First, I soldered the 3.3k resistor onto the circuit board. Next, I added the 75k resistor.
The first problem that I encountered was that the 75k resistor didn’t quite fit into the spaces designated for it on the circuit board, possibly due to a manufacturing issue with the circuit board that caused its sizing to be off. After a while of trying to get it to fit on the circuit board, one of wires broke, rendering the resistor unusable. To solve this, I soldered three resistors together (22k, 47k, 4.7k) to make up for the 75k resistor and shaped it so that it would fit on the circuit board without interfering with the other parts later on. After that, I added the other 75k resistor as closely to the circuit board as I could, careful not to twist the wires too many times.
I then continued soldering the parts into place with the rest of the pieces and inserted the boost converter chip over the IC socket, which serves to protect the chip and allows you to replace it if necessary.
A challenge that I had with soldering was that parts of the solder initially connected to different components on the circuit board would get stuck together due to my lack of prior experience in soldering and the fact that the solder solidified so quickly. Therefore, I used wire cutters to separate the pieces of solder and wire ends so that the pieces would no longer be connected.
Afterwards, I soldered in the wires for the battery holder, inserted the two AA batteries, and measured the voltages of the pins of the USB connector using a multimeter. For the two outer pins, I measured 5.32 volts, which is slightly higher than the estimated 4.8 – 5.2 volts from the instructions. The voltages for the second and fourth pins were slightly higher as well, measuring 2.1 volts, 0.1 volts over the estimated measure. However, since the measures weren’t significantly higher, I decided to go through with the project and continue onto the next step. I soldered the USB Type A Connector/USB jack onto the last empty part of the circuit board and tested the Minty Boost charger to see if it worked. To my amazement, I was rewarded with the buzz of the phone and the lightning symbol next to the battery indicator.
Minty Boost Schematic
Bernice's Starter Project!
How it works
The Minty Boost project allows you to charge your phone when you connect it to a phone charger, which is plugged into the USB jack. Its power supply comes from the two AA batteries, which hold 1.5 volts each for a total of 3 volts of power.
The power inductor increases the voltage as it passes through the current and releases it up to 5 volts, which is the amount needed to charge a phone. It stores its energy in a magnetic field. There’s also a diode that keeps the current flowing in one direction. The resistors keep the current in check so that it doesn’t go over its limits. Similarly, the capacitors keep the voltage levels stable by storing some of the energy and closing a switch so that the current can no longer pass once the voltages reach a certain limit.