ECE434 Smart Mirror

Team Members: Mark Procter and Andy Barbour

Grading Template
I'm using the following template to grade. Each slot is 10 points. 0 = Missing, 5=OK, 10=Wow!

 00 Executive Summary 00 Installation Instructions 00 User Instructions 00 Highlights 00 Theory of Operation 00 Work Breakdown 00 Future Work 00 Conclusions 00 Demo 00 Late Comments: I'm looking forward to seeing this.

Score: 10/100

(Inline Comment)

Executive Summary
This project consists of a reflective pane of acrylic with a monitor behind it, creating a mirror that can display useful widgets like the date, the weather, and a daily fortune, among other things. It is a sleek device useful for quickly gathering daily information while, for instance, getting dressed or brushing teeth.

Packaging
All hardware components of this smart mirror are enclosed in a wooden frame that hides and protects the monitor, BeagleBone, and electrical wiring.

Installation Instructions

 * 1) Install Debian [link and version number here]
 * 2) Clone the repository using $git clone https://github.com/mprocter12/ECE434SmartMirror.git
 * 3) Enter the repository and run the install file with $./install.sh
 * 4) [info on how to make program run on start]
 * 5) Create a Blynk project with a single button labelled "Toggle Mirror Display" that will toggle the V0 pin between 1 and 0, starting at 1
 * 6) Retrieve the Blynk authorization key and copy it into the variable BLYNK_AUTH in the file smart_mirror_main.py

User Instructions
[info on using Blynk]

Highlights
Here is where you brag about what your project can do.

Include a YouTube demo the audio description.

Theory of Operation
The customization of the appearance of the displayed widgets was done through InitialState, a tool used for collecting and displaying data fed to it. The raw InitialState page created for this project can be seen here. On the startup of the BeagleBone system, the main Python script will run. It will first open the customized HTML for the InitialState page that formats it properly, then simulate an F11 key press to enter full-screen. The program will then continually listen for button presses in the Blynk program to toggle the output to the HDMI port. Periodically, the Python script will retrieve information from various APIs to obtain the current data to display, then feed it to the InitialState dashboard, causing it to update.

Mark Procter

 * Formatting of dashboard display
 * Integration of weather API
 * Functionality of automatically launching dashboard HTML file and forcing it to be full-screen

Andy Barbour

 * Formatting of HTML and CSS files
 * Integration of date API
 * Integration of timers which periodically update widget data

Both Team Members

 * Integration of fortune API
 * Integration of Blynk
 * Construction of mirror enclosure and hardware
 * Documentation of wiki and Hackster pages

Future Work
There are a number of features that could be added to this project to improve the overall quality and make it more interesting.


 * Integration of more interesting APIs, possibly connecting to personal calendars, home automation systems, or electronic assistants
 * More polished and professional enclosure and frame
 * Additional options to make mirror more easily customizable by user
 * Integration of speaker, camera, and / or microphone for better user feedback and input, for instance automatic sleeping and waking of system

Conclusions
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.