#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
#include <DHT.h>
#define DHTPIN1 2
#define DHTPIN2 10
#define DHTTYPE1 DHT22
#define DHTTYPE2 DHT22 // DHT 22 (AM2302), AM2321
DHT dht1(DHTPIN1, DHTTYPE1);
DHT dht2(DHTPIN2, DHTTYPE1);
//Variables for sensors
int chk;
float hum1; //Stores humidity value
float temp1; //Stores temperature value
float hum2; //Stores humidity value
float temp2; //Stores temperature value
const int LED_GREEN = 22; //Green LED WHEN HEATER OFF
const int SENSOR_FAILURE_LED= 3; // CONNECTED TO LED
const int SENSOR_FAILURE_BUZZER= 4;
const int POWER_FAILURE= 5; //CONNECTED TO RELAY THAT CONNCETED WITH BUZZER AND BATTERY
const int up_key = 6;
const int down_key = 7;
const int RELAY = 8; //FOR HEATER
const int LED_RED = 9; //Red LED WHEN HEATER ON
const int SENSOR_COMPARE_BUZZER = 11;
const int SENSOR_COMPARE_LED = 12;
const int over_temp_LED = A0;
const int over_temp_BUZZER= A1;
const int LOW_TEMP_LED= A2;
const int LOW_TEMP_BUZZER= A3;
float SetPoint = 30.0;
unsigned long start;
void setup() {
lcd.init(); // initialize the lcd
lcd.backlight();
Serial.begin(9600);
pinMode(up_key, INPUT_PULLUP);
pinMode(down_key, INPUT_PULLUP);
pinMode(RELAY, OUTPUT);
pinMode(LED_RED, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(POWER_FAILURE, OUTPUT);
pinMode(SENSOR_FAILURE_LED, OUTPUT);
pinMode(SENSOR_FAILURE_BUZZER, OUTPUT);
pinMode(SENSOR_COMPARE_BUZZER, OUTPUT);
pinMode(SENSOR_COMPARE_LED, OUTPUT);
pinMode(over_temp_LED, OUTPUT);
pinMode(over_temp_BUZZER, OUTPUT);
pinMode(LOW_TEMP_LED,OUTPUT);
pinMode(LOW_TEMP_BUZZER,OUTPUT);
dht1.begin();
dht2.begin();
//inialize screen
lcd.print(" Vortrex 0.1 ");
delay(2000);}
int x=0;
void loop() {
digitalWrite(POWER_FAILURE, HIGH);
temp1 = dht1.readTemperature();
hum1 = dht1.readHumidity();
temp2 = dht2.readTemperature();
hum2 = dht2.readHumidity();
// Check if any reads failed and exit early (to try again).
if (isnan(temp1) || isnan(hum1)) {
lcd.print("Failed sensor");
Serial.print("Failed sensor 1");
digitalWrite(SENSOR_FAILURE_LED,HIGH);
digitalWrite(SENSOR_FAILURE_BUZZER, OUTPUT);
digitalWrite(RELAY, LOW);
digitalWrite(LED_RED, LOW);
return;
}
if (isnan(temp2) || isnan(hum2)) {
lcd.print("Failed sensor");
Serial.print("Failed sensor 2");
digitalWrite(SENSOR_FAILURE_LED,HIGH);
digitalWrite(SENSOR_FAILURE_BUZZER, OUTPUT);
digitalWrite(RELAY, LOW);
digitalWrite(LED_RED, LOW);
return;
}
else {
digitalWrite(SENSOR_FAILURE_LED,LOW);
digitalWrite(SENSOR_FAILURE_BUZZER, LOW);
}
// if one of dht22 have reading out of range
if ((temp1 < temp2 -5 )||(temp1 -5 > temp2 )) {
lcd.print("Err2");
digitalWrite(SENSOR_COMPARE_LED,HIGH);
digitalWrite(SENSOR_COMPARE_BUZZER,HIGH);
return;}
else {digitalWrite(SENSOR_COMPARE_BUZZER,LOW);
digitalWrite(SENSOR_COMPARE_LED,LOW);}
//SET POINT
if (digitalRead(down_key) == LOW) {
if (SetPoint > 25.1) {
SetPoint-=0.1; }}
if (digitalRead(up_key) == LOW) {
if (SetPoint < 38.9) {
SetPoint+=0.1;}}
//Check Temperature is in limit
if (temp1 > SetPoint) {
digitalWrite(RELAY, LOW); //Turn off heater
digitalWrite(LED_RED, LOW);
digitalWrite(LED_GREEN, HIGH);} //Turn on Green LED
else {
digitalWrite(RELAY, 1); //Turn on heater
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_RED, HIGH);} //Turn on RED LED
delay(100); //Update at every 100mSeconds
//Over Temp
if(temp1 -2 >SetPoint){
Serial.print("over temp ");
digitalWrite(over_temp_LED,HIGH);
digitalWrite(over_temp_BUZZER,HIGH);
digitalWrite(RELAY,LOW);
digitalWrite(LED_RED,LOW);
}
else{digitalWrite(over_temp_LED,LOW);
digitalWrite(over_temp_BUZZER,LOW);}
//Low Temp
if(temp1==SetPoint){x=1;}
if(temp1 +2 < SetPoint && x==1)
{digitalWrite(LOW_TEMP_LED,HIGH);
digitalWrite(LOW_TEMP_BUZZER,HIGH);
}
else{digitalWrite(LOW_TEMP_LED,LOW);
digitalWrite(LOW_TEMP_BUZZER,LOW);}
//DISPLAY
lcd.setCursor(0, 0);
lcd.print("TEMP:");
lcd.print(temp1, 1);
lcd.print(" C ");
lcd.setCursor(0, 1);
lcd.print("Set Point:");
lcd.print(SetPoint, 1);
lcd.print(" C");
Serial.print("Humidity1: ");
Serial.print(hum1);
Serial.print(" %, Temp1: ");
Serial.print(temp1);
Serial.println(" Celsius");
Serial.print("Humidity2: ");
Serial.print(hum2);
Serial.print(" %, Temp2: ");
Serial.print(temp2);
Serial.println(" Celsius");
delay(10);}