Automatic Plant watering and Happiness monitoring system

watering-system-arduino

The main motto of this project is to provide automatic water supply to plant when it feels thirsty. We intend to automate the watering of plants and deploy Arduino to do the job for us. This will take care of the water requirements of a plant by continuously monitoring its needs. Also this plant watering system will indicate the happiness level of plant to user 🙂 .

COMPONENTS USED:

  • Arduino Uno Board
  • Servo motor
  • Moisture sensor
  • MAX7219 8×8 LED matrix module

SCHEMATIC DIAGRAM OF PLANT MONITORING SYSTEM:

plant-watering-monitoring-schematic-diagram

MAX7219 8×8 LED MATRIX MODULE:

max7219-led-matrix-module

I have used a MAX7219 based 8×8 LED matrix module which will make our job pretty easier in driving the dot matrix. Also it will save I/O pins from our Arduino. You can buy one easily from Amazon.in   or make one on your own, the choice is up to you. You even can interface the dot matrix directly to Arduino. Here is the circuit for making your own dot matrix module.

max7219-8x8-dot-matrix-interface

Circuit Courtesy : www.tronixstuff.com

WORKING EXPLANATION:

The moisture sensor provides an analogue output, which will be fed to Arduino. In this project moisture sensor is connected to analogue pin A0 of the Arduino board. Moisture sensors are widely available in many stores or you can get one from online vendors.

PLANT WATERING:

  • Arduino reads the moisture value from the sensor.
  • If the value reaches the dry threshold, it activates the servomotor.
  • As soon as the motor starts pumping water into soil the moisture level gradually rises
  • Arduino will test for moisture level repeatedly and when wet soil threshold is reached, it stops the servo from supplying water.

HAPPINESS MONITORING:

We have written the code in such a way that various range of moisture level in the soil will trigger different reaction in the dot matrix. We have assigned three smileys to indicate the plant condition (so called happiness).

  • Happy face -when it have sufficient water
  • Sad face-  when it needs water supply
  • Moderate – when its water level is low

PROJECT AT WORK:

plant-watering-system-happy-face-smiley

CODE:

#include<SoftwareSerial.h>
#include<Servo.h>
#include "LedControl.h"
#include "binary.h"

Servo myservo1;
int pos1=90;
int SensorValue1=0;
//int SensorPin1=A0;
/*
 DIN connects to pin 12
 CLK connects to pin 11
 CS connects to pin 10 
*/
LedControl lc=LedControl(1,2,3);
int SensorPin =A1;
int sensorValue=0;

// happy face
byte hf[8]= {B00111100,B01000010,B10100101,B10000001,B10100101,B10011001,B01000010,B00111100};
// sad face
byte sf[8]= {B00111100,B01000010,B10100101,B10000001,B10011001,B10100101,B01000010,B00111100};

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  myservo1.attach(12);
   lc.shutdown(0,false);
  // Set brightness to a medium value
  lc.setIntensity(0,8);
  // Clear the display
  lc.clearDisplay(0); 
  Serial.begin(9600);
  sensorValue=analogRead(SensorPin);
}

void draw_SadFaces() 
{
  // Display sad face
  lc.setRow(0,0,sf[0]);
  lc.setRow(0,1,sf[1]);
  lc.setRow(0,2,sf[2]);
  lc.setRow(0,3,sf[3]);
  lc.setRow(0,4,sf[4]);
  lc.setRow(0,5,sf[5]);
  lc.setRow(0,6,sf[6]);
  lc.setRow(0,7,sf[7]);
    }
  // Display neutral face
  *void draw_neutralFaces()
    {
     lc.setRow(0,0,nf[0]);
     lc.setRow(0,1,nf[1]);
     lc.setRow(0,2,nf[2]);
     lc.setRow(0,3,nf[3]);
     lc.setRow(0,4,nf[4]);
     lc.setRow(0,5,nf[5]);
     lc.setRow(0,6,nf[6]);
     lc.setRow(0,7,nf[7]);
     }*/
  // Display happy face
  void draw_happyFaces() 
    {
    lc.setRow(0,0,hf[0]);
    lc.setRow(0,1,hf[1]);
    lc.setRow(0,2,hf[2]);
    lc.setRow(0,3,hf[3]);
    lc.setRow(0,4,hf[4]);
    lc.setRow(0,5,hf[5]);
    lc.setRow(0,6,hf[6]);
    lc.setRow(0,7,hf[7]);
    }

void loop(){
  Serial.print("sensor=");
  sensorValue = analogRead(SensorPin);
  Serial.println(sensorValue);
     if (sensorValue>=700)
      {
      draw_happyFaces();
      delay(15);
      }
    else if (sensorValue<=300)
     {
       draw_SadFaces();
       delay(15);  
     }
/*     else
     {
       draw_neutralFaces();
     }*/

   int SensorValue1=analogRead(SensorPin);
if(SensorValue1<300)
      {
       for(pos1=90;pos1<=180;pos1++)
        {
        myservo1.write(pos1);
         delay(15);
         }
      }

  }

 APPLICATIONS:

  • Used in artificial application of watering the plants in the houses(over lawn,potted plants,etc) in the absence of a person.
  • Used in the plant nursery, where it is difficult to watch over all plants at a time.

MAKERS:

inventor-icon

  1. Bhavya Sree
  2. Lalitha

2 Comments

  1. Marrion

    What kind of servomotor is used here? And will it run on Arduino Mega?

    Reply
    1. Frank DonaldFrank Donald

      Marrion,
      I don’t think there is much any specification about Servo motor. Arduino Mega should do fine but you should do appropriate libraries.

      Reply

Leave a Comment

Your email address will not be published. Required fields are marked *