1
2#include <DHT.h>
3#include <Wire.h>
4#include <LiquidCrystal_I2C.h>
5#include <HCSR04.h>
6#include <SandTimer.h>
7#define DHTPIN 2
8#define DHTTYPE DHT22
9DHT dht(DHTPIN, DHTTYPE);
10LiquidCrystal_I2C lcd(0x27,20,4);
11HCSR04 watersens(5,6);
12SandTimer timersensor;
13SandTimer backlightimer;
14SandTimer pump1timer;
15SandTimer pump2timer;
16const int lowaterled=4;
17const int venthum=7;
18const int irsensor=8;
19const int pump2=9;
20const int heaterpin=10;
21const int lightpin=11;
22const int pump1=12;
23const int timerpin=13;
24int h=0;
25int t=0;
26int Soil1=0;
27int Soil2=0;
28int settemp;
29int daytemp=26;
30int nightemp=23;
31int timervalue;
32int motiondetect;
33int waterlevel;
34
35
36void setup() {
37 dht.begin();
38 lcd.init();
39 timersensor.start(2000);
40 backlightimer.start(30000);
41 pump1timer.start(10000);
42 pump2timer.start(10000);
43 pinMode(heaterpin, OUTPUT);
44 pinMode(timerpin, INPUT);
45 pinMode(lightpin, OUTPUT);
46 pinMode(lowaterled, OUTPUT);
47 pinMode(venthum, OUTPUT);
48 pinMode(irsensor, INPUT);
49 pinMode(pump1, OUTPUT);
50 pinMode(pump2, OUTPUT);
51 digitalWrite(pump1, HIGH);
52 digitalWrite(pump2, HIGH);
53 }
54
55void loop() {
56 sensorcheck();
57 lowater();
58 settempset();
59 humidcontrol();
60 runheat();
61 runlights();
62 lcdprint();
63 lcdbacklight();
64 watering();
65 }
66
67
68
69void sensorcheck(){
70 if (timersensor.finished()){
71 h=dht.readHumidity();
72 t=dht.readTemperature();
73 timervalue=digitalRead(timerpin);
74 Soil1=analogRead(6);
75 Soil2=analogRead(7);
76 Soil1=map(Soil1,560,270,01,99);
77 Soil2=map(Soil2,545,270,01,99);
78 motiondetect=digitalRead(irsensor);
79 waterlevel=watersens.dist();
80 waterlevel=map(waterlevel,3,57,99,01);
81 timersensor.startOver();
82 }
83}
84
85void lowater(){
86 if (waterlevel<=3){
87 digitalWrite(lowaterled, HIGH);
88 }
89 else{
90 digitalWrite(lowaterled, LOW);
91 }
92}
93
94void watering(){
95 if ((waterlevel>=3)&&(Soil1<=24)){
96 digitalWrite(pump1, LOW);
97
98
99
100
101 }
102else{
103 digitalWrite(pump1, HIGH);
104}
105
106 if ((waterlevel>=3)&&(Soil2<=24)){
107 digitalWrite(pump2, LOW);
108
109
110
111
112 }
113else {
114 digitalWrite(pump2, HIGH);
115}
116}
117
118void settempset(){
119 if (timervalue==HIGH){
120 settemp=daytemp;
121}
122else{
123 settemp=nightemp;
124}
125}
126
127void lcdbacklight(){
128 if (motiondetect==1){
129 lcd.backlight();
130 }
131else if ((motiondetect==0)&&(backlightimer.finished())){
132 lcd.noBacklight();
133 backlightimer.startOver();
134}
135}
136
137void humidcontrol(){
138 if(h>=72){
139 digitalWrite(venthum, HIGH);
140}
141else if (h<=65){
142 digitalWrite(venthum, LOW);
143}
144}
145
146void runheat(){
147 if(t>=settemp){
148 digitalWrite(heaterpin, HIGH);
149}
150else{
151 digitalWrite(heaterpin, LOW);
152}
153}
154
155void runlights(){
156if (timervalue==LOW){
157 digitalWrite(lightpin, HIGH);
158}
159else{
160 digitalWrite(lightpin, LOW);
161}
162}
163
164void lcdprint(){
165 lcd.setCursor(0,0);
166 lcd.print("T/H:");
167 lcd.print(t);
168 lcd.print("/");
169 lcd.print(h);
170 lcd.setCursor(10,0);
171 lcd.print("WL:");
172 lcd.print(waterlevel);
173 lcd.print("%");
174 lcd.setCursor(0,1);
175 lcd.print("Z1:");
176 lcd.print(Soil1);
177 lcd.print("%");
178 lcd.print(" ");
179 lcd.print("Z2:");
180 lcd.print(Soil2);
181 lcd.print("%");
182}