Fiber Optic Matrix Display

48,106

465

27

Introduction: Fiber Optic Matrix Display

Behold! This is a 35x7 RGB matrix display powered by a Raspberry Pi Pico and a bunch of WS2812B LEDs (Neopixels). I've never see anything quite like it on the internet before, hopefully I'm the first!

The display is a bit absurd, as it takes a much larger grid of LEDs (64 square inches) and condenses them down to a much smaller size (1.5 square inches).

In this instructable I will discuss how I constructed this and provide you with everything you need to make one of your own, but I encourage you to take this concept and come up with your own design.


Supplies

They key ingredients that make this work are:

The rest of the materials are up to you - choose whatever is best in your case for availability/cost/ease of manufacture. Many of the parts could be 3d printed, cut on a CNC mill or router, laser cut, or even made the old fashioned way with hand tools.

The one critical part that might dictate what material you use is the main display face where the fibers are condensed together; in this part there are a large number of small holes that are very close together:

  • If you're drilling, the material should be sturdy enough not to deform adjacent holes
  • FDM printing may give undersized or non-round holes
  • Laser cutting may be a good fit, but be aware of the taper for your focal length
  • Resin printing is a good bet, but you still need to dial in the final hole size - drilling the resin after will probably shatter or break into adjacent holes

Step 1: Design Files

This design is made up of mostly flat parts in a big sandwich. Because of this, there are no strict thickness requirements, in fact in the whole design the only critical dimension is the spacing of the LEDs in the array because we can't change them. Everything else is up to you and should be apparent when we look at what each part does.


3D models: A STEP file is attached. Instructables doesn't support ZIP or IGES files, so the original solidworks model and can be found here: https://github.com/elliotmade/Fiber-Optic-Matrix-Display/tree/main/3D%20Model

DXF flat files: There is a file for each of the flat parts -

  • Back plate - this is just for structure, it makes room for some electronics to be tucked in, but it could be omitted. M3 tapped holes in this part.
  • Middle plate - this supports the back of the LED matrix
  • Gasket - this keeps the light from one LED separate from it's neighbors
  • Front plate - this holds each fiber up to each LED
  • Main display grid - this is the smaller grid that brings all of the fibers together and forms the face of the display

Other stuff:

  • Two posts that hold the display grid to the front plate. They are drilled and tapped for an M3 screw at both ends
  • Eight spacers that go between the back and middle plates
  • M3 screws. There are 8 holding the sandwich together, and four holding the posts on. Choose lengths or diameters that suit you. Use a nut on the back plate instead of the tapped holes if you prefer.

Step 2: Make the Flat Parts

I made each of these parts out of a different material, just for fun.

  • Front plate: This is a black plastic, maybe polyethylene, that I found in my pile. The important factors on this are:
  • A) the holes should be a tight fit for the PMMA fiber, in this case I used a 1.5mm drill for 1.5mm fiber and the fit was good. They should also be square to the face.
  • B) the hole spacing should be fairly accurate to match the LED array, so that the light couples to the fiber
  • C) the thickness should be enough to keep the fiber aligned - if it is too thin it might go through at an angle
  • Gasket: This is made of EVA foam, laser cut. I chose foam because the LED matrix has some surface mount capacitors on it, and the foam will squish down and make a nice light-tight seal even on the bumpy surface. The holes don't necessarily need to be square, you could make this with a hammer and punch if you wanted.
  • Middle plate: This is laser cut acrylic. Any material is fine, but non-conductive is a good idea due to the electrical connections on the back of the LED array in case of accidental contact.
  • Back plate: This is a rusty mild steel 1/8 plate. This part isn't strictly required, any material should do the trick. The small holes are tapped M3, but could easily be thru holes to use with a nut instead.

Step 3: Make the Fun Parts

The front plate is the most difficult part to make. I tried to get the fibers as close as I thought I could get away with, and in order for that to work I needed a bunch of holes that were drilled very straight and at a very consistent spacing. CNC was a great way to achieve this, but a manual mill or drill press with an X/Y table could also work. Alternatively, choose a material that can be laser cut or have a try at 3d printing. The fibers are held in mainly by friction, so a close fit is important. I used a carbide PCB drill, and broke some along the way. This probably wasn't the best choice, but I was able to rescue the part.

The two posts are some steel round rod, but you could make them from wood, plastic, bamboo, or whatever makes you happy.

The small spacers are aluminum, just sections cut off of a rod for IKEA blinds (I think). No special requirements, just try to have them all the same length.

Step 4: Slap It Together

If you've followed along this far, hopefully this part is pretty straightforward. You'll notice that the posts holding the grid to the front plate actually take up two of the LED positions from the array - I chose to do this and figured I would just account for those two blank spots in the code, which worked out OK. This also means that you don't have to pay any particular care to which hole on the grid you wire up to which hole on the front plate. In the code there is a mapping table that you can plug some numbers in to that keeps it all aligned.

Threading the PMMA fibers into all the holes was hard on the fingers. I found that the roll of PMMA I had was pretty inconsistent in diameter, about 1/5 of it was unusable and wouldn't fit through the holes. I cut the fiber with regular flush cutters, threaded both ends into hole, then moved on to the next. Try to work in a pattern that gives you the most access to the next set of holes. Also try to avoid scratching or kinking the fibers, this will make a defect that lets light escape into a neighboring fiber.

Don't worry about extra length sticking out from either end - trim this off flush on the display end, and it doesn't have to be perfectly flush on the front plate/LED side. Do wear safety glasses, the plastic breaks in a way that shoots little bullets all over, directly at your eyes. Finally use a flame and run over the ends of all the fibers, this will round over the cut edge and polish it somewhat. It will also form a small ball on the end which helps it stay put, but if your holes are close then friction should be enough.

Step 5: Wiring

For this project the wiring is very simple. On the Raspberry Pi Pico:

  1. Connect GND to the GND wire of the LED array
  2. Connect 5V to the 5V wire of the LED array
  3. Connect GP15 to the DIN wire of the LED array.

This thing can be powered directly from the onboard USB of the Pico, but if you want to run high brightness or a lot of full white you may max out a USB charger or port. It all will still work, but you will see some color changes of the pixels when you hit the current limit. In that case, you can power it externally with the additional wires on the array, just hook them up to a higher amperage 5v supply.

In the photos you'll see that I used a breakout board with a couple buttons and a clock module on it - this isn't required, I'm using it because I had made some from a previous project.

Step 6: Code

I used Circuitpython for this project - it is a very easy way to get started working with microcontrollers, programming it is as easy as editing a text file and saving it to the device (because it acts as a USB storage device, the files are right there on it). Follow the steps to get started here: https://learn.adafruit.com/getting-started-with-raspberry-pi-pico-circuitpython

  1. Download the Adafruit Circuitpython bundle: https://circuitpython.org/libraries
  2. Install Circuitpython to the Pico
  3. Download the attached "code.py" file here, or get the latest version from github here: https://github.com/elliotmade/Fiber-Optic-Matrix-Display
  4. Put a copy of "code.py" in the root of the pico device
  5. Create a folder called "lib" on the Pico, and save a copy of "neopixel.mpy" from the bundle here
  6. Done

With Circuipython, the code files can be edited directly on the device with a text editor. Saving the file or modifying any file on the device will cause it to reboot and it will immediately start running the new code. That's all there is to it!

In my code there are a handful of examples, and a demo that does everything shown in the videos here. It's a bit messy, so it's going to be up to you to customize and get it to do what you want.

I mentioned earlier that it didn't matter how you wired up the LEDs to the display - this is the part where you account for that. One of the images above is a mapping table. The index for this list starts at 0, and this is the position of a particular LED in the LED array. The numbers you see are the position of the fiber in your grid. Example: if you connected the first LED in the array to the third position in your grid, you would put a "2" (start counting at 0 instead of 1) in the first position (index 0) of the list. To facilitate this, you can adjust the code so that you can light up the grid one LED at a time to validate as you make updates.

Step 7: Enjoy

If you've made it this far, you should have a visually unique and appealing thing.

There may be some slight variations in color from pixel to pixel, this is due to how the light from the LED couples to the fiber - in this case the LED is actually made of 3 separate LEDs, and the diameter of the fiber is actually smaller than the LED, so depending on the alignment you may get more red, green, or blue. This could be improved by increasing the distance from the fiber end to the LED, using a bigger fiber, or smaller LEDs. Or just leave it alone, because it still looks cool!

It is also bright, too bright! For one, it makes it very difficult to photograph, and secondly the intensity is very high if your viewing the fibers straight on. If you don't like that, consider adding a diffuser to the front of the grid - something translucent and white will cut down on the brightness and still give great color. For my photos and videos I have the brightness set to 10% of the maximum

While there should be enough in this instructable to reproduce what I've done, my hope was to convey the concept more than the exact instructions. What else can you do with this? Something wearable? A very small, high intensity display? A non-magnetic display to communicate with patients in an MRI machine, where the electronics are far away from the display?

Make it Glow Contest

First Prize in the
Make it Glow Contest

2 People Made This Project!

Recommendations

  • Science Fair Challenge

    Science Fair Challenge
  • Tinkercad to Fusion 360 Challenge

    Tinkercad to Fusion 360 Challenge
  • Woodworking Contest

    Woodworking Contest

27 Comments

0
feiticeir0
feiticeir0

2 months ago on Step 7

What a freaking awesome project. It look something from the future or that could be featured in a sci-fi movie or steampunk like style. At first glance, it reminded me of the Borg, from Star Trek.
Really love it.
I thing I'll have a try at it. The front plate will be a challenge, but I'll have to try 3D printing it.
Cheers and great project.

0
blanchloup22
blanchloup22

Reply 7 weeks ago

I 3d printed all of it and it has worked out great

0
patrick-s
patrick-s

Question 2 months ago

I have built one and it looks so cool already, I will post pictures later, but: The top left LED (on the front 7x35 matrix index 0, most top left) never seems to light up. I noticed it is in the animated picture on the top of the page as well with your build... Never lights up… Why is that? I try to find it in the code but it is too hard for me I think. Is there something off by one somewhere? I would love to find it and make it light up :)

0
elliotmade
elliotmade

Answer 2 months ago

Hey good catch, I did not even see that! You're right, it was an off-by-one thing. I will update the code on github, or you can make the change in the screenshot I attached. Move line 862 down about 6 lines to below the if statements in the tick function and it should do the trick!

animation fix.PNG
0
patrick-s
patrick-s

Reply 2 months ago

Wow thank you so much. I might never have found it :) I will upload a video and picture of my make now as well :)

0
elliotmade
elliotmade

Reply 2 months ago

I just updated the code on github once again - I added support for the real time clock and three buttons so it can tell time for real now. You can see the pins I used in the code, or later I will update the instructions here. Cheers!

0
patrick-s
patrick-s

Reply 2 months ago

time to pull the changes then :) i will show mine at the end of the month at a local openLab in the microcontroller theme section. it is an open lab for people from 12-18 to learn about electronics, hacking, diy, code, etc. // shall i rather link to this instructable or to your homepage? there will be a presentation display with a qr code probably to look it up.

0
elliotmade
elliotmade

Reply 2 months ago

Awesome! You can link here, there's more content on instructables than there is on my homepage at the moment.

0
ZacWolf
ZacWolf

2 months ago

OMG, 21st century string art! I love it! Someone, please make one that's a sailboat, and the hull is the "screen". I've got too much going on right now or I would totally do it!

0
patrick-s
patrick-s

Tip 2 months ago

Hey everyone who is building this or already has built one... if you are considering how to power it: it can be run for hours from a USB powerbank. Just for fun I plugged the matrix display into a portable USB powerbank this morning and forgot about it while going to town on some chores. 2 hours later I walked by the display and it was still happily displaying away. And it just used up about 25% of the charge of the 20.000mAh Powerbank (that is very old, probably it has way less usable capacity in reality). That's amazing news if you want to hang it somewhere and don't want any cable around. I even reconsider printing bigger spacers and accomodate a battery right into the device. Could incorporate a button to display something for maybe 2 minutes when pressed and then switch off again...

tl;dr:
The low brightness setting can be sustained quite long by a power bank. Try it.

ledmatrix_powerbank.jpeg
0
patrick-s
patrick-s

Reply 2 months ago

It's still running with 3 out of 4 lights on (so still around 25% or less charge consumed...). Amazing :D

0
santoshnarkar
santoshnarkar

2 months ago

Beautiful project Thank you for sharing

0
JonathonB4
JonathonB4

Question 2 months ago

Beautiful project. You said to use end glow fiber. In some of the images, it looks like there is light emitted from the side. However, I see no light leak through the edges of the fiber in the image with the pac man ghosts. Which image is more representative of what you see with the naked eye?

0
elliotmade
elliotmade

Answer 2 months ago

Ah, the answer is: a little bit of light comes out of the sides of the fibers... but it is only a fraction of what is coming out the ends. The entire fiber does light up causing the cool effect, but I would say it's only about 20% as bright or less than the ends. I found this very difficult to take photos of, if you look straight on to the fiber ends they are very intense, so between the different images my settings are all over the place depending on the viewing angle.

0
FilipW
FilipW

Reply 2 months ago

Since you say that the ends really glow too bright, maybe using side-glowing fibers instead would give a good balance between the end glow and "rats nest" glow? The light leakage through the fibers and the apparent randomness of the mapping of the LEDs to the front (could benefit from being even more random IMO) is what makes this a piece of art, not just an overcomplicated display device.

0
elliotmade
elliotmade

Reply 2 months ago

It's worth a try, but my one concern on that is that the extra light coming out the sides would illuminate the neighboring fibers. The end glow fibers do really well in this respect, there is practically no light bleed from one to another.

0
ShamWerks
ShamWerks

2 months ago

This is absolutely gorgeous, not mentionning your epic skills. Thank you for sharing!

0
Microbe
Microbe

2 months ago

Wow! Excellent work. If this doesn't win the contest there is something seriously wrong with the system.