A Simple Idea and a 3D Printer… the Result? Automated Self-Watering Smart Pot

by MertArduino in Living > Gardening

528 Views, 14 Favorites, 0 Comments

A Simple Idea and a 3D Printer… the Result? Automated Self-Watering Smart Pot

A simple idea and a 3D printer… The result?

Hey friends, I love my plant but sometimes I forget to water it. As a maker, I thought, I really need to find a solution for this. This is my journey of turning a simple idea into a 3D printed self-watering smart planter.

The project includes:

  1. A 3D printed water tank, soil container, and electronics enclosure
  2. A smart watering system with a pump, spray nozzle, and water level sensor
  3. A Wi-Fi connected control board (Wemos D1 Mini)
  4. A mobile app for real-time monitoring, RGB LED control, and scheduling automatic watering

3D Design and 3D Printing

002.png
Ekran Resmi 2025-10-05 19.03.45.png
003.png

So I decided to design a self-watering smart planter. At the bottom there is a water tank, above that a soil container, and on top an electronics enclosure. All of them are connected with a vertical support piece that also hides cables and hoses. My biggest helper in this process was the Bambu Lab A1 Combo! With the help of my Bambu Lab A1 Combo 3D printer, I was able to design, print, and assemble everything into a working prototype. The printer made it possible to bring my idea to life with multi-color prints, easy setup, and seamless results. Want to start your own 3D printing journey? Check Bambu Lab here: https://tidd.ly/3Kt4fUK

All 3D models and Print profile, circuit schematics, source code, and components are available here:

https://makerworld.com/en/models/1846192-automated-self-watering-smart-planter#profileId-1989224

Assembly 3D Parts

003 (1).png
005.png
006.png
007.png
008.png
009.png

The prints came out strong and reliable. Still, to make sure the water tank is fully sealed, I applied a thin layer of epoxy resin inside it. The tank needs to dry for twenty four hours, so while it cures, let’s continue with the assembly.

First I attach the soil container to the vertical support using M three screws and nuts. This makes the structure solid and stable. Then I carefully move the plant into its new container, add some extra soil to support the roots, and the planting is complete.

Before adding the electronics, I install the RGB ring LED. After that, the electronics enclosure is fixed to the vertical support with M three screws. With the main parts together, I add a decorative frame around the electronics enclosure. Its mosaic like pattern makes the whole build cleaner and more stylish.

Spray Nozzle and Water Pump

010.png
Ekran Resmi 2025-10-12 08.39.14.png
011.png
012.png
Ekran Resmi 2025-10-12 08.22.42.png

Next comes the spray nozzle. It has two modes, a tight pressurized jet for direct watering or a softer spray that creates a gentle rainfall effect over the whole plant. This way watering is both effective and elegant.

Adjustable 2-4 Bar Low Pressure Spray Nozzle:

  1. Nozzle 1 - https://share.temu.com/mQbTOvtQnRC
  2. Nozzle 2 - https://amzn.to/4mXgzKj
  3. Nozzle 3 (It was used in the project, but it can also be found in a local shop) - https://sismist.com.tr/dusuk_basinc_spreyleme_nozulu_pirinc_ayarli_2-4bar_civi_baglanti


Finally I mount the water pump inside the electronics enclosure and secure it with screws. I measure and cut the hose for the nozzle, tighten it with a cable tie so it stays in place, and guide the inlet hose through the channel in the vertical support down into the water tank. Now the water system is fully connected.

DP-2FM 15V Water Pump (or similar 12V and approximately 3 bar pressure power is ideal)

The DP-2FM 15V DC Water Pump is a water pump that can be used for water transfer in various electronic projects. It has a DC 15V operating voltage. It features a flow sensor (but we are not using a flow sensor in the project)

Technical Specifications:

  1. Model: DP-2FM Series: 03
  2. Flow Rate: 430-530 cc/min
  3. Max. Pressure: 3 bar
  4. Current: <300 mA
  5. Noise: 55 dB
  6. Voltage: 12V DC

Dimensions:

  1. Motor Diameter: 27mm
  2. Motor Length: 60mm
  3. Water Inlet Diameter: 4.9mm
  4. Outlet Diameter: 6.4mm

Water Pump (or similar):

  1. Water Pump Model 1 - https://amzn.to/4oe9Blf
  2. Water Pump Model 2 - https://amzn.to/3WvWUXc
  3. Water Pump Model 3 (It was used in the project, but it can also be found in a local shop) - https://www.motorobit.com/dp-2fm-15v-water-pump-with-flow-sensor

Circuit

013.png
Ekran Resmi 2025-10-03 11.28.50.png
Ekran Resmi 2025-10-03 11.43.26.png
014.png
015.png

Now it is time to make this project smart. On the breadboard I am using a Wemos D1 Mini Wi Fi board, together with a voltage regulator and a MOSFET to drive the pump. For water level detection I added a simple analog sensor, extended with jumper wires.

Circuit Assembly

Follow these steps carefully to assemble your Automatic Plant Watering System. Double-check component orientation (especially diodes, electrolytic capacitors, and the MOSFET).

Power Supply Section:

  1. Input Connector (U3): Connect your 12V DC adapter (positive to pin 1, negative to pin 2).
  2. Decoupling Capacitor (C4): Place a 470µF electrolytic capacitor directly across the 12V input for stability (observe polarity: + to +12V, – to GND).

Voltage Regulation for Wemos + NeoPixel:

  1. Regulator (U4 - L7805):
  2. Pin 1 = 12V input
  3. Pin 2 = GND
  4. Pin 3 = +5V output
  5. Bypass Capacitors:
  6. Add 100nF ceramic capacitors (C5, C6) close to the regulator input and output.
  7. Add a 470µF electrolytic capacitor on the 5V output line to handle surges.
  8. This regulated +5V rail will power both the Wemos D1 Mini and the NeoPixel Ring.

Wemos D1 Mini (U1) Connections:

  1. Connect 5V pin of the Wemos to the 5V rail from the regulator.
  2. Connect GND pin to the common ground.
  3. D1 (GPIO5) → Gate resistor R3 (330Ω) → IRFZ44N MOSFET Gate.
  4. D2 (GPIO4) → Data line to NeoPixel Ring (via resistor R2 = 330Ω).
  5. A0 (Analog) → Output of the Water Level Sensor (H1).

Water Pump Driver (MOSFET Stage)

  1. MOSFET (Q1 - IRFZ44N):
  2. Source → GND
  3. Drain → Negative terminal of water pump (U5 pin 2)
  4. Gate → From Wemos D1 through R3 (330Ω)
  5. Pull-down resistor (R1 - 10kΩ): Connect between Gate and Source (ensures pump stays OFF when idle).
  6. Pump Connection (U5):
  7. Positive terminal → 12V rail
  8. Negative terminal → MOSFET Drain
  9. Flyback Diode (D1 - 1N5822): Connect across the pump terminals (anode to MOSFET Drain, cathode to +12V) to absorb voltage spikes.

NeoPixel Ring (H2):

  1. +5V line → Through D2 (1N4007) diode (protects against reverse current).
  2. GND → Common ground.
  3. Data In → Wemos D2 (via R2 - 330Ω resistor).
  4. Decoupling Capacitor (C2, 470µF) across 5V and GND, close to the ring (prevents flickering).

Water Level Sensor (H1):

  1. Pin 1 (VCC) → 3.3V from Wemos
  2. Pin 2 (Signal) → A0 of Wemos
  3. Pin 3 (GND) → Common ground

Extra Capacitors for Stability:

  1. C1, C3 (470µF each): Placed across the pump supply and the 5V rail near the Wemos for extra decoupling.

Final Checks:

  1. Verify electrolytic capacitor polarity.
  2. Verify diode orientation (stripe = cathode).
  3. Verify MOSFET orientation: Gate (left), Drain (middle), Source (right, when facing the front with text).
  4. Ensure common ground between all modules.

To power the system I connect a twelve volt adapter cable through the channel into the electronics enclosure. Then I place the breadboard inside and complete the connections for the water sensor, the LED, the motor, and power. Finally I close the top cover of the enclosure and secure it with screws.

By now the water tank is fully cured and ready to use. I also added a decorative frame inside it. All the other parts are carefully placed on top, while the water sensor and pump hose are positioned inside. At this point the entire structure comes together as one complete build.

Creating an App (Blynk Template Side)

Ekran Resmi 2025-10-05 19.25.56.png
017.png
Ekran Resmi 2025-10-05 17.14.12.png
Ekran Resmi 2025-10-05 17.16.26.png
Ekran Resmi 2025-10-05 17.18.56.png
Ekran Resmi 2025-10-05 17.20.16.png

For the control side I created a simple app using a free drag and drop tool. It shows the water level, controls the RGB LED, lets me set pump schedules, and even allows manual start and stop for watering.

This step covers everything end-to-end: create a Blynk template and datastreams, flash the firmware, understand what each part of the code does, and build the mobile dashboard. It matches the pins and virtual pins used in the sketch: V1 = Pump (Switch), V2 = Water level gauge, V4 = Timer Input, V3/V5/V6 = RGB (zeRGBa Advanced).

What you need:

  1. Free Blynk account (console.blynk.io) and the Blynk mobile app
  2. The Arduino sketch from this project
  3. 2.4 GHz Wi-Fi and its SSID/password

1. Create the Blynk template:

  1. Sign in to Blynk Console → Templates → New Template
  2. Name: SelfWatering (any name is fine)
  3. Hardware: ESP8266, Connection: WiFi
  4. Create and note your Template ID and Template Name (you will place them in the code)

2. Add the template datastreams (must match the code)

  1. Template → Datastreams → New Datastream → Virtual Pin
  2. Create exactly these:
  3. V1 - Integer - min 0, max 1 - Name: Water Pump
  4. V2 - Integer - min 0, max 100 - Units: % - Name: Water Level V2
  5. V3 - Integer - min 0, max 255 - Name: LED R V3
  6. V5 - Integer - min 0, max 255 - Name: LED G V5
  7. V6 - Integer - min 0, max 255 - Name: LED B V6
  8. V4 - String Name: Pump Time V4 - (for Timer Input widget)
  9. Click Save and Apply

3. Create a device from the template

  1. Console → Devices → New Device → From Template → select SelfWatering
  2. Open the device page and copy the Device Auth Token

Creating an App (Source Code Side)

Ekran Resmi 2025-10-05 17.25.11.png
Ekran Resmi 2025-10-05 17.28.15.png
Ekran Resmi 2025-10-05 17.30.10.png
Ekran Resmi 2025-10-05 17.30.26.png
Ekran Resmi 2025-10-05 17.30.38.png

4. Put IDs and Wi-Fi into the firmware and upload

  1. In the sketch, replace placeholders:
  2. BLYNK_TEMPLATE_ID → your Template ID
  3. BLYNK_TEMPLATE_NAME → your Template Name
  4. BLYNK_AUTH_TOKEN → your Device Auth Token
  5. ssid / pass → your Wi-Fi credentials

The sketch uses ESP8266WiFi and BlynkSimpleEsp8266 for Wi-Fi and Blynk connectivity, Adafruit_NeoPixel for the LED ring, and time.h for NTP clock functions.

  1. Board: LOLIN(WEMOS) D1 R2 & mini (ESP8266), Flash 4M, CPU 80 MHz, Upload speed 921600 or 115200
  2. Upload and open Serial Monitor @115200. You should see “WiFi Connected” and the IP address

5. Understand the code mapping (what the app will drive)

  1. Pins: D1 = pump MOSFET gate; A0 = HW-038 analog; D2 = NeoPixel data; LED_COUNT = 12
  2. Water calibration: LVL_LOW and LVL_HIGH convert A0 to 0–100% (adjust for your sensor)
  3. PUMP_TIME = automatic runtime in milliseconds (e.g., 8000 ms)
  4. Virtual pins: V1 pump switch, V2 gauge, V4 timer input, V3/V5/V6 RGB (zeRGBa Advanced)
  5. Scheduler: NTP time, checks every 1 s, triggers once per day and resets at 00:00:00
  6. RGB: applyRGB() writes R/G/B to all LEDs immediately

Creating an App (mobile Dashboard Side)

Ekran Resmi 2025-10-05 17.49.56.png
Blynk-Widget-001.png
Blynk-Widget-002.png
Blynk-Widget-003.png
Blynk-Widget-004.png
Blynk-Widget-005.png

6. Build the mobile dashboard (Blynk app)

  1. In the Blynk app select the SelfWatering device
  2. Add a Switch for manual pump control:
  3. Title: Pump, Datastream: V1, Mode: Switch, Off value: 0, On value: 1
  4. Add a Gauge for water level:
  5. Title: Water Level %, Datastream: V2, Range: 0–100, Units: %
  6. Add a Timer Input for scheduled watering:
  7. Title: Pump Time, Datastream: V4, Time format: HH:mm:ss, set only Start Time (no need to allow start/stop input). Firmware will run the pump for PUMP_TIME once at the selected time and reset at midnight
  8. Add a zeRGBa for LED color:
  9. Enable Advanced Mode and map Red→V3, Green→V5, Blue→V6

First Run and Verification

Ekran Resmi 2025-10-05 19.26.25.png
Ekran Resmi 2025-10-05 19.28.45.png

7. First run and verification

  1. Power the device; wait for Serial to show Wi-Fi Connected and the IP
  2. Toggle Pump (Switch on V1): ON → pump runs, OFF → pump stops
  3. Gauge (V2) updates about every 10 seconds with the water percentage
  4. Move the zeRGBa control; Serial should print “RGB -> R=.. G=.. B=..” and the ring color changes instantly
  5. Set Timer Input start a minute ahead; at that time the pump runs for PUMP_TIME and stops automatically; triggers only once per day

8. Quick calibration (recommended)

  1. Note the A0 reading when the tank is empty and when full
  2. Update LVL_LOW (empty) and LVL_HIGH (full) in the code to improve the percentage display

9. Troubleshooting

  1. Device Offline: recheck Template ID/Name/Auth in code, ensure 2.4 GHz Wi-Fi, power cycle and read Serial logs
  2. LED only red or not changing: confirm zeRGBa Advanced with V3/V5/V6 integers; hardware path D2 → 330 Ω → DIN; 470 µF across ring 5V/GND
  3. Schedule not firing: confirm HH:mm:ss start time exists; internet available for NTP; remember it triggers once/day and resets at 00:00:00
  4. Pump runs at boot: ensure 10 kΩ pull-down Gate→GND and 330 Ω series resistor from D1 to Gate
  5. Gauge looks off: recalibrate LVL_LOW / LVL_HIGH using your actual empty/full readings

What do you think? How can I further improve this project? I would love to hear your thoughts in the comments! Thank you for reading.