-
Notifications
You must be signed in to change notification settings - Fork 0
/
canna-humidity
135 lines (127 loc) · 3.59 KB
/
canna-humidity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <Arduino.h>
#include <LiquidCrystal.h>
#include "DHT.h"
#define DHTPIN 8
#define DHTTYPE DHT22
int relayPin = 9; // Relay Pin D9
// Button Code
const int buttonPin = 7; // Button is Pin 7
int lastState = LOW;
int currentState;
// END OF BUTTON CODE
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
DHT dht(DHTPIN, DHTTYPE);
String stage = ""; // Set the plant stage, Fl for flower
String stage1 = "";
int buttonStatus = 0;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
lcd.begin(16, 2);
dht.begin();
pinMode(relayPin, OUTPUT);
Serial.begin(9600);
lcd.clear();
stage = "Seed";
}
void loop() {
currentState = digitalRead(buttonPin);
float hum = dht.readHumidity();
float temp = dht.readTemperature(); //Reading the temperature in degrees
// Button Press
if (lastState == HIGH && currentState == LOW) { // Let's Make a Button
Serial.println("The Button is pressed");
if (stage == "Veg") {
stage = "Flwr";
Serial.println("Changed to Flower");
lcd.clear();
} else if (stage == "Flwr") {
lcd.clear();
stage = "Dry";
Serial.println("Changed to Dry");
} else if (stage == "Dry") {
lcd.clear();
stage = "Seed";
Serial.println("Changed to Seed");
} else if (stage == "Seed") {
lcd.clear();
stage = "Veg";
Serial.println("Changed to Veg");
}
} else if (lastState == LOW && currentState == HIGH) {
Serial.println("The button is released");
}
lastState = currentState; // Save the last state
if (isnan(hum) || isnan(temp)) { //Checking if the arduino have recieved the values or not
lcd.println("Failed to read from DHT sensor!");
return;
}
if (stage == "Veg") { // Veg Stage
/*
66% Humidity at 21C, 0.32
60% Humidity at 21C, 0.35
*/
if ((temp / hum) >= 0.35 ) {
digitalWrite(relayPin, LOW); // Close Relay, Turn On
stage1 = "On ";
}
else if ((temp / hum) <= 0.32 ) { // Open Relay, Turn Off
digitalWrite(relayPin, HIGH);
stage1 = "Off";
}
} else if (stage == "Flwr") { // Flower Stage
/*
39.6% Humidity at 21C, 0.52
46% Humidity at 21C, 0.47
*/
if ((temp / hum) >= 0.52 ) {
digitalWrite(relayPin, LOW); // Close Relay, Turn On
stage1 = "On ";
}
else if ((temp / hum) <= 0.47 ) {
digitalWrite(relayPin, HIGH); // Open Relay, Turn Off
stage1 = "Off";
}
} else if (stage == "Dry") { // Drying
/*
40% Humidity at 20C, 0.5
50% Humidity at 20C, 0.4
*/
if ((temp / hum) >= 0.5 ) {
digitalWrite(relayPin, LOW); // Close Relay, Turn On
stage1 = "On ";
}
else if ((temp / hum) <= 0.4 ) {
digitalWrite(relayPin, HIGH); // Open Relay, Turn Off
stage1 = "Off";
}
} else if (stage == "Seed") { // Seedling Stage
/*
75% Humidity at 21C, 0.28
70% Humidity at 21C, 0.3
*/
if ((temp / hum) >= 0.3 ) {
digitalWrite(relayPin, LOW); // Close Relay, Turn On
stage1 = "On ";
}
else if ((temp / hum) <= 0.28 ) {
digitalWrite(relayPin, HIGH); // Open Relay, Turn Off
stage1 = "Off";
}
}
else {
digitalWrite(relayPin, HIGH); // Open Relay, Turn off Relay
}
/* Display Temp, Humidity, and Stage*/
lcd.setCursor(0, 0);
lcd.print("Humi: ");
lcd.print(hum, 1); // Humidity
lcd.print("% ");
lcd.print(stage); // What Stage
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(temp, 1); // Temperature in Celsius
lcd.print("C ");
lcd.print(stage1); // On or Off
delay(2200); // Loop every 2.2 seconds
}