Self-Watering Planter
A three-part self-watering planter: an outer pot that holds water, an inner pot for soil, and a slotted wick basket. The inner pot's 45 degree conical flange rests on the rim of the outer pot and centers itself, and the wick basket drops through the center of the inner pot so soil or cord inside it draws water up from the reservoir. A U-shaped notch in the rim serves as both filling opening and water level window, and the inner pot has drain holes. The outer pot is 120 mm across and 90 mm tall, the assembled planter stands 140 mm tall, and the print layout is 290 x 120 x 100 mm. All parts print as laid out without supports; PETG is recommended for long contact with water. You can change the rim diameter, outer pot height, how far the inner pot rises above the rim, water depth, wall thickness and number of drain holes.
# Self-Watering Planter - double-walled pot with a water reservoir and wick basket
#
# Outer pot = water reservoir. Inner pot = holds the soil; its 45 deg conical flange
# rests on the inner rim of the outer pot and centers itself. A "wick basket"
# (a slotted tube) drops into the center hole of the inner pot's bottom; soil or cord packed in it draws up water.
# The outer pot's rim has a filling window (which doubles as a water level window).
#
# Three parts (outer pot, inner pot, wick basket) are laid out along X, all in print orientation:
# outer pot = upright / inner pot = upright / wick basket = upside down, lip on the bed
# Profiles are drawn on the XZ plane as (radius, height) and revolved around Z, so the axis is Z from the start.
@param 80..160 step:5 desc:"Outer pot rim outer diameter (mm)"
top_d = 120
@param 60..140 step:5 desc:"Outer pot height (mm)"
res_h = 90
@param 20..80 step:5 desc:"Height of the inner pot above the outer pot (mm)"
above = 50
@param 20..60 step:5 desc:"Water depth from the inner pot bottom to the outer pot floor (mm)"
water = 37
@param 1.6..4 step:0.1 desc:"Wall thickness (mm)"
wall = 2.5
@param 3..8 step:1 desc:"Number of drain holes"
n_drain = 6
# --- Outer pot (reservoir) -------------------------------------------
rt = top_d / 2 # rim outer radius
taper = 10 # radius difference between rim and base
rb = rt - taper # base outer radius
bot = wall + 0.5 # floor thickness
res_body = workplane XZ
| sketch [(0, 0), (rb, 0), (rt, res_h), (rt - wall, res_h),
(rb - wall, bot), (0, bot)]
| revolve Z
# Filling window: U-shaped notch cut down from the rim
win_w = 24
win_h = 16
window = box win_w (taper * 3) (win_h + 1) | floor
| translate 0 rt (res_h - win_h)
reservoir = res_body | diff window
# --- Inner pot -------------------------------------------------------
# Inner pot coordinates: z=0 is the underside of its bottom. Placed in the outer pot it sits at z0 = bot + water
z0 = bot + water
# The conical flange makes line contact with the outer pot's inner rim edge (rt - wall, res_h).
# At 45 deg, the outer edge r=rt is wall higher than that point
ins = res_h - z0 + wall # height from the bottom to the outer edge of the conical flange
gap = 3 # minimum gap between inner pot body and outer pot wall (at the rim)
pr = rt - wall - gap # body outer radius (where the cone starts)
c = rt - pr # radial width of the 45 deg cone = its height
pb = pr - 10 # bottom outer radius
tw = wall + 0.5 # inner pot wall thickness (tw/sqrt(2) normal to the cone)
pbt = wall + 0.5 # inner pot bottom thickness
pot_top = res_h - z0 + above # above the outer pot's rim by above
# Hole for the wick basket (sliding fit: 0.4mm per side)
wick_r = 11 # wick basket outer radius
hole_r = wick_r + 0.4
pot_body = workplane XZ
| sketch [(hole_r, 0), (pb, 0), (pr, ins - c), (rt, ins),
(rt, pot_top), (rt - tw, pot_top), (rt - tw, ins),
(pr - tw, ins - c), (pb - tw, pbt), (hole_r, pbt)]
| revolve Z
drain_r = 2.5 # 5mm diameter drain holes
drain_pc = (hole_r + pb - tw) / 2
drains = cylinder drain_r (pbt + 2) | floor | translate 0 0 -1 | polar n_drain drain_pc
pot = pot_body | diff drains
# --- Wick basket -----------------------------------------------------
# The lip rests on the top of the inner pot's floor; the tube reaches down to 3mm above the outer pot floor
lip_r = wick_r + 4
lip_t = 2
wick_in = wick_r - 2.5 # tube inner radius
wick_len = lip_t + pbt + water - 3 # from the lip top to 3mm above the outer pot floor
slot_w = 3
slot_h = wick_len - lip_t - 9
wick_tube = workplane XZ
| sketch [(wick_in, 0), (lip_r, 0), (lip_r, lip_t), (wick_r, lip_t),
(wick_r, wick_len), (wick_in, wick_len)]
| revolve Z
slots = union [box (wick_r * 3) slot_w slot_h,
box slot_w (wick_r * 3) slot_h]
| floor | translate 0 0 (lip_t + 3)
wick = wick_tube | diff slots
# --- Layout ----------------------------------------------------------
sp = 10
union [reservoir,
pot | translate (rt * 2 + sp) 0 0,
wick | translate (-(rt + lip_r + sp)) 0 0]