Welcome to Hackster!
Hackster is a community dedicated to learning hardware, from beginner to pro. Join us, it's free!
Pramit Chaudhury
Published

Hydroponics System Using Arduino

This Project was a Hydroponic system i.e. which can be used for temperature, time and Humidity based automatic irrigation system.

AdvancedWork in progress2 days3,067
Hydroponics System Using Arduino

Things used in this project

Hardware components

Arduino Mega 2560
Arduino Mega 2560
×1
DHT11 Temperature & Humidity Sensor (4 pins)
DHT11 Temperature & Humidity Sensor (4 pins)
×1
DS3231M - ±5ppm, I2C Real-Time Clock
Maxim Integrated DS3231M - ±5ppm, I2C Real-Time Clock
×1
Texas Instruments LM2596
×1
SparkFun DC JACK
×3
LCD 16x4
×1
Rotary potentiometer (generic)
Rotary potentiometer (generic)
×1
Male-Header 36 Position 1 Row- Long (0.1")
Male-Header 36 Position 1 Row- Long (0.1")
×3
Female Header 20 Position 2 Row (0.1")
Female Header 20 Position 2 Row (0.1")
×1
12v solenoid valve
×1
2 Channel Relay
×1
ciramic capacitor
×1
Pref Board
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)

Story

Read more

Custom parts and enclosures

aquaponics_v0XzrHjMQo.123dx

Schematics

schematics_MATRAE1fCH.pdf

Note: connection will changed according to code

Code

Aquaponics code

C/C++
Install the required libraries and connect the connection according to code variable
//--------- Library for lcd ---------//
#include<LiquidCrystal.h>
//--------- Library for RTC ---------//
#include <Wire.h>
#include "ds3231.h"
//--------- Library for DHT ---------//
#include "DHT.h"
//--------- RTC define ---------//
#define BUFF_MAX 128
char recv[BUFF_MAX];
unsigned int recv_size = 0;
unsigned long prev, interval = 1000;
//--------- DHT define ---------//
#define DHTPIN A0
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
//--------- Lcd pin define ---------//
LiquidCrystal lcd (2, 3, 4, 5, 6, 7);
//--------- Switch define ---------//
int menu = A14;
int up = A13;
int down = A12;
int right = A11;
int left = A15;
//--------- Output pins -----------//
int relay1 =A10;
int relay2 =A9;
//--------- Theshold Variables --------//
int temp=32;
int temp2=30;
int humid=70;
int humid2=80;
int mode=1;
//--------- Global variables ---------//
int h = 0;
int i = -1;
int j = 10;
char tempF[6]; 
char humF[6];
int hum=0;
int tem=0;
long previousMillis = 0;    
long currentMillis = 0;    
int k6;
long mdelay = 1000; 
//---------Storage states of button for debounce function ---------//
boolean current_menu = LOW;
boolean last_menu = LOW;
boolean current_up = LOW;
boolean last_up = LOW;
boolean current_down = LOW;
boolean last_down = LOW;
boolean current_left = LOW;
boolean last_left = LOW;
boolean current_right = LOW;
boolean last_right = LOW;
//--------- Function prototype ---------//
void Dht();
void Rtc();
void key_status();
void display_menu(int);
void time_period(int);
//---------Flag Variable----------//
int a,b,c,z=1,e=0,e1=0,f=0,f1=0,frequency,duration,ut=0,rt=1,ut1=0,ut2=0,ut3=0,ut4=0,k1=0,k2=0,p1,p2,et=0,ft=0,m1=0,m2=0,m3=0,z1=0,z2=0,gh1=0,gh2=10,gh3=1;
void setup() //--------- Put your setup code here, to run once ---------//
{
  //--------- Set baud rate ---------//
 /* Serial.begin(9600);
  //--------- Set relay as output ---------//
  pinMode(relay1, OUTPUT);
  pinMode(relay2,OUTPUT);
  //--------- Set RTC ---------//
  Wire.begin();
  DS3231_init(DS3231_INTCN);
  memset(recv, 0, BUFF_MAX);
  //--------- Set DHT ---------//
  dht.begin();*/
  //--------- Set lcd size ---------//
  lcd.begin(20, 4);
/*  //---------Initialize Relay to Down---------//
  digitalWrite(relay1,HIGH);
  digitalWrite(relay2,HIGH);*/
  //--------- Welcome text print ---------//
  lcd.setCursor(0, 0);
  lcd.print("WELCOME TO RENERTEK");
  lcd.setCursor(0, 1);
  lcd.print(" CONTCT:");
  lcd.print("9902358503");
  lcd.setCursor(0, 2);
  lcd.print(" renertek@gmail.com");
  lcd.setCursor(0, 3);
  lcd.print("  www.renertek.com");
  delay(4000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("    POWERED BY");
  lcd.setCursor(0, 1);
  lcd.print("   NAVAPRAVARTAN");
  lcd.setCursor(0, 2);
  lcd.print(" CONTACT:");
  lcd.print("9051872093");
  delay(2000);
  lcd.clear();
}
boolean debounce(boolean last, int pin)
{
  boolean current = digitalRead(pin);
  if(last != current)
  {
    delay(5);
    current = digitalRead(pin);
  }
  return current;
}
void loop() //--------- Put your main code here, to run repeatedly ---------//
{
 /*  Rtc();
   Dht();
   gh1=ut1+12*ut2;
   gh2=ut3+12*ut4;
   lcd.setCursor(0, 4);
   lcd.print("    Press Select ");
   mode_operation(3);
   key_status();
   if(current_right==1)
   {
     a=1;
   }
   while(digitalRead(right)==1);
   while(a) //MAIN MENU
   {
      
            key_status();
            if(current_down==1)
              {
                 z++;
              }
              while(digitalRead(down)==1);
            key_status();
            if(current_up==1)
              {
                 z--;
              }
              while(digitalRead(up)==1);
             mode=z;   
             b=1;
  //------------------------------------------------------------------------------------------//    
                              if(b==1&&z==1)
                              lcd.clear();
                               while(b==1&&z==1)
                              {
                                  t1();  
                                  key_status();        //for up
                               if(current_up==1)
                                 {
                                    e++;
                                 }
                                
                                 key_status();        //for down.
                               if(current_down==1)
                                 {
                                    e--;
                                 }
                                if(e<0)
                                 e=120;
                                if(e>120)
                                 e=0;
                               key_status();        //for back..
                               if(current_left==1)
                                 {
                                    z++;
                                    b=0;
                                    temp=e;
                                  }
                                while(digitalRead(left)==1); 
                              key_status();
                                if(current_right==1)
                                {
                                  z1=1;
                                  b=0;
                                  temp=e;
                                }
                                while(digitalRead(right)==1); 
                               }
//-------------------------------------------------------------------------------------------------------//
                              if(b==1&&z==2)
                              lcd.clear();
                               while(b==1&&z==2)
                              { 
                                h1();
                                key_status();        //for up
                               if(current_up==1)
                                 {
                                    f++;
                                 }  
                                 key_status();        //for down.
                               if(current_down==1)
                                 {
                                    f--;
                                 }
                                if(f<0)
                                 f=100;
                                if(f>100)
                                 f=0;
                                key_status();        //for back..
                                if(current_left==1)
                                 {
                                    z++;
                                    b=0;
                                    humid=f;
                                 }
                                while(digitalRead(left)==1); 
                                key_status();
                                if(current_right==1)
                                {
                                  z1=1;
                                  b=0;
                                  humid=f;
                                }
                                while(digitalRead(right)==1); 
                               delay(100);
                              
                               }
//--------------------------------------------------------------------------------------//  
                             if(b==1&&z==3)
                              lcd.clear();                      
                              while(b==1&&z==3)
                              {
                                tim1();
                            key_status();         //for up
                               if(current_up==1)
                                 {
                                   if(rt==1) 
                                    ut++;
                                   if(rt==2)
                                    ut1++;
                                   if(rt==3)
                                    ut2++;
                                   if(rt==4) 
                                    ut3++;
                                   if(rt==5)
                                    ut4++;
                                 }
                               key_status();        //for down
                               if(current_down==1)
                                 { if(rt==1)
                                    ut--;
                                   if(rt==2)
                                    ut1--;
                                   if(rt==3)
                                    ut2--;
                                   if(rt==4)
                                    ut3--;
                                   if(rt==5)
                                    ut4--;
                                 }
                               key_status();        //for left
                               if(current_menu==1)
                                 {
                                    rt++;
                                 }
                                while(digitalRead(menu)==1); 
                                
                                if(rt>5)
                                 rt=1;
                                if(ut<0)
                                 ut=99;
                                if(ut>99)
                                 ut=0;
                                if(ut1<0)
                                 ut1=12;
                                if(ut1>12)
                                 ut1=0;
                                if(ut2<0)
                                 ut2=1;
                                if(ut2>1)
                                 ut2=0;
                                if(ut3<0)
                                 ut3=12;
                                if(ut3>12)
                                 ut3=0;  
                                if(ut4<0)
                                 ut4=1;
                                if(ut4>1)
                                 ut4=0; 
                               key_status();         //for back..
                               if(current_left==1)
                                 {  
                                    z++;
                                    b=0;
                                 }
                                while(digitalRead(left)==1); 
                                key_status();
                                if(current_right==1)
                                {
                                  z1=1;
                                  b=0;
                                }
                                while(digitalRead(right)==1);  
                                delay(100); 
                               }
                             b=1;
//-------------------------------------------------------------------------------------------------------//
                           while(b==1&&z1==1)
                              {
                                lcd.print("Time Base CTR:"); 
                                yes_no(m1);
                                lcd.setCursor(0, 1);
                                lcd.print("Temp Base CTR:"); 
                                yes_no(m2);
                                lcd.setCursor(0, 2);
                                lcd.print("Humd Base CTR:"); 
                                yes_no(m3);
                                lcd.setCursor(4, 3);
                                lcd.print("PRESS NEXT");
                                delay(100);
                                lcd.clear();
                                key_status();
                                if(current_menu==1)
                                {
                                  if(z2==0)
                                  m1=flip(m1);
                                  if(z2==1)
                                  m2=flip(m2);
                                  if(z2==2)
                                  m3=flip(m3);
                                }
                                while(digitalRead(menu)==1);   
                                key_status();
                                if(current_left==1)
                                {
                                  z2++;
                                }
                                while(digitalRead(left)==1);  
                                key_status();
                                if(current_right==1)
                                {
                                  a=0;
                                  b=0;
                                  z1=0;
                                }
                                while(digitalRead(right)==1);  
                                if(z2>2)
                                 z2=0;
                               }
 //-----------------------------------------------------------------------------------------//                              
                     if(z>3)
                      z=1;  
                     if(z<1)
                      z=3;
                     lcd.clear();
      }*/
}

//------------time_period------------//

void time_period(int n,int i1,int i2,int i3)
{ int x,y,z,v,w;
  struct ts t;
  DS3231_get(&t);
 if ((Serial.available() <= 0)) 
  {
  x=t.hour;
  y=t.min;
  z=x*60+y;
  v=z+n;
  }
 
  w=1;
  p2=1;
  while(w==1&&p2==1)
  { delay(100);
    DS3231_get(&t);
   Rtc();
   Dht();
   if(i1==1)
   mode_operation(1);
   if(i2==1)
   mode_operation(2);
    if ((Serial.available() <= 0)) 
     {
       x=t.hour;
       y=t.min;
       z=x*60+y;
     }
     if(z==v)
        w=0;
   key_status();
   if(current_right==1)
   {
     p2=0;
     a=1;
   }
 //  while(digitalRead(right)==1);
  }
}
//----------Operate Mode-------------//
void mode_operation(int ch)
{
  switch(ch)
  {
    case 1:  if(temp<tem)
             {
               digitalWrite(relay1,LOW);
               digitalWrite(relay2,LOW);
             }
             else
             {
               digitalWrite(relay1,HIGH);
               digitalWrite(relay2,HIGH);
             }
            break;
    case 2: if(humid>hum)
            {
              digitalWrite(relay1,LOW);
              digitalWrite(relay2,LOW);
            }
            else
            {
              digitalWrite(relay1,HIGH); 
              digitalWrite(relay2,HIGH); 
            }
            break;
    case 3: 
            
            time_period(60,m2,m3,m1);
            Mul_delay(ut,m2,m3,m1);
            break;
 
  }
}

//--------- Keyboard functon -------//
void key_status()
{
  current_menu = debounce(last_menu, menu); //--------- Debounce for menu button ---------//
  current_up = debounce(last_up, up); //--------- Debounce for up button ---------//
  current_down = debounce(last_down, down); //--------- Debounce for down button ---------//
  current_left = debounce(last_left, left); //--------- Debounce for left button ---------//
  current_right = debounce(last_right, right); //--------- Debounce for right button ---------//
  last_menu = LOW;
  last_up = LOW;
  last_down = LOW;
  last_left = LOW;
  last_right = LOW;
}
//--------- DHT function ---------//
void Dht()
{
  float temperature, humidity;
  humidity = dht.readHumidity();
  temperature = dht.readTemperature();
  delay(100); 
  char tempF[6]; 
  char humF[6];
  dtostrf(temperature, 5, 1, tempF);
  dtostrf(humidity, 2, 0, humF);
  lcd.setCursor(0, 2);
  lcd.print("T:"); 
  tem=(int)((tempF[1]-48)*10+(tempF[2]-48));
  lcd.print(tem);
  lcd.print((char)223);
  lcd.print("C ");
  lcd.print(" H: ");
  hum=(int)((humF[0]-48)*10+(humF[1]-48));
  lcd.print(hum);
  lcd.print("%");
}
//-----------------YES/NO------------------//
void yes_no(int i)
{
  if(i==1)
   lcd.print("YES");
  else
   lcd.print("NO");
}
//---------------FLIP SWITCH----------------//
 int flip(int i)
{
  if(i==0)
   return 1;
  else if(i==1)
   return 0;
}
//--------- Time and Date function ---------//
void Rtc()
{
  unsigned long now = millis();
    struct ts t;
    if ((now - prev > interval) &&(Serial.available() <= 0)) 
    {
        DS3231_get(&t);
        lcd.setCursor(0, 0);
        lcd.print("Date:");
        lcd.print(t.mday);
        lcd.print(":");
        lcd.print(t.mon);
        lcd.print(":");
        lcd.print(t.year);
        lcd.print(" ");
        lcd.setCursor(0, 1);
        if(t.hour>12)
        {
         lcd.print("Time:");
         lcd.print(t.hour-12);
         lcd.print(":");
         lcd.print(t.min);
         lcd.print(":");
         lcd.print(t.sec);
         lcd.print(" ");
         lcd.setCursor(13, 1);
         lcd.print("P.M.");
        }
        else
        {
         lcd.print("Time:");
         lcd.print(t.hour);
         lcd.print(":");
         lcd.print(t.min);
         lcd.print(":");
         lcd.print(t.sec);
         lcd.print(" ");
         lcd.setCursor(13, 1);
         lcd.print("A.M. "); 
        }
        
        if((gh1 < t.hour)&&(t.hour < gh2))
        {
          gh3 = 1;
        }
        else
        { 
          gh3 = 0;
        }
        prev = now;
    } 
}
void h1()
{
  float temperature, humidity;
  humidity = dht.readHumidity();
  temperature = dht.readTemperature();
  delay(100); 
  char tempF[6]; 
  char humF[6];
  dtostrf(temperature, 5, 1, tempF);
  dtostrf(humidity, 2, 0, humF);
  lcd.setCursor(5, 0);
  lcd.print("HUMI:");
  lcd.setCursor(10, 0);
  tem=(int)((tempF[1]-48)*10+(tempF[2]-48));
  hum=(int)((humF[0]-48)*10+(humF[1]-48));
  lcd.print(hum);
  lcd.print("%");
  lcd.setCursor(1, 1);
  lcd.print("Humd Base CTR:");
  yes_no(m3);
  lcd.setCursor(3, 2);
  lcd.print("WATER ON:<");
  lcd.print(f);
  lcd.print("%    ");
  lcd.setCursor(0, 3);
  lcd.print("USE:SCROLL,U,D,NEXT");
}
void t1()
{
  float temperature, humidity;
  humidity = dht.readHumidity();
  temperature = dht.readTemperature();
  delay(100); 
  char tempF[6]; 
  char humF[6];
  dtostrf(temperature, 5, 1, tempF);
  dtostrf(humidity, 2, 0, humF);
  lcd.setCursor(5, 0);
  lcd.print("Temp:");
  lcd.setCursor(10, 0);
  tem=(int)((tempF[1]-48)*10+(tempF[2]-48));
  lcd.print(tem);
  lcd.print((char)223);
  lcd.print("C");
  hum=(int)((humF[0]-48)*10+(humF[1]-48));
  lcd.setCursor(1, 1);
  lcd.print("Temp Base CTR:");
  yes_no(m2);
  lcd.setCursor(3, 2);
  lcd.print("WATER ON:>");
  lcd.print(e);
  lcd.print((char)223);
  lcd.print("C   ");
  lcd.setCursor(0, 3);
  lcd.print("USE:SCROLL,U,D,NEXT");
}
void tim1()
{
  unsigned long now = millis();
    struct ts t;
    if ((now - prev > interval)&&(Serial.available() <= 0)) 
    {
        DS3231_get(&t);
        lcd.setCursor(0, 0);
        if(t.hour>12)
        {
         lcd.print(" Time:");
         lcd.print(t.hour-12);
         lcd.print(":");
         lcd.print(t.min);
         lcd.print(":");
         lcd.print(t.sec);
         lcd.print(" ");
         lcd.setCursor(14, 0);
         lcd.print("P.M.");
        }
        else
        {
         lcd.print(" Time:");
         lcd.print(t.hour);
         lcd.print(":");
         lcd.print(t.min);
         lcd.print(":");
         lcd.print(t.sec);
         lcd.print(" ");
         lcd.setCursor(14, 0);
         lcd.print("A.M."); 
        }
       prev = now;
    } 
   lcd.setCursor(1, 1);
   lcd.print("Temp Base CTR:");
   yes_no(m1);
   lcd.setCursor(0,2);
   lcd.print("ON:");
   if(ut<10)
   {lcd.print(ut);
   lcd.print(" ");}
   else
    lcd.print(ut);
   lcd.setCursor(5,2);
   lcd.print("S/H");
   lcd.setCursor(10,2);
   if(ut1<10)
   {lcd.print(ut1);
    lcd.print(" ");
   }
   else
    lcd.print(ut1);
   if(ut2==0)
    lcd.print("AM");
   else
    lcd.print("PM");
   lcd.print("To");
    lcd.setCursor(16,2);
   if(ut3<10)
   {lcd.print(ut3);
    lcd.print(" ");
   }
   else
    lcd.print(ut3);
   if(ut4==0)
    lcd.print("AM");
   else
    lcd.print("PM");
   lcd.setCursor(0, 3);
   lcd.print("USE:SCROLL,U,D,NEXT");
}
//-------------------------delay-----------------------//
void Mul_delay(int i,int i1,int i2,int i3)
{ mdelay = i*1000;
 unsigned long previousMillis = millis();
  k6=1;
  p1=1;
 while(k6==1&&p1==1)
 { currentMillis = millis();
   Rtc();
   Dht();
   if(i1==1)
   mode_operation(1);
   if(i2==1)
   mode_operation(2);
  if((currentMillis - previousMillis) < mdelay) 
   {
       if(i3==1 && gh3==1)
       { digitalWrite(relay1, LOW);
         digitalWrite(relay2, LOW);
       }
     }
   else
   k6=0;
  key_status();
  if(current_right==1)
   {
     p1=0;
     a=1;
    }
 }
  digitalWrite(relay1, HIGH);
  digitalWrite(relay2, HIGH);
  
}

Credits

Pramit Chaudhury
2 projects • 2 followers
Total technology Enthusiast and hobbyist interested in all kind of tech stuff but mostly skilled in electronics and programming
Contact

Comments

Please log in or sign up to comment.