Bloom Buddy

by Mukesh_Sankhla in Circuits > Gadgets

200 Views, 4 Favorites, 0 Comments

Bloom Buddy

Cover.gif
DSC01053.JPG
DSC01056.JPG
DSC01058.JPG
DSC01040.JPG
DSC01044.JPG
Bloom Buddy

Meet Bloom Buddy - your plant's new best friend! 🌼

Bloom Buddy is an intelligent and interactive soil moisture monitoring device designed to help you care for your plants in a fun and engaging way. Powered by an Unihiker K10 - a ESP32 based Dev Board, this adorable gadget is more than just a sensor. It features a cheerful face, expressive animations, voice feedback, and real-time environmental monitoring.

With a built-in display, speaker, SD card, microphone, and sensors for soil moisture, temperature, humidity, and light, Bloom Buddy provides clear, playful responses to your plant's needs. It celebrates when your plant is well-watered, gets sad when thirsty, sleeps at night, and reacts to temperature changes with unique personalities.

Whether you are a seasoned plant parent or just starting your indoor garden, Bloom Buddy will bring joy and intelligence to your plant care routine. In this Instructable, I will show you how to build your own Bloom Buddy, program its smart behavior, and bring your plants to life with interactive technology.

Let's get started and make your plants feel heard! 🌱✨


Sponsored By NextPCB

This project was made possible, thanks to the support from NextPCB, a trusted leader in the PCB manufacturing industry for over 15 years. Their engineers work diligently to produce durable, high-performing PCBs that meet the highest quality standards. If you're looking for top-notch PCBs at an affordable price, don't miss NextPCB!

NextPCB’s HQDFM software services help improve your designs, ensuring a smooth production process. Personally, I prefer avoiding delays from waiting on DFM reports, and HQDFM is the best and quickest way to self-check your designs before moving forward.

Explore their DFM free online PCB Gerber viewer for instant design verification:

NextPCB Free Online Gerber Viewer

Supplies

DSC00950.JPG
DSC00960.JPG
DSC00973.JPG
DSC00972.JPG
DSC00958.JPG
DSC00959.JPG
DSC01017.JPG
DSC00961.JPG

1x Unihiker K10

1x Soil Moisture Sensor

1x Li-Po Battery

1x 3 Pin Cable

1x Switch

1x M3 Screw

4x M2 5mm Screw

4x M4 8mm Screw

1x SD Card

1x Card Reader


Tools:

My 3D Printer

My Screwdriver Kit

My Soldering Station

Prepare the SD Card

Screenshot 2025-05-31 095332.png
DSC01018.JPG

To enable Bloom Buddy's voice feedback and animated personality, we need to properly set up the SD card with the required audio files.

  1. Visit the Bloom Buddy GitHub Repository and download the complete project as a ZIP file. Once downloaded, extract the ZIP archive to your computer.
  2. Insert the connect the SD card to PC using SD Card Reader
  3. Copy the Voice, Emoji, Face folder as shown
SD/
β”œβ”€β”€ Voice/
β”‚ β”œβ”€β”€ All Audio Files
β”œβ”€β”€ Emoji/
β”‚ β”œβ”€β”€ All Frames
β”œβ”€β”€ Face/
β”‚ β”œβ”€β”€ All Images
  1. Remove SD from PC and insert it into K10

Set Up Arduino IDE

Screenshot 2025-05-31 101410.png

To program the Bloom Buddy, we will use the Arduino IDE along with the UNIHIKER K10 board support package.

Requirements:

  1. Arduino IDE version 1.8.19 or earlier (not compatible with Arduino IDE 2.0+)

Install Arduino IDE

If you do not already have it, download and install Arduino IDE 1.8.19 or an earlier version. Newer versions are not compatible with the K10 board at this time.

Add the UNIHIKER K10 Board Support URL

  1. Open Arduino IDE.
  2. Go to File > Preferences.
  3. In the Additional Board Manager URLs field, paste the following URL:
https://downloadcd.dfrobot.com.cn/UNIHIKER/package_unihiker_index.json
  1. Set Compiler Warnings to None for cleaner output.
  2. Click OK to save your changes.

Install the UNIHIKER K10 Board

  1. Go to Tools > Board > Boards Manager.
  2. In the search bar, type unihiker.
  3. Click Install on the result for the UNIHIKER K10 SDK.

Verify Board Installation

  1. Once installed, UNIHIKER K10 should now appear under Tools > Board.
  2. Select UNIHIKER K10 from the list to start programming the device.

Program Bloom Buddy

Screenshot 2025-05-31 101635.png
Screenshot 2025-05-31 101528.png
Screenshot 2025-05-31 101744.png

Now that the Arduino IDE is set up and the board is installed, it's time to upload the Bloom Buddy code to your UNIHIKER K10.

Locate the file named BloomBuddyCode.ino that you downloaded from the GitHub repository earlier.

Double-click it or open it from Arduino IDE by going to File > Open and navigating to the file location.

In Arduino IDE, go to Tools > Board and select UNIHIKER K10.

Then go to Tools > Port and choose the correct COM port for your K10 device. If you are unsure, unplug the device, check the available ports, then plug it back in to see which port is newly listed.

Click the Upload button (right arrow icon) at the top-left corner of the Arduino IDE.

Wait for the code to compile and upload. You should see a message that says β€œDone uploading” when it finishes successfully.

Once the upload is complete, Bloom Buddy will come to life!

You will see animations on the display and hear sounds from the speaker if the SD card is set up correctly.

CAD Design and 3D Printing

S2.png
S3.png
S4.png
S6.png
S7.png
DSC00953.JPG
DSC00955.JPG
DSC00957.JPG
DSC00963.JPG
DSC00962.JPG

To bring Bloom Buddy to life physically, I have designed a custom enclosure using Fusion 360. This enclosure protects the electronics and adds a friendly, finished look to the device.

The enclosure consists of five 3D-printable parts:

  1. Housing – Main body that holds the entire setup
  2. Mount Plate – Securely mounts the UNIHIKER K10 board inside the housing
  3. Cover – Part with a custom slot for the soil moisture sensor
  4. Clip – Locks the soil moisture sensor into the slot on the cover
  5. Button – Acts as a physical extension for onboard Button B on the K10

You can Download the source CAD file if you want to modify the design or

Directly download the .stl files from below and 3D print them.

Cover Assembly - Part 1

DSC00974.JPG
DSC00975.JPG
DSC00977.JPG
DSC00976.JPG
DSC00980.JPG
DSC00981.JPG
DSC00982.JPG

Parts Needed:

  1. 3D-printed cover
  2. 3D-printed clip
  3. Soil moisture sensor
  4. Switch
  5. Quick-drying glue

Assembly Instructions:

  1. Take the 3D-printed cover and align the soil moisture sensor with the dedicated slot on the front.
  2. Gently push the sensor into place until it fits snugly into the slot.
  3. Place the clip over the sensor to lock it into the cover.
  4. If the fit is slightly loose, apply a small amount of quick-drying glue to secure it.
  5. Insert the tactile switch into its designed slot and apply a small amount of glue.

Cover Assembly - Part 2

DSC00984.JPG
DSC00985.JPG
DSC00988.JPG
DSC00989.JPG
  1. Take the 3-pin connector and plug it into the back of the soil moisture sensor.
  2. Peel off the protective layer from the double-sided tape on the back of the battery.
  3. Stick the battery onto the cover, as shown in the reference image

Connect Battery

Battery.png
DSC00991.JPG
DSC00992.JPG
DSC00993.JPG
  1. In this step, you will wire the power switch to the battery so you can easily turn Bloom Buddy on and off.
  2. Carefully cut the red (positive) wire coming from the battery.
  3. Strip a small amount of insulation from both cut ends.
  4. Take the two stripped red wire ends and solder them to the terminals of the switch as shown in the diagram above.

Mount the UNIHIKER

DSC00994.JPG
Soil Moisture.png
DSC00998.JPG

Parts Needed:

  1. UNIHIKER K10 board
  2. 3D-printed mount
  3. Assembled cover with sensor and battery
  4. 1x M3 screw

Instructions:

  1. Ensure the microSD card (with files already copied) is properly inserted into the UNIHIKER's SD card slot.
  2. Take the battery and soil moisture sensor connector through the opening in the mount.
  3. Plug the battery into the battery connector on the UNIHIKER board.
  4. Connect the 3-pin soil moisture sensor cable to Port P0 on the UNIHIKER.
  5. Place the UNIHIKER onto the 3D-printed mount, aligning the screw hole(s).
  6. Use an M3 screw to securely fasten the UNIHIKER to the mount.

Housing Assembly

DSC01000.JPG
DSC01002.JPG
DSC01003.JPG
DSC01004.JPG
DSC01006.JPG
DSC01008.JPG

Parts Needed:

  1. 3D-printed housing
  2. 3D-printed button
  3. Completed mount & Cover assembly

Instructions:

  1. Insert the 3D-printed button into its designated slot in the housing.
  2. Carefully lower the mount assembly into the housing.
  3. Make sure all components fit without stress and the cables are not pinched.
  4. Align the mounting holes on the mount with those in the housing.
  5. Use 4x M2 screws to fasten the mount securely into the housing.
  6. Tighten just enough to hold the components firmly, without cracking the plastic.

Final Assembly

DSC01010.JPG
DSC01012.JPG
DSC01013.JPG
DSC01015.JPG
  1. Take the cover assembly and carefully align it with the main housing.
  2. Ensure the components inside are not stressed or pinched.
  3. Use 4x M2 screws to fasten the cover securely to the housing.
  4. Verify the button moves freely and presses Button B on the UNIHIKER mand the switch is accessible.

Your Bloom Buddy is now fully assembled, expressive, and ready to monitor your plants with personality.

How It Works?

Screenshot 2025-05-31 110751.png
  1. Sensor Reading: Bloom Buddy continuously monitors soil moisture, ambient temperature, humidity, and light level.
  2. Dry Soil Response: If the soil moisture drops below 30%, it displays a Sad animation and may play an alert sound.
  3. Watered Celebration: If the soil was previously dry and is now adequately moist, it celebrates with a cheerful animation and sound.
  4. Day or Night Behavior:
  5. If the light level is low (indicating nighttime), it checks the temperature to decide whether to display:
  6. A Cold animation if it's too chilly,
  7. A Hot animation if it's too warm,
  8. Or a Sleep animation during comfortable night-time temperatures.
  9. If it's bright enough (daytime) and everything is fine, it simply shows an Ideal animation.
  10. Smart State Memory: Bloom Buddy remembers past moisture states to respond meaningfully when things change.

Sensor Thresholds & Calibration

To ensure Bloom Buddy behaves accurately and consistently, it uses threshold values to interpret the sensor data and respond accordingly. These values can be tweaked to suit your specific plant and environment needs.

Sensor Thresholds:

These constants define when Bloom Buddy reacts to environmental changes:

const int DRY_THRESHOLD = 30; // Moisture % threshold for dryness
const int DARK_THRESHOLD = 10; // Light level threshold for nighttime
const int COLD_THRESHOLD = 15; // Temperature below this is considered cold (Β°C)
const int HOT_THRESHOLD = 40; // Temperature above this is considered hot (Β°C)

These thresholds are used in the behavior logic (see Step 11) to decide how the device reacts with animations and sounds.

Moisture Sensor Calibration

Soil types vary widely, so it is important to calibrate your soil moisture sensor for accurate readings. This is done using two reference values:

const int MOISTURE_WET_VALUE = 600; // Analog reading for completely wet soil
const int MOISTURE_DRY_VALUE = 3046; // Analog reading for completely dry soil

The device uses these values to convert the raw sensor reading into a percentage:

  1. 100% = MOISTURE_WET_VALUE
  2. 0% = MOISTURE_DRY_VALUE

How to Add Custom Animations and Voice Responses to Bloom Buddy

Animations in Bloom Buddy are created by sequentially displaying image frames stored on the SD card. Each animation is defined as a function that calls canvasDrawImage() repeatedly to show each frame.

A. Adding Custom Animations

Animations are created by displaying a sequence of images in rapid succession. Each animation function uses canvasDrawImage() to show individual frames stored on the SD card.

  1. Prepare Your Images
  2. Create PNG images (preferably 240x320 to match the K10 screen).
  3. Name them sequentially (e.g., WAVE1.png, WAVE2.png, ..., WAVE6.png).
  4. Save them in the appropriate SD card directory, e.g., S:/Emoji/.
  5. Create a New Animation Function
  6. Here's how to create a new animation called WaveAnimation():
void WaveAnimation() {
k10.canvas->canvasDrawImage(0, 0, "S:/Emoji/WAVE1.png");
k10.canvas->updateCanvas();
k10.canvas->canvasDrawImage(0, 0, "S:/Emoji/WAVE2.png");
k10.canvas->updateCanvas();
k10.canvas->canvasDrawImage(0, 0, "S:/Emoji/WAVE3.png");
k10.canvas->updateCanvas();
k10.canvas->canvasDrawImage(0, 0, "S:/Emoji/WAVE4.png");
k10.canvas->updateCanvas();
k10.canvas->canvasDrawImage(0, 0, "S:/Emoji/WAVE5.png");
k10.canvas->updateCanvas();
k10.canvas->canvasDrawImage(0, 0, "S:/Emoji/WAVE6.png");
k10.canvas->updateCanvas();
}
  1. Trigger the Animation
  2. Call WaveAnimation(); inside your loop() or based on a condition (e.g., when the temperature is just right).

B. Adding Custom Voice Responses

Voice responses are .WAV files stored on the SD card and played using the Music object.

1. Record or Get WAV Files

  1. Format: .wav (mono or stereo, 8-bit or 16-bit PCM)
  2. Filenames like FUN1.wav, FUN2.wav, etc., are recommended

2. Copy Files to SD Card

  1. Place the voice files in the S:/Voice/ folder on the SD card.

3. Play Voice File in Code

You can play a specific or random file like this:

int index = random(1, 4); // FUN1.wav to FUN3.wav
String file = "S:Voice/FUN" + String(index) + ".wav";
music.stopPlayAudio();
music.playTFCardAudio(file.c_str());


For animation, I used Canva to create animated GIFs, which I then exported and split into individual PNG frames using EZGIF.

For voice, I used text-to-speech (TTS) and exported the audio as stereo .wav files.

Conclusion

Bloom Buddy #Unihiker #DFRobot #NextPCB

The Bloom Buddy – Smart Plant Companion brings emotional intelligence to plant care by combining sensor-based monitoring, interactive animations, and context-aware voice feedback. Built on the UNIHIKER K10 platform, it not only measures vital plant conditions like soil moisture, light, temperature, and humidity, but also expresses the plant's β€œmood” through rich visual and audio personality cues.

This Project transforms simple environmental readings into a lively, engaging experience. Whether your plant is β€œsad” from dryness or β€œhappy” after watering, Bloom Buddy offers a fun and intuitive way to understand and respond to plant needs.

What You've Learned:

βœ… How to read and process sensor data

βœ… How to manage SD card media for animations and audio

βœ… How to trigger events based on environmental thresholds

βœ… How to build engaging UI/UX on embedded platforms

What You Can Do Next:

  1. Add Wi-Fi/Bluetooth to log data online or send mobile notifications
  2. Train a machine learning model to predict watering schedules
  3. Include voice recognition for user commands
  4. Design your own custom emojis, animations, or personalities
🌱 Bloom Buddy isn't just a plant monitor, it's a plant companion that speaks your plant's language.