Advertisement
seston

vannitoa vent

Oct 18th, 2016
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.86 KB | None | 0 0
  1. #include <DHT22.h>
  2.  
  3.  
  4. const int humiditySensorPin = 4;
  5. const int relayPin = 8;
  6. const int ledPin = 13;
  7.  
  8. DHT22 sensor(humiditySensorPin);
  9.  
  10. // Global state
  11. boolean FAN_ON = true;
  12. unsigned long STARTED_TIME;
  13. unsigned long MAX_DURATION = 1000L * 60L * 90L;
  14. unsigned long DURATION;
  15.  
  16. void setup(void) {
  17. Serial.begin(115200);
  18. Serial.println("Bathroom Fan Controller, ahoy!");
  19. pinMode(relayPin, OUTPUT);
  20. digitalWrite(relayPin, HIGH); // Turn the fan on when the switch is turned on.
  21. FAN_ON = true;
  22. STARTED_TIME = millis();
  23. DURATION = 1000L * 60L * 15L;
  24. delay(2001); // Give the sensor 2 seconds to warm up.
  25. Serial.print("MAX_DURATION: ");
  26. Serial.println(MAX_DURATION);
  27. Serial.print("DURATION: ");
  28. Serial.println(DURATION);
  29. pinMode(ledPin, OUTPUT); // the built-in Arduion LED on pin 13
  30. }
  31.  
  32. void loop(void) {
  33. DHT22_ERROR_t errorCode;
  34.  
  35. // If the fan state is on, make sure it's on
  36. if (FAN_ON) {
  37. Serial.println("Fan is on.");
  38. digitalWrite(relayPin, HIGH);
  39. if (STARTED_TIME == 0) {
  40. STARTED_TIME = millis();
  41. }
  42. } else {
  43. Serial.println("Fan is off.");
  44. digitalWrite(relayPin, LOW);
  45. STARTED_TIME = 0;
  46. }
  47.  
  48. // Should the fan be on? Check the time.
  49. if (millis() > (STARTED_TIME + MAX_DURATION)) {
  50. Serial.println("Fan exceeded MAX_DURATION");
  51. FAN_ON = false;
  52. DURATION = 0;
  53. } else if (millis() > (STARTED_TIME + DURATION)) {
  54. Serial.println("Fan exceeded DURATION");
  55. FAN_ON = false;
  56. DURATION = 0;
  57. }
  58.  
  59. // Should the fan be on? Check the humidity and set DURATION.
  60. Serial.print("Requesting data...");
  61. errorCode = sensor.readData();
  62. switch(errorCode)
  63. {
  64. case DHT_ERROR_NONE:
  65. Serial.print("Got Data ");
  66. Serial.print(sensor.getTemperatureF());
  67. Serial.print("F ");
  68. Serial.print(sensor.getHumidity());
  69. Serial.println("%");
  70. // Alternately, with integer formatting which is clumsier but more compact to store and
  71. // can be compared reliably for equality:
  72. //
  73. char buf[128];
  74. sprintf(buf, "Integer-only reading: Temperature %hi.%01hi C, Humidity %i.%01i %% RH",
  75. sensor.getTemperatureCInt()/10, abs(sensor.getTemperatureCInt()%10),
  76. sensor.getHumidityInt()/10, sensor.getHumidityInt()%10);
  77. Serial.println(buf);
  78. break;
  79. case DHT_ERROR_CHECKSUM:
  80. Serial.print("check sum error ");
  81. Serial.print(sensor.getTemperatureC());
  82. Serial.print("C ");
  83. Serial.print(sensor.getHumidity());
  84. Serial.println("%");
  85. break;
  86. case DHT_BUS_HUNG:
  87. Serial.println("Bus Hung ");
  88. break;
  89. case DHT_ERROR_NOT_PRESENT:
  90. Serial.println("Not Present ");
  91. break;
  92. case DHT_ERROR_ACK_TOO_LONG:
  93. Serial.println("ACK time out ");
  94. break;
  95. case DHT_ERROR_SYNC_TIMEOUT:
  96. Serial.println("Sync Timeout ");
  97. break;
  98. case DHT_ERROR_DATA_TIMEOUT:
  99. Serial.println("Data Timeout ");
  100. break;
  101. case DHT_ERROR_TOOQUICK:
  102. Serial.println("Must wait 2s before reading data again ");
  103. break;
  104. }
  105.  
  106. float relative_humidity = sensor.getHumidity();
  107. blink(relative_humidity / 10);
  108. Serial.print("Humidity: ");
  109. Serial.print(relative_humidity);
  110. Serial.println("%");
  111. if (relative_humidity > 90) {
  112. DURATION = 1000L * 60L * 45L; // Stay on for 45 minutes as long as it's super humid.
  113. FAN_ON = true;
  114. } else if (relative_humidity > 70) {
  115. DURATION = 1000L * 60L * 20L; // Stay on for 20 minutes as long as it's a bit humid.
  116. FAN_ON = true;
  117. }
  118.  
  119. delay(3000);
  120. }
  121.  
  122. void blink(int times) {
  123. int count = 10;
  124. while (count-- > 0) {
  125. if (times > 0) {
  126. digitalWrite(ledPin, HIGH);
  127. delay(100);
  128. digitalWrite(ledPin, LOW);
  129. delay(100);
  130. times--;
  131. } else {
  132. digitalWrite(ledPin, LOW);
  133. delay(200);
  134. }
  135. }
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement