#include #include #include #include #include dht DHT; //Time Declarations #define statehour 7 #define stateminute 3 //Min and Max temps //Day Hot Hide #define DHHmax 86 #define DHHmin 80 //Day Mid Hide #define DMHmax 85 #define DMHmin 77 //Day Hot Side #define DHSmax 95 #define DHSmin 85 //Day Cold Side #define DCSmax 83 #define DCSmin 73 //Night Hot Side #define NHSmax 95 #define NHSmin 85 //Night Cold Side #define NCSmax 85 #define NCSmin 75 //Night Hot Hide #define NHHmax 88 #define NHHmin 80 //Night Mid Hide #define NMHmax 85 #define NMHmin 75 //oneWire Sensors Definitions #define temp_bit 12 #define pin 22 //DHT Sensors Definitions #define HSdhtPin 47 //Hot Side DHT Data #define CSdhtPin 46 //Cold Side DHT Data //Relay Pin Definitions #define dayrelay 31 // relay1 #define nightrelay 32 //relay 2 #define ceramicrelay 33 //relay 3 #define uthrelay 34 //relay 4 #define fogrelay 35 //relay5 #define ceramicdimrelay 37 //relay 7 dimming plug 3 #define uthdimrelay 38 //relay 8 dimming plug 4 #define hotfanrelay 39 //relay 9 #define coldfanrelay 40 //relay 10 // initialize the library with the numbers of the interface pins LiquidCrystal lcd(7, 6, 5, 4, 3, 2); //oneWire and Dallas calls OneWire oneWire(pin); DallasTemperature sensors(&oneWire); //oneWire device adresses DeviceAddress HotHideTemp = { 0x28, 0x80, 0x33, 0x84, 0x04, 0x00, 0x00, 0x77 }; DeviceAddress MidHideTemp = { 0x28, 0x69, 0xFD, 0x83, 0x04, 0x00, 0x00, 0xCE }; DeviceAddress HotSideTemp = { 0x28, 0x8D, 0x3F, 0x84, 0x04, 0x00, 0x00, 0x1C }; //Global Variables int counter; int internalcounter; int fogcontrol; //Relay Modes int daymode = 0; int nightmode = 0; int ceramicmode = 0; int uthmode = 0; int fogmode = 0; int ceramicdimmode = 1; int uthdimmode = 1; int hotfanmode = 0; int coldfanmode = 0; //Subroutine Modes //Day Hot Hide int dhhMode = 0; //Day Mid Hide int dmhMode = 0; //Day Hot Side int dhsMode = 0; //Day Cold Side int dcsMode = 0; //Night Hot Side int nhsMode = 0; //Night Cold Side int ncsMode = 0; //Night Hot Hide int nhhMode = 0; //Night Mid Hide int nmhMode = 0; int daytime = 0; int nighttime = 0; //Min Max Averages float DHHavrg; float DMHavrg; float DHSavrg; float DCSavrg; float NHSavrg; float NCSavrg; float NHHavrg; float NMHavrg; void setup() { Serial.begin(57600); setTime(statehour, stateminute, 00, 27, 01, 2013); // LCD lcd.begin(20, 4); lcd.setCursor(0,0); //Sensors //oneWire Initialization sensors.begin(); sensors.getDeviceCount(); sensors.isParasitePowerMode(); //Get oneWire Device Addresses if (!sensors.getAddress(HotHideTemp, 0)) lcd.print(F("error0")); if (!sensors.getAddress(MidHideTemp, 1)) lcd.print(F("error1")); if (!sensors.getAddress(HotSideTemp, 2)) lcd.print(F("error2")); //Set oneWire Device Resolutions sensors.setResolution(HotHideTemp, temp_bit); sensors.setResolution(MidHideTemp, temp_bit); sensors.setResolution(HotSideTemp, temp_bit); //Min Max Average Calculations //Day Hot Hide DHHavrg = DHHmax + DHHmin; DHHavrg /= 2; //Day Mid Hide DMHavrg = DMHmax + DMHmin; DMHavrg /= 2; //Day Hot Side DHSavrg = DHSmax + DHSmin; DHSavrg /= 2; //Day Cold Side DCSavrg = DCSmax + DCSmin; DCSavrg /= 2; //Night Hot Side NHSavrg = NHSmax + NHSmin; NHSavrg /= 2; //Night Cold Side NCSavrg = NCSmax + NCSmin; NCSavrg /= 2; //Night Hot Hide NHHavrg = NHHmax + NHHmin; NHHavrg /= 2; //Night Mid Hide NMHavrg = NMHmax + NMHmin; NMHavrg /= 2; //Relay Pin Initializations pinMode(dayrelay, OUTPUT); pinMode(nightrelay, OUTPUT); pinMode(ceramicrelay, OUTPUT); pinMode(uthrelay, OUTPUT); pinMode(fogrelay, OUTPUT); pinMode(ceramicdimrelay, OUTPUT); pinMode(uthdimrelay, OUTPUT); pinMode(hotfanrelay, OUTPUT); pinMode(coldfanrelay, OUTPUT); //Quescent State digitalWrite(dayrelay, HIGH); digitalWrite(nightrelay, HIGH); digitalWrite(ceramicrelay, HIGH); digitalWrite(uthrelay, HIGH); digitalWrite(fogrelay, HIGH); digitalWrite(ceramicdimrelay, LOW); digitalWrite(uthdimrelay, LOW); digitalWrite(hotfanrelay, HIGH); digitalWrite(coldfanrelay, HIGH); }//-------------------------------------------- void loop() { //oneWire Temp Vars float HSTempF; float HHTempF; float MHTempF; //DHT Temp Vars float DHThotF; float DHTcoldF; int hotHumid; int coldHumid; float hottempavrg; time_t t = now(); counter++; //Request Temperatures //oneWire sensors.requestTemperatures(); HSTempF = sensors.getTempC(HotSideTemp); HSTempF = DallasTemperature::toFahrenheit(HSTempF); HHTempF = sensors.getTempC(HotHideTemp); HHTempF = DallasTemperature::toFahrenheit(HHTempF); MHTempF = sensors.getTempC(MidHideTemp); MHTempF = DallasTemperature::toFahrenheit(MHTempF); //DHT DHT.read22(HSdhtPin); DHThotF = DHT.temperature * 9; DHThotF /= 5; DHThotF += 32; hotHumid = DHT.humidity; DHT.read22(CSdhtPin); DHTcoldF = DHT.temperature * 9; DHTcoldF /= 5; DHTcoldF += 32; coldHumid = DHT.humidity; //Average Hot Side Temps hottempavrg = DHThotF + HSTempF; hottempavrg /= 2; //Print Data lcd.setCursor(0,0); lcd.print(hour(t)); lcd.print(F(":")); lcd.print(minute(t)); lcd.setCursor(6,0); lcd.print(F("#")); lcd.print(counter); delay(500); lcd.setCursor(11,0); lcd.print(F("H")); lcd.print(hotHumid); lcd.print(F("%")); delay(500); lcd.setCursor(16,0); lcd.print(F("C")); lcd.print(coldHumid); lcd.print(F("%")); delay(500); lcd.setCursor(0,1); lcd.print(F("HH:")); lcd.print(HHTempF); lcd.print(F("F")); delay(500); lcd.setCursor(11,1); lcd.print(F("MH:")); lcd.print(MHTempF); lcd.print(F("F")); delay(500); lcd.setCursor(0,2); lcd.print(F("HSA:")); lcd.print(hottempavrg); lcd.print(F("F")); delay(500); lcd.setCursor(11,2); lcd.print(F("CS:")); lcd.print(DHTcoldF); lcd.print(F("F")); delay(500); lcd.setCursor(0,3); lcd.print(F("DHT:")); lcd.print(DHThotF); lcd.print(F("F")); delay(500); lcd.setCursor(11,3); lcd.print(F("1W:")); lcd.print(HSTempF); lcd.print(F("F")); delay(500); //Determine Day or Night if(hour(t) >= 8 && hour(t) < 20) { daytime = 1; nighttime = 0; } if(hour(t) >= 20 || hour(t) < 8) { nighttime = 1; daytime = 0; } //Make Day or Night if (daytime) { digitalWrite(dayrelay, LOW); daymode = 1; if (nightmode != 3) { digitalWrite(nightrelay, HIGH); nightmode = 0; } } if (nighttime) { digitalWrite(nightrelay, LOW); nightmode = 1; digitalWrite(dayrelay, HIGH); daymode = 0; } //Fog Timer if (daytime) { //Determine if Current Time is within the first 15 min if (minute(t) >= 0 && minute(t) < 15) { fogcontrol = 1; } //Determine if Current Time is between 30 and 45 else if (minute(t) >= 30 && minute(t) < 45) { fogcontrol = 1; } else { fogcontrol = 0; } } if (nighttime) { //Night fog timer is set for 5 minute runs every fifteen minutes //On the hour if (minute(t) >= 0 && minute(t) < 10) { fogcontrol = 1; } else if (minute(t) >= 30 && minute(t) < 40) { fogcontrol = 1; } else { fogcontrol = 0; } } //Turn on fog on the hour and half hour. if (fogcontrol && fogmode == 0) { digitalWrite(fogrelay, LOW); fogmode = 1; } //Turn off fog 15 after, and 45 after. if (!fogcontrol && fogmode == 1) { digitalWrite(fogrelay, HIGH); fogmode = 0; } //Subroutine Calls //Day Hot Hide DHH (HHTempF); delay(500); //Day Mid Hide DMH (MHTempF); delay(500); //Day Hot Side DHS (hottempavrg); delay(500); //Day Cold Side DCS (DHTcoldF); delay(500); //Night Hot Side NHS (hottempavrg); delay(500); //Night Cold Side NCS (DHTcoldF); delay(500); //Night Hot Hide NHH (HHTempF); delay(500); //Night Mid Side NMH (MHTempF); delay(500); delay(51000); }//------------------------------------------ void DHH (float hothide) { if (dhhMode == 0 && daytime) { if (hothide >= DHHmax) { digitalWrite(uthrelay, HIGH); uthmode = 2; digitalWrite(uthdimrelay, HIGH); uthdimmode = 2; dhhMode = 1; } if (hothide < DHHmin) { digitalWrite(uthdimrelay, HIGH); uthdimmode = 2; digitalWrite(uthrelay, LOW); uthmode = 3; dhhMode = 2; } } if (dhhMode == 1) { if (hothide < DHHavrg || nighttime) { digitalWrite(uthrelay, HIGH); uthmode = 0; digitalWrite(uthdimrelay, LOW); uthdimmode = 1; dhhMode = 0; } } if (dhhMode == 2) { if (hothide >= DHHavrg || nighttime) { digitalWrite(uthrelay, HIGH); uthmode = 0; digitalWrite(uthdimrelay, LOW); uthdimmode = 1; dhhMode = 0; } } }//--------------------------------------- void DMH (float midhide) { if (dmhMode == 0 && daytime) { if (midhide >= DMHmax) { digitalWrite(ceramicrelay, HIGH); ceramicmode = 2; digitalWrite(ceramicdimrelay, HIGH); ceramicdimmode = 2; dmhMode = 1; } if (midhide < DMHmin) { digitalWrite(ceramicdimrelay, HIGH); ceramicdimmode = 2; digitalWrite(ceramicrelay, LOW); ceramicmode = 3; dmhMode = 2; } } if (dmhMode == 1) { if (midhide < DMHavrg || nighttime) { digitalWrite(uthrelay, HIGH); uthmode = 0; digitalWrite(uthdimrelay, LOW); uthdimmode = 1; dmhMode = 0; } } if (dmhMode == 2) { if (midhide <= DMHavrg || nighttime) { digitalWrite(uthrelay, HIGH); uthmode = 0; digitalWrite(uthdimrelay, LOW); uthdimmode = 1; dmhMode = 0; } } }//--------------------------------------- void DHS (float hotside) { if (dhsMode == 0 && daytime) { if (hotside >= DHSmax && uthmode != 3) { digitalWrite(uthrelay, HIGH); uthmode = 0; digitalWrite(uthdimrelay, HIGH); uthdimmode = 0; dhsMode = 1; } if (hotside < DHSmin && uthmode != 2) { digitalWrite(uthdimrelay, HIGH); uthdimmode = 0; digitalWrite(uthrelay, LOW); uthmode = 1; dhsMode = 2; } } if (dhsMode == 1) { if (hotside < DHSavrg || nighttime) { digitalWrite(uthrelay, HIGH); uthmode = 0; digitalWrite(uthdimrelay, LOW); uthdimmode = 1; dhsMode = 0; } } if (dhsMode == 2) { if (hotside >= DHSavrg || nighttime) { digitalWrite(uthrelay, HIGH); uthmode = 0; digitalWrite(uthdimrelay, LOW); uthdimmode = 1; dhsMode = 0; } } }//--------------------------------------- void DCS (float coldside) { if (dcsMode == 0 && daytime) { if (coldside >= DCSmax && ceramicmode != 3) { digitalWrite(ceramicrelay, HIGH); ceramicmode = 0; digitalWrite(ceramicdimrelay, HIGH); ceramicdimmode = 0; dcsMode = 1; } if (coldside < DCSmin && ceramicmode != 2) { digitalWrite(ceramicdimrelay, HIGH); ceramicdimmode = 0; digitalWrite(ceramicrelay, LOW); ceramicmode = 1; dcsMode = 2; } } if (dcsMode == 1) { if (coldside < DCSavrg || nighttime) { digitalWrite(uthrelay, HIGH); uthmode = 0; digitalWrite(uthdimrelay, LOW); uthdimmode = 1; dcsMode = 0; } } if (dcsMode == 2) { if (coldside >= DCSavrg || nighttime) { digitalWrite(uthrelay, HIGH); uthmode = 0; digitalWrite(uthdimrelay, LOW); uthdimmode = 1; dcsMode = 0; } } }//---------------------------------------- void NHS (float hotside) { if (nhsMode == 0 && nighttime) { if (hotside >= NHSmax) { digitalWrite(uthrelay, HIGH); uthmode = 2; digitalWrite(uthdimrelay, HIGH); uthdimmode = 2; nhsMode = 1; } if (hotside < NHSmin) { digitalWrite(uthdimrelay, HIGH); uthdimmode = 2; digitalWrite(uthrelay, LOW); uthmode = 3; nhsMode = 2; } } if (nhsMode == 1) { if (hotside < NHSavrg || daytime) { digitalWrite(uthrelay, HIGH); uthmode = 0; digitalWrite(uthdimrelay, LOW); uthdimmode = 1; nhsMode = 0; } } if (nhsMode == 2) { if (hotside >= NHSavrg || daytime) { digitalWrite(uthrelay, HIGH); uthmode = 0; digitalWrite(uthdimrelay, LOW); uthdimmode = 1; nhsMode = 0; } } }//--------------------------------------- void NCS (float coldside) { if (ncsMode == 0 && nighttime) { if (coldside >= NCSmax) { digitalWrite(ceramicrelay, HIGH); ceramicmode = 2; digitalWrite(ceramicdimrelay, HIGH); ceramicdimmode = 2; ncsMode = 1; } if (coldside < NCSmin) { digitalWrite(ceramicdimrelay, HIGH); ceramicdimmode = 2; digitalWrite(ceramicrelay, LOW); ceramicmode = 3; ncsMode = 2; } } if (ncsMode == 1) { if (coldside < NCSavrg || daytime) { digitalWrite(uthrelay, HIGH); uthmode = 0; digitalWrite(uthdimrelay, LOW); uthdimmode = 1; ncsMode = 0; } } if (ncsMode == 2) { if (coldside <= NCSavrg || daytime) { digitalWrite(uthrelay, HIGH); uthmode = 0; digitalWrite(uthdimrelay, LOW); uthdimmode = 1; ncsMode = 0; } } }//--------------------------------------- void NHH (float hothide) { if (nhhMode == 0 && nighttime) { if (hothide >= NHHmax && uthmode != 3) { digitalWrite(uthrelay, HIGH); uthmode = 0; digitalWrite(uthdimrelay, HIGH); uthdimmode = 0; nhhMode = 1; } if (hothide < NHHmin && uthmode != 2) { digitalWrite(uthdimrelay, HIGH); uthdimmode = 0; digitalWrite(uthrelay, LOW); uthmode = 1; nhhMode = 2; } } if (nhhMode == 1) { if (hothide < NHHavrg || daytime) { digitalWrite(uthrelay, HIGH); uthmode = 0; digitalWrite(uthdimrelay, LOW); uthdimmode = 1; nhhMode = 0; } } if (nhhMode == 2) { if (hothide >= NHHavrg || daytime) { digitalWrite(uthrelay, HIGH); uthmode = 0; digitalWrite(uthdimrelay, LOW); uthdimmode = 1; nhhMode = 0; } } }//--------------------------------------- void NMH (float midhide) { if (nmhMode == 0 && nighttime) { if (midhide >= NMHmax && ceramicmode != 3) { digitalWrite(ceramicrelay, HIGH); ceramicmode = 0; digitalWrite(ceramicdimrelay, HIGH); ceramicdimmode = 0; nmhMode = 1; } if (midhide < NMHmin && ceramicmode != 2) { digitalWrite(ceramicdimrelay, HIGH); ceramicdimmode = 0; digitalWrite(ceramicrelay, LOW); ceramicmode = 1; nmhMode = 2; } } if (nmhMode == 1) { if (midhide < NMHavrg || daytime) { digitalWrite(uthrelay, HIGH); uthmode = 0; digitalWrite(uthdimrelay, LOW); uthdimmode = 1; nmhMode = 0; } } if (nmhMode == 2) { if (midhide >= NMHavrg || daytime) { digitalWrite(uthrelay, HIGH); uthmode = 0; digitalWrite(uthdimrelay, LOW); uthdimmode = 1; nmhMode = 0; } } }//---------------------------------------- void FANS () { //Daytime First //Hot Side Fan if (daytime) { if (dhsMode == 1 && dcsMode!= 2) { digitalWrite(hotfanrelay, LOW); hotfanmode = 1; } if (dhsMode != 1 || dcsMode == 2) { digitalWrite(hotfanrelay, HIGH); hotfanmode = 0; } if (hotfanmode == 3) { digitalWrite(hotfanrelay, HIGH); hotfanmode = 0; } //Cold Side Fan if (dcsMode == 1 && dhsMode != 2) { digitalWrite(coldfanrelay, LOW); coldfanmode = 1; } if (dcsMode != 1 || dhsMode == 2) { digitalWrite(coldfanrelay, HIGH); coldfanmode = 0; } if (coldfanmode = 3) { digitalWrite(coldfanrelay, HIGH); coldfanmode = 0; } } //Nighttime //Hot Side Fan if (nighttime) { if (nhsMode == 1 && ncsMode!= 2) { digitalWrite(hotfanrelay, LOW); hotfanmode = 3; } if (nhsMode != 1 || ncsMode == 2) { digitalWrite(hotfanrelay, HIGH); hotfanmode = 0; } if (hotfanmode == 1) { digitalWrite(hotfanrelay, HIGH); hotfanmode = 0; } //Cold Side Fan if (ncsMode == 1 && nhsMode != 2) { digitalWrite(coldfanrelay, LOW); coldfanmode = 3; } if (ncsMode != 1 || nhsMode == 2) { digitalWrite(coldfanrelay, HIGH); coldfanmode = 0; } if (coldfanmode = 1) { digitalWrite(coldfanrelay, HIGH); coldfanmode = 0; } } }//----------------------------------------