Introduction: The Neopixel LED Vase
This vase uses transparent 3D printer filament as a light guide. The filament is integrated in a vase to realize light effects with addressable Neopixel LEDs. Therefore a LED ring is inserted in the base of the vase and controlled by an Arduino board. The transparent filament guides the LED light through channels in the vase structure to the top of the vase.
This project was partly inspired by the 3D filament vase from 3DWinnipeg.
Supplies
- Adafruit NeopixelRing 16
- Adafruit Trinket M0
- 2.85mm transparent PETG filament
- some wires
Step 1: Design and 3D Files
Vase
A simple vase design was used to add spiral channels for the filament. All parts were designed in Autodesk Fusion 360.
Base
The base has channels for guiding the transparent filament to the LEDs of the LED ring. The NeopixelRing and the Arduino board are mounted to the base via screws. The Micro USB port from the Arduino board is easy accessible form the side of the base.
All STL files are uploaded to prusaprinter.org including the mold for bending the 3D filament.
Step 2: 3D Printing
The vase should be printed in vase mode. I was using a 0.4 nozzle and 1.75mm PETG filament on a Prusa MK3S 3D printer. The base is printed in standard mode and oriented upside down to avoid support structures.
Additional files are added for the filament mold and the mounting bar for the Neopixel ring.
Please check the files on prusaprinters.org:
Step 3: 3D Filament As Light Guide
Even if my printer is using 1.75mm filament, the light guide is built out of 2.85 mm filament because this diameter fits much better to the Neopixel LED opening, which is approx. 3 mm. So this larger diameter inputs as much light into the filament as possible and still uses cheap 3D printer filament. You can use either PETG or PLA, the PLA I tested was a little bit more diffuse, so it depends on your design what looks better. This vase was build with PETG filament.
The filament comes in a roll, so it is pre-formed in a circle shape and because of its thickness, it is not easy to bend as much as intended for the vase. So it helps to preform it before assembly. I designed a mold with the outside shape of the vase. Originally I planned to put the filament in the mold and then heat it up in the mold (that's why there are the screws attaching the mold on a piece of wood). But this did not work very well.
Much better is to preheat the filament in the oven and then, when it is warm and flexible, put it into the cold mold and let it cool down. This works perfectly. I used a standard kitchen oven heated up to 90°C (approx. 195°F) and put the filament in for 1 minute. After that time, it already straightened a bit and you can put it into the mold. After a few seconds, it has its final shape. Also this procedure prevents local cracks of the filament which could reduce the light guide effect.
Step 4: Assembly Vase
- Insert the prepared filament pieces one after the other by inserting them from the bottom of the base to the vase. After a few, base and vase are attached properly together and sliding in is not a problem.
- Repeating this procedure until all 16 filaments are inserted
- Click in all filaments to the filament traces in the vase
- Cut the filament at the base as close to the surface as possible with a side cutter
- Cut of all protuding parts on the top of the vase to get a clean border
- Check all filaments again if all of them are clicked in properly
Step 5: Assembly Electronics
Cabling is straight forward:
Trinket USB -> NeoPixelRing 5V
Trinket GND -> NeoPixelRing GND
Trinket Pin 2 -> NeoPixelRing DIN
Normally Neopixels are rated for 5V input, but in most of the cases, it also works fine with 3.3V levels like the Trinket outputs. If necessary, you can add a level shifter between the Trinket and the ring. Adding a small resistor (300-500 Ohm) between Arduino and Neopixel is recommended. Also you can use another pin of the Arduino.
Depending of the screws you are using, you may have to open the holes for the Trinket a little bit.
Step 6: Coding
There are many options for coding effects for this vase with the Trinket M0. For example:
- Using Arduino IDE and Neopixel library
- Using Arduino IDE and FastLED library
- Using CircuitPython
The only things you have to setup are:
- WS2811/WS2812 LEDs
- Pin2 als data PIN
- Number of LEDs: 16
The video shows just some example code from the libraries, but any type of custom animation is possible.
Step 7: Result
At the end, you are getting a beautiful looking illuminated vase, which can play animations depending on the flowers you have putted in. And as always, reality looks even better then the video.
Enjoy the build!