Relative Luftfeuchte und Meteorologischer Luftdruck mit BME280
IoT BME280 ESP8266 ArduinoDer BME280 misst neben der Temperatur auch den Absoluten Luftdruck und die Absolute Luftfeuchtigkeit. Benötigt werden aber die Relative Luftfeuchtigkeit und der Meteorologische Luftdruck. Diese Werte müssen berechnet werden.
Hier ein Codeschnipsel für die Arduino IDE um mit einem ESP8266 (hier ein Wemos D1 Mini) und einem BME280 beide Werte und den Taupunkt zu berechnen.
// ############################################
// Globale Konstanten
const float TempOffset (-1.0); // der BME280 misst immer ca 1 Grad zuviel
const float HoeheAmMessort = 200.0; // Hoehe des Messpunktes in Meter ueber NN
// Globale Variablen
float varTemp = 0.0; // Variable zum lesen der Temperatur
float varFeuchteAbs = 0.0; // Variable zum lesen der absoluten Luftfeuchte
float varDruckAbs = 0.0; // Variable zum lesen des absoluten Luftdrucks
float varRelFeuchte = 0.0; // Berechnete relative Luftfeuchte
float varTaupunkt = 0.0; // Berechneter Taupunkt
float varMeteoDruck = 0.0; // Berechneter meteorologischer Druck bezogen auf Meereshoehe
void LeseWerte() {
// Konstanten fuer die Berechnungen
const float SEALEVELPRESSURE_HPA = 1013.25; // Normaldruck in hPa auf Meereshoehe
const float TEMPGRADIENT = 0.0065; // Temperaturgradient Celsius/Meter
const float mw = 18.01534; // Molare Masse von Wasser g/mol
const float r = 8.31447215; // Universelle Gas Konstante J/mol/K
varTemp = bme.readTemperature(); // Temperatur einlesen
varTemp = varTemp + TempOffset; // Korrekturfaktor einrechnen
varFeuchteAbs = bme.readHumidity(); // absolute Luftfeuchte einlesen
varDruckAbs = bme.readPressure(); // absoluter Luftdruck einlesen
varDruckAbs = varDruckAbs / 100; // umrechnen in HektoPascal
// Berechnung des Taupunktes
varTaupunkt = (243.5 * (log(varFeuchteAbs/100) + ((17.67 * varTemp) / (243.5 + varTemp))) / (17.67 - log(varFeuchteAbs/100) - ((17.67 * varTemp) / (243.5 + varTemp))));
// Berechnung der relativen Luftfeuchte
varRelFeuchte = (6.112 * powf(2.718281828, (17.67 * varTemp) / (varTemp + 243.5)) * varFeuchteAbs * mw) / ((273.15 + varTemp) * r);
// Berechnung des Luftdrucks bezogen auf Meereshoehe = Meteorologischer Luftdruck
// erst Temperatur auf Meereshoehe = Temperatur in Kelvin + (Temperaturgradient * Hoehe)
float varTempMeerK;
varTempMeerK = varTemp + 273.15 + (TEMPGRADIENT * HoeheAmMessort);
// dann Luftdruck auf Meereshoehe = AbsoluterLuftdruck / (1-((Temperaturgradient*Hoehe)/Temperatur auf Meereshoehe in Kelvin))^(0.03416/Temperaturgradient)
varMeteoDruck = varDruckAbs / powf((1 - ((TEMPGRADIENT * HoeheAmMessort) / varTempMeerK)), (0.03416 / TEMPGRADIENT));
}
// ############################################