// // FILE: solar-kiln.ino // AUTHOR: Liam Maskey for Fab Academy 2017 - based on DHT11 library from Rob Tillaart // #include dht DHT1; dht DHT2; float ExtHumidityOffset; float ExtHumidity; char c = ' '; int count; #define DHT11_2_PIN 13 // external temperature/humidity sensor #define DHT11_1_PIN 5 // internal temperature/humidity sensor #define FAN 11 // controls the fans #define HUMIDITY_OFFSET 15 // needed to off set the external sensor as it reads larger humidity #define ReadDht11 '1' // command to send temperature and humidity over Bluetooh #define FanOn '2' // fan on override command #define FanOff '3' // fan off override command #define OverrideOff '4' // Overrides off #define debug 0 #define period 60 // avererage period milliseconds boolean FanOverrideOn ; boolean FanOverrideOff ; void setup() { Serial.begin(9600); Serial.println("DHT TEST PROGRAM "); Serial.print("LIBRARY VERSION: "); Serial.println(DHT_LIB_VERSION); Serial.println(); Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)"); Serial1.begin(9600); pinMode(11,OUTPUT); FanOverrideOn = false; FanOverrideOff = false; count = 0; ExtHumidityOffset = 0; ExtHumidity = 0; } void loop() { // READ DATA from first DHT11 Serial.print("DHT11_1, \t"); int chk1 = DHT1.read11(DHT11_1_PIN); switch (chk1) { case DHTLIB_OK: Serial.print("OK,\t"); break; case DHTLIB_ERROR_CHECKSUM: Serial.print("Checksum error,\t"); break; case DHTLIB_ERROR_TIMEOUT: Serial.print("Time out error,\t"); break; case DHTLIB_ERROR_CONNECT: Serial.print("Connect error,\t"); break; case DHTLIB_ERROR_ACK_L: Serial.print("Ack Low error,\t"); break; case DHTLIB_ERROR_ACK_H: Serial.print("Ack High error,\t"); break; default: Serial.print("Unknown error,\t"); break; } // DISPLAY DATA Serial.print(DHT1.humidity, 1); Serial.print(",\t"); Serial.println(DHT1.temperature, 1); // READ DATA from second DHT11 Serial.print("DHT11_2, \t"); int chk2 = DHT2.read11(DHT11_2_PIN); switch (chk2) { case DHTLIB_OK: Serial.print("OK,\t"); break; case DHTLIB_ERROR_CHECKSUM: Serial.print("Checksum error,\t"); break; case DHTLIB_ERROR_TIMEOUT: Serial.print("Time out error,\t"); break; case DHTLIB_ERROR_CONNECT: Serial.print("Connect error,\t"); break; case DHTLIB_ERROR_ACK_L: Serial.print("Ack Low error,\t"); break; case DHTLIB_ERROR_ACK_H: Serial.print("Ack High error,\t"); break; default: Serial.print("Unknown error,\t"); break; } Serial.print(DHT2.humidity, 1); Serial.print(",\t"); Serial.println(DHT2.temperature, 1); // Read from HC05 if (Serial1.available()) { c = Serial1.read(); switch(c){ case ReadDht11: Serial1.print("External humidity is "); Serial1.print(DHT2.humidity, 1); Serial1.println("%"); Serial1.print("External temperature is "); Serial1.print(DHT2.temperature, 1); Serial1.println("C"); Serial1.print("Internal humidity is "); Serial1.print(DHT1.humidity, 1); Serial1.println("%"); Serial1.print("Internal temperature is "); Serial1.print(DHT1.temperature, 1); Serial1.println("C"); break; case FanOn: FanOverrideOn = true; FanOverrideOff = false; Serial1.print("Fan On"); break; case FanOff: FanOverrideOn = false; FanOverrideOff = true; Serial1.print("Fan Off"); break; case OverrideOff: FanOverrideOn = false; FanOverrideOff = false; Serial1.print("Fan overrides off"); break; default: break; } } if (count < period){ count++; ExtHumidityOffset = (ExtHumidityOffset + (DHT2.humidity - HUMIDITY_OFFSET)); ExtHumidity = ExtHumidityOffset/count; } else{ ExtHumidityOffset = 0; ExtHumidityOffset = 0; count = 0; if (DHT1.humidity > ExtHumidity) digitalWrite(FAN,HIGH); else digitalWrite(FAN,LOW); } Serial.print("Difference in humdity is "); Serial.println(ExtHumidity); if(FanOverrideOn) digitalWrite(FAN,HIGH); else{ if (FanOverrideOff) digitalWrite(FAN,LOW); } delay(1000); } // // END OF FILE //