Open terceranexus6 opened 9 years ago
The calculation is performed using a form of the Clausius-Clapeyron equation:
P = Po e -H / R T
where P is the saturated water vapor pressure, Po is a pre-exponential factor (7.51E08 mm Hg, equivalent to the vapor pressure of water at infinite temperature), H is the enthalpy of evaporation (42.3 kJ/mol), R is the gas constant (8.314 J/Kmol) and T is the absolute temperature (in K). Po and H were chosen so that the equation fits two data points exactly; 17.535 mm Hg at 20 C and 760 mm Hg at 100 C.
Knowing the saturated water vapor pressure, which is only dependent upon temperature, the absolute water vapor pressure is calculated directly using the relative humidity. To calculate the relative humidity at a second temperature, the saturated water vapor pressure is again calculated, and the original absolute vapor is divided by this number. Both saturated vapor pressures may be observed in the Java console.
To calculate the dewpoint, the Clausius-Clapeyron equation is solved for temperature, and the absolute humidity is used as the independent variable.
double dewPoint(double celsius, double humidity) { double A0= 373.15/(273.15 + celsius); double SUM = -7.90298 * (A0-1); SUM += 5.02808 * log10(A0); SUM += -1.3816e-7 * (pow(10, (11.344(1-1/A0)))-1) ; SUM += 8.1328e-3 * (pow(10,(-3.49149(A0-1)))-1) ; SUM += log10(1013.246); double VP = pow(10, SUM-3) * humidity; double T = log(VP/0.61078); // temp var return (241.88 * T) / (17.558-T); }
// delta max = 0.6544 wrt dewPoint() // 5x faster than dewPoint() // reference: http://en.wikipedia.org/wiki/Dew_point double dewPointFast(double celsius, double humidity) { double a = 17.271; double b = 237.7; double temp = (a * celsius) / (b + celsius) + log(humidity/100); double Td = (b * temp) / (a - temp); return Td; }
dht11 DHT11;
void setup() { Serial.begin(115200); Serial.println("DHT11 TEST PROGRAM "); Serial.print("LIBRARY VERSION: "); Serial.println(DHT11LIB_VERSION); Serial.println(); }
void loop() { Serial.println("\n");
int chk = DHT11.read(DHT11PIN);
Serial.print("Read sensor: "); switch (chk) { case 0: Serial.println("OK"); break; case -1: Serial.println("Checksum error"); break; case -2: Serial.println("Time out error"); break; default: Serial.println("Unknown error"); break; } delay(2000);
Serial.print("Humidity (%): "); Serial.println((float)DHT11.humidity, 2);
Serial.print("Temperature (oC): "); Serial.println((float)DHT11.temperature, 2);
Serial.print("Temperature (oF): "); Serial.println(Fahrenheit(DHT11.temperature), 2);
Serial.print("Temperature (K): "); Serial.println(Kelvin(DHT11.temperature), 2);
Serial.print("Dew Point (oC): "); Serial.println(dewPoint(DHT11.temperature, DHT11.humidity));
Serial.print("Dew PointFast (oC): "); Serial.println(dewPointFast(DHT11.temperature, DHT11.humidity));
delay(2000); } // // END OF FILE //
se llama temperatura relativa