#include <LiquidCrystal_I2C.h>
#include <dht.h>
dht DHT;
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define DHTsensor 4
#define light_sensor A0
#define lm35 A1
#define moisture_sensor A2
#define water_sensor A3
#define lamp 13
#define fan 12
#define pump 11
int timer1;
int light, moisture;
byte temp_sign[] = {
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
B00000
};
void setup() {
lcd.init();
lcd.backlight();
pinMode(lamp, OUTPUT);
pinMode(fan, OUTPUT);
pinMode(pump, OUTPUT);
lcd.createChar(0, temp_sign);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Automatic greenhouse");
lcd.setCursor(4, 2);
lcd.print("by Storozhuk");
delay(2000);
lcd.clear();
}
void loop() {
if (millis() - timer1 >= 1000) {
timer1 = millis();
humiditySensor();
tempSensor();
lightSensor();
moistureSensor();
fanFunction();
pumpFunction();
lampFunction();
waterSensor();
}
}
void fanFunction() {
lcd.setCursor(1, 2);
lcd.print("Fan:");
if (DHT.humidity >= 30) {
digitalWrite(fan, LOW);
lcd.setCursor(5, 2);
lcd.print("on ");
} else {
digitalWrite(fan, HIGH);
lcd.setCursor(5, 2);
lcd.print("off");
}
}
void pumpFunction() {
lcd.setCursor(1, 3);
lcd.print("Pump:");
if (moisture <= 30) {
digitalWrite(pump, LOW);
lcd.setCursor(6, 3);
lcd.print("on ");
} else {
digitalWrite(pump, HIGH);
lcd.setCursor(6, 3);
lcd.print("off");
}
}
void lampFunction() {
lcd.setCursor(10, 3);
lcd.print("Lamp:");
if (light <= 25) {
digitalWrite(lamp, HIGH);
lcd.setCursor(15, 3);
lcd.print("on ");
} else {
digitalWrite(lamp, LOW);
lcd.setCursor(15, 3);
lcd.print("off");
}
}
void humiditySensor() {
int chk = DHT.read11(DHTsensor);
lcd.setCursor(1, 1);
lcd.print("Humid:");
lcd.setCursor(7, 1);
lcd.print(DHT.humidity);
lcd.setCursor(9, 1);
lcd.print("%");
lcd.setCursor(10, 1);
lcd.print(" ");
}
void tempSensor() {
int temp_adc = analogRead(lm35);
float temp = (temp_adc * 4.88);
temp = (temp / 10);
lcd.setCursor(1, 0);
lcd.print("Temp:");
lcd.setCursor(6, 0);
lcd.print(temp);
lcd.setCursor(8, 0);
lcd.write(byte(0));
lcd.setCursor(9, 0);
lcd.print("C");
lcd.setCursor(10, 0);
lcd.print(" ");
}
void lightSensor() {
light = analogRead(light_sensor);
light = map(light, 0, 1023, 100, 0);
lcd.setCursor(11, 1);
lcd.print("Light:");
lcd.setCursor(17, 1);
lcd.print(light);
}
void moistureSensor() {
moisture = analogRead(moisture_sensor);
moisture = map(moisture, 0, 900, 0, 100);
lcd.setCursor(11, 0);
lcd.print("Soil:");
if (moisture < 30) {
lcd.setCursor(16, 0);
lcd.print("dry");
} else {
lcd.setCursor(16, 0);
lcd.print(moisture);
lcd.setCursor(18, 0);
lcd.print(" ");
}
}
void waterSensor() {
int water = analogRead(water_sensor);
water = map(water, 0, 900, 0, 100);
lcd.setCursor(9, 2);
lcd.print("Water:");
if (water < 30) {
lcd.setCursor(15, 2);
lcd.print("none");
} else {
lcd.setCursor(15, 2);
lcd.print("full");
}
}