BMP180 Temperatur- und Luftdrucksensor für Arduino
Der BMP180-Sensor ist ein vielseitiges Gerät, das Temperatur und barometrischen Druck misst und sich damit ideal für verschiedene Anwendungen wie Wetterüberwachung und Höhenmessung eignet. In diesem Tutorial werden wir den BMP180-Sensor an ein Arduino anschließen, Temperatur- und Druckdaten auslesen und die Ergebnisse anzeigen. Am Ende dieses Projekts werden Sie in der Lage sein, genaue Temperaturwerte in Celsius und Fahrenheit sowie Druckwerte in Millibar und Zoll Quecksilbersäule zu erhalten.

Um die Konzepte und die Schritte beim Programmieren zu verdeutlichen, empfehle ich, das zugehörige Video für detaillierte Erklärungen anzusehen (im Video bei 00:00).
Hardware erklärt
Der BMP180 ist ein digitaler Sensor, der über I2C kommuniziert, was ihm eine einfache Anbindung an Mikrocontroller wie Arduino ermöglicht. Er hat vier Pins:Vn(Stromversorgung),GND(Boden),SDA(Datenzeile), undSCL(Taktleitung). Der Sensor arbeitet in einem Spannungsbereich von 1,8 bis 3,6 Volt, kann jedoch mit einer geregelten 5V-Versorgung mithilfe eines Spannungsreglers betrieben werden.
Die Fähigkeit dieses Sensors, den Atmosphärendruck zu messen, macht ihn für Anwendungen geeignet, die eine Höhenbestimmung und die Wetterüberwachung erfordern. Der BMP180 verfügt außerdem über einen integrierten Temperatursensor, der für genaue Druckmessungen unerlässlich ist. Indem er zuerst die Temperatur misst, kann der Sensor Temperaturschwankungen kompensieren, die die Druckmessungen beeinflussen.
Datenblattdetails
| Hersteller | Bosch |
|---|---|
| Teilenummer | BMP180 |
| Logik-/I/O-Spannung | 1.8 - 3.6 V |
| Versorgungsspannung | 1.8 - 5.0 V |
| Ausgangsstrom (typ.) | 5 μA |
| Spitzenstrom (max.) | 1 mA |
| Hinweise zur PWM-Frequenz | Nicht zutreffend |
| Eingangslogikschwellen | Nicht zutreffend |
| Spannungsabfall / RDS(on) / Sättigung | nicht zutreffend |
| Thermische Grenzwerte | -40 bis 85 °C |
| Paket | 3,6 x 3,8 mm |
| Notizen / Varianten | Geringer Stromverbrauch |
- Stellen Sie geeignete Spannungspegel sicher, um eine Beschädigung des Sensors zu vermeiden.
- Verwenden Sie bei Bedarf Pull-up-Widerstände an den I2C-Leitungen.
- Halten Sie den Sensor in einer Umgebung mit stabiler Temperatur, um genaue Messwerte zu erhalten.
- Kalibrieren Sie die Höhe anhand Ihres genauen Standorts für präzise Ergebnisse.
- Überwachen Sie die Stromversorgung, um sicherzustellen, dass sie innerhalb der angegebenen Grenzwerte bleibt.
Verdrahtungsanleitung

Um den BMP180-Sensor an Ihren Arduino anzuschließen, beginnen Sie damit, dieVnVerbinden Sie den Pin des BMP180 mit dem 5V-Pin am Arduino. Als Nächstes verbinden Sie denGNDVerbinden Sie den Pin mit der Masse des Arduinos. Für die I2C-Kommunikation verbinden Sie dieSDAPin an den analogen Pin A4 des Arduinos und denSCLPin an A5 anschließen. Stellen Sie sicher, dass Ihre Verbindungen sicher sind, um Kommunikationsprobleme zu vermeiden.
Wenn Sie ein anderes Arduino-Modell verwenden, beachten Sie, dass die I2C-Pins variieren können. Zum Beispiel sind beim Mega2560 dieSDAundSCLDie Pins sind 20 bzw. 21. Überprüfen Sie stets die Pinbelegung Ihres spezifischen Boards, um eine ordnungsgemäße Funktion sicherzustellen.
Codebeispiele & Schritt-für-Schritt-Anleitung
#include
#include
SFE_BMP180 pressure;
#define ALTITUDE 90.0 // Altitude of Robojax Headquarter
Im Code beginnen wir damit, die benötigten Bibliotheken einzubinden:SFE_BMP180.hfür den Sensor undWire.hFür die I2C-Kommunikation. Wir erstellen eine Instanz des BMP180-Objekts namenspressureund definieren die Höhe, auf der unsere Messwerte mithilfe desALTITUDEkonstant.
void setup() {
Serial.begin(9600);
if (pressure.begin()) Serial.println("BMP180 init success");
else { Serial.println("BMP180 init fail\n\n"); while(1); }
}
DersetupDie Funktion initialisiert die serielle Kommunikation mit 9600 Baud und versucht, den BMP180-Sensor zu starten. Wenn die Initialisierung fehlschlägt, gelangt das Programm in eine Endlosschleife, um die weitere Ausführung zu stoppen, was auf ein Verbindungsproblem hinweist.
void loop() {
char status;
double T, P, p0, a;
status = pressure.startTemperature();
if (status != 0) {
delay(status);
status = pressure.getTemperature(T);
if (status != 0) {
Serial.print("temperature: "); Serial.print(T,2);
}
}
}
ImloopIn der Funktion starten wir zuerst eine Temperaturmessung, indem wirstartTemperature(). Ist dies erfolgreich, warten wir, bis die Messung abgeschlossen ist, und rufen die Temperatur mitgetTemperature(T), woTSpeichert den Temperaturwert. Die Temperatur wird dann im seriellen Monitor ausgegeben.
Demonstration / Was Sie erwartet
Wenn er mit Strom versorgt und korrekt angeschlossen ist, liest der BMP180 alle fünf Sekunden kontinuierlich Temperatur- und Druckdaten aus und zeigt sie an. Sie sollten die Temperaturwerte sowohl in Celsius als auch in Fahrenheit sehen sowie die absoluten und relativen Druckwerte. Wenn der Sensor ordnungsgemäß funktioniert, erhalten Sie fehlerfreie Messwerte. Achten Sie auf mögliche Fallstricke wie falsche Spannungspegel oder lockere Verbindungen, die dazu führen können, dass keine Daten ausgelesen werden.
Ressourcen & Referenzen
-
ExternProduktdetails vom Herstellerbosch-sensortec.com
-
ExternSparkFun BMP180 Bibliothekgithub.com
Dateien📁
Arduino-Bibliotheken (zip)
-
BMP180 Arduino-Bibliothek
robojax-BMP180-Library.zip0.02 MB
Datenblatt (pdf)
-
Bosch BMP180 Datenblatt
https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BMP180-DS000.pdf0.64 MB