Introduction: 2.5D Edge Lighting Pixel LED Cube

About: A Interaction Designer with Industrial Design and EE background. Maker since a kid. Super grateful to new technology and online communities made everything possible!

LEDs are awesome, they are so tiny but bright, colorful but easy to control. Many of us start to know LED since our first lessons of electronics. And my love to LEDs started at the same time. Once I showed a LED demo to my friends at work. A girl said:I love LEDs, I gonna marry to LEDs.(she said that for real :)) I believe many of you share the same love,too.

One LED by itself is cool enough, but by the nature of human kind, we are making LEDs cooler and cooler. LED strips made one spot to a line, Matrix made it a 2D surface, some genius made LED Cubes to light up 3D space(search LED Cube projects on instructable, or check out this video, my favorite. You can even buy a 3 x 3 LED Cube kit in Radioshack for 20 bucks ).

These fancy cubes blew my mind when the first time I saw them. I knew I want to build one instantly. After some online research and messed with radioshack kit for a while. I feel it is not a easy job for me to build a big(at least 6x6x6) single color LED cube, let alone the cool RGB I want. You need pretty good soldering skills to make it work and looks nice. A lot of wiring and complicated coding.

Don't be discouraged by me though, there are good enough tutorials for you to go through. And some practice can make perfection. I just don't have enough time and effort to build this ultimate LED challenge(for me). I just want to build something nice before my girlfriend's birthday(not a whole lot time), as a gift.

Step 1: The Idea

So the goal here for me is, to design something as cool as LED cube, but easier to build, saves time and may be money. I started to do more research about light shows, figured edge lighting is also cool. After some doodling, I got a idea: what if we use a LED matrix and many pieces of clear plastic, to light up a 3D space?

But how could it have the depth of field(the third dimension)? By looking at those edge lighting designs, it seems wherever is cut or sanded will catch the photons. So on the clear parts in each row/column, if they have areas in different height are etched/ sanded, a third dimension is added.

Step 2: Stuff You Need

Adafruit NeoMatrix 8x8

4 x Clear Extruded Acrylic Rectangular Bar, 3/8" Thick, 3/8" Width, 6' Length McMaster

Arduino Uno

470 Ohm resistor

Capacitor 1000 uf

5V 2A Power supply

Female DC Power adapter - 2.1mm jack to screw terminal block

Something to hold all stuff together, wood, cardboard, foam core, or 3D print your housing!

Step 3: Prepare the Bars

Before we deal with the bars, let's do some calculation first. Since I need to order stuff in advance, I don't know the spacing between each single LEDs. Based on the dimension described on adafruit, I calculated the spacing is 71.17mm/8 = 8.896mm = 0.35inch. The closest bar you can get is 3/8 inch thick. So in the end 8 bars is slightly wider than the LED Matrix, but still, every bar is on top of a LED.

Since we are making a 8 x 8 x 8 cube, there need to have 8 3/8 squares on Z axis. 3/8 x 8 = 3. Plus some extra to band them together later. I decided each bar is in 3.5 inch long.

I asked my professional model maker friend Denis about how to achieve what I want. Here's the plan:

  1. Cut bars into piece with a band saw, leave some extra length here.
  2. Use a milling machine and end mill bit to cut the edge flush. It won't be perfect smooth.
  3. Denis suggested me to sand all the edges, but considering there are 8 x 8 = 64 bars, I skipped this step
  4. Polish bars with a polish wheel.
  5. Masking tape the bars, only leave the block area you want lights up later exposed. You can get the best quality if you tape one at a time. I taped one set at a time to save some time.
  6. Bead blast the masked bars.
  7. Repeat!

I bought these bars thinking I can save some time cutting them. But as the project progressing I figured it is still a lot repetitive work. Is there other options?

Next time probably I will try laser cutting them. 3/8 inch thick acrylic might be a little challenging for a hobby laser cutter. But if you can find one, it might save you some time.

Step 4: Wire Them Up

Adafruit has a very good tutorial of its Neopixal products. And they are updating over time. When I started to play with them, they didn't mention there should be a resistor between arduino and the matrix. Thus I fried a couple LEDs. But don't worry, usually it will only fry the very first LED. So I highly recommend you order some replacement LED chips (WS2812S 5050 RGB LED with Integrated Driver Chip) if you know how to desolder SMT components(Or have a friend knows how like I do, thanks Eric).

The connection is actually pretty easy. All Neo pixal products have three pins, +5v, GND and Digit In. An external power is needed though for a NeoMatrix. The above image shows details. Just make sure you have the protection of the capacitor and resistor.

Step 5: Coding Started

After everything connected, you should go download the Neopixel library and run the test code. When it lights up, you will be amazed! I seriously stare it for as long as my eyes can take(they are so bright!). You will see 4 LEDs are off, but don't panic, they are fine, it's all because the test code only defines 60 LEDs. Just change that to 64 .

Then you can download the NeoMatrix Library to let it say "Howdy" to you.

Also, to draw dynamic shapes, you'll need Adafruit GFX library. You can scroll texts, draw each single pixel, lines, rectangles, circles and other more. By using the drawPixel command, you can make customized shapes .

The way I did for my shapes is, I drew what I want in a 8 x 8 grid in Adobe Illustrator first(You can use any 2D software, or draw even on paper first. In this step you design the shapes and make sure you like it, so you don't have to change it later programming which consumes more time). Then define a 2D array in arduino sketch as this:

byte heart[8][8]={

{ 0,0,0,0,0,0,0,0 } ,

{ 0,1,1,0,0,1,1,0 } ,

{ 1,1,1,1,1,1,1,1 } ,

{ 1,1,1,1,1,1,1,1 } ,

{ 1,1,1,1,1,1,1,1 } ,

{ 0,1,1,1,1,1,1,0 } ,

{ 0,0,1,1,1,1,0,0 } ,

{ 0,0,0,1,1,0,0,0 } ,


In this array, 1 stands for a pixel that lights up, and 0 means off. In the void loop(), you can just call

for(int i=0;i<8;i++){

for(int j=0;j<8; j++){


matrix.drawPixel(j, i, RED);





to draw the heart shape.

In the 2D array, you can throw other numbers to represent other colors, and add several other if statements.

I tried to create a 3D array, with the third dimension as color. It is too complicated to type for simple shapes. You can try that if you want to show some really colorful but specific image.

Step 6: Put Together

I 3D printed housing parts and put them together, in this step you can use whatever material around you, card board, wood, foam core. Just make sure all the bars are fixed tightly and secure on top of NeoMatrix

STL files are here:

Step 7: Future Plan

Make some nice graphic binding with music.

Play around with bars layout, what new interaction can you get with different configuration?

At last, thanks for watching! If you gonna make something similar, please let me know. Can't wait to see your light show!

Makerlympics Contest

Runner Up in the
Makerlympics Contest

Supercharged Contest

Participated in the
Supercharged Contest