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.

To visit our hackster.io page, follow this link: https://www.hackster.io/mprocter12/smart-mirror-using-beaglebone-black-e379a3

To visit our GitHub repository, follow this link: https://github.com/mprocter12/ECE434SmartMirror

Packaging
All hardware components of this smart mirror are enclosed in a wooden frame that hides and protects the monitor, BeagleBone, and electrical wiring. The actual construction of the frame is outlined in our hackster.io page which can be access from the link above.

Installation Instructions

 * 1) Install the Debian kernel bone-debian-9.11-lxqt-armhf-2019-11-02-4gb.img.xz from the following link https://rcn-ee.com/rootfs/bb.org/testing/2019-11-02/stretch-lxqt/
 * 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) 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
 * 5) Retrieve the Blynk authorization key and copy it into the variable BLYNK_AUTH in the file smart_mirror_main.py

Note that in doing this, the user will only display Terre Haute data and our custom dashboard. If the user wants to alter the dashboard and data being transmitted, follow the steps in our hackster.io.

User Instructions
To boot up the system for the first time after powering on, a mouse and keyboard are required. Navigate to the ECE434SmartMirror repository and run the smart_mirror_main.py Python script. In order to toggle the smart display dashboard, simply press the button created in the Blynk app. Nothing more needs to be done!

Highlights


This smart mirror displays the current date, temperature outside, what that temperature feels like, the current forecast, the current wind speed, and a philosophical fortune. All is displayed on a section of the mirror so the mirror itself is still completely usable. All hardware components are enclosed in a frame, and the display can be toggled on and off with a mobile phone.

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
This was an interesting project for us to work on, forcing us to develop our skills with using a variety of APIs and a challenging development environment, given the slowness of the BeagleBone running this kernel. There are a number of different directions the project could take from this stage, some of which are highlighted in the section above. It's a neat project, and overall we're quite satisfied with how it ultimately panned out!