Temperatur-, Luftdruck- und Höhenmessungen
mit dem BOSCH-Sensor: "BMP085"
Seit einiger Zeit gibt es von Fa. BOSCH den Absolutluftdrucksensor BMP085 [1],[2]. Er besticht durch hohe Messgenauigkeit bei geringem Preis. Seine Absolutgenauigkeit liegt bei typ. +/-1hPa. Mithilfe der via I2C-Steuerung abrufbaren Messwerte lässst sich somit ein einfacher Temperatur- und/oder barometrischer Höhenmesser mit absoluter und relativer Höhenwertausgabe realisieren, wobei sich schon Höhenunterschiede von 25cm erkennen lassen. Für erste Versuche ist besonders ein fertig erhältliches kleines Board mit bereits aufgelötetem Sensorchip geeignet [3],[4],[5],[6].

Abb.1 BMP085-Board "PP1" von Fa. JeeLabs
Zur Anpassung an meinen mit 5V versorgten Mikrocontroller wurde ein kleines zusätzliches Board zur Pegelwandlung ( Abb.2 ) benutzt. Dabei stellte sich allerdings heraus, dass die hierauf befindlichen 10K-Ohm-Pull-Up-Widerstände offenbar zu hochohmig waren, um eine I2C-Steuerung des Sensors sicherzustellen, so dass ich ihnen noch zwei 2.2KOhm-Widerstände parallel schalten musste ( Abb.2 ). Die von mir benutzten Pegelwandlerboards sind bei SPARKFUN [7] oder WATTEROTT [8] erhältlich.

Abb.2 Anschaltung des BMP085-Boards an mit 5V betriebenen Mikrocontroller mithilfe eines SparkFun-Pegelwandlers
Alternativ besteht natürlich auch die Möglichkeit der Verwendung von zwei diskreten N-Channel MOS-FET's, so wie es beispielsweise in [8] beschrieben ist ( Abb.3 ). Auch kann an dieser Stelle ein geeigneter IC-Baustein, wie z.B. der "PCA9515" ( erhältlich bei Fa. Reichelt ) eingesetzt werden.

Abb.3 Anschaltung des BMP085-Boards an einen mit 5V betriebenen Mikrocontroller mithilfe diskreter N-Channel-MosFets
Die aktuellen Rohwerte von Temperatur ( UT ) und Luftdruck ( UP ) lassen sich über eine I2C-Schnittstelle abrufen. Um dabei die maximal mögliche Messgenauigkeit erreichen zu können, sind zur Berechnung der Endwerte aber zusätzlich auch noch die im EEPROM-Bereich des Chips abgelegten, exemplarspezifischen Kalibrierungsdaten abzurufen und zur Kalkulation der endgültigen Messwerte mit zu berücksichtigen. Auf diese Weise lassen sich die genauen Werte von Temperatur und Luftdruck ermitteln. Aus letzterer Angabe lässt sich dann auch die jeweilige Höhe bestimmen. Die Berechnung erfolgt unter Einbeziehung des Referenzwertes für Luftdruck auf Meerespegel ( 1013.25hPa ) und Nutzung der sog.: "internationalen barometrischen Formel" .
SOFTWARE
Nachdem ich passende Softwareschnipsel nur für "C" finden konnte, die grundsätzliche Vorgehensweise zur Berechnung der Endwerte aber im zugehörigen Datenblatt glücklicherweise recht gut dokumentiert ist, habe ich mich einmal an die Arbeit gemacht und eine BASCOM-AVR-Version erstellt. Sehr hilfreich war dabei auch das in der Herstellerdokumentation angegebene Zahlenbeispiel. Meine errechneten Endwerte sehen auch schon recht zuverlässig aus, aber leider habe ich derzeit keine Möglichkeit des Vergleichs mit verlässlichen Referenzwerten.
Die Datenausgabe vom Prozessor erfolgt bisher nur seriell über seinen UART-Ausgang, aber selbst bei Verwendung nur eines ATMEGA8 ist noch ausreichend Flash-Kapazität vorhanden, um z.B. noch eine Messwertanzeige auf einem LCD-Display hinzufügen zu können.
Gern würde ich noch mit anderen Interessenten an derartigen Messsystemen zusammenarbeiten und bin auch bereit, dafür meinen ( vorläufigen ) Bascom-Code zur Verfügung zu stellen.
LINKLISTE
[1]
http://www.bosch-sensortec.com/content/l...ch2008.pdf
[2]
http://www.bosch-sensortec.com/content/l...000-05.pdf
[3]
http://news.jeelabs.org/docs/pp1.html
[4]
http://news.jeelabs.org/2009/11/12/meet-...sure-plug/
[5]
http://dl.dropbox.com/u/564060/jeelab-fi...cb-065.pdf
[6]
http://shop.jeelabs.com/products/pressure-plug
[7]
http://www.watterott.com/Logic-Level-Converter
[8]
http://www.sparkfun.com/commerce/product...ts_id=8745
[9]
http://www.standardics.nxp.com/support/d...n97055.pdf