Difference between revisions of "ECE434 Smart Mirror"

From eLinux.org
Jump to: navigation, search
(Installation Instructions)
 
(18 intermediate revisions by 2 users not shown)
Line 4: Line 4:
  
 
Team Members: [[user:Proctem|Mark Procter]] and [[user:Abarbour|Andy Barbour]]
 
Team Members: [[user:Proctem|Mark Procter]] and [[user:Abarbour|Andy Barbour]]
 +
  
 
== Grading Template ==
 
== Grading Template ==
Line 30: Line 31:
  
 
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.
 
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 ==
 
== Packaging ==
  
All hardware components of this smart mirror are enclosed in a wooden frame that hides and protects the monitor, BeagleBone, and electrical wiring.
+
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 ==
 
== Installation Instructions ==
  
1. Install Debian [link and version number here]
+
# 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'''
+
# Clone the repository using '''$git clone https://github.com/mprocter12/ECE434SmartMirror.git'''
3. Enter the repository and run the install file with '''$./install.sh'''
+
# Enter the repository and run the install file with '''$./install.sh'''
4. [info on how to make program run on start]
+
# 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. [info on Blynk]
+
# 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 ==
 
== User Instructions ==
  
[info on using Blynk]
+
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 ==
 
== Highlights ==
  
Here is where you brag about what your project can do.
+
[[File:Dashboard.png|thumb|right|Smart Mirror Dashboard]]
  
Include a [http://www.youtube.com/ YouTube] demo the audio description.
+
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 ==
 
== Theory of Operation ==
  
Give a high level overview of the structure of your software. Are you using GStreamer?  Show a diagram of the pipeline. Are you running multiple tasks?  Show what they do and how they interact.
+
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 [https://iot.app.initialstate.com/embed/#/tiles/bkt_x8gd1k2luxsuw 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.
  
 
== Work Breakdown ==
 
== Work Breakdown ==
  
List the major tasks in your project and who did what.
+
=== Mark Procter ===
  
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.
+
* 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 ==
 
== Future Work ==
  
Suggest addition things that could be done with this project.
+
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 ==
 
== Conclusions ==
  
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.
+
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!
  
 
{{YoderFoot}}
 
{{YoderFoot}}

Latest revision as of 19:03, 18 November 2019

thumb‎ Embedded Linux Class by Mark A. Yoder


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

Smart Mirror Dashboard

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.

Work Breakdown

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!




thumb‎ Embedded Linux Class by Mark A. Yoder