Genauigkeitstest bei der PTB: Luftdrucksensoren BMP180, BMP280 und BME680
Im Rahmen von einem Genauigkeitstest der Luftdrucksensoren an der PTB habe ich die Modelle BMP180, BMP280 und BME680 untersucht. Diese Sensoren sind weit verbreitet und werden in verschiedenen Anwendungen wie Wetterstationen, Höhenmessern und IoT-Geräten eingesetzt. Um die Zuverlässigkeit und Präzision dieser Sensoren zu bewerten, habe ich die Messungen in den Räumlichkeiten der Physikalisch-Technischen Bundesanstalt (PTB) in Braunschweig durchgeführt. Durch die Verwendung eines hochpräzisen Referenzsensors der PTB konnte ich die Messergebnisse validieren und eine fundierte Analyse der Leistungsfähigkeit der Sensoren durchführen. In diesem Beitrag stelle ich die Testergebnisse vor.
Für den Beitrag Vergleich von Temperatursensoren für den Arduino & Raspberry PI war ich bereits an der TU-Braunschweig und konnte dort in einem Klimaschrank diverse Temperatursensoren testen.
Hinweis: Als begeisterter Hobbyschrauber und beruflich im Bereich Informatik tätig, ist mir die Arbeit mit Luftdrucksensoren vertraut. Jedoch ist die wissenschaftliche Herangehensweise an den Vergleich dieser Sensoren für mich neu. Für diesen Beitrag habe ich intensiv recherchiert und Unterstützung aus verschiedenen Quellen genutzt, darunter das Internet, ChatGPT sowie Freunde und Bekannte mit entsprechendem Fachwissen. Mein Ziel ist es, diesen Beitrag so präzise und informativ wie möglich zu gestalten. Ich hoffe, dass meine Ausführungen hilfreich und interessant für dich sind.
Warum dieser Test der Luftdrucksensoren?
In vielen Anwendungen verwenden wir Luftdrucksensoren, um präzise Daten zu erfassen und in verschiedenen Schaltungen einzusetzen. Diese Daten können dann in weiterführenden Systemen für verschiedene Zwecke genutzt werden. Es ist von entscheidender Bedeutung, dass wir uns auf die Genauigkeit und Zuverlässigkeit dieser Sensoren verlassen können. Daher ist es mein Ziel, die Leistung der Sensoren zu prüfen und festzustellen, inwieweit sie unseren Anforderungen entsprechen.
Besonders in Betracht der vergleichsweise günstigen Preise dieser Sensoren ist es wichtig, ihre Qualität kritisch zu hinterfragen. Auch wenn sie kostengünstig sind, sollten sie dennoch zuverlässige und präzise Messungen liefern. Durch diesen Test können wir herausfinden, ob die Sensoren ihren Preis wert sind und ob sie für unsere Anwendungen geeignet sind.
Welche Luftdrucksensoren sollen getestet werden?
Es sollen die Sensoren BMP180, BMP280 sowie BME680 getestet werden.
BMP180 Sensor
Technische Daten der verwendeten Sensoren
Schauen wir uns zunächst die technischen Daten der Sensoren an, man kann der Tabelle recht gut entnehmen, dass der Messbereich identisch ist, lediglich die Auflösung der Daten ist unterschiedlich.
EigenschaftBMP180BMP280BME680Versorgungsspannung1.8 - 5V DC1.8 - 5V DC1.2 - 3.6V DCSchnittstelleI2C, SPII2C, SPII2C, SPITemperaturbereich-40 bis +85 °C-40 bis +85 °C-40 bis +85 °CDruckbereich300-1100 hPa300-1100 hPa300-1100 hPaAuflösung Druck0,02 – 0,06 hPa0,01 hPa0,01 hPaGenauigkeit Druck±0,12 hPa±0,12 hPa±0,12 hPaMesszeit--< 1 s
Nachfolgend die Links zu den Quellen, von wo ich diese Daten entnommen habe:
- Bosch BMP180
- Bosch BMP280
- Bosch BME680
Testaufbau bei der PTB - Braunschweig
Für meinen Testaufbau wurde mir ein Prüfmittel bereitgestellt welches zuletzt am 09.01.2024 geprüft wurde und eine negative Tolleranz von -0,24 mBar / Pascal hat. Diese -0,24 mBar sind zufälligerweise auch die Tolleranz zum Referenzsensor welcher sich einen Raum darunter befindet.
Prüfmittel von der PTB und Schaltung am Raspberry Pi Pico
Prüfmittel von der PTB zum messen von Luftdruck, Temperatur und rel. Luftfeuchte
Testaufbau - prüfen von Luftdrucksensoren an der PTB Braunschweig
Auf der Internetseite https://www.ptb.de/cms/nc/ptb/fachabteilungen/abt3/fb-33/ag-333/luftdruckdaten.html findest du die aktuellen Daten (im 15 Minuten Takt) des Luftdrucksensors welcher als Referenz für sämtliche Aufbauten genutzt wird. Ebenso wird auch dieser Sensor für die Abteilung verwendet welche sich mit dem Messen von Gewichten beschäftigt.
Genaues Prüfmittel in einem klimatisiertem, Labor der PTB
Ergebnisse und Analyse der gesammelten Messdaten
In diesem Abschnitt möchte ich die Ergebnisse aus diesem Test aufzeigen. Meine Herangehensweise ist hier das zunächst die Rohdaten (>1000 Datenreihen) gegenübergestellt werden.
Die Rohdaten der Messungen am Raspberry Pi Pico:
Messdaten - Luftdrucksensoren BMP180, BMP280 und BME680Herunterladen
Die Messdaten vom Referenzsensor können unter https://www.ptb.de/cms/nc/ptb/fachabteilungen/abt3/fb-33/ag-333/luftdruckdaten.html abgerufen werden. Der Zeitraum sollte hier auf das Datum 27.05.2024 eingeschränkt werden. (Es wird jedoch lediglich alle 15 Minuten ein Messwert veröffentlicht.) Von diesen Messwerten müssen nun durch den ca. 2m Höhenunterschied ein Wert von 0,24 Pascal abgezogen werden.
ZeitstempelMesswertEinheit2024-05-27 15:301008.4mbar2024-05-27 15:451008.9mbar2024-05-27 16:001008.7mbar
Ich habe vom Referenzsensor mehrere Werte erfasst und diese waren zumeist zwischen 1008,36 mbar & 1008,47 mbar.
Darstellung der aufgezeichneten Messwerte
Es ist jetzt schon erkennbar das der BMP280 Sensor deutlich näher am Referenzsensor der PTB ist als die anderen beiden. Der Sensor BME680 (ca. 16 €) ist nach dem BMP280 noch näher an dem Referenzsensor und der günstige BMP180 ist als ausreicher weit außerhalb der Werte.
Messwerte als Microsoft Excel MappeHerunterladen
Hier die Ansicht der Daten in Boxplotes:
Vergleich der Drucksensoren in Boxplotes
Wie werden die Druckmessgeräte kalibriert?
Schauen wir uns die Pyramide im Bild 1 etwas genauer an (von unten nach oben), wir haben zunächst ein einfaches Prüfmittel, dieses wird gegen ein höherwertiges Messgerät kalibriert, dieses wiederum wird gegen ebenso ein höherwertiges Prüfmittel kalibriert. Bis man eben an der Spitze der Pyramide angekommen ist und es keine weitere Ebene gibt. Nur, wie werden die nationalen Prüfmittel kalibriert?
Um ein Prüfmittel sehr genau zu kalibrieren, nutzt man zwei Systeme ein Normal Flüssigkeitsmanometer und ein Normal Kolbenmanometer. In der Vergangenheit waren die Flüssigkeitsmanometer verbreitet und das genaueste Prüfmittel. Die Flüssigkeitsmanometer werden jedoch durch verbesserte Fertigungsprozesse bei Kolbenmanometer (Verringerung der Spaltmaße) immer mehr verdrängt. Das PTB hat noch so ein Flüssigkeitsmanometer, welches mit Quecksilber arbeitet.
Das Prinzip der Kalibrierung von Messgeräten ist recht einfach bzw. wurde mir von Herrn E. erläutert und danach war das ganze auch mehr als einleuchtend. Die Formel ist p=F/A, wobei p der Druck, F die Kraft und A die Fläche ist.
Die Funktionsweise ist sehr simple, auf einem Kolben von welchem die Maße auf wenige tausenstel bekannt sind werden hochgenaue Gewichte gelegt, unterhalb von diesem Kolben bildet sich dann ein Druck welchen man mit der oben genannten Formel berechnen kann.
Tafel - Kalibrierung von Messgeräten
spezielle Gewichte zum Kalibrieren von Messgeräten
Rechts im Bild siehst du eine Aparatur zum Messen von Druck bis 1000 Bar. Jedoch ist der Bauraum für diesen druck so klein das bei einem bersten der Aparatur nur ein kleines Klacken zu hören wäre.
Aufbau von Drucktest bis 1000 Bar
Hochgenaues / Nationales Prüfmittel
An der Physikalisch-Technischen Bundesanstalt Braunschweig gibt es das genaueste Prüfmittel für Drücke welches auf sechs Stellen nach dem Komma messen kann.
Links im Bild siehst du einen Teil von diesem Prüfmittel mit der Seriennummer 2. Bei meinem Besuch war dieses zerlegt und daher fehlen hier einige Anbauteile.
Das Prinzip des Flüssigkeitsbarometer wird jedoch weiterhin verwendet und mit Lasermessgeräten wird dieses umso genauer. Als Flüssigkeit wird hier ein spezielles Öl verwendet.
experimentelles Flüssigkeitsmanometer in der PTB Braunschweig
Als Fazit aus diesem Test der Luftdrucksensoren an der PTB ziehe ich das der Luftdrucksensor BMP280 welcher sich im mittleren Preissegment befindet eine gute Wahl ist wenn es um die Messung von Drucken geht. Der deutlich günstige Sensor BMP180 währe eine alternative wenn es um nicht kritische Werte geht.
Einzig der BME680 Sensor welcher noch viele weitere Messgrößen liefert (Luftqualität, Temperatur, rel. Luftfeuchtigkeit) liegt hier noch etwas näher am Referenzsensor der PTB.
Ich möchte mich herzlich bei der Physikalisch-Technischen Bundesanstalt (PTB) in Braunschweig bedanken, dass ich die Möglichkeit erhalten habe, die Räumlichkeiten für meinen Genauigkeitstest der Luftdrucksensoren BMP180, BMP280 und BME680 zu nutzen. Besonders dankbar bin ich für die Bereitstellung eines hochpräzisen Referenzsensors, der es mir ermöglicht hat, die Messergebnisse meiner Testsensoren zu validieren und sicherzustellen, dass die durchgeführten Messungen höchst zuverlässig sind. Diese Unterstützung war von unschätzbarem Wert für die Durchführung und die Qualität meines Tests.
Anhang 1 - Aufbau der Schaltung
Die Luftdrucksensoren werden via I2C angeschlossen, der verwendete Raspberry Pi Pico hat davon zwei zur Verfügung. Diese beiden I2C Schnittstellen werden auch benötigt, da die Sensoren gleiche I2C Adressen haben. (Selbst wenn man eine alternative I2C Adresse über Lötpunkte setzt, hat man dieses Problem.)
Sensordefault I2C Adressealternative I2C AdresseBMP180 0x77-BMP280 0x760x77BME680 0x770x76
Hier die Schaltung auf dem Breadboard:
Schaltung - Luftdrucksensoren BMP180, BMP280 und BME680 am Raspberry Pi Pico
Anhang 2 - Programmieren der Sensoren mit MicroPython
Für die Programmierung verwende ich das Tool Thonny welches unter https://thonny.org/ kostenfrei heruntergeladen werden kann. Zusätzlich für die Sensoren benötigen wir noch drei Module, welche von den entsprechenden GitHub Repositorys heruntergeladen werden können.
- Sensor BMP180 - robert-hh / BMP085_BMP180 (ZIP-Datei)
- Sensor BMP280 - flrrth / pico-bmp280 (ZIP-Datei)
- Sensor BME680 - robert-hh / BME680-Micropython (ZIP-Datei)
#importieren der Bibliotheken
#für die Sensoren
from bme680 import *
from bmp280 import BMP280I2C
from bmp085 import BMP180
from machine import I2C, Pin
import machine
import time
#definieren der verwendeten I2C Schnittstellen
i2c0 = I2C(0, scl=Pin(9), sda=Pin(8), freq=100000)
i2c1 = I2C(1, scl=Pin(15), sda=Pin(14), freq=100000)
#initialisieren des Sensors BME680
bme680 = BME680_I2C(i2c0)
#initialisieren des Sensors BMP280
bmp280 = BMP280I2C(0x76, i2c1)
#initialisieren des Sensors BMP180
bmp180 = BMP180(i2c1)
bmp180.oversample = 2
bmp180.sealevel = 101325
#Starten der Endlosschleife
while True:
#auslesen der Sensorwerte vom BME680 Sensor
bme680Temperatur = bme680.temperature
bme680Luftfeuchtigkeit = bme680.humidity
bme680Luftdruck = bme680.pressure
bme680Hoehe = bme680.altitude
#auslesen der Sensorwerte vom BMP280 Sensor
bmp280Values = bmp280.measurements
bmp280Temperatur = bmp280Values
bmp280Luftdruck = bmp280Values
#auslesen der Sensorwerte vom BMP180 Sensor
bmp180Temperatur = bmp180.temperature
bmp180Luftdruck = bmp180.pressure
bmp180Hoehe = bmp180.altitude
#ermitteln des aktuellen Zeitstempels
rtc = machine.RTC()
#die Funktion datetime() liefert ein Tupel
#mit den Werten für Datum und Uhrzeit
#Beispiel: (2024, 5, 23, 3, 6, 43, 7, 0)
currentDateTime = rtc.datetime()
year = currentDateTime
month = currentDateTime
day = currentDateTime
unknown = currentDateTime
hour = currentDateTime
minutes = currentDateTime
seconds = currentDateTime
#formatieren der Zeitwerte
textFormat = "{0}.{1}.{2} {3}:{4}:{5}"
formatedDateTime = textFormat.format(day, month, year, hour, minutes, seconds)
currentTimestamp = time.time()
#ausgeben der Daten auf der seriellen Schnittstelle,
#als Separator wird ein Semikolon verwendet,
#somit können diese Daten als CSV eingelesen werden
#Spalten:
# 1 - aktueller Zeitstempel (lesbar)
# 2 - aktueller Zeitstempe (Unix Timestamp)
# 3 - BMP180 - Luftdruck
# 4 - BMP180 - Temperatur
# 5 - BMP180 - Höhe über Null
# 6 - BMP280 - Luftdruck
# 7 - BMP280 - Temperatur
# 8 - BME680 - Luftdruck
# 9 - BMP680 - Temperatur
# 10 - BME680 - Luftfeuchtigkeit
# 11 - BMP680 - Höhe über Null
print(formatedDateTime,
Read the full article