When I first saw an LED matrix on Youtube, I knew that I would make one myself someday. There are probably countless different versions on Youtube and on the web but I wanted to make one that stood out from the rest in both aesthetics and functionality. There are some great projects out there that do all sorts of things from games, to displaying messages, pictures, and colored patterns. I want to incorporate as many features I possibly can into this display and that will take time. Thankfully, 80% of this project is all in the programming, which can be done over time, with new features added when I get around to it. The remaining 20% will be a fairly quick and easy build. But first, let’s lay out the design and project plan.
To start, here’s a list of the parts I will be using to build this display.
- 24 x 18 inch shadow box
- 910 WS2812B LEDs
- 20% charcoal colored window tint
- MeanWell 5V 18A power supply
- 16 gauge insulated copper wire
- 22 gauge hookup wire
- ESP32 dev board
- Rocker switch
- Microphone amplifier with auto gain control
- Cable gland
- Custom designed 3D printed parts
LEDs and pixels
As you probably already know, most LED matrix displays are either square or rectangular because that’s the easiest thing to do. I have seen some people use ping pong balls as their light diffusion method, which gives the pixels a round shape. But, I decided to go with simple squares for the retro look.
Instead of attempting to source the materials to build a frame, I decided to use a premade shadowbox from the neighborhood crafts store. It was the largest one I could find that provided enough working space to fit everything inside. The display will contain 910 WS2812B LEDs over 35 columns and 26 rows (35 x 26) with each pixel measuring approximately 16 x 16mm.
Powering the display was something I thought about carefully. The WS2812Bs use approximately 60mA per LED at full brightness of each diode, where each diode uses 20mA of power each. At least, that’s what the spec sheet says. In reality, the LEDs don’t ever seem to get to these numbers. At full brightness, an entire strip of 300 LEDs used approximately 2.7A according to my benchtop power supply. This is exceedingly less than what I expected.
Based on the specifications, I purchased the 18A power supply with the intent of using a maximum of 15A to power the display. This meant that I would be powering the lights at less than half their brightness, which is still pretty bright. However, upon testing the strips out, I noticed they were only drawing 2.7A at full brightness. With 910 LEDs they would draw less than 9A. The power supply is definitely overkill for these purposes, but it also means that it won’t ever be stressed and will remain cool, which is a positive considering it is fanless and will be inside the shadowbox (I do intend to create vents though).
In order to prevent any voltage drop, each row of LEDs will tap into power lines running along either side of the display. These LED strips don’t care which way the power is coming through, which allows the ability to send the 5V power in from one side, while the ground is connected on the other.
All of this will be connected to the 5V18A power supply, which will be plugged into the wall outlet. A rocker switch will be used allow the ability to turn off the display without having to unplug it from the wall, which is useful if that wall outlet is somewhere inconvenient. A cable gland will be used for the power cord to keep it from moving and protect it from stress.
Deciding how to diffuse the LED light lead to a lot of trial and error. Many LED matrices I’ve seen use basic, white paper or some type of frosted glass/acrylic. Personally, I like the look of the frosted glass diffusion over using regular paper. But, I wanted something better. With either of these options, the display still shows white pixels even when the LEDs are off because you can’t turn off white paper or white frosted glass. I wanted the display to look black (or as dark as possible) when it was off. This desire lead to a lot of experimentation.
As I researched how to create a black LED display while diffusing the light properly, I came across a material called black LED diffusion acrylic. It is a specially made acrylic that is cast with diffusion properties that properly diffuse LED light and let its true colors shine through, while looking completely black when the LED is off. There are a few places to purchase this material, but they were sold out and in reality, it was going to be pretty expensive to cover the 24 x 18 inch area of my display. I needed a better way and I tried to find it.
Black PLA – I printed a 0.2mm layer of black PLA in hopes it would be thin enough to diffuse the light and let the color of the LED come through. Unfortunately, even at 0.2mm, it blocked out much of the light and even a bright white looked like a muted brown. Complete failure.
Black tissue paper – Knowing that paper is a popular choice for diffusion, I looked to some tissue paper thinking that it is extra thin to let the light through without effecting its color, yet sufficiently black to give the look I wanted. Unfortunately, much like the black PLA, the light was greatly effected in brightness and color. Another fail. It seems the black fibers of the tissue paper were absorbing too much light.
At this point, I was at a loss. I started testing white diffusion methods that I had available. I did not want to spend money on frosting the glass of the shadowbox if I was going to use a white diffusion method.
White printer paper – Probably the most basic as you can get. The white printer paper diffuses the light well, but maybe a little too well. Brightness is definitely effected a bit, but color is true, which is good.
Bleached white parchment paper – On a whim, I grabbed some parchment paper from the kitchen and gave it a try. I knew it was thinner than printer paper and is much like vellum paper, which is used for tracing. As expected, it let the light through very well while also diffusing the light. So far, it was the top choice over the printer paper.
White PLA – I decided it might be worth a shot to print a thin layer of white PLA. After all, I used white PLA in my sign and the light is diffused well and the colors come through nicely. Much like the sign, a 0.2mm layer of white PLA served as a great diffusion method and for the ease of being able to print it attached to the grid, it became my number one choice.
Despite settling on white PLA as my diffusion method, the look of a black/dark display when the LEDs are off kept nagging at me. I didn’t want my display to look like every other. One night, I had an epiphany. What about window tint? The way regular window tint works, the side with more light is visible while the side with less light is darkened. That is why during the day, window tint looks dark from the outside (the sun is much brighter than the inside of the house) but at night, people can easily see into your home through the tinted windows. I wondered if this would work for me and the only hesitation was whether the tint would effect the brightness and color of the light too much. I figured it would be worth purchasing a cheap roll of consumer grade window tint to try.
I lay the tint over white PLA and gave it a try. I was pleasantly surprised and excited to see that the window tint did exactly what I wanted it to do. When off, the pixels looked dark and when on, the light shone through with true colors and a minimal decrease in brightness. I was able to recreate a similar effect as the black LED diffusion acrylic for a fraction of the cost. Granted, it’s not as pitch black as the specially made acrylic, but it was sufficiently dark to give me the look I wanted.
3D printed parts
Much of the display will be custom 3D printed parts. The grid you see above will be printed from black PLA with a 0.2mm layer of white PLA to diffuse the light. The grid will be 10mm tall in order to provide the best distance to diffuse the light and fill the pixel.
I will also be custom printing some brackets to attach and hold the power supply and ESP32 microcontroller. A vent will also be printed to cover the power supply while allowing it to be exposed to the air for cooling.
As I mentioned at the beginning of the post, I want to incorporate as many features into the display as possible. Obviously, how ever many features I add depends on how much programming I intend to do. So far, these are the features I want this display to have.
- Time, date, weather
- Stopwatch & timer function
- Spectrum analyzer (this is why the microphone amplifier is listed in the parts above)
- Live soccer scores
- Real time stock ticker
- Youtube subscriber count
- Tetris, snake, other simple games with bluetooth control
- Message display with scrolling ability for longer messages
- Light show/animations
- Live drawing via phone app
- Phone app to control all features
- Google Assistant integration to activate different modes
- WiFi software updates to add features
That’s it for now. There could be more in the future, but I think that’s plenty! The display will be controlled via an ESP32 microcontroller, which has much more memory than an Arduino Uno and is much smaller. I’ll be posting again soon with images and hopefully some video of the display build and then additional posts will follow as I add features. Until then, please let me know your thoughts and if you have any additional ideas for features.