3D printing
Glowing 3D Printed Flowers

Glowing 3D Printed Flowers

I made a promise to my younger self to always have fresh flowers in the house. Self quarantining and social distancing wont put a stop to that. Since I can’t respectfully go to the store for flowers I decided to build my own at home. I used a 3D printer to print a vase full of Tulips and Lillys, my two favorite flowers. To add that certain “geek” to it, I made the whole thing light up using RGB neopixels.


Happy Making and please note (Legal stuff to follow):

I am a participant in the Amazon Services LLC Associates Program, an affiliate advertising program designed to provide a means for sites to earn advertising fees by advertising and linking to Amazon Products. This is at no cost to you and as an Amazon Associate I earn from qualifying purchases that you make through links that I provide.

These are my own experiences and yours will differ, to assume otherwise would be ill fated. The opinions contained here are also my own and should not be associated with any group or organization I may also be a member of. Finally, if you follow any of my suggestions, techniques or recommendations, do so at your own risk, act like and take responsibility like an adult.

Bill of Materials (BOM)

  • PETG in Green, Yellow, White, Clear and Orange
  • 9 RGB NeoPixels

3D Printed Parts

All parts (Minus Electronics and 4 screws) are 3D printed for this project. All files can be obtained from:

thingiverse or prusaprinters

To build the exact version I did you will need to print the following:

  • 60 x pebble
    • Clear PETG, Single Line Vase Print (0.4mm layer height with 0.8mm nozzle))
  • 6 x stem-bottom
    • Green PETG, Normal Print (0.2mm Layer with 0.4mm nozzle)
  • 30-36 x stem-middle (5-6 per depending on taste)
    • Green PETG, Normal Print (0.2mm Layer with 0.4mm nozzle)
  • 6 x stem-top
    • Green PETG, Normal Print (0.2mm Layer with 0.4mm nozzle)
  • 6 x flower-cap
    • Yellow PETG, Normal Print (0.4mm layer height with 0.8mm nozzle)
  • 1 x base-cap
    • White PETG, Normal Print (0.4mm layer height with 0.8mm nozzle)
  • 1 x base
    • White PETG, Normal Print (0.4mm layer height with 0.8mm nozzle)
  • 3 x tulip
    • Orange translucent PETG, Normal Print (0.4mm layer height with 0.8mm nozzle)
  • 3 x lilly
    • White PETG, Normal Print (0.4mm layer height with 0.8mm nozzle)
  • 1 x vase (combined with vase-base, to be explained)
    • Clear PETG, Normal Print (0.4mm layer height with 0.8mm nozzle)

I used my custom E-Bot and Ender 3 to produce it. I printed the stem components in ABS (Because that is what I had in green but recommend PETG) with the Ender and the rest with my custom built E-BOT from various PETG. Here is my favorite PETG brand of which I used Clear, Orange, White and Yellow:

Vase Print Specifics

Because I wanted the vase to print via the single line vase print option and still have a substantial bottom, I split the print into two processes in Simplify3D. First, the Vase-bottom was imported and assigned a normal print process that was used for 0-6mm layer height. I then imported the vase and made sure it was offset from the print bed by 6mm (Thickness of vase-base). With the vase I then assigned a spiral vase process to 6mm and up with no bottom or top layers. Two process, two models, one solid printed vase.


The parts of the flower assembly:

Most parts of the build snap together or are press fits. If things seem too tight, either hit the hole with a drill or sand the peg. It can also be helpful to have an exacto blade handy.

  1. Build a stem (Repeat 6 times)
    1. Snap on Stem Bottom into a Stem Middle
    2. Snap that Stem Middle into another Middle (Do this 4 more times for a total of 6 middle sections)
    3. Snap the final part, the Stem Top on to the last Stem Middle
    4. Place the yellow flower cap onto the the top stem piece. It should slide in firmly (8mm hole side)
  2. Insert the six stems into the Base. There are 6 8mm holes almost evenly spaced around the base (Blue below). These will be a press fit. If it is too hard, drill the holes out a little bit more. If you over do it, you can always use a little super glue.
  1. If you intend to make the flowers glow, now is a good time to run the wires up the center of each stem. You will need 4 lengths of 30AWG wire for each. I cut mine to roughly 16in to start with. These wires will be used for:
    1. 5V (Red)
    2. GND (Black)
    3. Data In (White)
    4. Data Out (Blue)
  2. Next, Place the Vase on top of the base, aligning the Vase Mount through holes.
  3. Screw from the bottom up through the base and into the Vase using 4 x 10mm M5 screws.
  4. If you are not choosing to glow:
    1. Attach the flowers now as you see fit. They should slide onto the yellow flower caps and then twist 30 deg, locking in place.
    2. Attach the Base Lid to the base. It too slides into the base and twists 30 degs to lock in place.
  5. If you are choosing to glow (Recommended, everyone should glow), proceed to the subsequent sections
  6. Optionally, you can take lengths of clear filament (3-4in) and insert them into the 8 1.75mm holes surronding the center hole of the flower caps to add a little flare to the flower (I don’t know what those things are called):


To begin the wiring process, solder 9 Neopixels to 9 sets of 4 wires. You should have 4 wires per Neopixel:

  1. Red (5V)
  2. Black (GND)
  3. White (Data In)
  4. Blue (Data Out)

You can solder the Neopixels to the wires before or after routing. I choose to solder first, then run the wires through the stems and bases. For the stem wires, I started with ~16in lengths of wire. I also install the 3 Neopixels in the base. These had ~4in of wire soldered to them. All Neopixels were held in place with hot glue. At this point your assembly should resemble:

Now is also a good time to install the Wemo D1 mini (Arduino) and the USB breakout board. The Wemo installs with velcro (you need to beable to remove it to program) with the wifi antenna sitting in the rectangular recess built into the base.

To wire the rest of the connections I choose to wire wrap. If you have never wire wrapped before, check out my post here

Start by connecting all of the red 5V wires. Then connect those to the USB breakout and the D1. I would just twist all of the ends together, solder them and heat shrink the ends. The connections to the USB and the D1 can either be soldered, or preferably, wire wrapped. Do the same for the GND (Black) wires.

To wire all of the Neopixels, just follow this pattern:

  1. Take the white wire from the base Neopixel closest to the D1 on the right side. Wire wrap it to the “D1” pin of the D1 mini.
  2. Take the blue wire from the same neopixel and, moving clockwise, connect it to the white wire of the next base Neopixel.
  3. Take the blue wire from that Neopixel and connect it to the next.
  4. After the last base Neopixel, connect its blue wire (data out) to the closest stem Neopixel’s white wire.
  5. Taking that Neopixels blue wire, connect it to the white of the next.
  6. Repeat this process until all Neopixels are daisy chained.
  1. I choose to secure a lot of this with hotglue, but I recommend you code up the D1 before committing

Oh, I guess you might be wondering why we used the breakout board instead of just hooking up straight to the D1? I had to do some math on this one. The D1 has an internal fuse that blows at 500ma. Each LED can consume upto 60 ma. 60ma x 9 LEDs = 540ma. Add that to the little bit the board needs to run and we would have a blown fuse. To get around this, we are not using the onboard voltage reg to power the LEDs, instead we are tapping straight off the USB, which we will connect to an adequate wall supply. Hack around complete!


The D1 is an arduino compatible device… with a little work. I choose to use it because it is wifi enabled and, if I choose, I could make the flowers part of the internet of things and control them remotely (Which we wont be doing in this tutorial). To get the D1 working with Arduino, you should follow the first part of my guide here: https://replicantfx.com/filament-health-monitor-part-4-software/#D1Mini

You will also need to download the Adafruit Neopixel library through the Arduino IDE library manager.

I wrote the code based off of one of the Adafruit example but modified it heavily to slowly and smoothly change all of the colors of the LEDs at random. I did however keep all of the base LEDs the same color. My code is as follows:

#include <Adafruit_NeoPixel.h>
#define PIN        5 // On Trinket or Gemma, suggest changing this to 1
#define NUMPIXELS 9 // Popular NeoPixel ring size
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

#define DELAYVAL 50 // Time (in milliseconds) to pause between pixels

void setup() {
  pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
  pixels.clear(); // Set all pixel colors to 'off'
  pixels.show();   // Send the updated pixel colors to the hardware.

byte OldColor[NUMPIXELS][3];
byte NewColor[NUMPIXELS][3];
byte CurrentColor[NUMPIXELS][3];
byte StepsLeft[NUMPIXELS];

void loop() {
  //pixels.clear(); // Set all pixel colors to 'off'
  for(int i = 0; i < NUMPIXELS; i++){
      for(int ii = 0; ii <3;ii++)
        CurrentColor[i][ii] = CurrentColor[i][ii]+((NewColor[i][ii] - CurrentColor[i][ii])/StepsLeft[i]);
        pixels.setPixelColor(i, pixels.Color(CurrentColor[i][0],CurrentColor[i][1],CurrentColor[i][2]));
      // Make sure the base has all of the same color
            StepsLeft[0] = 100;
            StepsLeft[1] = 100;
            StepsLeft[2] = 100;
            NewColor[0][0] = (byte)random(0,255);
            NewColor[0][1] = (byte)random(0,255);
            NewColor[0][2] = (byte)random(0,255);
            NewColor[1][0] = NewColor[0][0];
            NewColor[1][1] = NewColor[0][1];
            NewColor[1][2] = NewColor[0][1];
            NewColor[2][0] = NewColor[0][0];
            NewColor[2][1] = NewColor[0][1];
            NewColor[2][2] = NewColor[0][1];
      else  //Handle everything that isn't part of the base
        StepsLeft[i] = random(10,80);
        NewColor[i][0] = (byte)random(50,255);
        NewColor[i][1] = (byte)random(50,255);
        NewColor[i][2] = (byte)random(50,255);
  pixels.show();   // Send the updated pixel colors to the hardware.
  delay(DELAYVAL); // Pause before next pass through loop

Once you have the above code in the Arduino IDE and the library installed, you should be able to upload it, plug it in, and enjoy the show.


Corona Virus may have us locked away, but that doesn’t mean we can’t still make some beauty in this world. I enjoyed building this project as an escape and distraction. I look forward to seeing other people’s makes and remixes. Enjoy and happy making.

Tags :