Introduction: SmartMirror With Backlighting

About: Ik ben Gilles een student bij Howest hogeschool. Ik studeer NMCT

After a long process of thinking I came to the conclusion to build a smart mirror. I have the habit of having an irregular sleep schedule so I wanted this mirror to help and log my waking hours etc. I wanted to keep it simple and implement 3 sensors and ofcourse the backlighting.

I will take you through the process of building my idea.

Supplies

Sensors

  • One Wire Temperature sensor (DS18S20)
  • DHT11 Humidity & Temperature sensor
  • Infrared motion sensor

Other

  • Raspberry Pi 3
  • Two way acrylic mirror.
  • Computer monitor
  • Wood planks
  • Led strip
  • LED strip 120LED/m 5050
  • HDMI Cable
  • Mosfets IRFZ44N
  • Breadboards
  • Wires
  • SD card
  • 4,7K, 1K, 2K Resistors

Step 1: Wiring

This is the wiring with the needed sensors and resistors. We need a 12V powerjack to use this on the breadboard. In this scheme this is on the same breadboard but in reality it is safer to do this on seperate breadboard.

Step 2: Database

Structure

The database can store the data of the 2 sensors that deliver the data. It has an unique ID to identify the measurement together with the value and sensorID. The time of the measurement is also stored. The sensors have an foreign table to identify them in their parent table.

Upload:

We will need to upload this database to the pi but first we have to install MariaDB.

sudo apt install mariadb-server

then:

mysql_secure_installation

Just press enter. Then Y and enter password 2 times.

Just press Y for the whole process.

Then type:

mysql -u root -p

Enter your password for connection.

Then upload the database to the PI and you are good to go.

You can find my SQL database under here.

Step 3: Mirror Building

I used MDF wood to create this mirror. I first created a square to put the mirror on and another square to put the monitor and electronics behind. I attached the mirror with insulation so it could not move anymore. I used woodglue to glue the 2 woos squares together.

I drilled a hole to put the LED strip through to attach it to the side of the mirror. The LED strip is attached with isolation tape.

I painted the mirror for a nice finish. It also blends okay with the tape.

I attached the monitor with 2 way strong tape. Fortunately this was a mistake because you can see the white tape through the mirror. I taped the rest of the back of the mirror with black tape so light could not pass through.

I glued the breadboards and pi to the back of the monitor.

Step 4: Code

I coded the HTML, css and javascript in Visualstudio Code and my backend in Pycharm with Python.

I used a lot of sockets for the live data on my website and a couple of fetches for the measurements each day. When the mirror is running it will display the sensor values on that moment and the local time.

You can find my code here: GitHub Repository

Step 5: Running Mirror on the PI

Screen

To rotate the screen to hang it sideways you need to navigate to:

sudo nano /boot/config.txt

and add the following line at the bottom:

display_rotate=1

Apache

Installing apache webserver:

sudo apt install apache2 -y

Upload all frontend files to /var/www/html/ with filezilla and it will run on the sebserver.

Backend

Autorun the backend in rc.local:

sudo nano /etc/rc.local

Add the following line of code before 'exit 0' but use the location of your backend file:

sudo python /home/gilles/mirror.py

Now the PI is running the webserver and backend on startup.

Run mirror page

Now we want the pi to run the html page of the localhost in fullscreen (our mirror page)

create a script in your wanted path with this code:

#!/bin/bash
sleep 20
DISPLAY=:0 chromium --noerrdialogs --kiosk http://localhost/mirror.html --incognito

Now save the file and navigate to:

sudo nano lxsession/LXDE-pi/autostart

then insert this line of code at the bottom:

@sh script.sh

The mirror will now automatically run on startup and you will see your own smart mirror!

Just surf to the IP address on the screen and you can access the website on your phone, laptop...