website logo

Automated Indoor Vertical Garden

Embedded C++ PCB Design (Eagle) Python/FastAPI Mechanical Fabrication IoT
Vertical Garden Operation

Engineering Context & Motivation

As a farewell gift to my fraternity (Number Six), I set out to build a permanent installation that would provide fresh herbs for the house. However, designing for a high-occupancy shared living space presents a unique engineering challenge: compliance is near zero. If the system relies on human intervention for daily watering or lighting adjustments, it will inevitably fail during the busiest parts of the semester.

The solution was to engineer the human out of the loop. I designed an autonomous "botanical life support system" capable of maintaining 12+ plants with distinct water requirements, adapting to plant height changes, and running for weeks without refill.

Design Constraints

  • Autonomy: 2+ weeks unsupervised operation.
  • Adaptability: Modular mounting for various pot sizes.
  • Efficiency: Moving light source to maximize coverage.
  • Resourcefulness: Built largely from reclaimed materials.

Mechanical Design: Resourceful Robotics

The project was built during a period of limited access to standard supply chains, which turned sourcing into a creative constraint. I relied heavily on repurposed industrial components and additive manufacturing to achieve precision on a budget.

Vertical Linear Actuator

To maximize light uniformity and intensity while minimizing energy, I designed a moving light gantry. Instead of buying an expensive linear rail, I reverse-engineered a discarded computer monitor arm found at the Stata Center loading dock.

I stripped it down to its precision linear guide rails and designed custom 3D-printed mounts to couple it with a Nema 17 stepper motor and a lead screw. This provides smooth, controllable vertical motion for the LED panel, simulating sun movement and ensuring even growth.

Repurposed Linear Actuator
Original Monitor Mount Stepper Integration

Left: The "foraged" monitor mount. Right: Custom stepper integration.

Modular French Cleat System

Modular French Cleat Framework

The structure needs to be rigid but flexible to accommodate different plant sizes. I utilized a French Cleat system—a classic woodworking technique—reimagined with 3D-printed/laser-cut hybrid anchors.

  • Frame: Aluminum extrusion (80/20 style) for skeletal rigidity.
  • Cleats: Reclaimed wooden shelves from the house basement, milled to a 45° angle.
  • Anchors: Custom 3D-printed rings combined with laser-cut baseplates to securely hold pots of varying diameters.

Electronics & PCB Design

To move beyond breadboards and ensure reliability, I designed a custom carrier board using Eagle (via Fusion 360).

The board acts as a motherboard for the Seeed Studio XIAO ESP32S3, breaking out IO for:

  • 12V High-Power Stepper Drivers
  • Servo Valve Arrays (PWM)
  • I2C Sensor Bus (Moisture/Temp)
  • Power Regulation (12V → 5V → 3.3V)
Bare PCB

Fabricated Board

Assembled PCB

Assembled & Reflowed

Installed Controller

The final controller installed in the chassis, managing the pump and valve array.


Fluid Dynamics & Precision Irrigation

Reliable water delivery is the core constraint. Standard time-based watering is imprecise due to pressure variations from the reservoir water level. I implemented a Volumetric Delivery System:

  • Peristaltic Pump: (3D Printed) Provides positive displacement, ensuring flow rate is independent of head height. Extremely precise dosing.
  • Multiplexed Distribution: A single pump feeds a main line, which branches into servo-controlled valves.
  • Safety: Check valves prevent backflow; gravity-fed reservoir acts as a buffer.
Custom Peristaltic Pump

3D Printed Peristaltic Pump

Servo Valve Array

Servo Valve Multiplexer

Firmware & Control Architecture

The system operates on a distributed architecture to separate real-time hardware control from high-level scheduling logic. (Note: Firmware is currently in the prototype stage).

Layer 1: The Brain

Python + FastAPI

Hosted on a local server. Manages the database of plant profiles, schedules watering events, and logs moisture data. Exposes a REST API for the control unit.

Layer 2: The Coordinator

ESP32 (C++)

Fetches schedules via WiFi. Handles system state machine. Delegates critical motor timing to the sub-controller.

Layer 3: The Muscle

Arduino / Low-Level C++

Dedicated pump interface. Handles micro-stepping and servo PWM with strict timing constraints to ensure smooth peristaltic action.