#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>
#include "DHT.h" // DHT11 ή 22 αισθητήριο υγρασίας
#define DHTPIN 7 // στο pin 7 πηγαίνει το σήμα του αισθητήριου υγρασίας (μπορεί να αλλαχθεί)
#define DHTTYPE DHT22 //ο τύπος του αισθητήριου
DHT dht (DHTPIN,DHTTYPE);
#define CE_PIN 40 // το CE είναι στην θύρα 40
#define CSN_PIN 42 // το CSN είναι στην θύρα 42
RF24 radio (CE_PIN ,CSN_PIN) ;
RF24Network network(radio);
const uint16_t this_node = 0;
float H;
float T;
int heater=4 ; //σε ποια έξοδο για την χρωμονικελίνη
int dhuminty=5; //σε ποια έξοδο είναι ο ανεμιστήρας για την πτώση της σχετικής υγρασίας
int fan=6; //σε ποια έξοδο είναι ο ανεμιστήρας για την είσοδο του αέρα
int water=3; //σε ποια έξοδο είναι η αντλία νερού
boolean Rain;
struct payload_t
// η δομή payload δηλώνουμε πoιες μεταβλητές θα στέλνει μέσο ασύρματης επικοινωνίας
{
unsigned long ms;
int A;
float Temp;
int light_lvl;
float Humidity;
int Soil;
int Soilb;
int nRainVal;
boolean bIsRaining;
unsigned long counter;
};
void setup(void) // οι ρυθμιζόμενες εντολές θα τρέξουν μόνο μια φόρα στην έναρξη του προγράμματος
{
Serial.begin(57600);
Serial.println("Reciver data GReenHouse Arduinio RF24Network PSev/");
radio.begin();
network.begin(/*channel*/ 90, /*node address*/ this_node);
dht.begin();
SPI.begin();
pinMode(heater, OUTPUT); // δήλωση μεταβλητής σαν έξοδος
pinMode(dhuminty, OUTPUT);
pinMode(fan, OUTPUT);
pinMode(water, OUTPUT);
}
void loop()
{
H = dht.readHumidity(); // καταχωρεί την τιμή της σχετικής υγρασίας από το αισθητήριο
T = dht.readTemperature();// καταχωρεί την τιμή της θερμοκρασίας από το αισθητήριο
float celsius; //δήλωση μεταβλητών για τις συνθήκες
float Humidity;
int Soil;
int Soilb;
network.update();
// Is there anything ready for us?
while ( network.available() )
{
RF24NetworkHeader header;
payload_t payload;
network.read(header,&payload,sizeof(payload));
// εκτύπωση στην σειριακή τα δεδομένα που λήφθηκαν από τον UNO μέσο ασύρματης επικοινωνίας
Serial.print("Received packet #");
Serial.print(payload.counter);
Serial.print(",");
Serial.print("Sensor_DS:");
Serial.print(payload.A);
Serial.print(",");
Serial.print("TEMP:");
Serial.print(payload.Temp);
Serial.print("*C");
Serial.print(",");
Serial.print("Brightness:");
Serial.print(payload.light_lvl);
Serial.print(" /1024");
Serial.print(",");
Serial.print("Humidity:");
Serial.print(payload.Humidity);
Serial.print("%,");
Serial.print("Soil:");
Serial.print(payload.Soil);
Serial.print(",");
Serial.print("Soilb:");
Serial.print(payload.Soilb);
Serial.print(",");
Serial.print("nRainVal:");
Serial.print(payload.nRainVal);
Serial.print(",");
Serial.print("Rain:");
Rain = (payload.bIsRaining);
if (Rain == 1)
Serial.print ("YES");
else
Serial.print ("NO");
Serial.print(" ------ ");
Serial.print(payload.counter);
Serial.print(" at ");
Serial.println(payload.ms);
Serial.print("Temperature_environment:");
Serial.print(T);
Serial.print("*C");
Serial.print(",");
Serial.print("Humidity_environment:");
Serial.print(H);
Serial.print("%");
Serial.println(",");
celsius = payload.Temp; //payload. temp = celsius για να μπορούν να γίνουν οι συνθήκες
Humidity =payload.Humidity; // payload. Humidity = Humidity για να μπορούν να γίνουν οι συνθήκες
Soil=payload.Soil; //payload.Soil= Soil για να μπορούν να γίνουν οι συνθήκες
Serial.println (celsius); //εκτύπωση της θερμοκρασίας που διάβασε από τον αισθητήρα μέσα στο θερμοκήπιο
Serial.println();
if (celsius >=20 && celsius <=29)
{
digitalWrite(heater,HIGH); // επειδή το relay είναι λογικής TTL θα είναι κλειστό
digitalWrite(fan, LOW);
Serial.println("Satisfactory temperature");
if (Humidity >=50 && Humidity<=80)
{
Serial.println("Good level of relative humidity");
digitalWrite(dhuminty, LOW);
digitalWrite(water,HIGH); // επειδή είναι σε TTL relay θα είναι κλειστή
}
else if(Humidity <50)
{
if (Soil >24 && Soil<=654 || Soilb >24 && Soilb <=654)
// δηλαδή εάν είναι συνδεμένος ο αισθητήρας εδάφους και δεν έχει γεμίσει με νερό το χώμα
{
Serial.println("watering");
digitalWrite(water, LOW);
}
else if (Soil >= 666 || Soilb >=666 )
{
Serial.println("Soil in water");
digitalWrite(water, HIGH);
}
else
{
Serial.println("Soil in water OR DISCONNECTED Sensor ");
digitalWrite(water, HIGH); //κλειστή η αντλία νερού
}
digitalWrite(dhuminty, HIGH); // κλειστός ο ανεμιστήρας
}
if (Humidity >80 || Rain == 1)
{
Serial.println("HIGH level relative humidity");
Serial.println ("MODE: Wind recycling");
digitalWrite(dhuminty, LOW); // δουλεύει ο ανεμιστήρας για να την ελάττωση της σχετική υγρασία
digitalWrite(water, HIGH);
}
else if (celsius >=34)
{
digitalWrite(heater,HIGH); // επειδή το relay είναι λογικής TTL θα είναι κλειστό
digitalWrite(fan, HIGH);
Serial.println("MODE Cool greenHouse");
if (Humidity >=50 && Humidity<=80)
{
digitalWrite(dhuminty, LOW);
Serial.println("Good level of relative humidity");
digitalWrite(water, HIGH);
digitalWrite(dhuminty, HIGH);
}
else if (Humidity<50)
{
digitalWrite(dhuminty, HIGH); // ανεμιστήρας κλειστός
if (Soil >24 && Soil<=654 || Soilb >24 && Soilb <=654)
{
Serial.println("watering");
digitalWrite(water, LOW);
}
else if (Soil >= 666 || Soilb >=666 )
{
Serial.println("Soil in water");
digitalWrite(water, HIGH);
}
else
{
Serial.println("Soil in water OR DISCONNECTED Sensor ");
digitalWrite(water, HIGH);
}
}
if (Humidity >80 || Rain == 1)
{
Serial.println("HIGH level of relative humidity");
Serial.println ("MODE: Wind recycling");
digitalWrite(dhuminty, LOW);
digitalWrite(water, HIGH);
}
}
else if (celsius <=16)
{
digitalWrite(heater ,LOW); // επειδή το relay είναι λογικής TTL θα είναι ανοιχτό
analogWrite(fan,220);
Serial.println("MODE Heat greenHouse");
if (Humidity >=50 && Humidity<=80)
{
digitalWrite(dhuminty, LOW);
Serial.println("Good level of relative humidity");
digitalWrite(water, HIGH);
digitalWrite(dhuminty, HIGH);
}
else if (Humidity<50)
{
digitalWrite(dhuminty, HIGH);// ανεμιστήρας για την υγρασία κλειστός
if (Soil >24 && Soil<=654 || Soilb >24 && Soilb <=654)
{
Serial.println("watering");
digitalWrite(water, LOW);
}
else if (Soil >= 666 || Soilb >=666 )
{
Serial.println("Soil in water");
digitalWrite(water, HIGH);
}
else
{
Serial.println("water soil OR DISCONNECTED Sensor ");
digitalWrite(water, HIGH);
}
}
if (Humidity >80 || Rain == 1)
{
Serial.println("HIGH level relative humidity");
Serial.println ("MODE: Wind recycling");
digitalWrite(dhuminty, LOW); // δουλεύει ο ανεμιστήρας για την ελάττωση της σχετική υγρασία
digitalWrite(water, HIGH);
}
}
else
{
digitalWrite(heater, HIGH); // επειδή το relay είναι λογικής TTL θα είναι κλειστό
digitalWrite(fan, LOW);
if (Humidity >=50 && Humidity<=80)
{
digitalWrite(dhuminty, LOW);
digitalWrite(water, HIGH);
digitalWrite(dhuminty, HIGH);
}
else if (Humidity<50)
{
digitalWrite(dhuminty, HIGH); // ανεμιστήρας για την υγρασία είναι κλειστός
if (Soil >24 && Soil<=654 || Soilb >24 && Soilb <=654)
{
Serial.println("watering");
digitalWrite(water, LOW);
}
else if (Soil >= 666 || Soilb >=666 )
{
Serial.println("Soil in water");
digitalWrite(water, HIGH);
}
else
{
Serial.println("Soil in water OR DISCONNECTED Sensor ");
digitalWrite(water, HIGH);
}
}
if (Humidity >80 || Rain == 1)
{
Serial.println("HIGH level relative humidity");
Serial.println ("MODE: Wind recycling");
digitalWrite(dhuminty, LOW); // δουλεύει ο ανεμιστήρας για ελάττωση της σχετική υγρασία
digitalWrite(water, HIGH);
}
}
Serial.println();
}
}
}