Christine's Blooming Rose

3D printed, heat formed, servo actuated blooming, Dotstar module lit, rose.

Similar projects worth following
I saw a glorious all metal animated LED tulip on Hackchat, posted by anfractuosity the day before Valentines day.

I wanted to try do something similar, as a one day build. And... I failed. :)
Came close, but had tools issues and in the end winging 3D interleaving petals was a bit too challenging.

The plan was, and is... a couple Dotstar modules for color, clear petals, servo for animated blooming, Arduino for control, touch activated.

Oh, and CC Open Source with attribution licensing of course, so I can have your SO wondering who Christine is and what she has to do with your present. :)

Dedicated to the one who has tolerated my obsession of the week for nearly two decades.

The result thus far...

x-openscad - 11.52 kB - 03/18/2019 at 11:08


x-arduino - 8.80 kB - 03/18/2019 at 11:08


Standard Tesselated Geometry - 2.02 MB - 03/18/2019 at 11:08


Standard Tesselated Geometry - 1.42 MB - 03/18/2019 at 11:08


Standard Tesselated Geometry - 976.15 kB - 03/18/2019 at 11:08


View all 14 files

  • 1 × 9g Servo
  • 1 × Arduino Pro Mini
  • 10 × Dotstar or Neopixel string You'll probably need a few extra for when you destroy them.
  • 1 × Magnet wire Anything thin will do.
  • 1 × Small dia hookup wire 28-32 gauge or so

View all 10 components

  • Mechanical Overview

    Daren Schwenke03/18/2019 at 14:12 0 comments

    So if you were wondering what's going on under the hood, here ya go.

    Forgot to mention, but you'll notice the closed position stops with the fishing line going across the center of the servo hub.  That means I can shut the servo down when either fully open/closed and it stays put.  It also means that if the rose fails to open or close for any reason, I don't sit and burn out the servo, which is a plus.

    To try to eliminate the random triggers I was getting with capsense, I 'shielded' my capsense wires going up the stem by twisting them with the ground wire.

    It worked, but also succeeded in coupling the two channels so they behave as one.  Bah.

  • Forming the stem.

    Daren Schwenke03/18/2019 at 05:22 0 comments

    After everything is assembled, time to make it a bit more organic looking.

    A space heater is sufficient to soften the PLA enough to bend it.

  • Forming the petals.

    Daren Schwenke03/17/2019 at 17:09 0 comments

    Petals are heat formed by pulling them tightly over a 40w candelabra light bulb with a cotton cloth.

    Wait 20-30 seconds.  Remove.

    This gives them a nice curve in two dimensions that helps them to interleave better.

  • Zero walls is a thing..

    Daren Schwenke03/16/2019 at 10:07 0 comments

    Experimented in Cura to find the best settings for printing the petals.  The result which worked the best by far, was a bit strange.  I set Cura to only print infill, and it worked flawlessly.

    No travels at all minus moving from the center of each petal to the center hub.  It's basically printed as much as is possible, as a single extrusion.  The results are fantastic.

  • Petal to the metal.

    Daren Schwenke03/16/2019 at 04:34 0 comments

    I've decided to rework the petals.. again.  

    Small changes this time though.

    The current Dotstar module which lights the top of the stem is slung below and moves with the petal assembly.

    This means I need to drill holes in it to pass the fishing line which drives the closure through, solder below the petals, and consume half of the retract space.

    I'm moving it.

    It's now going to live inside the rose, shining through a hole in the center of the petal assembly.

    Also made the petals and hub slightly thicker, extended the hinge so the bending radius is larger (more spring) and instead of a single size, I'm printing 5 with slightly different diameters.  They should mesh better this way.

    We will see.

    Reprinting... everything.  

    It will give me a chance to do a good assembly video too.

  • Hardware tweaks.

    Daren Schwenke03/15/2019 at 10:55 0 comments

    Corrected some things in the model I didn't like or had to correct with a Dremel when I assembled it.

    The stem got angled ends matching the Dotstar placement in the base.  The mid-stem Dotstar pockets were also made larger with a flat bottom and sides for easier cleanup and should also allow the Dotstar aiming down the stem to light it better.  FDM light pipes don't like to cross layer boundaries.

    The petals got some holes for alignment and passing through the wires/fishing line.

    The top of the stem got a little more depth to accommodate the wires which are bottoming out right now.

    The base got extended fins to keep it upright in the vase, a slot for the Arduino to live in, better alignment for the stem Dotstars, and holes for wires.

    The leaves were perfect as they were.

    I'm probably not going to reprint everything as I'm pretty low on clear PLA and nylon.  

    I may reprint the base as that's a mess of hot-melt glue right now..

  • Crawling average.

    Daren Schwenke03/13/2019 at 04:05 0 comments

    We are using the capsense library here to trigger the movement based on touch.

    This is a remarkably simple solution, uses only N+1 digital pins, and N resistors to drive it.  So for my two channels of capsense, I need 2 resistors and 3 pins.   Sweet.

    However, the values you get from it can vary by two orders of magnitude, just depending on where you end up placing the rose, grounding of the power source, humidity, people in the room, the phase of the moon... etc.

    So.. I attempted to implement some sort of auto-calibration of the capsense thresholds based upon a running average.  

    The idea is that an actual touch will cause a rapid spike in the value as compared to the previous values, no matter what those previous values happen to be.  

    This should work..  

    It sorta does now.. but.. the current running average code either compensates so rapidly so as to eliminate the touch signal sometimes, or still triggers based on the random fluctuations.  

    The happy medium seems hard to find, but I am using the simplest form of running average.  This ends up weighting the last measurement much more heavily than the previous ones which I believe is the source of my problems.

    I could use an array instead to store the actual previous measurements and average that way, but it costs memory.  I do have memory to throw at the problem though, so worst case I can do that.  I think I'll just do that.

    Working on it.


    It is better, but not enough to justify consuming 4x as much memory.  It still triggers sometimes on it's own. 

    What's happening is this.

    Before the first touch, the value hovers around 15, with threshold set to 45.

    On touch it goes up to about 200, and on release settles down to about 60.

    On the next touch it goes back up to about 180, and barely triggers.

    On next settle it can go down to either 15 or 45...

    Sometimes then it goes back up to 60 without a touch, and if the previous level was 60, it will trigger on it's own.

    Setting a static threshold of 75 or so would solve it, for where it is now.  Or... perhaps an exponential or logarithmic threshold curve might help...  I'll try those next I think.


  • Smoother

    Daren Schwenke03/11/2019 at 14:45 0 comments

    @Morning.Star and I worked on the code.  

    We cleaned up the open/close animations and added fading between states.

    The hardware got tuned so the servo is not under load when fully open/closed, and so we were able to alter the servo code so it can power down between movements.

    Also added color shifting to the existing 'breathing'.  Not sure if that is going to stay yet.

  • Hello, my twitchy friend.

    Daren Schwenke03/10/2019 at 06:54 4 comments

    Obviously need some debounce code here, and the servo motor noise seems to be triggering touch as well.  Probably need some tinfoil.  

    But hey... It's Alive!

    Can you believe @Morning.Star wrote all the code for this, without *ever* having access to the hardware (as it didn't exist yet.)  I asked for 'organic', and gave him the hardware I was using.  He delivered.

    Simply unbelievable.  Thank you sir.

  • Dotstars are really fragile..

    Daren Schwenke03/10/2019 at 01:27 0 comments

    The last 2 days have been torture.

    Dotstars are rated to be soldered by reflow... once.  The failure rate I've been getting de-seating them is nearly 75%.  When you solder them multiple times, the pins migrate, which pulls off the tiny connecting wires inside the module.  Usually the clock pin - in/out.

    So nevermind getting a row of 6 of them to work.  I'm willing to settle for 2!

    FYI, I was using the 5050 Dotstars.  The 2020 ones, although harder to solder due to the size, hold up better to manual soldering.  Or... it's just me..  :)

View all 41 project logs

  • 1
    Print the stem.

    Slicer settings are pretty important to make the best light pipe you can.

    Basically, print hot, decently fast, 5-10% over-extruded, and try to keep the extrusion path linear in the direction of the light pipe.  This boils down to:

    • Quality
      • 0.4mm Nozzle
      • 0.2mm Layer Height
      • 0.2mm Initial Layer Height
    • Shell
      • 2 Walls
      • 1 Top Layer
      • 1 Bottom Layer
      • Top/Bottom Pattern: Lines
      • Compensate Wall Overlaps: Checked
    • Infill
      • Infill Density: 100%
      • Infill Pattern: Concentric
    • Material
      • 250C Printing Temperature (yes, this is really, really hot for PLA).  I went as hot as I could without it turning yellow.  Still, if you stop the print and don't shut off the hotend at this temp, you will yellow/start to cook it anyway.
      • 50C Build Plate Temperature (yes, this is hot for PLA)
    • Speed
      • Print cooling on, but low until you hit the leaf area.  Then high.
      • Print decently fast.  I used 45mm/sec.
    • Travel
      • Combing Mode: All
        • Avoid Printed Parts when Traveling: Unchecked
    • Build Plate Adhesion
      •  Build Plate Adhesion Type: Skirt (I have areas added into the model for adhesion)
  • 2
    Print the stem top.

    Use the same settings as you did for the stem, except change this.

    • Shell
      • Top/Bottom Pattern: Concentric
  • 3
    Print the petals.

    This one is a bit strange.  I found using zero walls, top or bottom layers (just infill) worked the best.

    • Quality
      • 0.4mm Nozzle
      • 0.1mm Layer Height
      • 0.1mm Initial Layer Height
    • Shell
      • 0 Walls
      • 0 Top Layers
      • 0 Bottom Layers
      • Top/Bottom Pattern: doesn't matter.
      • Compensate Wall Overlaps: Checked
    • Infill
      • Infill Density: 100%
      • Infill Pattern: Concentric
    • Material
      • 265C Printing Temperature (for nylon this is mid range)
      • 80C Build Plate Temperature
    • Speed
      • 30mm/sec across the board
    • Travel
      • Combing Mode: All
        • Avoid Printed Parts when Traveling: Unchecked
    • Build Plate Adhesion
      •  Build Plate Adhesion Type: Skirt 

View all 6 instructions

Enjoy this project?



mpinner wrote 01/13/2022 at 21:43 point

these are gorgeous!  

i hope one day i can follow your design and make one too. thanks for sharing!

  Are you sure? yes | no

Daren Schwenke wrote 01/14/2022 at 01:32 point

Thank you. Feel free to ask questions, and then possibly be ignored for 3 months. :)

  Are you sure? yes | no

Sophi Kravitz wrote 02/15/2019 at 21:24 point

That's a great hinge design. I've seen plastic hinges last over many uses. How do all the petals attach? You might be able to use a rivet, or something similar to keep them together but enough space between to eliminate binding.

  Are you sure? yes | no

Daren Schwenke wrote 02/15/2019 at 22:11 point

That isn't a bending interface, although if TPU had worked it would be..  :)  It's a pin/slot held in by a single hair braiding band (the little poly-something ones).  The band also provides the spring tension to open (or close) the petals by virtue of being just above (or below) the pivot point.  I may invert the open/close logic here as I'm playing with the mechanism.  It would make more sense to have the petals and mount be the part that moves.  Then I could make the stem bit a tighter fit as the closed position would retract into it.  But that means I need the close position to be the furthest down.  Right now down motion of the mount/petals would open the rose.  That's what's rolling around my head atm...

  Are you sure? yes | no

Dan Maloney wrote 02/14/2019 at 15:53 point

I feel for you as you trudge along your chain of misery. That mechanical tulip was pretty amazing, and I'm sure your flower will be too. But is not the appointed day at hand?

  Are you sure? yes | no

Daren Schwenke wrote 02/14/2019 at 21:04 point

Thank you.  Yes.. Yes it is.  At this point continuing work on this will take away from said day as well.  So alas, this will have to wait.

I had good luck with the first PLA only design, but the opening mechanism stacked up the petals instead of spreading them out.  Flipping the mechanism from push to pull on the other end of the petal worked, but bound up. I had found out how important it was to allow the joints at the base to not be fully constrained to being a pivot, and move just the right amount off-axis.  Not enough time to reprint everything fixing that issue at this point and complete the project.  Got all the bits sorted in my head now.. but out of time.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates