diff --git a/RaspberryPi/calculate.c b/RaspberryPi/calculate.c index 2422868..75ad7c3 100644 --- a/RaspberryPi/calculate.c +++ b/RaspberryPi/calculate.c @@ -3,6 +3,8 @@ #include /* link against math lib */ #include "calculate.h" +#define R 8314.3 //J/(kmol*K) (universelle Gaskonstante) +#define mw 18.016 //kg/kmol (Molekulargewicht des Wasserdampfes) /* Bezeichnungen: @@ -31,53 +33,50 @@ Formeln: AF(r,TK) = 10^5 * mw/R* * DD(r,T)/TK; AF(TD,TK) = 10^5 * mw/R* * SDD(TD)/TK */ -float sdd(float temperature) { +static float sdd(float temperature) { //select constant based on input temperature float a = 7.5, b = 237.3; - if (sensor->temperature >= 0) { + if (temperature >= 0) { a = 7.6; b = 240.7; - } - return 6.1078 * pow(10, (a*temperature) / (b*temperature)); + } + return 6.1078 * pow(10, (a * temperature) / (b + temperature)); } -float dd(float relativeHumidity, float temperature) { +static float dd(float relativeHumidity, float temperature) { return relativeHumidity / 100 * sdd(temperature); } -float r(float temperature, float dewTemperature) { +static float r(float temperature, float dewTemperature) { /* This is optional. Necessary with dew point measurements. */ return 100 * sdd(dewTemperature) / sdd(temperature); } -//TD(r,T) = b*v/(a-v) mit v(r,T) = log10(DD(r,T)/6.1078) - -float v(float relativeHumidity, float temperature) { +static float v(float relativeHumidity, float temperature) { log10(dd(relativeHumidity, temperature)/6.1078); } -float td(float relativeHumidity, float temperature) { +static float td(float relativeHumidity, float temperature) { //select constant based on input temperature float a = 7.5, b = 237.3; - if (sensor->temperature >= 0) { - a = 7.6; - b = 240.7; - } - return b * v(relativeHumidity, temperature) / (a - v(relativeHumidity, temperature)); -} - -float absoluteHumidity(sensor *sensor) { - //select constant based on input temperature - float a = 7.5, b = 237.3; - if (sensor->temperature >= 0) { + if (temperature >= 0) { a = 7.6; b = 240.7; } - - - float sdd_T = sdd(sensor->temperature); - float dd = dd(sensor->humidity, sensor->temperature); - float relativeHumidity = r( + return b * v(relativeHumidity, temperature) / (a - v(relativeHumidity, temperature)); +} +static float af(float relativeHumidity, float temperature) { + float tk = temperature + 273.15; + return pow(10, 5) * mw/R * dd(relativeHumidity, temperature) / tk; +} + +float absoluteHumidity(sensor *sensor) { + return af(sensor->humidity, sensor->temperature); +} + +int compareSensors(sensor *inside, sensor *outside) { + if (absoluteHumidity(inside) <= absoluteHumidity(outside)) return 1; + return 0; }