//Initilaising header files and variables required.
#include <LiquidCrystal.h>
#include <DS1302.h>
LiquidCrystal lcd(A5, A4, 8, 9, 10, 11); DS1302 rtc(A3, 3, 6);
#define RELAY1 4
#define RELAY2 7
#define RELAY3 12
#define RELAY4 13
#define RELAY5 5
int level = A0; int buzzer = 2; int tempPin = A1; int t=0;
int val; float temp; float voltage;
void setup()
{ //Initilaising input and output pins.
pinMode(level, INPUT);
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(RELAY4, OUTPUT);
pinMode(RELAY5, OUTPUT);
digitalWrite(RELAY5,LOW);
digitalWrite(RELAY1,LOW);
digitalWrite(RELAY2,LOW);
digitalWrite(RELAY3,LOW);
digitalWrite(RELAY4,LOW);
//Initialising the LCD
lcd.clear();
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print(" Setup running! ");
delay(5000);
//Setting up the DAS - PLX-DAQ
Serial.begin(128000);
Serial.println("CLEARDATA");
Serial.println("CLEARLABEL");
Serial.println("LABEL,Date,Day,Current Time,Time(in operation)(s),Temperature,Water Level");
//Setting up the RTC-clock module
rtc.halt(false);
rtc.writeProtect(false);}
void loop()
{
int w=0; int flag1=1;
w = analogRead(level); //Taking input from the water sensor
//Taking input from the temperature sensor
val = analogRead(tempPin);
voltage = 5 * val / 4095.0;
temp = (0.5-voltage) * 100;
if(w>250) //Checking the water level
{
flag1=0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Water ALERT!!!");
lcd.setCursor(0, 1);
lcd.print(flag1);
digitalWrite(RELAY5,HIGH);
tone(buzzer, 1000); //Buzzer Alert
delay(1000);
noTone(buzzer);
delay(2000); }
else if(temp>35) //Checking the temperature
{
flag1=0; lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperature ALERT");
lcd.setCursor(0, 1);
lcd.print(flag1);
tone(buzzer, 1000); //Buzzer Alert
delay(1000); noTone(buzzer);
delay(2000); }
else
{ //Operation in normal operating conditions
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Plant Operating!");
lcd.setCursor(0, 1);
lcd.print(flag1);
//RELAY sequence
digitalWrite(RELAY1,HIGH); delay(5000);
digitalWrite(RELAY1,LOW);
digitalWrite(RELAY2,HIGH); delay(5000);
digitalWrite(RELAY2,LOW);
digitalWrite(RELAY3,HIGH); delay(5000);
digitalWrite(RELAY3,LOW);
digitalWrite(RELAY4,HIGH); delay(5000);
digitalWrite(RELAY4,LOW); }
long int milli_time = millis(); //Calculating the time since the start of operation
t=milli_time/1000;
//The following code is used to initialise the RTC module
//Commented once used
/*Serial.println(rtc.getTimeStr()); Serial.println(rtc.getDOWStr());
Serial.println(rtc.getDateStr());
Serial.println("LABEL,Date,Day,Current Time,Time(in operation),Temperature,Water Level"); */
//Printing into the Data Aquistion System
Serial.print("DATA,DATE,"); Serial.print(rtc.getDOWStr());
Serial.print(","); Serial.print(rtc.getTimeStr());
Serial.print(","); Serial.print(t);
Serial.print(","); Serial.print(temp);
Serial.print(","); Serial.print(w);
Serial.println();
}
// (1) Water and temperature sensor,
// (2) Arduino UNO board,
// (3)Relay Module,
// (4) External power supply & Voltage Regulation block,
// (5) LCD,Buzzers and LED’s (Loads),
// (6) Real Time Clock (RTC) Module and
// (7) PLXDAQ.