🌱 Arduino Automatic Watering System for 100 Plants

NuwanNuwan
3 min read

📦 What This Is

This is a low-cost, scalable automatic watering system using Arduino, designed to control up to 100 plants using a relay-based zone system. Great for gardens, greenhouses, or indoor farms.


🧰 Components Needed (for ~100 plants)

ComponentQuantityNotes
Arduino Uno / Mega / Nano1Choose based on the IO pins
4-Channel Relay Modules2–4One per zone or water pump
Submersible Pump or Solenoid Valves4–6One per plant group
Moisture Sensors (Optional)~4–6For automatic dry detection
Transistors (e.g., TIP120)Matching pump countFor motor control, if needed
Diodes (e.g., 1N4007)1 per pumpFor back-EMF protection
Power Supply (12V or as required)1Depends on the motor specs
Tubing & SplittersAs neededTo deliver water
Jumper Wires, Breadboard / PCB-For wiring
Water Tank or Reservoir1Central water source

🧠 System Overview

You divide your 100 plants into zones (e.g., 5 zones of 20 plants). Each zone is watered by a pump/valve, controlled by a relay. You can:

  • Water on a timer

  • Water manually

  • Water is automatically supplied via moisture sensors


âš¡ Wiring Summary

  • Each relay connects to one pump or valve

  • Relays are triggered via Arduino’s digital pins

  • Use external power for motors (not from Arduino)

  • Add diodes across the motors to prevent voltage spikes

  • (Optional) Connect moisture sensors to analog pins


💻 Arduino Code (Timer-Based Example)

const int relayPins[] = {2, 3, 4, 5};  // Up to 4 zones
const int numZones = sizeof(relayPins) / sizeof(relayPins[0]);
const unsigned long wateringDuration = 10000; // 10 sec per zone
const unsigned long intervalBetweenZones = 5000;

void setup() {
  for (int i = 0; i < numZones; i++) {
    pinMode(relayPins[i], OUTPUT);
    digitalWrite(relayPins[i], HIGH); // Relay OFF (active LOW)
  }
}

void loop() {
  for (int i = 0; i < numZones; i++) {
    digitalWrite(relayPins[i], LOW); // Turn ON
    delay(wateringDuration);
    digitalWrite(relayPins[i], HIGH); // Turn OFF
    delay(intervalBetweenZones);
  }
}

🌧 Optional: Moisture Sensor Automation

Use analog sensors like this:

int moisturePin = A0;  // Sensor analog pin
int relayPin = 2;      // Single zone example

void loop() {
  int moisture = analogRead(moisturePin);
  if (moisture < 500) {
    digitalWrite(relayPin, LOW); // Turn on pump
    delay(5000);
    digitalWrite(relayPin, HIGH);
  }
  delay(10000); // Check every 10s
}

🧱 Tips for Scaling to 100 Plants

  • Group plants based on similar water needs

  • Use wider tubing splitters (e.g., 1-to-10)

  • Secure tubing so nozzles stay aimed at roots

  • Add flow restrictors if some plants get too much

  • Upgrade to ESP32 or Raspberry Pi for app/Wi-Fi control


🧰 Optional Upgrades

FeatureTools Needed
Real-time clock (RTC)DS3231 module
App/remote controlESP32 or Bluetooth module
LCD or OLED screenI2C display module
Web dashboardESP32 + Blynk / Firebase
Battery backup12V UPS or power bank

🔌 Safety Tips

  • Never power pumps directly from Arduino

  • Test the relay logic with the LED before the motors

  • Use common ground if using external power

  • Secure electronics in waterproof housing


✅ Final Thoughts

  • Easy to build, low maintenance

  • Expandable to any number of zones

  • You can 3D print pump holders or sensor mounts

  • Ideal for school projects, farms, and smart gardens


🧾 Credits

Created by: Nuwan & (ChatGPT AI)
Year: 2025
You are free to use, remix, and share with credit. 🌿

0
Subscribe to my newsletter

Read articles from Nuwan directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Nuwan
Nuwan