#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
//dht parameters
#define DHTPIN 3
#define DHTTYPE DHT22
float hum,temp;
float hum_value=75.00;
float hum_value_lastdays=80.00;
bool temp_flag= false;
bool hum_flag= false;
//actuators parameter
#define heater 10
#define fan 9
#define alarm 8
//timer parameter
unsigned long long time1;
//unsigned long time2=0;
const long long period= 30000;
LiquidCrystal_I2C lcd(0x27, 16,2);
DHT dht(DHTPIN, DHTTYPE);
void setup() {
dht.begin();
pinMode(fan, OUTPUT); //fan operation to maintain humidity
pinMode(alarm, OUTPUT); //buzzer for humidity indication
pinMode(heater, OUTPUT); //connect with relay for heating bulb/element
//all the actuators are brought down for precaution
digitalWrite(fan, LOW);
digitalWrite(alarm, LOW);
digitalWrite(heater,LOW);
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("ISA Technologies");
delay(1000);
lcd.clear();
lcd.print("Setting up......");
sensing();
initiate();
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp :");
lcd.setCursor(12,0);
lcd.print("\337c"); // \337 is used to print degree symbol in LCD
lcd.setCursor(0,1);
lcd.print ("Humid:");
lcd.setCursor(12,1);
lcd.print("%");
}
void loop() {
time1= millis();
if (time1>=period){
hum_value=hum_value_lastdays;
}
Serial.print(F("Temp: "));
Serial.print(temp);
Serial.print(F("°C "));
Serial.println();
Serial.print(F("Humidity: "));
Serial.print(hum);
Serial.print(F("%"));
Serial.println();
lcd.clear();
sensing();
lcd.setCursor(0,0);
lcd.print("Temp :");
lcd.setCursor(12,0);
lcd.print("\337c"); // \337 is used to print degree symbol in LCD
lcd.setCursor(0,1);
lcd.print ("Humid:");
lcd.setCursor(12,1);
lcd.print("%");
lcd.setCursor(6,0);
lcd.print(temp);
lcd.setCursor(6,1);
lcd.print(hum);
temp_control();
humid_control();
alarm_system();
}
void sensing(){
hum = dht.readHumidity(); //read relative humidity in percentage
temp = dht.readTemperature();// read temperature in deg C
if (isnan(hum) || isnan(temp)) {
Serial.println(F("Check the DHT Sensor!!!"));
lcd.setCursor(0,0);
lcd.print("Check the DHT sensor!!!");
delay(500);
lcd.clear();
return;
}
//delay(1000);
}
void initiate(){
if(temp>=36.00){
digitalWrite(heater,HIGH);
Serial.println("Heater is ON for initial temp");
temp_flag= true;
}
if(hum>=65.00){
digitalWrite(fan,LOW);
Serial.println("Fan is OFF for initial hum");
hum_flag= true;
}
}
void temp_control(){
//sensing();
if ((temp <= 36.0) && (temp_flag == false)){
digitalWrite(heater, HIGH);
Serial.println("Heater is ON");
temp_flag= true;
}
if((temp>=36.7) && (temp_flag == true)){
digitalWrite(heater,LOW);
Serial.println("Heater is OFF");
temp_flag= false;
}
}
void humid_control(){
//sensing();
if ((hum<=65.0) && (hum_flag ==false)){
digitalWrite(fan, LOW);
Serial.println("Fan is OFF");
hum_flag= true;
}
if((hum>=hum_value) && (hum_flag ==true)){
digitalWrite(fan, HIGH);
Serial.println("Fan is ON");
hum_flag = false;
}
}
void alarm_system(){
//sensing();
if ((hum<50)||(temp>=38)){
digitalWrite(alarm, HIGH);
}
else{
digitalWrite(alarm, LOW);
}
}