Introduction: Fiber Optic and LEDs - a Wall Decoration
I'm sure many of you saw decorative fiber optic lamps appear a few years ago. I think it was the first widespread use of optical cables for decoration. This was mainly due to the fact that these fibers began to be produced from a material that was much cheaper and easier to handle than glass: plastic. And not just any plastic, but a very transparent one from the PPMA (acrylic) plastics family. Fibers made of this plastic are not brittle, are very easy to bend and they are cheap.
Then there were more and more uses of these fibers: decorative lighting of pools, gardens, houses, there are thousands of projects on the Internet about star ceilings or floors illuminated with fiber optics, fiber optic wearables, fiber optic fabric and many others. These projects uses the so-called end glow fibers, which conducts light from one end of the optical fiber to the other end with as little loss as possible. There are also the so-called side glow fibers that allows light to pass through the optical fiber. They appear in projects such as: decorative lighting of car curbs, furniture, architectural elements, performance halls, just to name a few.
I found a lot of information about the different types of optical cable in this article on instructables, I invite you to read it if you want to know more about plastic decorative optical cables.
In my project I used 3mm side glow optical fiber, these fibers have WS2812 programmable LEDs attached to the ends, and these LEDs are driven by an Arduino Nano. I mounted the pieces of fiber optics in some frames printed on a 3D printer which I mounted on an MDF board. It turned out, in my opinion, an easy to make, cheap, beautiful and very interesting decoration.
The resemblance to these projects:
is not accidental, I was inspired by them but I wanted to make a much simpler, much easier and much cheaper project.
Step 1: Materials, Components
- PMMA side glow fiber optic cable 3mm thickness approximately 20m;
- 216 WS2812 LEDS, from a 60led/m self-adhesive LED strip;
- Arduino Nano microcontroller;
- 5V/8A power supply;
- 5.5mm DC jack with cable;
- 3D printed parts: body, cover, fixing parts, supports, fiber optic cutting template, Arduino Nano enclosure (based on this enclosure);
- MDF board, natural color, 800mmx800mm with 6mm thickness;
- Some M4 screws (I had a bunch with 50mm length), M4 nuts and washers;
- Wires with different colors for connections;
Fiber optics can be quite expensive if you buy them locally, I spent about $130 on 20 meters, if I had ordered from China (and if I had waited for delivery for at least a month) I would have spent much less.
From the strip of LEDs I cut pieces of three LEDs/piece, and I used 8 pieces in each module, so a total of 9 modules 3 * 8 * 9 = 216. You can see this also in the electronic diagram at the next step.
You can find the components to be 3D printed on Tinkercad.
I ordered the MDF board online, I also gave them a template in svg format to make the holes for fixing the modules and support elements, I attached this template below.
Attachments
Step 2: Schematics
Ultra simple schematics!
Step 3: Construction
The nine modules that make up the decoration consist of nine bodies in which the LEDs are mounted and some parts with which I fixed the modules to the MDF board. So I started the construction with the printing of the module bodies.
Because I used a layer height of 0.3 mm when printing and because I used PLA (which tightens a little when cooled), the 3mm holes in the body where the ends of the fiber optic pieces are inserted must be widened very little, I did this operation manually with a 3mm drill.
Then I made the soldering of 24 LEDs (8 groups of 3 LEDs each). I removed the protective foil behind a group of 3 LEDs and, using the body guidelines, I adjusted the LEDs as precisely as possible next to the 3 mm in holes.
I started this operation near the hole where the connection wires enter and I ended up in the same place, Data IN ( DI ) from the LED strip is the green wire, Data OUT ( DO ) is the blue wire, and the red and black wires are 5V plus respectively Ground exactly as in the photos above. It is good to check before mounting/fixing the LEDs (with a test program) if they all work alright (I have encountered defective LEDs but also LEDs where a color LED or even two do not work).
Below is the test code I used.
#define FASTLED_INTERRUPT_RETRY_COUNT 0 #include "FastLED.h" #define LED_TYPE WS2812B #define DATA_PIN 3 #define COLOR_ORDER GRB #define NUM_LEDS 24 #define BRIGHTNESS 160 CRGB leds[NUM_LEDS]; void setup() { delay(1000); Serial.begin(115200); LEDS.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalSMD5050); LEDS.setBrightness(BRIGHTNESS); Serial.println("FastLed Setup done"); fill_solid( leds, NUM_LEDS, CRGB(0,0,0)); } void loop() { for( int i = 0 ; i < NUM_LEDS; i++) { leds[i] = CRGB(200, 200, 200); FastLED.show(); delay(300); leds[i] = CRGB(0,0,0); FastLED.show(); delay(50); } }
If one or more LEDs are not lit up at all or are not lit up white there is a problem with that LED or LEDs For the tests I used an Arduino Nano module mounted on a breadboard as in the photo.
After testing the LEDs the next step is to install the pieces of fiber optics in the bodies. I chose (as you can see in the photos) to join the groups of three LEDs on the left on one side, right on the opposite side and vice versa with pieces of fiber optics with different lengths. Thus the fibers intersect randomly and look quite good. I cut the fibers with a template and a good quality cutter, because it is necessary to make the cuts straight, perpendicular to the length of the fiber. So the ends of the fibers (when inserted through the 3mm holes of the module body) are placed very close to the surface of the LEDs. In this way the transmission of the light from the LEDs to the fiber is done with small losses. It is not necessary to glue the fibers in the body, the 3mm holes do not allow the easy exit of the fiber from its place, so even through this the construction is simple.
While I finished with the nine modules I printed the MDF board support parts and the module fixing parts. I attached the support pieces them to the MDF board. The 50mm screws were too long so I cut them with a universal mini cutter ( dremel like tool ) to a length of about 20mm. Next, I painted the board, I used white acrylic paint.
After the paint has dried, I mounted, with the help of fixing parts, the nine modules on the MDF board. I hot glued the Arduino Nano module with the connection wires (placed in the 3D printed enclosure), on the back of the board and made the rest of the connections according to the electronic scheme, of course, also the 5V power connections. In order for the connections to be more "organized", I used some wire clips, you can fasten them with screws to the mdf board, I glued them to the board with hot glue.
If you want you can do this mounting on a new placed drywall, hiding everything behind it.
Upload the desired program to the Arduino Nano module (in the next step I will present several program variants to choose from), try if everything works correctly and put the covers on.
I chose the place where I will hang my decor and I hung the installation on a screw firmly fixed into the wall.
Done!
Step 4: Software
This wall decoration does not look like any standard application in which LED strips are used. But even so, trying different simple examples and demos of the FastLED library, almost all look very good. Such demos, I have taken from the FastLED's github examples and from Andrew Tuline FastLED-Demos github page but of course I have adapted for the decoration. The ones I personally liked the most can be found below in the video.
The adaptation of the programs consists only in changing the initialization of the LED array ie the total number of LEDs, the type of LEDs, the control pins and the initialization of the LED strip, something like:
//... //#define DATA_PIN 11 //#define CLK_PIN 13 //#define LED_TYPE APA102 #define LED_TYPE WS2811 #define COLOR_ORDER BGR #define NUM_LEDS 216 #define BRIGHTNESS 160 //... struct CRGB leds[NUM_LEDS]; //.... //in the setup() function this FastLED.addLeds<LED_TYPE, 5>(leds, 0, 72).setCorrection(TypicalSMD5050); FastLED.addLeds<LED_TYPE, 4>(leds, 72, 144).setCorrection(TypicalSMD5050); FastLED.addLeds<LED_TYPE, 3>(leds, 144, 216).setCorrection(TypicalSMD5050);
You can easily adapt other examples.
Loading them into the Arduino Nano module is particularly easy, there are a lot of examples here on instructables and on the net so I won't insist on it.
It is preferable not to exceed the value of brightness of 160 (as in the code above). The 216 LEDs at maximum intensity and white color can consume approximately 216 * 0.06 = 12.96 A so the 8A power supply will not be enough. At 160 intensity the current consumed would be approximately 216 * 0.06 * (160/255) = 8.13A. Considering that the animations I used never turn on all the LEDs at maximum intensity, the 5V/8A power supply should provide enough power. I had no problems with overconsumption... In addition in some examples FastLED's "setMaxPowerInVoltsAndMilliamps" function is used. Because the number of LED's (216) is changed and is quite high you must change also the volts and milliamps values to something like:
#define VOLTS 5 #define MAX_MA 7000 //...in setup() function FastLED.setMaxPowerInVoltsAndMilliamps( VOLTS, MAX_MA);
Enough with the words! Below you can follow the examples in action!
The *.ino files that I uploaded to the Arduino Nano for the the corresponding effects from the video.
Step 5: Alternative Constructions
I don't even know where to start because there were so many construction and implementation variants I imagined based on this project 🙂.
First of all, the fibers can be arranged in a more orderly way as in the graphics below.
Bodies don't have to have a square shape, do they?
They can be hexagonal
triangular
or even some voronoi shapes
In the case of perpendicular fibers, the fibers can be woven as in a material or the bodies can be redesigned so as to allow the fibers to overlap.
Also here I would mention that I thought about the possibility of using a LEDstrip of 90 LEDs/m and to put in bodies 15 fibers vertically and 15 horizontally so as to make a… WATCH! 🙂 It would be kind of like in the rendering below.
The idea would be that the intersection of the 2 optical fibers lit in red be the hours, green the minutes and blue the seconds. But I'm still in the design phase...
Anyway, you should know that it tempts me (I already have the strip of 90 LEDs/meter 🙂).
A friend saw the modules while I was testing them and told me that even a piece would be beautiful as office décor and my nephew thought that a wall full of these modules and some sound reactive light effects would be great in a modern club or restaurant.
Quite a few options 🙂.
Step 6: A Few Concluding Words
I have to admit that I really like how the project came out. And the people I've shown it so far liked it as well. So I hope that my project will arouse your interest too and I hope that you will find some ideas about how to use these decorative plastic optical fibers in your future projects.
I am waiting for your reactions, your questions and, as far as I can, I will answer them.
I can't wait to see your projects!

Second Prize in the
Plastic Contest
40 Comments
2 days ago
im not sure my comment is useful, i've made 5*5 wooden lamp using esp8266; WLED is very power library with a ton effects, i very recommend to use it
4 months ago
Just searched for something cool for my empty wall.
I will change some things. Wood instead of 3D Print. Bigger size (5x3 elements while every element is 360mm x 360mm). More LEDs. NodeMCU with WLED to change effects.
The whole thing is ~2 meters in width and little over 1 meter in height. First prototype frame is ready.
Thank you for that inspiration. I can post the final thing when ready but will take some more time.
Reply 3 months ago
Done. I really love it. Cost got a bit out of hand (~400-500€ material) but i really like it. Final dimension 2020mm by 1220mm with 15 squares on it.
Question 1 year ago on Step 5
What is the finished outside dimension of a single square PLA Frame?
Answer 1 year ago
Have you checked the components Tinkercad link?
Guess not...
Reply 1 year ago
Thanks for the clarification
1 year ago
It's Amazing!
Thanks for sharing.
Reply 1 year ago
Thank you :)
Question 2 years ago
Could some possible post a diagram of what each of the mounting parts are for? the only one i know is the pieces that attach the frame to the mdf and the cable management clips, but everything else is a mystery?
Answer 2 years ago
I'm honestly sorry if I wasn't clear enough in the explanations. I always tend to forget things because I don't realize that what is clear to me for others is not so. So I will try to explain in more detail the parts you find on tinkercad:
- the yellow ones are components that form the main part that contains the LEDs, the big one with channel in the middle is the part where the LEDs are mounted, the big but flat one is the frame cover, the small piece with two holes fixes the screw frame in the upper part and through the other hole 4 wires pass the supply wires, the data in and the data out and the other piece with one hole only fixes the frame;
- the green ones are some pieces that distance the mdf board from the wall, but the longest one also has the role of hanging on the mdf board;
- the red one is a small piece, a template, with the help of which I cut the optical fibers;
- The blue one is cable management clip as you well guessed
- the pink and the gray are the base and the box cover for Arduino Nano.
Did I clarify things a little?
2 years ago on Introduction
Hi andrei, I tried to do the assembly with the Arduino pro mini 5v board but it does not work.
I connected on the Arduino uno R3 board with the same program and there it works!
Do you have any idea of this dysfunction? I think I have tried everything.
However, the program uploads well to the arduino pro mini card because I added code to flash the led on the card and it flashes.
If anyone knows the solution, I'm a taker.
Reply 2 years ago
Hi
The fact that your module can load a program so that the led on board flashes does not mean that the digital outputs of your module are fine, there is a great chance to have a faulty module... I'm sorry I have no other explanation.
Question 2 years ago
Could you possibly post a file for a cnc router to use for the board that you mount on? ie: f3d,3dm, stp or iges?
Answer 2 years ago
Hi
At step 1 "Materials, Components" I have attached the SVG file of the holes template of the board. Have you noticed that? Sorry maybe I have not used a meaningful name. Anyway, you can download it and transform it to any format you want.
2 years ago
Apologies if I missed it, but what are you using for the difusion panels over the fibre?
2 years ago
This is great - any way to get a more detailed wire schematic?
Reply 2 years ago
Hi
What are the details that would interest you?
I ask this because it seemed redundant to me to display in the diagram all the 24 LEDs from a module. Or is it another detail I missed?
Reply 2 years ago
So each 24xWS2812 is for a frame and I need 24 LED per frame and 9 frames.
Reply 2 years ago
Yes, that's exactly how the 24 LEDs are mounted.
Just a little remark. As I wrote in the article, there are two holes in the upper part of the module body, one hole is for fixing the body to the MDF support and through the other hole enter the two power wires and the DataIN and DataOUT wires as in the attached drawing (where + 5V is red, Ground is green, DataIN is black and DataOUT is blue).
2 years ago
Regarding the light fibers, I was wondering what the smallest radius bend that could be made cold forming before breakage. Can the fibers be bent to a tight corner by applying heat?
I realize that a tight bend might possibly reduce light transmission to some degree, yes?