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.
Inhaltsverzeichnis
- Warum dieser Test der Luftdrucksensoren?
- Welche Luftdrucksensoren sollen getestet werden?
- Testaufbau bei der PTB – Braunschweig
- Ergebnisse und Analyse der gesammelten Messdaten
- Wie werden die Druckmessgeräte kalibriert?
- Fazit
- Danksagung
- Anhang 1 – Aufbau der Schaltung
- Anhang 2 – Programmieren der Sensoren mit MicroPython
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.
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.
Eigenschaft | BMP180 | BMP280 | BME680 |
---|---|---|---|
Versorgungsspannung | 1.8 – 5V DC | 1.8 – 5V DC | 1.2 – 3.6V DC |
Schnittstelle | I2C, SPI | I2C, SPI | I2C, SPI |
Temperaturbereich | -40 bis +85 °C | -40 bis +85 °C | -40 bis +85 °C |
Druckbereich | 300-1100 hPa | 300-1100 hPa | 300-1100 hPa |
Auflösung Druck | 0,02 – 0,06 hPa | 0,01 hPa | 0,01 hPa |
Genauigkeit Druck | ±0,12 hPa | ±0,12 hPa | ±0,12 hPa |
Messzeit | – | – | < 1 s |
Nachfolgend die Links zu den Quellen, von wo ich diese Daten entnommen habe:
Testaufbau bei der PTB – Braunschweig
Für meinen Testaufbau wurde mir ein Prüfmittel bereitgestellt welches zuletzt am 09.01.2024 kalibriert wurde und eine negativen Korrekturwert von -0,24 mbar ausweist. Diese -0,24 mbar sind zufälligerweise auch der Höhenkorrektur eines weiteren per Netzwerk ausgelesenen Referenzsensors, welcher sich einen Raum darunter befindet.
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 Luftdruckreferenz für sämtliche Aufbauten genutzt wird. Ebenso wird dieser Sensor auch für das Messen von Gewichten verwendet.
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:
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 mbar abgezogen werden.
Zeitstempel | Messwert | Einheit |
---|---|---|
2024-05-27 15:30 | 1008.4 | mbar |
2024-05-27 15:45 | 1008.9 | mbar |
2024-05-27 16:00 | 1008.7 | mbar |
Ich habe vom Referenzsensor mehrere Werte erfasst und diese waren zumeist zwischen 1008,36 mbar & 1008,47 mbar.
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.
Hier die Ansicht der Daten 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 Masse 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.
Rechts im Bild siehst du eine Apparatur zum Messen von Druck bis 10000 Bar. Daher sind die Dimensionen der meisten BauteileDruck so klein, dass bei einem Bersten der Apparatur nur ein kleines Klacken zu hören wäre.
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.
Fazit
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.
Danksagung
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.)
Sensor | default I2C Adresse | alternative I2C Adresse |
---|---|---|
BMP180 | 0x77 | – |
BMP280 | 0x76 | 0x77 |
BME680 | 0x77 | 0x76 |
Hier die Schaltung auf dem Breadboard:
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['t'] bmp280Luftdruck = bmp280Values['p'] #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[0] month = currentDateTime[1] day = currentDateTime[2] unknown = currentDateTime[3] hour = currentDateTime[4] minutes = currentDateTime[5] seconds = currentDateTime[6] #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, currentTimestamp, bmp180Luftdruck,bmp180Temperatur, bmp180Hoehe, bmp280Luftdruck,bmp280Temperatur,bme680Luftdruck, bme680Temperatur, bme680Luftfeuchtigkeit,bme680Hoehe, sep=";") #eine Pause von 1 Sekunde time.sleep(1)
Auf der Kommandozeile können wir nun die Daten ablesen.
Aufzeichnen der Daten mit Putty
Die Daten der seriellen Schnittstelle können recht simple mit Putty aufgezeichnet werden. Das Tool Putty ist eigentlich ein Terminal Programm, mit welchem weit entfernte Rechner / Server gesteuert und bedient werden können. Jedoch können wir sämtliche Eingaben in einer Logdatei mitschreiben lassen, dieses Feature nutze ich hier um die Daten der seriellen Schnittstelle aufzuzeichnen.