
TERRAPOD
A self-tending hydroponic terrarium, driven by a Pi 5 and an ESP32 sensor mesh.
TERRAPOD is a closed enclosure that grows itself. A Raspberry Pi 5 runs the scheduling logic and a local dashboard; an ESP32 talks to a mesh of sensors scattered through the reservoir and canopy, reporting soil moisture, air temperature and humidity, and reservoir level over a lightweight radio link.
The Pi acts on that data directly: dosing pumps run on a PID loop tied to reservoir EC and pH, grow lights follow a configurable photoperiod, and irrigation cycles adjust themselves against moisture readings rather than a fixed timer.
Hardware
- Raspberry Pi 5, running the scheduler, dashboard, and vision pipeline.
- ESP32, bridging a mesh of soil, air, and reservoir sensors over a lightweight radio link.
- A peristaltic pump rig for nutrient dosing, currently manual pending its own controller.
- Full-spectrum LED strips on a configurable photoperiod.
Reservoir dosing has been the long pole here. Everything else in the loop reacts to a sensor reading in under a second; dosing has to react to a trend, or it overshoots and the whole batch needs correcting.
Current state
Environmental monitoring, lighting, and irrigation are live and have been running unattended for several weeks. Reservoir dosing is next — nutrient concentration is currently manual pending a peristaltic pump controller.
The irrigation loop itself is intentionally simple: read moisture, compare
against a setpoint, and drive the pump through the same pid-controller
library used for dosing.
float error = setpoint - moisture_reading();
float output = pid_update(&irrigation_loop, error, dt);
pump_set_duty_cycle(clamp(output, 0.0f, 1.0f));
Once the dosing pump controller is wired in, it’ll run the identical loop against EC and pH instead of moisture.
Field Notes
One Grow Cycle, Timelapse · 0:05
Automated lighting and irrigation across a full six-week grow cycle.


