Hi I’m Alex and welcome to “Super Make Something.”
Today, we’re building a giant Neopixel LED Mirror using a 3D printing, laser cutting,
and a Raspberry Pi.
Let’s get started!
The Neopixel Mirror is made out of the following components:
1x Raspberry Pi 3 B+ with an SD card 1x Raspberry Pi case
1x Raspberry Pi camera and camera ribbon cable 2x M2 screws
6x wood screws 1x PCB prototype board with associated wiring
1x 3D printed Raspberry Pi camera mount 1x 36 inch by 36 inch wooden backboard
24x Neopixel LED strips with 24 LEDs each 576x LED Covers 3D printed out of clear PLA
1x 3D printed camera lens hood 16x Lasercut mounting grids
4x Pieces of Vinyl Planking 1x 5V 30A power supply
And 1x PC Power cord
I began this project in Solidworks, a computer aided design software package.
I first modeled the unique laser cut mounting grids that would hold all of the 3D printed
LED covers in place.
Like their name suggests, these pieces consist of a piece of wood with square slots that
will be cut out using a laser cutter.
The spacing of each of these slots was based on the LED spacing of the Neopixel strands
that I bought for this project, which have 30 LEDs per meter.
The mirror has 3 unique mounting grid designs — 1 design for mirror’s outer corners,
one design for the remaining border pieces, and one design for the internal sections,
which have a cutout that will allow a 3D printed camera lens hood to slide in between these
pieces to keep light from the LEDs from spilling into the camera’s field of view and blowing
out the image.
After I had completely modeled these pieces, I next modeled the LED covers that would mount
into each of the slots and diffuse the light generated by each Neopixel.
At this point, I began to create a digital assembly of the mirror using the parts I designed
to make sure that everything would fit together correctly.
I next modeled the backing board that would hold everything in place, followed by the
mirror’s picture frame border, and finally inserted digital models of the Raspberry Pi
and Raspberry Pi camera, the latter of which I also used to model the 3D printed camera
lens hood and camera mount that would hold the camera in place on the back board.
After everything looked correct, I saved the LED covers, camera lens hood, and camera mount
as an STL or “stereolithography” file, so that I could 3D print these pieces during
the next step, and then also saved each of the mounting grid designs as a DXF or “Drawing
eXchange Format” file so that I could laser cut these designs later.
It was now time to 3D print the LED covers, camera lens hood, and camera mount.
I began by opening up Cura, a free 3D slicer, and importing each of my models.
After verifying that all of my print settings were correct, I sliced each model, which generated
G-Code instructions that would tell my printer how to print each file.
I then saved the G-Code instructions onto an SD card, transferred these to my printer,
and started the print job.
Because the mirror is made up of a 24x24 grid of LEDs, I needed to print 576 individual
LED covers.
In total, this process took nearly 9 straight days of printing, and consumed almost 3 full
rolls of clear PLA.
If you attempt to build this project yourself, be forewarned that both the printing process,
as well as the support removal process will take a while.
Definitely do not attempt to make this project if you are short on patience or time!
While the LED covers printed, I headed to my basement, where I had set up my brand new
K40 laser cutter.
Like the 3D printer, the laser cutter also runs off of G-Code, which is streamed from
a Raspberry Pi that runs the free “K40 Whisperer” laser cutter software from Scorch Works.
A link to this software can be found in the video description below.
To prepare each of the DXF files for “lazing,” I opened each of the files in Inkscape, and
changed all of the line colors to red in order to let the K40 Whisperer software know that
these sections should be cut out.
After this, I resaved everything as an SVG or "Scalable Vector Graphics" file, and imported
these files into the K40 Whisperer software.
It was now time to get ready to cut out all of the mounting grids.
A few words of warning — laser cutters are extremely dangerous, are a tremendous fire
hazard, and generate a horrible smell as they are cutting through material.
If you've seen William Osman's "Safety Glasses vs CO2 Laser Glasses" video, you'll know that
a laser can do serious damage to your eyes if you don't wear proper eye protection.
If you haven't seen the video, be sure to check it out -- it's both informative and
hilarious.
When operating a laser, be sure to always wear proper eye protection, have a fire extinguisher
nearby, and properly vent your laser cutter's exhaust.
With all of the safety precautions in place, I placed a sheet of 3 mm plywood into my laser
cutter, adjusted the laser power, and started cutting.
The laser cutter's stepper motors now began moving the laser head across the wood, selectively
firing to cut out each of the grid's squares.
After about 3 minutes, the laser had finished cutting out one the panels, so I removed it
from my machine, and repeated this process for the remaining 15 mounting grids.
After this was done, I took all of the panels outside, and painted them with a few layers
of black spray paint.
It was now time to make the LED mirror's backboard, which is made from a 3 foot by 3 foot, half
inch thick piece of plywood that I had cut at my local hardware store.
I began by marking out the board's center lines so that I would know where to drill
a hole for the Raspberry Pi camera.
I next marked out the locations of holes along the edge of the backboard that I would need
to drill in order to feed through all of the Neopixel power and signal wires.
Having a t-square definitely helps, as it will make drawing straight lines and taking
accurate measurements over long distances much easier.
I next propped the board onto some weights to elevate it off the ground, and then drilled
quarter inch holes at each of the locations that I had marked out in the previous step.
I next laid out all of the grids on the board to help me align everything correctly, and
then marked several key locations on the backboard using a red sharpie.
Finally, I again used my t-square to draw a straight line through each of the grid rows
on the backboard, which would allow me to place the Neopixel strips into the correct
locations during the next step.
This step is important, because it will make sure that each of the LEDs are located in
the middle of each LED cover, which allows the light to shine through each of the covers
evenly.
It was now time to attach the Neopixel strips to the backboard.
The project uses a total of 576 Neopixel LEDs to create a 24 by 24 grid.
I therefore needed to buy four 5 meter rolls of LEDs, each of which contained 150 LEDs
per roll.
After verifying that the spacing I had marked out earlier was correct, I first cut a row
containing 24 LEDs from the first roll using a pair of scissors.
I then peeled off the protective paper to expose the adhesive on the back of the strand,
and the carefully pressed it against the backboard.
I then repeated this step for each of the remaining 23 rows.
The solder pads of the first and last Neopixel in each roll were covered with heat shrink
tubing to act as insulation and provide some strain relief.
Because I would need to daisy chain all of these strands together, I removed this tubing
by carefully cutting it with an exacto knife.
It was now time to solder the LEDs.
Because there would be a significant voltage drop if all of the LED rows were powered in
series, I first connected the 5V and ground rail of each row in parallel using a set of
jumpers.
To make programming easier, I did connect all of the data lines in series, which required
me to run the data wire between Neopixel strands behind the mirror through each of the wiring
holes I had drilled previously.
To do this, I used individual wires from a long ribbon cable, since these were both very
thin and could be cut to the exact length that I needed them to be.
After everything was soldered together, I taped the data wires to the backboard to get
rid of any extra slack, and got ready to power up the LEDs for the first time.
Because each Neopixel can theoretically draw 60mA of current at full brightness, I chose
to power the mirror using an external 5V 30A power supply that I had purchased online.
I began by cutting the end off of a standard power cable, and used wire stripper to expose
the wires in each of the individual cables in the cord.
I then connected the wires to the power supply's screw terminals as shown on screen.
If you end up building this project yourself, please ensure that you are connecting the
correct wires to the correct screw terminals!
I then connected two jumper wires to the GND and 5V lines to the power supply's DC output
terminals.
To verify that everything was wired correctly, I next used a solderless breadboard to connect
the LEDs and an Arduino microcontroller together as shown.
The Arduino was previously programmed with a test program to light up each of the individual
LEDs.
To learn more about Arduino programming, please be sure to check out my other projects on
the "Electronics" playlist linked below.
A link to this Arduino test code can also be found in the video description.
It was now time to plug in the power supply to see if everything worked.
After inserting the power supply's cord into a surge protector and flicking on the switch,
the LEDs slowly lit up indicating that everything was programmed correctly!
At this point, all of the mirror's parts had finished printing, so I began to glue in all
of the LED covers into the mounting grid slots using superglue.
To do this, I placed four drops of glue into the corners of each slot, and then gently
pressed in each LED cover.
This process can take a while, so be sure to work in a well ventilated area, as the
superglue gives off a slight odor that will definitely get to you as you are gluing in
all 576 covers.
Once all of the covers were glued in place, it was time to attach the assembled grids
to the backboard.
For this, I used hot glue, as it is both extremely viscous and also sets very quickly.
I kept the LEDs on during the gluing process, which would allow me to make sure that everything
was aligned correctly.
Comparing the bare LEDs to the other LEDs shows that the printed covers did a great
job at diffusing the light, making the images on the mirror much easier to see.
To make everything look a bit prettier, I next headed to my garage, where I used a mitre
saw to cut 4 pieces of vinyl planking that I would use for the mirror's frame.
These pieces were designed to look like stained wood, which saved me an extra paint step during
the assembly process.
After all of the framing pieces were cut, I attached some wooden squares that I had
left over from cutting out the mounting grid to the back of the vinyl planks.
These squares served as spacers to make sure that the frame would sit at the correct height.
After this, I glued the frame to the backboard using a bit of wood glue.
The final mechanical assembly step was to attach the Raspberry Pi, camera, and camera
lens hood to the backboard.
I began by gluing the lens hood into the slot on the front face of the mirror using a bit
of superglue.
While this dried, I attached the Raspberry Pi camera module to the 3D printed camera
mount using 2 M2 screws.
I next flipped the backboard over again, and used 4 wood screws to attach the camera to
the backboard, so that the lens pointed through the camera hole and lens hood.
After this, I attached a Raspberry Pi case that I had bought online directly underneath
the camera mount using 2 more wood screws, and then covered these screws with Kapton
tape to make sure that the screw heads would not accidentally short out the Pi.
Once the case was attached, I placed the Raspberry Pi into the case, and then added the case's
top cover for some additional protection, after which I connected the Pi to the camera
using the onboard connector and a Raspberry Pi camera ribbon cable.
I next connected jumper wires to the Raspberry Pi board and then used PCB prototyping board
to wire everything together as shown onscreen.
The connections on this board were again covered with a bit of Kapton tape, and the PCB was
attached to the backboard using more hot glue.
Finally, I used a braided cable sleeve to bundle the power and ground connections coming
into the PCB together to keep everything nice and neat, after which I attached these wires
to the DC terminals in the power supply to complete the mirror assembly!
The final step was to program the Raspberry Pi.
For this, I first installed the Raspbian operating system on an SD card and set up the Pi to
be accessible via remote desktop.
Please check out my "Raspberry Pi Setup + WiFi Remote Desktop Access" video linked below
for more details about this process.
Once the Pi was up and running and I had connected via remote desktop, I opened up the terminal
and typed in sudo raspi-config, which opening up the Raspberry Pi Software Configuration
Tool.
There, I proceeded to Raspberry Pi Configuration menu and ensured that the Camera, SSH, VNC,
SPI, I2C, Serial, 1-Wire, and Remote GPIO options were all enabled.
At the time of making this video, the Raspberry Pi's built-in Broadcom sound chip interferes
with the Neopixel library, and causes it to work incorrectly.
To get around this, I next disabled the sound chip through the console terminal by blacklisting
the soundcard.
To do this, I first created a new file called "alsa-blacklist.conf" on the desktop and added
to line "blacklist snd_bcm2835" to it.
After this, I again opened up the terminal and entered the command "gksudo," which opened
up a dialog box prompting me to run a program.
With the "As user: root" option selected, I next typed in "pcmanfm," which brought up
a file browser with special edit permissions of the Raspberry Pi's low-level directories.
In this file browser, I navigated to the "etc/modprobe.d" folder, and copied the configuration file
I had just created into it.
After this, deleted to configuration file from my desktop, and rebooted the pi by typing
"sudo reboot" into the terminal, which caused the Raspberry Pi to restart.
During my next login, I then noted that an "X" was present over the volume icon in the
Raspberry Pi's taskbar, indicating that the soundcard had been successfully disabled.
With the soundcard disabled, I next returned to the terminal to install the required libraries
to control Neopixel LEDs from the Raspberry Pi through Python.
I did this by typing in the commands shown onscreen and hitting enter.
Finally, I installed the last required software package, called "picamera," which allows for
individual pixels of incoming Raspberry Pi camera images to be accessed and manipulated
via Python.
To do this, I typed in the command shown onscreen, which grabbed the Python 3 version of the
software package and installed it on my system.
With the install complete, it was finally time to run the Neopixel mirror's Python code.
A link to this code can be found in the video description below, and works as follows:
After initializing all of the code's variables and fixing the camera's parameters, the code
grabs a grayscale image, and extracts a 24x24 pixel region of interest from it.
At this point, the image is composed of a red, green, and blue, channel, but since the
image is grayscale, all of these channels contain the same information.
Therefore, the code next grabs one of these channels, and reshapes the 24x24 pixel array
into a 1x576 element vector, where each element corresponds to a pixel in the mirror's Neopixel
strand.
The code then assigns these values to one of the color channels in a Neopixel array,
displays the image, which causes the Neopixels to light up, and then clears the camera buffer
to get ready to grab the next image.
All of these operations occur in a while loop, which runs indefinitely until the user terminates
the script by typing CTRL+C into the Python console.
To run the code, I opened up a terminal, navigated to the directory containing the code using
the cd command, and then typed
sudo python3 neopixelMirror.py, which is the name of the script that controls the Neopixel
LED mirror.
At this point, it was time to place a sticker onto the frame, and head to the Great Lakes
Science Center in downtown Cleveland for the 2019 Cleveland Maker Faire!
There, the mirror ran continuously for nearly 10 hours without any hiccups, and delighted
everyone that walked past it.
In case you're here because you saw the Neopixel Mirror in person at the event, thanks for
checking out my channel!
If this is your first time here, please consider subscribing to help Super Make Something reach
a larger audience!
Overall, the event was a huge success and I now have a digital display piece that I
can hang in my office or take to future Maker Faires!
In addition to showing a livestream of your reflection, the LED mirror can also be used
as a digital billboard to show pictures or other animations.
A link to the code to do all of this can be found in the video description below.
A big thank you to everyone who came out to the 2019 Cleveland Maker Faire to see this
project in person.
If you enjoyed this video and learned something new, please consider giving this video a like,
sharing it with your friends, and subscribing to my channel.
Also be sure to hit the bell icon to be notified when I upload my latest video.
Your support helps Super Make Something reach a larger audience.
In case you're interested in building your own Neopixel mirror, a bill of materials and
a list of all of the tools I used can be found in the video description below.
Well, that's all there is to this episode!
Thanks for watching!
Now go Super Make Something.