Jack's Lamp

A custom ceiling lamp commission

Concept

A friend of mine was looking to buy a ceiling lamp for his room but none of the commercial options really suited him and with me being in my FastLED era he asked me if I could build him one instead. So after a few days of discussion, concepts and budget planning the project was officially underway.

The design of the lamp was going to be a 150cm by 50cm panel that had addressable LEDs behind a diffusing plate. To make it look more interesting I decided to put the diffusing plate roughly 10cm in front of the LEDs. This way there was a gap in the sides which would be filled with the same material, so the light could also shine through the side.

Render of the ceiling light viewed from below Render of the ceiling light viewed from below

Process

The build process itself was not particular interesting, I calculated the "resolution" of the light based on the LED strips I had bought and and cut LED strips to size and connected them together. The final resolution was 15x45 pixels (so 675 LEDs in total). Even though the LED strips were relatively sparse with only 30 LEDs/meter, it still meant that the equivalent length of the strips if connected in series is 22.5 meters. This of course takes a lot of power to illuminate and due to the low voltage (5V LED strips), I needed a very beefy power supply and had to make sure the wires would be thick enough to accommodate the large amperage. As far as I remember the maximum current draw I computed was around 20 amps, which is definitely nothing to take lightly. Also I made sure to add fuses to every light strip, which were powered separately on each row, to ensure I would not burn down my friends house.

Image of the bare LEDs during testing Bare LEDs during testing showing how the panel was setup

As for the controller for the LEDs I used an ESP32 with the FastLED library to feed the strips the data as needed. I used a few standard animations and also made some fully custom ones as well. Some of these were created via math functions on the device while for others I used frame-by-frame animations stored on the device. To be able to create fully custom animations I also wrote a program in Unity that could be used to create and save frame-by-frame pixel-art animations for a grid of any size. This made it possible to quickly create and test animations for any LED-strip display I had, which I also ended up using for other projects.

There was one issue with my setup which I did not account for. To be able to control the LEDs individually they had to be connected to each other with the clock and data inputs (Note: This is not entirely true but it was the assumption I used at the time), so i used wires to connect the now cut parts of the strips together as can be seen in the image above. However I did not consider that the length of the wires needs to remain roughly the same, and due to the way i wired the rows it caused quite the discrepancy between the total lengths by the end of the strip. This caused fast update rates to cause issues and flickering and limited the maximum FPS of the animations I could play. Nonetheless it ended up working out by finely adjusting various timing settings in FastLED.

Result

With everything set up I headed to his house and installed the lamp in its final location. Once we turned it on I was immediately amazed as it looked even better than I had expected, since I had only ever seen it without the whole assembly setup.

Below is a short video of the lamp cycling through the different modes/animations (please excuse the horrible videography and camera quality):

Project Conclusion

Fun

4 / 5
Challenging with many new learning opportunities and few frustrations

Polish/Viability

5 / 5
Looks super professional in person

Difficulty

4 / 5
Because I wrote a custom software tool to create animations it ended up being more complex than needed

Cost

4 / 5
Even without the labor costs this was quite expensive for a ceiling lamp. As far as I remember it was around 500€ in materials alone