Hydroclawnics
An AI agent that watches a hydroponic farm's sensor data, controls its equipment, and shows what it is doing in a 3D dashboard.
Measured highlights
- Five sensors at once
- read from an Arduino Uno R3
- 1 physical pot + 200 simulated pods
- with the same agent code controlling both
Context
Hydroponic farms need constant monitoring across hundreds of pods, but most tools only show sensor data instead of acting on it, explaining what happened, or learning from it.
An AI agent watches a hydroponic farm's sensor data and directly controls its fans, heaters, humidifiers, and pH dosing to keep the plants alive, instead of waiting for someone to spot a problem on the dashboard.
How data moved
- Farm input
An Arduino Uno R3 read temperature, TDS, flow, water level, and pH sensors at the same time.
- Live connection
A Python serial bridge sent readings through FastAPI and WebSockets to the React dashboard.
- Control path
Communication worked in both directions, so the application could receive telemetry and send equipment commands back.
The live dashboard
1 / 2My role
- Responsibility
- Full-stack and device integration
- Team
- Team of 3
- Tools
- React · Three.js · FastAPI · WebSockets · Arduino
I built the React dashboard, including the Three.js visualizer, toasts, charts, and responsive pod grid. I also built the farm simulator, worked on the Python serial bridge and backend integration, connected the live hardware to the dashboard, and helped tune the system prompts. A teammate handled the SQLite work.
Process & decisions
The agent explained problems without acting.
The agent understood the hydroponic science, but it did not have verified target ranges to work from. It could spend an entire response debating a critical reading and never do anything about it.
- Use real crop ranges
- We added verified target ranges for lettuce, tomato, basil, and spinach instead of asking the agent to figure them out from scratch.
- Make every response end with a decision
- We required OBSERVATION → DECISION → ACTION and limited the agent to three sentences of reasoning before it had to act.
- Keep the response short
- We capped each API call at max_tokens=400 so the agent could not use the whole cycle thinking out loud.
Reading the telemetry
Outcome
Response length dropped by about 80%. Instead of circling the problem, the agent turned on the cooler and recorded why.
- Before
- 800-token non-decision
- After
- 120-token action


