Build a Robot Flower That Blooms Open, Petal by Petal!
Meet Blossom — an Arduino-powered flower that slowly opens its petals in a beautiful wave, just like a real flower greeting the sun. Follow our easy step-by-step guide, circuit diagram, and code to grow your own!
🌼 Say hi to Blossom, your robot flower!
What Is a Blooming Flower Robot, Anyway?
Real flowers slowly open their petals as they grow toward sunlight. In this project, we'll recreate that magic using five servo motors — one hidden behind each petal — controlled by an Arduino. When triggered, each petal swings open one after another, creating a smooth, wave-like blooming motion.
This is a fantastic project for learning how to make several motors move in a coordinated sequence, with small timing delays between each one — a trick used in real animatronics and robotics displays!
What You'll Need
Gather these parts before you start building your flower!
Arduino Uno
The brain that controls the blooming sequence.
SG90 Micro Servo Motors
One motor per petal, hidden inside the flower.
LDR (Light Sensor)
Makes the flower bloom automatically in bright light.
Push Button
Manually trigger a bloom or close-up anytime.
Breadboard
For connecting everything without soldering.
Craft Foam or Felt Petals
Cut petal shapes and glue them to each servo horn.
Cardboard Tube + Green Paper
Forms the stem and hides the wiring.
4x AA Battery Pack
Powers all five servos once unplugged from USB.
Jumper Wires
Male-to-male and male-to-female.
The Circuit Diagram
Here's how all five petal servos, the light sensor, and the button connect to the Arduino.
Step-by-Step Build Instructions
Ask an adult to help with cutting foam petals and gluing. Let's grow Blossom!
Arrange the five servos in a circle
Mount all five servos facing outward in a flower-shaped ring, like the numbers on a clock, inside a small cardboard base.
Cut and attach the petals
Cut five petal shapes from craft foam or felt. Glue each petal to a servo horn so that turning the servo swings the petal from closed (folded in) to open (spread out).
💡 Tip: Start each petal folded inward at 0° so your flower looks like a closed bud at rest.Build the stem and hide the wiring
Slide a cardboard tube up through the center of the base and wrap it in green paper. Run all the servo wires down through the tube to the Arduino below.
Add the light sensor
Mount the LDR pointing upward near the center of the flower so it can "sense" when a bright light (like a lamp or sunlight) shines on it.
Add the manual button
Place the push button on the base so you can trigger a bloom or closing motion anytime, even without bright light.
Upload the code and test
Plug in your Arduino, upload the code below, then switch to battery power. Shine a light on Blossom or press the button and watch each petal open one after another!
The Arduino Code
Copy this code into the Arduino IDE, then click Upload. It opens each petal in a wave, then closes them back up.
// 🌸🤖 Blossom the Robot Flower — Arduino Multi-Servo Bloom Project // Uses 5 servos, one per petal, plus an LDR and a manual button #include <Servo.h> Servo petals[5]; const int petalPins[5] = {3, 5, 6, 9, 10}; const int ldrPin = A0; const int buttonPin = 2; const int closedAngle = 0; // petal folded in (bud) const int openAngle = 100; // petal fully bloomed bool isBloomed = false; void setup() { for (int i = 0; i < 5; i++) { petals[i].attach(petalPins[i]); petals[i].write(closedAngle); // start as a closed bud } pinMode(buttonPin, INPUT_PULLUP); } void loop() { int lightLevel = analogRead(ldrPin); bool buttonPressed = (digitalRead(buttonPin) == LOW); // Bloom when it's bright OR the button is pressed if ((lightLevel > 600 || buttonPressed) && !isBloomed) { bloomFlower(); isBloomed = true; delay(500); } // Close back up when it's dark again if (lightLevel < 300 && isBloomed) { closeFlower(); isBloomed = false; delay(500); } } // Opens each petal one after another, like a wave void bloomFlower() { for (int i = 0; i < 5; i++) { petals[i].write(openAngle); delay(300); // small pause creates the wave effect } } // Closes each petal back into a bud, in reverse order void closeFlower() { for (int i = 4; i >= 0; i--) { petals[i].write(closedAngle); delay(300); } }
How Does Blossom Actually Work?
Here are the big robotics ideas hiding inside this project:
Light Sensing
The LDR's reading gets higher in bright light. By comparing it to a threshold number, the Arduino decides whether it's "bright enough" to bloom — just like a real flower reacting to sunlight.
Arrays Save Repeated Code
Instead of writing five separate Servo variables, we use an array — petals[5] — so one small loop can control all five motors.
Creating a Wave Motion
Adding a tiny delay(300) between each petal opening makes them move one after another instead of all at once, creating that smooth blooming wave.
Remembering State
The isBloomed variable helps the flower remember whether it's already open, so it doesn't try to bloom over and over again while the light stays bright.
🧑🔬 Safety First!
- Build with an adult, especially when using scissors or a glue gun for the petals.
- Don't force a petal by hand while its servo is powered on — let the motor do the moving.
- Keep small foam pieces away from little siblings and pets.
- Unplug the battery pack when you're finished playing with Blossom.
Frequently Asked Questions
Can I use fewer than five petals?
Yes! Just remove the extra pins from the petalPins array and change the 5 in the loops to match how many petals you're using.
How do I make the bloom slower or faster?
Change the delay(300) value inside bloomFlower() and closeFlower() — a bigger number makes each petal wait longer before opening, creating a slower wave.
What if I don't have an LDR?
No problem! You can remove the light-sensing part and trigger bloomFlower() and closeFlower() using only the push button.
What age group is this project good for?
This project is great for curious kids around age 8 and up, working with a parent, teacher, or older sibling on the wiring and petal assembly.

Comments
Post a Comment