How to Make a Raspberry Pi Smart Mirror
September 05, 2016
Video
Embedded Computing Design
How to Make a Raspberry Pi Smart Mirror
In this video, we give you some detailed instructions on how to make an easy raspberry pi powered home smart mirror. A smart mirror displays applications so that you can check the weather, local news, etc. while you are getting ready in the morning. It's also modular, so you can easy move it around or hang it on the wall if you like. We've created a basic application that you can run on the smart mirror, but it's totally customizable if you want to write some of your own code. We use a Raspberry Pi 3 in this video, but you can also use an A, B+ or any other Pi.
*Note* we no longer sell these parts. In order to download the 3d printable files, visit our website: https://www.thehackershack.com/parts.html
If you don't have a 3d printer, you should be able to print the parts on a local community printer or with an online service like Shapeways.
Check our hackaday.io page for downloadable 3d files and a full parts list: https://hackaday.io/project/13466-raspberry-pi-smart-mirror
LINKS:
Github project: https://github.com/HackerShackOfficial/Smart-Mirror
To Subscribe: https://www.youtube.com/channel/UCEcNXmr7DYq1XxpWHSxaN0w?sub_confirmation=1
Get our 3D printer: http://robo3d.myshopify.com?rfsn=1004615.c5abe
MATERIALS:
1 x Raspberry Pi 3
Amazon Affiliate Link - https://goo.gl/oVJcxK
1 x Low profile monitor (we used an old led display)
Amazon Affiliate Link - https://goo.gl/a4HeP5
12 ft - 1x2
12 ft - 1x3
1 x Wood glue
1 x Low profile HDMI cable
Amazon Affiliate Link - https://goo.gl/BzBTT8
1 x 18" - 24" Acrylic See-Through Mirror, 1mm
Amazon Affiliate Link - https://goo.gl/mpvZWE
You could also use a piece of one way film and a clear acrylic sheet
Amazon Affiliate Link - https://goo.gl/pTgUQy
*NOTE* - The above mirror might be too flexible and cause some distortion if it is not sandwiched properly. You could also use a thicker piece of clear acrylic and apply some one way mirror film: https://www.amazon.com/Mirror-Window-Film-Wide-Roll/dp/B004S7HPJ0/ref=pd_sim_201_4?ie=UTF8&psc=1&refRID=PJC3NH7P1TA4X4Z9PRKT
We did not experiment with this, so results may vary.
Subscribe to Hacker Shack: https://www.youtube.com/channel/UCEcNXmr7DYq1XxpWHSxaN0w?sub_confirmation=1
Follow Hacker Shack on Instagram:
https://www.instagram.com/hackershackofficial/?hl=en
MUSIC:
DJ Quads - Stop: https://soundcloud.com/aka-dj-quads/lady-vlog-music
*Disclaimer*
The methods shown in this video should be used
as a guide only.
HACKER SHACK ACCEPTS NO RESPONSIBILITY FOR
ACCIDENTS OR INCIDENTS ARISING FROM INDIVIDUALS
UNDERTAKING ANY OF THE TASKS DESCRIBED. IN
PARTICULAR, IF UNSURE YOU SHOULD ALWAYS CONTACT
A QUALIFIED TRADESMAN BEFORE PROCEEDING.
var Hubs = window.Hubs || {}; Hubs.recommendation = {"enabled":true,"isRecommendationFound":null,"id":46698,"isInternalRule":false,"isAiRule":true,"recommendationAiContent":"all_streams","recommendationAiStreams":[],"source_collection_id":0,"template":{"max_items_to_display":8,"max_item_age":365,"enable_panel":0,"panel_top_auto":1,"panel_top_pixels":20,"panel_delay":0,"override_next":1,"label_recommended":"Recommended","hide_publish_date":0}};
×
// Called when a Parent Window of an Embedded IFrame has Initial Load Data function g_iFrameLoadDataCallback(loadData) { $('window').trigger('loadData', [loadData]); }
// Called when a Parent Window of an Embedded IFrame is Scrolled function g_iFrameScrollCallback(scrollTop, offsetTop, viewportX, viewportY) { $('window').trigger('scroll', [scrollTop, offsetTop, viewportX, viewportY]); }
'search' : { 'enabled' : true, 'labels' : { 'home' : 'Home', 'videos' : 'Videos', 'blogs' : 'Articles & Blogs', 'docs' : 'White Papers & Publications', 'social' : 'Social', 'recent' : 'Recent Searches', 'noItems' : 'No Items Found', 'noItemsStream' : 'No Items Found in this Stream', 'seeMore' : 'See more', 'searchEntireHub' : 'Search the rest of the Hub', 'searchAllContent': 'All Content', 'searchPlaceholder':'Search' }, 'maxRecents' : 5 },
'isMobile' : false, 'isEmbedded' : false, 'isEmbeddedTile' : false,
'labOptions' : {"topMenu":false,"permHeader":true,"noHeader":true,"hideBanner":false,"highlightFirst":false,"stickyFooter":true,"flipbookBreakOut":false,"linkBreakOut":false,"loadByButton":false,"navAlwaysTop":true}, 'embedOptions' : {"hideHeader":false,"hideBanner":false,"hideFooter":false,"hidePrimaryNav":false,"hideSecondaryNav":false,"linkBreakOut":false,"revealBehaviour":"fade"}, 'knownUser' : {"Mailchimp":0,"Hubspot":0,"Eloqua":0,"Marketo":0,"Pardot":0,"Acton":0}, 'eloquaFirstPartyCookies' : 0, 'mapIntegrations' : ["Marketo"], 'integrationsToTrackViews' : ["Marketo"], 'disableUfMetrics' : false, 'pageType' : Hubs.PAGE_TYPE_ITEM, 'bombora' : true, 'analyticsCodes' : ['UA-91807-34'], 'enableDebugger' : false, 'itemPreviewButtonLabel': 'Continue Reading...', 'externalApiUrl': 'https://v2.api.uberflip.com', 'isPreventAnalyticsCollectionEnabled': false, 'privacyGroups': [], });
/* Get uuid - used to pass back to bombora as our main identifier of this visitor */ window.getBomboraUuid = function() { return ''; };
/* Get page id - used to pass back to bombora as the item being viewed */ window.getBomboraUrlId = function(){ var env = 'production'; var $infoDiv = $('#page-type-identifier'); var item = { type : $infoDiv.attr('data-page-type'), collectionId : $infoDiv.attr('data-collection-id'), id : $infoDiv.attr('data-item-id') };
if(item.type === 'PAGE_TYPE_HUB'){ return env + '||' + Hubs.Config.hubId; } else if(item.type === 'PAGE_TYPE_COLLECTION'){ return env + '||' + Hubs.Config.hubId + '||' + item.collectionId; } else if(item.type === 'PAGE_TYPE_ITEM'){ return env + '||' + Hubs.Config.hubId + '||' + item.collectionId + '||' + item.id; } };
// Bombora tracking script (function (w,d,t) { _ml = w._ml || {}; _ml.eid = '52079'; // Uberflip ID -- DO NOT CHANGE _ml.fp = w.getBomboraUuid(); _ml.cid = w.getBomboraUrlId(); _ml.informer = { callback: function () { //call back when profile is loaded //data is loaded in _ml.us }, enable: true }; var s, cd, tag; s = d.getElementsByTagName(t)[0]; cd = new Date(); tag = d.createElement(t); tag.async = 1; tag.src = 'https://ml314.com/tag.aspx?' + cd.getDate() + cd.getMonth(); s.parentNode.insertBefore(tag, s); })(window,document,'script');
})(document,"script","munchkin",300000); } loadMarketoTracking();
function appendDCLink(){ $('.cta').each(function( i ){ var dataCtaId = $(this).attr('data-cta-id'); //Find CTA ID for targeting if (dataCtaId == '306999'){ //the ID of the Link CTA you're targeting var ctaLink = $(this).find('a').prop('href'); // var dcLink = "https://www.digikey.com/en/product-highlight/r/renesas/ra-mcus"; //the redirect on the link you're setting up var concatLink = ctaLink + "?" + dcLink; //concatenation of DC link tracking code and redirection code $(this).find('a').attr('href', concatLink); //append to href of appropriate CTA } else if (dataCtaId == '332336') { // DigiKey August 2020 var ctaLink = $(this).find('a').prop('href'); // var dcLink = "https://www.digikey.com/en/product-highlight/t/toshiba-semi-and-storage/low-power-discrete-semiconductors-for-the-iot"; var concatLink = ctaLink + "?" + dcLink; $(this).find('a').attr('href', concatLink); } else if (dataCtaId == '338033') { // DigiKey September 2020 var ctaLink = $(this).find('a').prop('href'); // var dcLink = "https://www.digikey.com/en/product-highlight/s/sitime/oscillator-selection#osc-type%7CTabs1"; var concatLink = ctaLink + "?" + dcLink; $(this).find('a').attr('href', concatLink); } else if (dataCtaId == '342073') { // DigiKey Oct 2020 var ctaLink = $(this).find('a').prop('href'); // var dcLink = "https://www.digikey.com/en/product-highlight/x/xilinx/zynq-ultrascale-mpsoc-zcu102-evaluation-kit"; var concatLink = ctaLink + "?" + dcLink; $(this).find('a').attr('href', concatLink); } }); }
/* Replace "Learn More" with "Read white paper" only one white paper stream */ function replaceText(selector, text, newText, flags) { var matcher = new RegExp(text, flags); $(selector).each(function () { var $this = $(this); if (!$this.children().length) $this.text($this.text().replace(matcher, newText)); }); }
function sponsoredTiles() { $('li[data-tags*="sponsored"]').addClass('sponsored'); $('.tile.sponsored').each(function(){ var $this = $(this); if($(this).find('.sponsored-label').lengthSponsored'); } }); }
function webcastTiles() { $('li[data-source-stream-id="773047"].tile').addClass('webcast'); $('.tile.webcast').each(function(){ var $this = $(this); if($(this).find('.webcast-label').lengthWebcast'); } }); }
function bloatedTiles() { $('.tile.with-img').each(function(){ var $this = $(this); if(($(this).find('h3.h3like').height()+$(this).find('h4').height())>132) { $(this).addClass('bloated'); } }); }
//data-source-stream-id="424317" function replaceAllText() { replaceText('.tile.single[data-source-stream-id="738160"]>a.view', 'Read Article', 'Read news story', 'g'); //data-source-stream-id="738160" replaceText('.stream-424317 .tile.single>a.view', 'Read Article', 'Read white paper', 'g'); replaceText('.tile.stream-613287>a.view, .tile[data-source-stream-id="613287"]>a.view', 'Read Article', 'Listen to Podcast'); replaceText('.tile.sponsored>a.view', 'Read Article', 'Learn More', 'g'); replaceText('.tile.stream-773047>a.view', 'Read Article', 'Register for Webcast', 'g'); replaceText('.tile.stream-7405615>a.view', 'Read Article', 'REGISTER', 'g'); }
$('html').ajaxStop(replaceAllText);
function onLoadOrChange($this){ sponsoredTiles(); webcastTiles(); bloatedTiles(); appendDCLink();
if($('meta[name="title"][content^="Sponsored:"]').length>0) { $('.level-three').first().addClass('sponsored'); } else if(typeof $this.currentItemTags == 'string' && $this.currentItemTags.length > 0 && $this.currentItemTags.indexOf('sponsored') > -1) { $('.level-three').first().addClass('sponsored'); } $('.level-three.sponsored').prepend('
if(typeof $this.currentItemTags == 'string' && $this.currentItemTags.length > 0 && $this.currentItemTags.indexOf('slide show') > -1) { $.getScript( 'http://cloud2.opensystemsmedia.com/share/JS/jquery-ui-1.12.1-uniqueId.min.js').done(function(){ $.getScript( 'http://cloud2.opensystemsmedia.com/share/JS/waypoints.min.js').done(function(){ var waypoints = $('.entry h2').uniqueId().waypoint({ handler: function(direction) { console.log(this.id+' (h2 hit)'); ga('send', 'pageview', window.location.pathname + '#slide'+this.id); } }) }); }); }
if(Hubs.appInstance.itemType != 'uberflip' && $('.entry iframe[src*="soundcloud"]').length 0 && $('meta[itemprop="image"]').attr('content').length > 11) { //$('.level-three .entry-wrapper').prepend('
var disqus_shortname = 'embedded'; var disqus_identifier = '361239678'; var disqus_url = 'https://www.embedded-computing.com/youtube-videos-embedded/how-to-make-a-raspberry-pi-smart-mirror';
var disqus_config = function () { this.page.url = disqus_url; this.page.identifier = disqus_identifier; };
(function() { var d = document, s = d.createElement('script');
s.src = '//' + disqus_shortname + '.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date()); (d.head || d.body).appendChild(s); })();