Automated Plant Watering System
DEGREE OBJECTIVE 1
Design and complete robotic and embedded systems solutions that address real-world situations and challenges.
How it meets the objective: It takes a real problem — over- and under-watering plants — and solves it end to end: the system senses actual soil conditions, waters only when needed, refuses to run the pump dry, and reports everything on an LCD and LED ring.
Full system demo: automatic watering triggered by soil moisture, tank-level interlock, and IR remote control of mode and threshold.
A closed-loop irrigation controller on an Arduino Uno: soil moisture sensing, tank-level checking, PWM pump control with a hard safety interlock, and a full user interface. Built as the RBT173 final project in Arduino C++ with the circuit modeled in Tinkercad.
How it works
The controller averages eight soil-moisture ADC samples, maps them to a calibrated 0–100% scale, and compares them against a user-adjustable threshold. An HC-SR04 ultrasonic sensor measures the reservoir level with 1 cm hysteresis to prevent flickering at the boundary. When moisture drops below the threshold and the tank is OK, the pump runs for a timed cycle with PWM soft start/stop through an NPN low-side driver with a flyback diode. A 16x2 LCD reports mode, moisture, threshold, raw ADC, and tank status; a 16-pixel NeoPixel ring shows system state at a glance; an NEC IR remote handles mode, manual watering, and threshold changes.
Engineering highlights
Safety interlock: the pump cannot start — in AUTO or manual — while the tank reads LOW, and it stops immediately if the tank goes LOW mid-cycle. No dry running.
Fully non-blocking: all timing runs on millis(), so the IR receiver, LCD, and animations stay responsive while the control loop runs.
Real debugging under constraints: NeoPixel refreshes were starving the IR decoder, since the library disables interrupts during show(). Throttling LED frames to ~90 ms and rewriting the watering animation fixed remote responsiveness; tone() conflicted with IR timing, so it was replaced with a manual 2 kHz piezo toggle.
Robust IR handling: matches multiple NEC code variants — 24-bit families, RAW32 byte orders, 8-bit fallbacks — so different remotes work.
Full system schematic: soil moisture sensor, HC-SR04 ultrasonic tank sensor, 16x2 LCD with contrast pot, NeoPixel ring, IR receiver, piezo, and the NPN low-side pump driver with flyback diode.