I've gone down the Arduino rabbit hole, I spend all my time on this thing.
I'm building a box that controls humidity and temperature with a DHT11 sensor.
I have been trying to add dew point to my setup but not getting anywhere, is there a simple way to add it to my code?
I also have been working on how to make the code change after a few days, the same code for 4 days, then change the humidity and temp settings?
#include <SimpleDHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
dht DHT;
int pinDHT11 = 2; // Declaring digital pin no 2 as the dht11 data pin
int DHTpower = 3; // Power for DHT11
int intakefan = 4; // Intake fan for Humid box and dry
int humidv = 5; // Valve for humud intake
int dryv = 6; // dry box valve
int exfan = 7; // exhaust fan
int exv = 8; // exhaust valve
int returnfan = 9; // fan to bring air from inside box
int returnv = 10; // return valve, air from inside box
SimpleDHT11 dht11;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Set the LCD address to 0x27 for a 16x2 display
void setup() {
pinMode(intakefan, OUTPUT);
pinMode(humidv, OUTPUT);
pinMode(dryv, OUTPUT);
pinMode(exfan, OUTPUT);
pinMode(exv, OUTPUT);
pinMode(returnfan, OUTPUT);
pinMode(returnv, OUTPUT);
pinMode(DHTpower, OUTPUT);
digitalWrite(intakefan, LOW);
digitalWrite(humidv, LOW);
digitalWrite(dryv, LOW);
digitalWrite(exfan, LOW);
digitalWrite(exv, LOW);
digitalWrite(returnfan, LOW);
digitalWrite(returnv, LOW);
digitalWrite(DHTpower, LOW);
Serial.begin(9600);
lcd.init(); // Initialize the LCD
lcd.backlight(); // Turn on the backlight
lcd.clear(); // Clear the LCD screen
lcd.setCursor(3, 0);
lcd.print("Welcome");
}
void loop() {
{
int chk = DHT.read11(DHT11_PIN);
Serial.print("Temperature = ");
Serial.print(DHT.temperature);
Serial.print("*C");
Serial.println();
Serial.print("Humidity = ");
Serial.print(DHT.humidity);
Serial.print("%");
Serial.println();
double gamma = log(DHT.humidity / 100) + ((17.62 * DHT.temperature) / (243.5 + DHT.temperature));
double dp = 243.5 * gamma / (17.62 - gamma);
Serial.print("Dew point = ");
Serial.print(dp);
Serial.print(" *Celcius ");
Serial.println();
delay(3000);
}
void RHcheck() { //Check Humidity Level Function
digitalWrite(DHTpower, HIGH); //On Humidity Sensor
delay(50);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Checking");
lcd.setCursor(0,1);
lcd.print("Humidity");
byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
//This bit will tell our Arduino what to do if there is some sort of an error at getting readings from our sensor
if ((err = dht11.read(pinDHT11, &temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
Serial.print("No reading , err="); Serial.println(err);delay(100);
}
if (((int)humidity > 60) && ((int)humidity < 65)) { // Ok Humidity - Do nothing
digitalWrite(intakefan, LOW);
digitalWrite(humidv, LOW);
digitalWrite(dryv, LOW);
digitalWrite(exfan, LOW);
digitalWrite(exv, LOW);
digitalWrite(DHTpower, LOW);
digitalWrite(returnfan, LOW);
digitalWrite(returnv, LOW);
lcd.clear();
lcd.print("Fans OFF");
lcd.setCursor(0,1);
lcd.print("Valves Closed");
delay(1500);
lcd.clear();
lcd.print((int)humidity); lcd.print(" % Humidity");
lcd.setCursor(0,1);
lcd.print((int)temperature); lcd.print(" Celcius");
}if ((int)humidity < 55 ){
digitalWrite(humidv, HIGH);
digitalWrite(dryv, LOW);
digitalWrite(exv, HIGH);
digitalWrite(DHTpower, LOW);
digitalWrite(returnfan, LOW);
digitalWrite(returnv, LOW);
delay(3000);
digitalWrite(intakefan, HIGH);
digitalWrite(exfan, HIGH);
lcd.clear();
lcd.print("Fans On");
lcd.setCursor(0,1);
lcd.print("Humid Box");
delay(1000);
lcd.clear();
lcd.print((int)humidity); lcd.print(" % Humidity");
lcd.setCursor(0,1);
lcd.print((int)temperature); lcd.print(" Celcius");
}if((int)humidity > 70 ){
digitalWrite(humidv, LOW);
digitalWrite(dryv, HIGH);
digitalWrite(exv, HIGH);
digitalWrite(DHTpower, LOW);
digitalWrite(returnv, HIGH);
digitalWrite(exfan, HIGH);
delay(3000);
digitalWrite(intakefan, HIGH);
digitalWrite(returnfan, HIGH);
lcd.clear();
lcd.print("Fans On");
lcd.setCursor(0,1);
lcd.print("Dry Box");
delay(1000);
lcd.clear();
lcd.print((int)humidity); lcd.print(" % Humidity");
lcd.setCursor(0,1);
lcd.print((int)temperature); lcd.print(" Celcius");
}
}