← Back to the desk SHEET 02 OF 06

02 · ENGR 111

IoT smart watering system

A planter that waters itself and streams four sensors to an MQTT broker.

Role
Team lead. Enclosure, wiring and firmware
When
Oct to Dec 2025
Where
Stevens Integration Lab, team of 3
Tools
SolidWorks, ESP32, Arduino C++, MQTT, PLA

Notes

  1. ESP32, 4 sensors, data every 10 min
  2. 30 / 40% soil moisture hysteresis band
  3. Fixed sensor noise by splitting 3.3 V and 5 V

The problem

The client, IoTSmartFarm, wanted to cut wasted water in a greenhouse. We had to measure air temperature, humidity, soil moisture and light for a potted plant, water it automatically, send the data to the cloud, and fit everything in a 5 by 5 by 10 inch volume using only the kit parts, with no adhesives.

What I did

I modeled the enclosure and assembly in SolidWorks, sliced and printed it, wired the ESP32, sensors and pump, and wrote and debugged the firmware.

How it works

Once a day the pump runs long enough for about 20 mL. On top of that, if soil moisture drops below 30% it runs an extra cycle, then waits until moisture climbs back past 40% before it can fire again. That band stops it from chattering around one threshold.

The bug I’m proudest of fixing

On the bench, every time the pump turned on, the other readings slammed to their max or min. The motor was dragging the shared 5 V rail and throwing noise into the sensors. Moving the sensors to 3.3 V and leaving only the pump on 5 V fixed it at the source.

Result

After a board replacement and rewiring, the system ran for about five days in the lab, kept soil moisture in its band, and published clean data apart from one marked single-point power blip.