#include "Relej.h"
#define ECHO_PIN_1 23 //senzor čita razinu vode u vrtu
#define TRIG_PIN_1 22
#define ECHO_PIN_2 27 //senzor čita razinu vode u cisterni
#define TRIG_PIN_2 26
#define ECHO_PIN_3 31 //senzor čita razinu vode u plasteniku
#define TRIG_PIN_3 30
Relej pumpReservoir(52); // vodena pumpa koja iz cisterne pumpa vodu u cijevi na vrtu
Relej pumpWell(53); // vodena pumpa koja iz zdenca pumpa vodu u cisternu
Relej gardenValve(38); // ventil cijevi u vrtu NORMALY OPEN
Relej greenhouseValve(39); // ventil cijevi u plasteniku NORMALY OPEN
Relej warningLED(13); // LED dioda na Arduino pločici za blinkanje upozorenja
unsigned long startTimePumpWell = 0;
unsigned long startTimePumpReservoir = 0;
unsigned long endTimePumpWell = 100000;
unsigned long endTimePumpReservoir = 100000;
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN_1, OUTPUT);
pinMode(ECHO_PIN_1, INPUT);
pinMode(TRIG_PIN_2, OUTPUT);
pinMode(ECHO_PIN_2, INPUT);
pinMode(TRIG_PIN_3, OUTPUT);
pinMode(ECHO_PIN_3, INPUT);
}
void loop() {
Pump_2();
Pump_1();
delay(1000);
}
//--- funkcija očitava udaljenost razine vode od senzora -----------------------
float readDistanceCM(byte Trig_Pin, byte Echo_Pin) {
digitalWrite(Trig_Pin, LOW);
delayMicroseconds(2);
digitalWrite(Trig_Pin, HIGH);
delayMicroseconds(10);
digitalWrite(Trig_Pin, LOW);
float duration = pulseIn(Echo_Pin, HIGH);
return duration * 0.0342 / 2;
}
//----------------------------------------------------------------------------
//---funkcija prekida rad Arduina i stavlja ga u neprekidnu petlju dok ga se ne resetira----
void allSTOP(String message){
Serial.print(message);
Serial.print(" PREDUGO RADI - ZAUSTAVLJAM RAD ARDUINA!");
Serial.println();
while (1){
pumpReservoir.stop();
pumpWell.stop();
greenhouseValve.stop();
gardenValve.stop();
warningLED.start();
delay(300);
warningLED.stop();
delay(300);
}
}
//-------------------------------------
void Pump_1() { //upravljanje pumpom u cisterni
float distance_greenhouse_pipes = readDistanceCM(TRIG_PIN_3, ECHO_PIN_3); // ---- izmjeri razinu vode u cijevima u PLASTENIKU
float distance_garden_pipes = readDistanceCM(TRIG_PIN_1, ECHO_PIN_1); // ---- izmjeri razinu vode u cijevima u VRTU
float distance_reservoir = readDistanceCM(TRIG_PIN_2, ECHO_PIN_2); // ---- izmjeri razinu vode u cisterni
if(distance_reservoir < 90){
//1
if((distance_greenhouse_pipes < 10) && (distance_garden_pipes < 10) && pumpReservoir.pinState() != 0) {
pumpReservoir.stop();
startTimePumpReservoir = 0;
delay(100);
greenhouseValve.stop();
gardenValve.stop();
/*
Serial.println("Sve cijevi su pune, gasim pumpu na cisterni");
Serial.print("stanje pumpe na cisterni: -->");
Serial.print(pumpReservoir.pinState());
Serial.println();
*/
}
//2
if((distance_greenhouse_pipes < 10) && ((distance_garden_pipes >= 10) && (distance_garden_pipes <= 100)) && pumpReservoir.pinState() != 0) {
//pumpReservoir.stop();
greenhouseValve.stop();
gardenValve.start();
/*
Serial.println("Pune se cijevi u VRTU");
Serial.print("stanje pumpe na cisterni: -->");
Serial.print(pumpReservoir.pinState());
Serial.println();
*/
}
//3
if((distance_greenhouse_pipes < 10) && (distance_garden_pipes > 100) && pumpReservoir.pinState() != 0) {
greenhouseValve.stop();
gardenValve.start();
/*
Serial.println("Pune se cijevi u VRTU");
Serial.print("stanje pumpe na cisterni: -->");
Serial.print(pumpReservoir.pinState());
Serial.println();
*/
}
//4
if(((distance_greenhouse_pipes >= 10) && (distance_greenhouse_pipes <= 100)) && (distance_garden_pipes < 10) && pumpReservoir.pinState() != 0) {
greenhouseValve.start();
gardenValve.stop();
/*
Serial.println("Pune se cijevi u PLASTENIKU");
Serial.print("stanje pumpe na cisterni: -->");
Serial.print(pumpReservoir.pinState());
Serial.println();
*/
}
//5
if(((distance_greenhouse_pipes >= 10) && (distance_greenhouse_pipes <= 100)) && ((distance_garden_pipes >= 10) && (distance_garden_pipes <= 100)) && pumpReservoir.pinState() != 0) {
greenhouseValve.start();
gardenValve.start();
/*
Serial.println("Pune se cijevi u VRTU i PLASTENIKU");
Serial.print("stanje pumpe na cisterni: -->");
Serial.print(pumpReservoir.pinState());
Serial.println();
*/
}
//6
if(((distance_greenhouse_pipes >= 10) && (distance_greenhouse_pipes <= 100)) && (distance_garden_pipes <= 100) && pumpReservoir.pinState() != 0) {
greenhouseValve.start();
//gardenValve.start();
/*
Serial.println("Pune se cijevi u VRTU i PLASTENIKU");
Serial.print("stanje pumpe na cisterni: -->");
Serial.print(pumpReservoir.pinState());
Serial.println();
*/
}
//7
if((distance_greenhouse_pipes > 100) && (distance_garden_pipes < 10) && pumpReservoir.pinState() != 0) {
greenhouseValve.start();
gardenValve.stop();
/*
Serial.println("Pune se cijevi u PLASTENIKU");
Serial.print("stanje pumpe na cisterni: -->");
Serial.print(pumpReservoir.pinState());
Serial.println();
*/
}
//8
if((distance_greenhouse_pipes > 100) && ((distance_garden_pipes >= 10) && (distance_garden_pipes <= 100)) && pumpReservoir.pinState() != 0) {
greenhouseValve.start();
gardenValve.start();
/*
Serial.println("Pune se cijevi u VRTU i PLASTENIKU");
Serial.print("stanje pumpe na cisterni: -->");
Serial.print(pumpReservoir.pinState());
Serial.println();
*/
}
//9
if((distance_greenhouse_pipes > 100) && (distance_garden_pipes > 100) && pumpReservoir.pinState() != 0){
greenhouseValve.start();
gardenValve.start();
/*
Serial.println("Ispraznile su se cijevi u VRTU i PLASTENIKU - palim pumpu na cisterni");
Serial.print("stanje pumpe na cisterni: -->");
Serial.print(pumpReservoir.pinState());
Serial.println();
*/
}
//10
if((distance_greenhouse_pipes < 10) && (distance_garden_pipes < 10) && pumpReservoir.pinState() != 1){
greenhouseValve.stop();
gardenValve.stop();
/*
Serial.println("Pune se cijevi u VRTU i PLASTENIKU - zatvaram ventile");
Serial.print("stanje pumpe na cisterni: -->");
Serial.print(pumpReservoir.pinState());
Serial.println();
*/
}
//11
if((distance_greenhouse_pipes < 10) && ((distance_garden_pipes >= 10) && (distance_garden_pipes <= 100)) && pumpReservoir.pinState() != 1){
greenhouseValve.stop();
gardenValve.stop();
/*
Serial.println("Pune se cijevi u PLASTENIKU, a VRT se prazni - zatvaram ventile");
Serial.print("stanje pumpe na cisterni: -->");
Serial.print(pumpReservoir.pinState());
Serial.println();
*/
}
//12
if((distance_greenhouse_pipes < 10) && (distance_garden_pipes > 100) && pumpReservoir.pinState() != 1) {
greenhouseValve.stop();
gardenValve.start();
delay(100);
pumpReservoir.start();
if (startTimePumpReservoir == 0) {startTimePumpReservoir = millis();}
}
//13
if(((distance_greenhouse_pipes >= 10) && (distance_greenhouse_pipes <= 100)) && (distance_garden_pipes < 10) && pumpReservoir.pinState() != 1){
greenhouseValve.stop();
gardenValve.stop();
/*
Serial.println("Pune se cijevi u VRTU a PLASTENIK se prazni - zatvaram ventile");
Serial.print("stanje pumpe na cisterni: -->");
Serial.print(pumpReservoir.pinState());
Serial.println();
*/
}
//14
if(((distance_greenhouse_pipes >= 10) && (distance_greenhouse_pipes <= 100)) && ((distance_garden_pipes >= 10) && (distance_garden_pipes <= 100)) && pumpReservoir.pinState() != 1){
greenhouseValve.stop();
gardenValve.stop();
/*
Serial.println("voda u cijevima se polako prazni - zatvaram ventile");
Serial.print("stanje pumpe na cisterni: -->");
Serial.print(pumpReservoir.pinState());
Serial.println();
*/
}
//15
if(((distance_greenhouse_pipes >= 10) && (distance_greenhouse_pipes <= 100)) && (distance_garden_pipes > 100) && pumpReservoir.pinState() != 1) {
greenhouseValve.stop();
gardenValve.start();
delay(100);
pumpReservoir.start();
if (startTimePumpReservoir == 0) {startTimePumpReservoir = millis();}
}
//16
if((distance_greenhouse_pipes > 100) && (distance_garden_pipes < 10) && pumpReservoir.pinState() != 1) {
greenhouseValve.start();
gardenValve.stop();
delay(100);
pumpReservoir.start();
if (startTimePumpReservoir == 0) {startTimePumpReservoir = millis();}
/*
Serial.println("cijevi u PLASTENIKU su prazne - palim pumpu na cisterni");
Serial.print("stanje pumpe na cisterni: -->");
Serial.print(pumpReservoir.pinState());
Serial.println();
*/
}
//17
if((distance_greenhouse_pipes > 100) && ((distance_garden_pipes >= 10) && (distance_garden_pipes <= 100)) && pumpReservoir.pinState() != 1) {
greenhouseValve.start();
gardenValve.stop();
delay(100);
pumpReservoir.start();
if (startTimePumpReservoir == 0) {startTimePumpReservoir = millis();}
/*
Serial.println("cijevi u VRTU i PLASTENIKU su prazne - palim pumpu na cisterni");
Serial.print("stanje pumpe na cisterni: -->");
Serial.print(pumpReservoir.pinState());
Serial.println();
*/
}
//18
if((distance_greenhouse_pipes > 100) && (distance_garden_pipes > 100) && pumpReservoir.pinState() != 1) {
greenhouseValve.start();
gardenValve.start();
delay(100);
pumpReservoir.start();
if (startTimePumpReservoir == 0) {startTimePumpReservoir = millis();}
/*
Serial.println("cijevi u VRTU i PLASTENIKU su prazne - palim pumpu na cisterni");
Serial.print("stanje pumpe na cisterni: -->");
Serial.print(pumpReservoir.pinState());
Serial.println();
*/
}
}else {
pumpReservoir.stop();
startTimePumpReservoir = 0;
delay(100);
greenhouseValve.stop();
gardenValve.stop();
/*
Serial.println("nema vode u cisterni - gasim pumpu na cisterni");
Serial.print("stanje pumpe na cisterni: -->");
Serial.print(pumpReservoir.pinState());
Serial.println();
*/
}
if(((millis() - startTimePumpReservoir) >= endTimePumpReservoir) && (pumpReservoir.pinState() != 0)){
Serial.println();
Serial.print("start Time--> ");
Serial.print(startTimePumpReservoir);
Serial.println();
Serial.print("millis--> ");
Serial.print(millis());
Serial.println();
allSTOP("PUMPA NA CISTERNI");
}
}
void Pump_2() {//upravljanje pumpom u zdencu
float distance_reservoir = readDistanceCM(TRIG_PIN_2, ECHO_PIN_2); // ---- izmjeri razinu vode u cisterni
if ((distance_reservoir >= 50) && pumpWell.pinState() != 1) { // ako je cisterna prazna i pumpa u zdencu ugašena onda upali pumpu
pumpWell.start();
startTimePumpWell = millis();
Serial.println("cisterna je prazna, palim pumpu u zdencu");
Serial.print("stanje pumpe u zdencu poslije paljenja: -->");
Serial.print(pumpWell.pinState());
Serial.println();
}else if ((distance_reservoir <= 10) && (pumpWell.pinState() != 0)){ // ako je cisterna puna i pumpa je upaljena onda ugasi pumpu u zdencu
pumpWell.stop();
Serial.println("cisterna je puna, gasim pumpu u zdencu");
}else if(((millis() - startTimePumpWell) >= endTimePumpWell) && (pumpWell.pinState() != 0)){
allSTOP("PUMPA U ZDENCU");
}
}