Introduction: "Fiber Optic" LED Matrix

About: Projects in light, music, and electronics. Find them all on my site:

In this project, I created a "fiber optic" LED matrix using WS2801 LED strip and glue sticks. The light displays have a different look than similar LED cubes and a few advantages. First, you can't see the actual LEDs in the display because the glue sticks guide the light away from the LEDs. Second, the device requires much fewer LEDs to make up the volume. Because the top and bottom have different LED strips, the fiber optic cables can take on two different colors that mix in the center. There are tons of different color displays that can be achieved with the device. I also added a button and knob for controlling the speed, color, and type of light display. In this instructable, I will go over the design, assembly, and code for building your own fiber optic LED matrix. Here we go!

Step 1: Supply List


1. WS2801 or WS2811 pixel LED strip (128 LEDs) -

2. Arduino Nano -

3. 5mm thick wood

4. 5mm plexiglass -

5. 64 glue sticks - the transparency really matters for getting this to work. I got some feedback that the Dewalt ones were too yellow when purchased online. I had issues with consistency during this project. Maybe Arrow gluesticks would work better, but make sure to check out the gluesticks in person before buying. The more transparent looking, the better.

6. Push button -

7. 10k Potentiometer -

8. Alitove LED power strip -

9. ON/OFF switch -

10. 5.5mmx2.1mm DC Power Jack -

11. M3 x 12 bolts

12. Wood glue

13. Electrical tape

14. Wire wrap wire


1. Hot glue gun

2. Laser cutter

3. M6 allen wrench

4. 3D printer

5. Soldering iron

6. Scissors

7. Wire wrap tool

Step 2: System Overview

The device consists of two 64 pixel LED strips that zigzag along the top and bottom. Data for each LED strip is controlled by separate digital output channels of the Arduino (D2 and D3). The potentiometer is connected to the analog input channel A0 and the push button is connected to digital pin D4. At the back of the device is a power jack and switch. The USB jack of the Arduino is also exposed so new programs can be uploaded to the device.

The light exits the LED and into the glue stick. Much of the light is "trapped" inside the glue stick because of scattering in the glue stick, which makes it act a little like a fiber optic cable. Glue sticks aren't the best material for fiber optic cables because they scatter the light a lot, making them more like a diffuser. Here is a nice video on using water as a fiber optic cable.

Step 3: Cutting the Chassis

I designed the chassis in Fusion 360 so it could be cut using a laser cutter. The top and bottom chassis are finger joint boxes. I wanted to hide these joints and have the plexiglass flush with the wood, so I added flat slats on the outside of the finger joint boxes. All the electronics are housed in the bottom portion of the device, and a cable is run down from the top to connect the top LED strip and Arduino. The LEDs are mounted into a 64 hole sheet of wood. A similar sheet is placed over the LEDs to hide them and guide the glue sticks.

Here is a link to the Fusion 360 file:

Step 4: Testing Fiber Optic Gluesticks

Before attaching all the glue sticks, I tested a single glue stick with one LED attached at either end. The data signal was generated with an Arduino. In the above photos, you can see how the color from either end of the glue stick merge in the middle. I suggest running this test to make sure you are excited about the effect and want to proceed. I realized I wanted to use smaller glue sticks after this test because the light didn't propagate down the glue stick as far as I initially thought.

Step 5: LED and Gluestick Mounting

After cutting the chassis, I cut 64 glue sticks to about 17cm. To make sure this length was correct, I assembled part of the chassis with the plexiglass and measured the length required so the glue stick would fit over the section.

NOTE: The glue stick length is really important. If it is too short, then you won't be able to attach the LEDs. If it is too long, then the glue stick will buckle when you attach the plexiglass.

I then placed the glue stick through all four sheets of wood with holes (see above). I pressed the hot glue gun into the glue stick to melt it and make a cone for inserting the LED. I quickly pulled out the hot glue gun tip and pressed the LED into the glue stick. The glue stick then hardened around the LED. I added one row of glue sticks at a time so it was easier to reach them with the hot glue gun. The procedure was repeated for the top and bottom LED strips.

Once they were all glued, I slid the wood sheet apart and pressed the LEDs into place on only one side. I soldered cables for 5V, Gnd, and data to the LED strip and ran the cables through the small hole in the center of the wood sheet. These cables were connected to the Arduino later.

Step 6: Front and Rear Panel Assembly

I pushed the ON/OFF switch and power cable jack into the rear panel, and the pushbutton and potentiometer into the front panel. To secure the Arduino in the device, I designed and 3D printed a mount (STL file attached here). The Arduino and two M3 nuts slide into the mount. I then soldered all the electrical components according to the diagram shown in the System Overview step of this instructable using wire wrap wire. The 5V, Gnd, and data pin from the two LED strips were also connected at this point.

Step 7: Base Assembly

The finger joint walls of the bases were then connected. Because of the snug fit, no glue was required for these joints. Above you can see how the 64 hole sheets of wood fit into the finger joint walls. There are rectangular holes in the finger joint walls so the cables and components on the panels can go through.

The plexiglass walls were then mounted with M3 screws that drive into the pilot holes in the finger joint base. The plexiglass was mounted at this point to make sure the flat edge panels were aligned. I added wood glue onto the face of the finger joint base and attached the panels, making sure the edge of the wood matched the plexiglass.

Step 8: Mounting Top and Bottom Cover

I wanted to be able to remove the top and bottom cover of the device, so I added corner pieces with pilot holes to drive a bolt into place. These corner pieces were adhered to the finger joint base with hot glue. I then pushed the top panel into place and screwed it down with bolts.

NOTE: My design didn't give much clearance for the LEDs on the top, so it may be good to edit the laser cutting file if you plan to build this device on your own.

Step 9: Coding the Fiber Optic LED Matrix

Attached is the code I wrote for controlling the device.

Data pin for LED strip 1: D2

Data pin for LED strip 2: D3

Push button: D4

Potentiometer: A0

The code tells the Arduino to read the inputs from the pushbutton and potentiometer. Then it updates the light pattern accordingly. The pushbutton is for switching the pattern, and the potentiometer changes the speed or the color of the display. I am exploring the FastLED library for the first time and I am really amazed by the light patterns one can make using it. I will definitely be using it for future projects.

Thanks for checking out my instructable!

Faux-Real Contest

Runner Up in the
Faux-Real Contest