Introduction: 3D Printed LED Mood Lamp
I've always had this fascination with lamps, so having the ability to combine 3D Printing and Arduino with LEDs was something I needed to pursue.
The concept is very simple and the outcome is one of the most satisfying visual experiences you can put in a lamp format.
Please bear in mind that this was my first ever Arduino project, so not everything might be as perfect or as efficient as it could be, but it works. I'll get better with more practice :)
If you want the visual version of these instructions, please see the youtube video, and while you're there, make sure to subscribe to see my other projects :)
Step 1: Safety
Yes, I know, but it can never be stressed enough!
This project involves soldering and the use of a hot glue gun which brings with it the possibility of burns. So please make sure you are comfortable using a soldering iron or ask for help from someone who does.
It is also recommended to use protective goggles for eye protection.
Please take all necessary precautions in order to complete the project safely and also have fun!
Step 2: Things You'll Need
The files for the model from Printables: Link
The outer cover for the lamp should be printed in white PLA. I used Filamentive Natural Transparent as it diffuses the light nicely and also doesn't block it. The outer shell should be printed at 0% infill, 2 perimeters, 10 bottom, and 10 top layers.Any layer height is good, i used 0.2mm layers.
The bottom and inner column can be printed at pretty much any settings you wish (without supports).
I used Petg for the column as it can withstand heat better than PLA. I used 20% infill, 2 perimeters and 4 top and bottom layers. No supports are necessary.
The bottom was printed in wood filament at 0.2mm layers, 2 perimeters, 4 top and bottom layers and 20% infill.
The tint button extention was printed in standard black PLA at 100% infill as it's very small.
Arduino Nano: Link
LM2596 DC-DC Step Down: Link
Tactile Touch Push Button: Link
DC Jack: Link
5v 30mm fan (Optional): Link
2 Meters RGB LED Strip (WS2812B - 60 LED per Meter): Link
Power Supply: Link
Some Red, Black, Yellow wires: Link
2 x M3x12 Screws: Link
2 x M2x10 Self Tapping Screws: Link
Sketch for all light effects: Link
Hot Glue Gun: Link
Soldering Iron: Link
3D Printer (Obviously) with at least 200mm volume in height - too many to choose from. however, if you're in the market for one, I highly recommend the Prusa MK3s or if you want something more budget-friendly, the Creality Ender 3 is also pretty decent
Step 3: Wiring Diagram
This is the complete wiring diagram for lamp.
The fan is not necessary. I designed it to counteract any possible heating from the LEDs, however, since you will most likely not use full brightness chances of the LEDs getting that hot to melt PETg are impossible.
If you are printing the LED column with PLA though and thinking of leaving it running for prolonged periods, the fan will definitely help in keeping things cool.
Step 4: LED Strip and Fan Assembly
- Solder a black, red and yellow wires to the end of the LED strip.
- The Black wire should go on the GND pad
- The Red wire should go on the +5v pad
- The Yellow wire should go on the Din pad
NOTE: take note of the direction of the arrow on the LED strip. The wires should be soldered with direction of the arrow not against it as in the photo.
- Insert the 3 wires through the whole at the bottom of the column and pull them all the way through.
- Remove the sticker cover from the back of the LED strip and attach the strip to the column in a spiral direction going upwards. 2 meters should be enough to cover the whole column while leaving around 2mm space between the rotation of the strip.
- Take the hot glue gun, and just put a little dab of hot glue at the end of the strip and also at the beginning to hold both the strip and the wires in place.
- if you are installing the fan, place it at the bottom of the column as in the photo and attach it using the 2 M3x12 screws.
NOTE: The orientation of the fan is important. Make sure the sticker side is away from you when looking at the fan so that the air flow leads inside the column
Step 5: Preparing Solder Joints and Wires
Take a soldering iron and start preparing the solder joints on the components in order to attach the wires to them.
Step Down Converter
- Prepare solder joints on the 4 corners marked IN- IN+ OUT- OUT+
- Solder a piece of BLACK wire (around 10cm long) to the IN-
- Solder a piece of RED wire (around 10cm long) to the IN+
Prepare solder joints on the following tabs:
- Both GND pins (1 on each side)
- 5v pin
- D2 pin
- D5 pin
Prepare solder joints on opposing pins. Check which pins have continuity when pressed with a multimeter
- Solder a black wire to one of the pins (around 10cm long)
- Solder another wire of any colour to the second pin (around 10cm long)
NOTE: Before soldering the pins on the DC Jack, check your power supply in order to see the polarity of the jack itself. These are clearly marked as in the photo, In this case, the outer parts is the NEGATIVE and the inner part is POSITIVE.
- Solder a black and red wire to the DC Jack pins according to the polarity of the power supply jack. Always check with a multimeter for continuity in order to verify which pin related to the position of the DC Jack input
Step 6: Assembly: Tactile Button
- Insert the 3D Printer button extension in the slot of the base as shown in the photo
- Push the part all the way in until it protrudes from the base
- Push in the tactile button in the slot behind the button extension
- Use some hot glue to hold it in place
Step 7: Assembly: DC Jack
- Slide the DC Jack into the slot adjacent to the tactile button slot as shown in the photo
- Push the DC Jack into the slot until the inlet is aligned with the hole in the base
- Use a dab of hot glue to secure it in place
Step 8: Preparing Wire Lengths
- Place the step-down converter into position with the IN pads on the same side as the DC Jack
- Take both wires from the DC Jack and cut them to length, making sure they reach the pads on the step-down converter, leaving about 1cm extra so they are not strained
- Using a pair of wire strippers or a flush cutter, expose enough wire core for soldering
- Next place the Arduino into position like you did with the step-down converter
- Take both wires from the tactile button and repeat the process, making sure the wires are long enough to reach any area of the Arduino tabs
- Grab the LED column you assembled earlier and rest it on its side next to the base, with the wires running over the base
- Take both fan wires and cut them to length, making sure both wires are long enough to reach the DC Jack
- Take the 3 wires coming from the LED strip and cut them to size, making sure the wires reach the far end of the Arduino.
- Strip the ends of each wire as before.
Step 9: Assembly: Step-Down Converter Part 1
Place the Step-Down converter on the edge of the base, you can use a small piece of double sided tape to hold it in place
- Solder the red wire coming in from the DC Jack onto the IN+ pad
- Solder the black wire coming from the DC Jack onto the IN- pad
Next, plug in the power supply into the DC Jack in order to power on the Step-Down converter (a red light should come on)
Take your multimeter and set it to DC voltage
Place the multimeter needles on the OUT- (black) and OUT+ (red) of the Step-Down converter. This should read the voltage coming out of the unit. We need to adjust this in order to calibrate the voltage to 5V output
While holding the multimeter needles in place, take a small flat-head screwdriver and start turning the little screw on the blue box of the Ste-Down.
Turn anti-clockwise to reduce the voltage output and clockwise to increase the voltage output.
Stop turning when the voltage is at exactly 5 volts
Step 10: Assembly: Step-Down Converter Part 2
Cut two pieces of wire, red and black, about 7cm long
Cut the end sleeve on each end of both wires
- Take the red wire coming from the LED strip, combine it with the short wire you just prepared and solder them together on the OUT+ of the Step-Down Board
- Take the black wire coming from the LED strip, combine it with the short wire you just prepared and solder them together on the OUT- of the Step-Down Board
- Take the red wire from the fan and add that to the soldered red wires on the OUT+
- Take the black wire from the fan and at that to the soldered black wires on the OUT-
NOTE: For a better fit, solder the wires with an inward direction as shown in the photos
Step 11: Assembly: Arduino
- Take the yellow wire coming from the LED strip and solder it to pad D5 on the Arduino
- Take one of the wires from the tactile button and solder it onto pad D2 on the Arduino
- Take the other wire from the tactile button and solder it onto tab GND on the Arduino next to D2
- Finally, take the Red and Black wires coming from the Step-Down converter and solder them to pads GND and 5v on the Arduino
The final result should like the photo. Use the schematic as reference
Step 12: Final Assembly
Use the remaining two screws to secure the Ste-Down converter in place.
For the Arduino, you can place a little hot glue to keep it in place.
This should complete the major assembly. now onto the fun stuff
Step 13: Arduino Programing and Testing
Take a USB to USB mini cable. Plug the mini part into the Arduino and the other end into your PC
Download the latest version of Arduino IDE here
- Open Arduino IDE on your PC
- Go to Tools -> Manage Libraries
- Search for FastLED library and install it
- Go to File -> Examples -> FastLED -> ColorPalette to run an example sketch
- On the line #define NUM_LEDS, Change the number next to it to correspond to the number of LEDs you have on the strip, in my case it's 100
- You can also adjust the brightness of the LEDs by changing the number on the #define BRIGHTNESS line, maximum being 255. a range between 100-120 should be more than enough
- Go to Tools -> Port and select the COM port your Arduino is connected to
- Go to Tools - Board and Select Arduino Nano
- Click on Upload
The Arduino light should come on, followed by the LED strip. This means that everything is working well and everything is in place. Complete assembly by locking the LED column in place, align the tabs on the column with the inlets on the base, twist slightly clockwise until it locks in place.
Finally, simply screw on the outer cover
Step 14: Final Sketch Upload
If you were wondering why the tactile button is there, this is where it comes into play. The following sketch for the LEDs has multiple patterns created by Tweaking4All , all of which can be switched through by pressing the tactile button. the patterns are absolutely gorgeous, and the LED lamp was designed with these specific patterns in mind.
First, you will need to download the sketch from here.
- Open the sketch in Arduino IDE
- Adjust the number of LEDs as we did before
Next we will need to insert a couple of lines of code in order to be able to control the brightness as LEDs tend to draw in quite a lot of power, so having the brightness set to 100 will help keep it stable.
Under the line #define NUM_LEDS enter the following:
- #define BRIGHTNESS 100
In the void loop section, under EPROM.get(0,selectedEffect); enter
- FastLED.setBrightness( BRIGHTNESS );
That is it, now upload the sketch to arduino and you're completely done!
Step 15: RESULT!
I hope you enjoyed this build and please make sure to follow me here and on my Youtube channel for more upcoming projects!
3 People Made This Project!
- fatmaker made it!
- BillM73 made it!
- Paweł Skórka made it!
Question 6 months ago
I'm trying to find the STL files but I think that they are missing.
Possible to reupload the files?
1 year ago
I am unable to load the site with the stl files. Is there another option to find these files?
1 year ago
I know you NEVER respond to comments, but the M3x12 Screws link is no longer valid
2 years ago
Got my Creality Ender 3 pro yesterday. This build is going on my list.
Question 2 years ago
It seems the light cover is supposed to fit into the base, but it does not.
Question 2 years ago
"The bottom was printed in wood filament at 0.2mm layers, 2 perimeters, 4 top and bottom layers and 20% infill."
A wood colored filament, or a filament with actual wood?
2 years ago
there is advanced version with wifi and led matrix
its in russian, but you can use translator and schemas are readable.
also in aliexpress there is a kits for such lamps with all nesesery electronic components.
i have made such lamp - https://www.youtube.com/watch?v=c0FFGOl7oFM
Reply 2 years ago
Same. I made the same as the AlexGyver version!! damn this version is crazy advance!
And if you want to take it to another level, check his forum, his community really took this project to another level. Some version got even speaker feature while alarm his ringing morning!! Thats my future version choosed ))
2 years ago
Instead of the buck converter and arduino you should take a look at the quinled dig uno
And using WLED https://quinled.info/2020/02/11/quinled-dig-uno-pre-assembled-available/
Reply 2 years ago
Of course - there are some ready-to-use solutions - like this for instance:
https://a.aliexpress.com/_mPtVqU1. They can be even better! But this site wasn’t created for the people who are looking for ready-to-use products. We all have a lot of fun creating it by ourselves :)
Reply 2 years ago
agree, you should check AlexGyver project on your way ;)
2 years ago on Introduction
I am trying to save some money and want to try making this. The LED lights I own have 4 pins on them. 12V, R,G,B. How would you go about wiring those up with everything else?
Reply 2 years ago
You can't accomplish this project with those led's--they aren't individually addressable. All you can do with the 4-wire type is to choose the same color for all the led's on that string.
You need individually addressable led's for the moving and chasing effects shown in this project.
2 years ago
I like it!
2 years ago on Step 15
I have looked at your code, and in particular, the difficulties with reading the button and switching to a new display mode (and that you use an interrupt to do so because many of the display routines are "forever" loops). Since you do not know where you were interrupted, you resort to hard reset. Then you lose variable to select the next display mode. This brings up questions:
What happens if the interrupt lands in the middle of the LED update routine?
If you can read EEPROM location 0, can't you do the same with RAM? Deposit the selectedEffect into unused RAM using the ASM statement, then read it back after reset. Why not also provide for the looping of selectedEffect back to zero in the changeEffect() routine by adding:
Better would be to eliminate the need for hard reset. Write a routine to read the button. Put that routine inside all looping display modes (could be called every time a new "image" is sent to the LEDs). Button Test routine provides for abandonment of the display routine, back to the CASE statement where new display routine is branched to.
Another method (better) is to banish all while(1)'s from the code (or have only 1, which encapsulates EVERYTHING include read button). The code structure is straight-line, initiated by periodic interrupt from a timer, and ending with Return From Interrupt. This code is effectively a loop. At the start of this code would be button test (polled) and adjust selectedEffect, then dispatched to the appropriate display pass. I did calculation, and it requires 3 milliseconds to write your 100 pixel display (24*100/800000). You could set interrupt rate to 100/second for smooth display motion. One display iteration could have 7ms, and 3ms would be for the NeoPixel update. No routine would ever be "caught in the middle" of its execution; no "stack overflows" could result.
A lot of your display routines could be simplified by employing lookup tables, instead of (in essence) embedding the table in the code.
If you are interested in more detail, I built similar display, but with only 6 LEDs but bubbling water, and critical timing. Code is in assembly, and is MUCH smaller. Instructables "attach file" does not work for my computer. Send email for code listing and photos.
Question 2 years ago
Hi there, nice project!
I was wondering why a 12 volt power supply is used and thus a dc step down converter is needed. Why isn't a 5v usb connector used? It seems that all the electronics are behind the dc-dc converter and running on 5 volts.
Answer 2 years ago
I'm not the author, but I believe I understand his reasons. The main reason is a typical USB 'micro B' phone charger only supplies 1 to 1.5 amps - not enough for this. The supply he used is 36 watts, which would be over Seven Amps at five volts. Sure, some USB chargers can supply more than 2 amps (and more than 5 volts), but you'd have to specify a particular kind of charger for it, and those chargers need a USB port configured in a special way to tell it it's okay to supply more power than 'normal' USB can.
This project could easily be converted to USB C PD. USB Power Delivery can be configured to deliver 12 volts at 3 amps, just like the supply used here. But though the USB PD "Trigger" boards (would replace the buck converter here) aren't expensive, USB PD capable chargers are a bit costly. Even 18 watt USB C chargers are still over $30, and you'd need a 45 watt version for this - even though USB C can do 36 watts, there don't seem to be any '36 watt max' chargers. 18, 45, and 60 are the most common, and the price goes up with the power.
If you're wondering, a regular 5 volt supply at that power wouldn't be as common (easy to find) as 12 volts, and it might be more expensive than the 12 volt supply. The voltage regulation isn't the best on some of the cheaper ones, either. A 12 volt "wall wart" might start at 13-14 volts with a tiny load, and drop down to less than 10 volts at it's highest load. If this were a 5 volt supply, the voltage at load might drop so low the Arduino wouldn't run. The buck converter makes sure the Arduino gets clean power at a solid 5 volts.
Answer 2 years ago
Since it is a neopixel led strip it runs perfectly fine from a 5V supply.
What i'm missing is the required capacitor over the + and - lines. And also the required resistor for the data line is missing.
For more information check this website:
I do not say the above wiring diagram doesn't work. But from a lot of experience with this type of LED strips i recommend using the capacitor and resistor.
2 years ago
Nice job. Where does the fan get its air supply or does it just recirculate the air contained within the lamp?
Reply 2 years ago
the base has planety of vents inside to draw air in and out