
Sept 2025 – Present
Embedded Systems Developer
UBC AgroBot
Automation subteam member building the IoT sensor network and observability stack for an autonomous hydroponics system.
What AgroBot and Agroponics are
UBC AgroBot is a student engineering design team focused on agricultural robotics. It has two main projects: a field robot for autonomous weeding and crop monitoring, and Agroponics – a fully autonomous hydroponic growing system. Agroponics is what I work on.
The Agroponics team is building a Deep Water Culture hydroponic farm inside a converted trailer at UBC Totem Field. DWC is a method where plant roots hang directly in oxygenated, nutrient-rich water rather than soil. Done right, it uses about 90% less water than traditional soil farming and lets you grow in a fully controlled environment. The trailer houses the growing beds, the water systems, and eventually all the electronics to run it automatically.
The team splits into three subteams: structure (the trailer build-out, water plumbing, framing), plants (crop selection and growth experiments), and automation (the software and hardware layer that makes the system self-managing). I’m on automation.
What the full system is supposed to do
The end goal is a closed-loop autonomous system. Sensors distributed through the growing environment continuously measure the variables that determine plant health: water temperature, pH, electrical conductivity (which tells you nutrient concentration), dissolved oxygen, turbidity, and water level. That data feeds into a control system that can automatically adjust conditions – dosing nutrients, triggering pumps, managing airflow – without anyone needing to be on site.
The architecture looks like this:
- ESP32 sensor nodes sit at different points in the system and read from sensors over I2C, SPI, and UART interfaces.
- The nodes publish readings to a central MQTT broker over the local network. MQTT is a lightweight pub/sub protocol designed for exactly this kind of many-device, high-frequency reporting.
- A Raspberry Pi running Linux acts as the hub: it hosts the broker, receives all the sensor data, and is the point from which the control logic will run.
- A QuestDB time-series database stores every reading, making it fast to query trends over time.
- Grafana dashboards sit on top of QuestDB and visualize the current state and history of the system.
- A Cloudflare tunnel exposes the dashboards securely over the internet, so any team member can check on the system remotely without the Pi being directly exposed.
Right now, the system is in the monitoring phase: the sensor network is collecting data and the dashboards are live. The next phase is closing the loop – using the readings to actually trigger actuators and automate the adjustments.
What I built
I deployed the Linux environment on the Raspberry Pi and set up the IoT network. The communication layer between the Pi and the ESP32 nodes is written in C++ on both ends using MQTT. For the observability stack, I set up QuestDB to ingest the sensor stream and configured Grafana dashboards the team uses to track crop health. Remote access to the dashboards goes through a Cloudflare tunnel.
The full technical write-up is in the case files.