I love LED pixels: bright, easy to control, cheap and versatile. My last project was Ambilight for TV but overall I’m just in love with smart lighting . Today we will turn them into a large pixel display that can be hung on the wall of your office; either serve a useful purpose or just look incredibly beautiful.
This is a relatively simple project that takes time to create, but can be a little tricky when connecting LED strands. The basic idea is to lay strips of LED pixels in a snake pattern on the back of the photo frame. The front will be frozen to diffuse the light.
From there it’s basically a matter of which software to use, depending on your needs — I’ll start with some demo code and pointers and then get back to the software aspect in the next article when we figure out how to extract information like notifications . and stock prices on display.
Step 0: You will need
- 10m strip (sold in two 5m coils) of LED pixels — I used the WS2812B because they are cheap. You can also buy double density strips at 60 leds/meter if you want higher resolution.
- 5V 10A power supply. The model I used draws 240VAC on some of the screw terminals. If you want complete security, please purchase the included model.
- Arduino UNO.
- Numerous lengths of thick wire; I used scraps from an old computer power supply.
- Ikea RIBBA deep photo frame, 50cm x 50cm.
- Glass glaze and white paint.
The total cost must be less than $100. As for tools, you will also need:
- Soldering iron and solder
- hot glue gun
- Knife or scissors
- Wire stripper
Be sure to check out our Electronics Skills for Beginners. Electronics for guide first!
Step 1: do the math
If you bought the same Ikea 50 cm x 50 cm photo frame and LED strands as mine, you will be able to install 15 strands of 15 LEDs. However, nothing prevents you from using a frame of a different size. Each LED is spaced about an inch apart, so I was aiming for displays that are about square inches — yes, that’s it. 1 DPI . Not exactly Retina graphics.
Do the math and draw some guide lines based on the frame. Measure twice and double check: I must have left a little difference between the lines, because by the time it came to laying everything out, I realized that I could only fit 14 strands out of 15 LEDs. It doesn’t matter, the software is easy to adjust for different number of pixels with different line length and number of lines. Go ahead and cut your LEDs to the appropriate length. Unfortunately, I found that 15 pixels per strand exactly matched the solder joints on one of my drums, so I had to desolder them. On the plus side, at least they were pre-soldered.
Step 2: freeze the glass
To help diffuse the light from the LEDs, I decided to use some frosted glass on both sides. Do this outdoors as the fumes are dangerous and try to spray as evenly as possible. Glaze wears surprisingly hard after drying, but first you need to ensure an even coating and avoid scratches at all costs.
While you’re outside, spray the back of the photo frame with white — this will reflect the LED light back. We will not be using a white cardboard photo frame. Cut off one of the corners for the power and signal wires.
Step 3: Attach the LEDs to the Board
Use strong glue or superglue. I tried with double sided tape but found that it slipped off after a few weeks; A hot glue gun is even worse for this when both sides are non-porous. Precise positioning shouldn’t be a big deal if you purchased strands encased in a rubber case — they can move freely inside it to move around.
Remember that the signal will circulate from beginning to end, and that there is a specific direction for each circuit. Lay one with the arrow pointing to the right, then the next thread going to the left and repeat. Double check it before you glue them!
Step 4: Soldering
To connect each core, you will need 3 lengths of wire of a slightly different length. In each case, you will be connecting the two inner spacers with the shortest length of wire; then the middle two; then the outer two with the longest length. The inner panel will alternate between the +5V line and the GND line, depending on which side of the frame you are currently working on.
Make sure the pads and wire are pre-soldered. This is the most time consuming part of the project, but it is very important that you do not rush and double check the correct lines!
Step 5: Pin all the strands
Finally, if you used the power and input wires that were attached to your filament, you may find that the constant movement around the board has released the first filament. I decided to drill two small holes and pass through a white cable tie to secure this part. If you are having trouble getting a strong glue, you may want to consider this to secure all threads at both ends.
Step 6 Check Wiring
The wiring diagram is simple: pin 6 on the Arduino is used as a signal pin to drive the LEDs; while the 5V power to the LEDs must come directly from an external power supply. Connect a common ground wire between the core, your Arduino, and the power supply. Do not attempt to connect power directly from your Arduino or connect a 5V power supply directly to the Arduino when USB is connected (as it would be for loading test code).
Download and add the Adafruit NeoPixel library to your Arduino libraries folder, then start Arduino. Perform an initial circuit test using the sample circuit test code included in the library. Adjust the number of LEDs you have in the first parameter of the next line (change the number 60 to that many):
Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800);
If the animation stops at a certain line, turn it off immediately and check the wiring. You either got a strand in the wrong direction; wires intersect; or you have accidentally soldered +5V to GND.
Step 7: Frame
Since I’m using a deeper notch than the frame will allow, I first used a hot glue gun to glue the glass to the frame. I then added a few short pieces of rubber wrap around the outer edge of the frame to create the necessary depth before putting the LEDs back in. After a final check of the LEDs, I again used the hot glue gun to secure everything in place.
You can also cut a small notch in the corner of the frame to accommodate a thicker cable.
That’s about it in terms of building a real display, although you’ll probably want to hide the power supply and Arduino in the project box. The rest depends on the software.
UPDATE: Unfortunately, the site hosting the Glediator software has been down for a while. If you know where to find a copy of the PC firmware and software, please let us know in the comments so we can update this guide.
For parties or use in a professional club setting, SolderLab.de’s Glediator is the king of LED matrix control capable of driving up to 512 WS2812/NeoPixels at 24 fps. It lets you create live or pre-recorded LED animation mixes, and can even add GIFs (yes, I’m looking at you, Nyan Cat); and just like the DJ software, it includes a fader for smooth fading between animations.
To get started with the Glediator, upload this firmware to the Arduino UNO and make sure the signal cable is connected to pin 6. Don’t forget to adjust the variable that shows how many LEDs you have.
In running Glediator open options and change matrix size and conclusion . Adjust pixel order, if your layout is different, but unfortunately there is very little documentation for this step, so it’s mostly trial and error. If your output doesn’t match what’s displayed on the screen, try a different option. HS_BL worked for me, which I suspect means «horizontal angle starting from bottom to top».
Glediator is a pro-level app, so while I may talk about it in the future, I’ll leave you to explore the interface and play around for now. Try loading a different animation on the left and right, and then move the fader between them; or you’ll find a pre-made sequence playlist on the far right, shown in the demo video above.
Adafruit NeoMatrix and GFX Library
Adafruit has released an amazingly useful library for working with these pixel matrices. The first is called the Adafruit GFX library, originally designed to work with TFTs and LCDs; the NeoMatrix library is a modification that makes all functions work with NeoPixel LED matrices. Once your matrix is defined, this opens up a huge range of easy-to-use functions, such as outputting text or displaying a bitmap sprite.