/*
* Created by ArduinoGetStarted.com
*
* This example code is in the public domain
*
* Tutorial page: https://arduinogetstarted.com/tutorials/arduino-temperature-humidity-sensor
*/
#include "DHT.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#include "Arduino.h"
#include "uRTCLib.h"
#define RELAY_PIN_1 6 // Arduino pin connected to relay for hydrator
#define RELAY_PIN_2 7 // Arduino pin connected to relay for dehumidifier
#define RELAY_PIN_3 8 // Arduino pin connected to relay for dehumidifier fan
#define RELAY_PIN_4 9 // Arduino pin connected to relay for Heater
#define DHTPIN1 2 // Arduino pin connected to DHT22 first sensor
#define DHTPIN2 3 // Arduino pin connected to DHT22 second sensor
#define DHTTYPE1 DHT22 // DHT 22 (AM2302)
#define DHTTYPE2 DHT22 // DHT 22 (AM2302)
#define ONE_WIRE_BUS 5
DHT dht1(DHTPIN1, DHTTYPE1);
DHT dht2(DHTPIN2, DHTTYPE1);
OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices
DallasTemperature sensors(&oneWire); // Pass our oneWire reference to Dallas Temperature sensor
DeviceAddress Thermometer = { 0x28, 0x94, 0xE2, 0xDF, 0x02, 0x00, 0x00, 0xFE };
uRTCLib rtc(0x68);
const int TEMP_THRESHOLD_IN = 25; // upper threshold of indoors temperature, change to your desire value
const int HUM_THRESHOLD_IN = 70; // lower threshold of indoors humidity, change to your desire value
const int TEMP_THRESHOLD_OUT = 20; // upper threshold of outdoor temperature, change to your desire value
const int HUM_THRESHOLD_OUT = 70; // upper threshold of outdoor humidity, change to your desire value
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
int chk;
float temp1;
float temp2;
float temp3;
float hum1;
float hum2;
void setup() {
Serial.begin(9600); // initialize serial
delay(3000); // wait for console opening
URTCLIB_WIRE.begin();
dht1.begin(); // initialize the sensor 1
dht2.begin(); // initialize the sensor 2
sensors.begin();
pinMode(RELAY_PIN_1, OUTPUT); // initialize digital pin as an output
pinMode(RELAY_PIN_2, OUTPUT); // initialize digital pin as an output
pinMode(RELAY_PIN_3, OUTPUT); // initialize digital pin as an output
pinMode(RELAY_PIN_4, OUTPUT); // initialize digital pin as an output
rtc.set(0, 16, 3, 4, 19, 6, 24); // rtc.set(second, minute, hour, dayOfWeek, dayOfMonth, month, year) (1=Sunday, 7=Saturday)
}
void loop() {
// wait a few seconds between measurements.
delay(2000);
temp1 = dht1.readTemperature();; // read temperature in Celsius from sensor 1
temp2 = dht2.readTemperature();; // read temperature in Celsius from sensor 2
hum1 = dht1.readHumidity();; // read relative humidity from sensor 1
hum2 = dht2.readHumidity();; // read relative humidity from sensor 2
sensors.requestTemperatures();
temp3 = sensors.getTempCByIndex(0);
if (isnan(temp1)) {
Serial.println("Failed to read from DHT sensor!");
}
if (isnan(temp2)) {
Serial.println("Failed to read from DHT sensor!");
}
if (isnan(hum1)) {
Serial.println("Failed to read from DHT sensor!");
}
if (isnan(hum2)) {
Serial.println("Failed to read from DHT sensor!");
}
if (isnan(temp3)) {
Serial.println("Failed to read from ds18b20 sensor!");
} else {
if((temp2 > TEMP_THRESHOLD_OUT) && (hum2 > HUM_THRESHOLD_OUT) ){
if((temp3 > TEMP_THRESHOLD_IN)){
Serial.println("Cooling");
digitalWrite(RELAY_PIN_1, LOW); // turn off humidifier
digitalWrite(RELAY_PIN_3, HIGH); // turn on cooler
digitalWrite(RELAY_PIN_4, LOW); // turn off heater
} if((temp3 < (TEMP_THRESHOLD_IN -5))){
Serial.println("Optimal C");
digitalWrite(RELAY_PIN_1, LOW); // turn off humidifier
digitalWrite(RELAY_PIN_3, LOW); // turn off cooler
digitalWrite(RELAY_PIN_4, LOW); // turn off heater
} if((hum1 > HUM_THRESHOLD_IN)){
Serial.println("Dehumidify");
digitalWrite(RELAY_PIN_1, LOW); // turn off humidifier
digitalWrite(RELAY_PIN_2, HIGH); // turn on dehumidifier
digitalWrite(RELAY_PIN_4, LOW); // turn off heater
} if((hum1 < (HUM_THRESHOLD_IN - 10))){
Serial.println("Optimal HUM");
digitalWrite(RELAY_PIN_1, LOW); // turn off humidifier
digitalWrite(RELAY_PIN_2, LOW); // turn off dehumidifier
digitalWrite(RELAY_PIN_4, LOW); // turn off heater
}
}
if((temp2 > TEMP_THRESHOLD_OUT) && (hum2 < HUM_THRESHOLD_OUT) ){
if((temp3 > TEMP_THRESHOLD_IN)){
Serial.println("Cooling");
digitalWrite(RELAY_PIN_2, LOW); // turn off dehumidifier
digitalWrite(RELAY_PIN_3, HIGH); // turn on cooler
digitalWrite(RELAY_PIN_4, LOW); // turn off heater
} if((temp3 < (TEMP_THRESHOLD_IN -5))){
Serial.println("Optimal C");
digitalWrite(RELAY_PIN_2, LOW); // turn off dehumidifier
digitalWrite(RELAY_PIN_3, LOW); // turn off cooler
digitalWrite(RELAY_PIN_4, LOW); // turn off heater
} if((hum1 > HUM_THRESHOLD_IN)){
Serial.println("Optimal HUM");
digitalWrite(RELAY_PIN_1, LOW); // turn off humidifier
digitalWrite(RELAY_PIN_2, LOW); // turn off dehumidifier
digitalWrite(RELAY_PIN_4, LOW); // turn off heater
} if((hum1 < (HUM_THRESHOLD_IN - 10))){
Serial.println("Humidify");
digitalWrite(RELAY_PIN_1, HIGH); // turn on humidifier
digitalWrite(RELAY_PIN_2, LOW); // turn off dehumidifier
digitalWrite(RELAY_PIN_4, LOW); // turn off heater
}
}
if((temp2 < TEMP_THRESHOLD_OUT) && (hum2 > HUM_THRESHOLD_OUT) ){
if((temp3 > TEMP_THRESHOLD_IN)){
Serial.println("Optimal C");
digitalWrite(RELAY_PIN_1, LOW); // turn off humidifier
digitalWrite(RELAY_PIN_3, LOW); // turn of cooler
digitalWrite(RELAY_PIN_4, LOW); // turn off heater
} if((temp3 < (TEMP_THRESHOLD_IN -5))){
Serial.println("Heating");
digitalWrite(RELAY_PIN_1, LOW); // turn off humidifier
digitalWrite(RELAY_PIN_3, LOW); // turn off cooler
digitalWrite(RELAY_PIN_4, HIGH); // turn on heater
} if((hum1 > HUM_THRESHOLD_IN)){
Serial.println("Dehumidify");
digitalWrite(RELAY_PIN_1, LOW); // turn off humidifier
digitalWrite(RELAY_PIN_2, HIGH); // turn on dehumidifier
digitalWrite(RELAY_PIN_3, LOW); // turn off cooler
} if((hum1 < (HUM_THRESHOLD_IN - 10))){
Serial.println("Optimal HUM");
digitalWrite(RELAY_PIN_1, LOW); // turn off humidifier
digitalWrite(RELAY_PIN_2, LOW); // turn off dehumidifier
digitalWrite(RELAY_PIN_3, LOW); // turn off cooler
}
}
if((temp2 < TEMP_THRESHOLD_OUT) && (hum2 < HUM_THRESHOLD_OUT) ){
if((temp3 > TEMP_THRESHOLD_IN)){
Serial.println("Optimal C");
digitalWrite(RELAY_PIN_2, LOW); // turn off dehumidifier
digitalWrite(RELAY_PIN_3, LOW); // turn off cooler
digitalWrite(RELAY_PIN_4, LOW); // turn off heater
} if((temp3 < (TEMP_THRESHOLD_IN -5))){
Serial.println("Heating");
digitalWrite(RELAY_PIN_2, LOW); // turn off dehumidifier
digitalWrite(RELAY_PIN_3, LOW); // turn off cooler
digitalWrite(RELAY_PIN_4, HIGH); // turn on heater
} if((hum1 > HUM_THRESHOLD_IN)){
Serial.println("Optimal HUM");
digitalWrite(RELAY_PIN_1, LOW); // turn off humidifier
digitalWrite(RELAY_PIN_2, LOW); // turn off dehumidifier
digitalWrite(RELAY_PIN_3, LOW); // turn off cooler
} if((hum1 < (HUM_THRESHOLD_IN - 10))){
Serial.println("Humidify");
digitalWrite(RELAY_PIN_1, HIGH); // turn on humidifier
digitalWrite(RELAY_PIN_2, LOW); // turn off dehumidifier
digitalWrite(RELAY_PIN_3, LOW); // turn off cooler
}
}
}
rtc.refresh();
Serial.print("Current Date & Time: ");
Serial.print(rtc.year());
Serial.print('/');
Serial.print(rtc.month());
Serial.print('/');
Serial.print(rtc.day());
Serial.print(" (");
Serial.print(daysOfTheWeek[rtc.dayOfWeek()-1]);
Serial.print(") ");
Serial.print(rtc.hour());
Serial.print(':');
Serial.print(rtc.minute());
Serial.print(':');
Serial.println(rtc.second());
delay(1000);
}