Bin grad beim Software-"Oversampling" für Arme. Das geht erstaunlich gut.
Temperaturmessung auf Tausendstel Grad
:
Inclusive eingebauten Delay schätze ich, dass etwa 10 Messungen pro Sekunde zusammenkommen. Das Zappeln der letzten Stelle hält sich in Grenzen.
Aufgrund der Floating point Berechnungen gibt es die Limitierung auf insgesamt 6 Stellen, da bin ich schon fast dran. Obwohl... Zehntausendstel Grad gehen dann auch
.
.
.
.
Test:
Hilft aber nicht wirklich weiter
.
Der Arduino-Code:
Code:
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <LiquidCrystal.h>
float temperature = 20.0;
float pressure = 100000.0;
float tempCorrection = -0.5; // absolute sensor error correction
Adafruit_BMP280 bme; // I2C
const int rs = 5, en = 6, d4 = 9, d5 = 10, d6 = 11, d7 = 12; // Arduino pin connection
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
lcd.begin(16, 2);
bool status;
status = bme.begin(0x76); //The I2C address of the sensor is 0x76
if (!status) {
lcd.clear();
lcd.print("Error. Check");
lcd.setCursor(0,1);
lcd.print("connections");
while (1);
}
delay(500);
lcd.clear();
}
void loop() {
getPressure();
getTemperature();
//Printing Temperature
lcd.setCursor(0,0);
lcd.print("T: ");
lcd.print(temperature + tempCorrection,3);
lcd.print(" ");
lcd.print((char)223);
lcd.print("C ");
//Printing Pressure
lcd.setCursor(0,1);
lcd.print("P: ");
lcd.print(pressure/100.0); // display in hPa
lcd.print(" hPa ");
delay(80);
}
float getTemperature()
{
temperature = (15.0*temperature + bme.readTemperature())/16.0; // limited by accuracy of floating point variables
}
float getPressure()
{
pressure = (8.0*pressure + bme.readPressure())/9.0;
}
Ansonsten kann ich Alfsch's Beobachtung bestätigen: Man muss nur scharf hinsehen, dann steigt die Temperatur (Strahlungswärme des Körpers).