/* How to use the DHT-22 sensor with Arduino uno
Temperature and humidity sensor
*/
//Libraries
#include <DHT.h>;
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
//Constants
#define DHTPIN1 2
#define DHTPIN2 4 // what pin we're connected to
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE); //// Initialize DHT sensor for normal 16mhz Arduino
//Variables
int chk;
long delay_count = 0;
float hum1; //Stores humidity value
float temp1;
float hum2; //Stores humidity value
float temp2;
float mean_temp;
float mean_hum;//Stores temperature value
float prev_mean_hum;
int set_hum = 50;
const int UP_pin = 8;
const int DOWN_pin = 9;
int UP = LOW;
int DOWN = LOW;
void display(float mean_temp, float mean_hum){
lcd.setCursor(1,0);
lcd.print("HUMID: ");
lcd.print(mean_hum);
lcd.print(" %");
lcd.setCursor(1,1);
lcd.print("TEMP: ");
lcd.print(mean_temp);
lcd.println(" C");
}
bool hum_check(float hum1, float hum2, float mean_hum, int set_hum){
if ((abs(hum1-hum2) <= 5) && ((set_hum-mean_hum) > 1.5)){
return true;
}
else {
return false;
}
}
void setup()
{
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.setCursor(1,0);
lcd.print("POWERING ON");
Serial.begin(9600);
dht1.begin();
dht2.begin();
pinMode(7, OUTPUT);
lcd.begin(16,2);
pinMode(UP_pin, INPUT);
pinMode(DOWN_pin, INPUT);
delay(500);
hum1 = dht1.readHumidity();
temp1 = dht1.readTemperature();
hum2 = dht2.readHumidity();
temp2 = dht2.readTemperature();
mean_temp = (temp1+temp2)/2;
mean_hum = (hum1+hum2)/2;
display(mean_temp, mean_hum);
}
void loop()
{
prev_mean_hum = mean_hum;
if (delay_count == 100000){
//Read data and store it to variables hum and temp
hum1 = dht1.readHumidity();
temp1 = dht1.readTemperature();
hum2 = dht2.readHumidity();
temp2 = dht2.readTemperature();
mean_temp = (temp1+temp2)/2;
mean_hum = (hum1+hum2)/2;
if (mean_hum != prev_mean_hum){
lcd.clear();
display(mean_temp, mean_hum);
}
else {
display(mean_temp, mean_hum);
}
if (hum_check(hum1, hum2, mean_hum, set_hum)){
digitalWrite(7, HIGH);
}
else{
digitalWrite(7, LOW);
}
delay_count = 0;
}
++delay_count;
if ((UP == HIGH) && (set_hum <= 100)){
++set_hum;
lcd.clear();
lcd.setCursor(1,0);
lcd.print("SET HUMIDITY: ");
lcd.setCursor(1,1);
lcd.print(set_hum);
lcd.print(" %");
UP = LOW;
delay(150);
}
if ((DOWN == HIGH) && (set_hum >= 0)){
--set_hum;
lcd.clear();
lcd.setCursor(1,0);
lcd.print("SET HUMIDITY: ");
lcd.setCursor(1,1);
lcd.print(set_hum);
lcd.print(" %");
DOWN = LOW;
delay(150);
}
UP = digitalRead(UP_pin);
DOWN = digitalRead(DOWN_pin);
if (abs(hum1-hum2) >= 10){
lcd.setCursor(1,0);
lcd.print("LARGE SENSOR ");
lcd.setCursor(1,1);
lcd.print("DISPARITY ");
delay(2000);
lcd.clear();
hum1 = dht1.readHumidity();
hum2 = dht2.readHumidity();
}
}