// #include <Wire.h>
#include "bmp085.h"
#include "DHT.h"
// Globale Konstanten
constexpr byte DHTPIN {2};
//constexpr byte DHTTYPE {DHT11}; // DHT 11
constexpr byte DHTTYPE {DHT22}; // DHT 22 (AM2302), AM2321
//constexpr byte DHTTYPE {DHT21}; // DHT 21 (AM2301)
// Globale Variablen / Objekte
DHT dht(DHTPIN, DHTTYPE);
BMP085 bmp;
void setup() {
Serial.begin(9600);
Serial.println("Initializing BMP085 sensor...");
bmp.begin();
dht.begin();
Serial.println("Sensor initialized.");
}
void loop() {
// Get temperature
// Messung der Temperatur und des Drucks mit dem BMP085
float temperatureC = bmp.getTemperature(); // Temperatur in °C
float pressurePa = bmp.getPressure(); // Druck in Pascal
// Messungg der Luftfeucht und Temperatur mit dem DHT 22
float luftfeuchte = dht.readHumidity(); // Lesen der Luftfeuchtigkeit und speichern in die Variable luftfeuchte
float temperatur = dht.readTemperature(); // Lesen der Temperatur in °C und speichern in die Variable temperatur
// Temperatur in Kelvin umrechnen
float temperatureK = temperatureC + 273.15;
// Berechnung des Sättigungsdampfdrucks (e_s in Pa)
float e_s = 6.1078 * pow(10, (7.5 * temperatureC) / (temperatureC + 237.3)) * 100;
// Berechnung des Partialdrucks von Wasserdampf (P_w in Pa)
float P_w = (e_s * luftfeuchte) / 100.0;
// Partialdruck der trockenen Luft (P_d in Pa)
float P_d = pressurePa - P_w;
// Gaskonstanten für trockene Luft und Wasserdampf
const float R_d = 287.05; // J/(kg·K)
const float R_w = 461.5; // J/(kg·K)
// Berechnung der Luftdichte (in kg/m^3)
float airDensity = (P_d / (R_d * temperatureK)) + (P_w / (R_w * temperatureK));
Serial.print("Temperature: ");
Serial.print(temperatureC);
Serial.println(" C");
// Get pressure
long pressure = bmp.getPressure();
Serial.print("Pressure: ");
Serial.print(pressure);
Serial.println(" Pa");
// Calculate altitude
float altitude = bmp.calculateAltitude(pressure);
Serial.print("Altitude: ");
Serial.print(altitude);
Serial.println(" m");
// Calculate air densitiy
Serial.print("Air Density: ");
Serial.print(airDensity);
Serial.println(" kg/m^3");
// Wait before next reading
delay(2000);
}