Automated plant watering system

Project idea

Recently National Parks Board distributed free seed packets to households, however most are so busy with work they end up forgetting to take care of the plants, mainly forgetting to water them. (At least that is a problem my parents face when attempting to grow vegetative plants).

With that I was thinking how it would be nice to have a machine that could automatically water the plants for you, so all you need to do is to remember to refill the water container.

Design brief

Project title: Automatic potted plant watering system

Function: Manages and dispenses water to multiple plant pots automatically

With my project idea finalized I created a Gantt chart to help manage and track the progress of my project. Given 4 weeks with 8 hours per week here is the rough plan I came up with:

Research

I did some research on existing projects and noted some features I can borrow to implement in my own project.

Going through multiple watering systems people have done, I decided the functions I want to implement into my design:

  • Have a water sensor detect soil dryness and control a DC motor water pump, this is the basics of an automated watering system.

  • As I want a single system to be able to manage multiple pots, I came up with a mechanism where the watering tube would be connected to a servo motor, where it will position to dispense water to the specific pot.

    It basically works by positioning the tube (connected to the DC pump) to a spout which directs the water flow onto the plant pot.

And so I decided to call the project "Plant Fountain" as the method of water delivery from a spout makes it look like some sort of water fountain display (also helps in Aesthetics).

Designing

Next is desinging how the Plant Fountain would look like. Here is the list of materials I will be working with:

Item Quanitiy
Arduino controller 1
9g Servo motor (positional) 1
Arduino water sensor 3
5V DC motor water pump 1
2N2222 Transistor 1
Resistor 200Ω 1
Tubing (for pump) -
Flower pot 3
Water bottle / anything that can contain water 1
Acrylic (3mm thick) White / Clear -

The design process was a back and forth from drawing to designing the model on FUSION 360. After multiple designs I finalised the design I prefer and think that would work.


In total the whole structure consist of 3 parts: The Tower (plywood), Servo support (acrylic) and the spouts (3D printed). I designed all of them in a single project so its easy to visualise how everything would fit together. View the tabs to see how each part is done:

×

The tower

The tower is the main structure of the plant fountain. It basically houses the electronics and mechanisms. For the Tower I decided to use plywood.

For the foundation I start with the previously made Laser cut box, from there I alter the parameters to the appropriate measurements.

First up the base: I created a new sketch for the base design extension and join extrude it. I also fillet the sharp edges.

To fit the spouts into the tower I cut out a square from the top to the measurements of the width of the spouts.

And to support the spouts mid air I created another floor, extruding as a new component and using the combine cut function to create tabs on the walls.

I decided to create a sliding door near the base in order to access the electronics when the tower is fully constructed. I did this by first cutting a square hole to my desired measurements.

I need to make some guard to prevent the door from falling, so I more tabs next to the existing ones 3mm apart (assuming the wood thickness is 3mm). I then extrude a new component and use combine cut.

I lastly extrude on the guard the actual door. I cut a slot in the door so I can slide it out. Its also a way to provide power to the electronics.

Back to the middle floor, I cut a T-shape for wiring to pass through. I also decided to turn the large cuts for the spouts into a small square, that way I can slide the spout in.

I also cut some holes for the wires and tubing.

Lastly the cover, I sketched a square with tabs, extrude as a new component and use combine cut for the other sides.

And the tower is complete!

×

Servo Support

The servo support holds the servo motor and water spout in place, as this area will most likely be splashed with water I decided to make it out of acrylic.

I created a new component for the servo support. I first create a sketch plane on the underside of the spout hole and extrude it to the thickness of the acrylic sheet.

Next I cut holes for the spouts, electronics and servo.

To prevent the spouts from sliding in and out, I decided to create guards to hold it in place: I first cut tabs onto the main piece. Then extrude a new component and use combine cut to create tabs on the other piece. I did it for all 3 spout holes.

To keep the support in place I decided to have it slot into the tower, so I extrude tabs on the sides and combine cut the tabs into the wood sides.

I lastly cut holes for the servo screws.

Completed acrylic servo support:

×

Spout

The water will be dispensed onto the spout, which will channel the water down onto the plant pots located under it.

I create a new component for the spout. I create a sketch with the tower's middle floor as the base and the servo support as outline.

I then extrude it and chamfer the sides down.

I used shell with thickness 3mm to create form the spout mouth.

I fillet the bottom edge and chamfer the top of the mouth

To create a slant, I used plane at angle and create a plane at the mouth at an angle of 13 degrees, I then extrude the base, select extent type "to object" and select the angled plane.

I lastly fillet the sides round.

The spout is complete: I will need 3 of these.

prototyping

After the initial design, I made a cardboard prototype of the design, this way I can test the design before using the actual materials. I also 3D printed a single spout to test.

Tower front
Tower back
Spout and servo fits nicely.

After prototyping, some slight design changes has been made:

  • Shifted tube hole to the cover (so the tube will not obstruct the servo rotation)
  • Changed material used to make the tower from wood to acrylic (so water will not damage it)
  • cut a tab hole for sliding door edge on the base (keeps the loose edge in place)
  • Extend spout guards upwards on servo supports (to prevent it from falling off).

The final design model:

Download Plant Fountain.f3d

Fabrication

Once the design is done, I convert the parts to its appropriate files to prepare for fabrication.

Laser cutting

The Tower and Servo holder are to be cut with the laser cutter, so I convert the part faces into a dxf file. I then use LibreCAD to check the outlines are correct. I also compiled all the parts into a single file.

Using 3mm clear acrylic for the Servo support and 3mm white acrylic for the Tower

Download dxf files.rar

3D printing

The spouts and servo horn require 3D printing to fabricate. I first convert the file to STL

I require 3 spouts, but becuase I printed 1 for testing here I only need 2.

Ultimaker Cura Print settings:

  • Layer height = 0.2mm
  • Infill: Density = 15%, Infill pattern = Grid
  • Print speed = 90mm/s
  • No support generation
  • No build plate adhesion

Completed prints:

Spout.stl | Horn.stl

Assembly

The parts were a loose fit, so I used some chloroform to fix them together. Here I only connected the slider guard and 3 of the wall panels together, so I can still fix in the interior later.

Assembled piece:

As the Servo wire was in the way, I ended up fixing the servo on from the underside of the acrylic support,

To attach the printed servo horn I simply used a screw to secure it. To secure the tube in place I used a thin wire. As the Servo can only rotate 180 degrees, I positioned the horn to face the leftmost spout opening so it can reach the other 2.

Electronics

Next is programming and integrating the electronics into the build.
The idea is to direct the servo towards the pot that is detected dry, and turns on the DC motor to pump water until no longer dry.

I first prototype and program the circuit on ThinkerCAD.

As ThinkerCAD does not have a water sensor, I used an LDR as replacement as both sensors are analog and works similarly.

I start with the output devices, which are the Servo and DC motor pump.

Testing the Servo: I programmed it such that the servo would rotate in specific angles to aim the tubing to the correct spout.

In order to interface the DC motor to the Arduino I require a transistor to run it. For this I used a 2N2222 transistor. The transistor is connected to analog pin 9.

Circuit Diagram
Breadboard connection

I wrote a program to test the servo and motor to position and dispense water.

For the input devices, I will need a water sensor to detect amount of water in soil. I connected the sensor as an analog input so it can measure moisture percentage.

Water sensor
Testing using serial monitor.

For testing I only connected 1 water sensor, while the other ports are shorted.

Arduino program code:

//water sensor
const int h1 = A0; //Plant One sensor 
const int h2 = A1; //Plant Two sensor 
const int h3 = A2; //Plant Three sensor
int value1; //h1 value
int value2; //h2 value
int value3; //h3 value

//servo
#include <Servo.h>
Servo servo1;
int pot1 = 0;
int pot2 = 90;
int pot3 = 180;

//motor pump
#define motor_pin 9

bool action = 0; 

void setup()
{
  Serial.begin(9600);
  Serial.println("ready");
  
  //servo
  servo1.attach(5);
  servo1.write(pot1);
  
  //motor
  pinMode(motor_pin, OUTPUT);
  
}

void loop()
{
  //read water sensor
  value1 = analogRead(h1);
  value2 = analogRead(h2);  
  value3 = analogRead(h3);  
    
  value1 = constrain(value1,400,1023);
  value2 = constrain(value2,400,1023);
  value3 = constrain(value3,400,1023); 
   
  value1 = map(value1,400,1023,100,0);
  value2 = map(value2,400,1023,100,0);
  value3 = map(value3,400,1023,100,0);  
  
  Serial.print("h1=");
  Serial.print(value1 );
  Serial.print(" h2=");
  Serial.print(value2 );
  Serial.print(" h3=");
  Serial.println(value3 );
  delay(1000);
  
  //pot1
  if (value1 <= 30){ //pot detect dry
    if (action == 0){
      action = !action;
      servo1.write(pot1);
      delay (3000);
      digitalWrite(motor_pin, HIGH);
      delay(4000);
      digitalWrite(motor_pin, LOW);
      delay (2000);
      action = !action;

    }
  }

   //pot2
  if (value2 <= 30){ //pot detect dry
    if (action == 0){
      action = !action;
      servo1.write(pot2);
      delay (3000);
      digitalWrite(motor_pin, HIGH);
      delay(4000);
      digitalWrite(motor_pin, LOW);
      delay (2000);
      action = !action;
        
    }
  }
   //pot3
  if (value3 <= 30){ //pot detect dry
    if (action == 0){
      action = !action;
      servo1.write(pot3);
      delay (3000);
      digitalWrite(motor_pin, HIGH);
      delay(4000);
      digitalWrite(motor_pin, LOW);
      delay (2000);
      action = !action;

    }
  }
}

How the program works:

  • The water sensors are read as analog inputs, which the readings are shown as moisture percentage.
  • When the water sensor detects moisture level is below 30, the Boolean "action" will become 1, which will prevent other actions from happening while it attends to the pot first detected.
  • The Servo will then rotate to a specific angle, which positions the tube to the correct spout.
  • The motor pump will then be turned on to dispense water, and turned off after 4 seconds.
  • "Action" will go back to 0. indicating the action is completed.
  • The program will go back to reading the water sensors.

After ensuring the I/O components work, I transfer the circuit onto an Arduino nano so it can fit into the compartment.

Side removed to connect the electronics
Arduino nano breadboard stuck to the side
The Mini-B USB jack through the door hole.

Documentation

Hero shots:

Front
Side
Back

Setting up the Plant Fountain:

  1. Place potted plants under the spouts.
  2. Insert water sensors into soil.
  3. Place pump into container, fill with water.
  4. Plug Arduino into power source.
  5. Refill water container when needed.

Video

Presentation

Review

In all, the Plant Fountain works as intended, but more improvements can be done to make it better.

Some improvements and additions that can be done:

  • A function to disable water delivery to specific spouts (if system is not required to maintain all pot stations).
  • Spout modification to prevent water puddles from staying on the spout.
  • A built in water compartment so an external bottle would not be needed.
  • Built in Grow Lights so plants can grow at night or in dark places.