Nach langer Zeit möchte ich gerne einen weiteren Sensor vorstellen, es ist der
„BMP180 digitaler Luftdruck Sensor“. Dieser Sensor enthält unter anderem auch einen Temperatursensor, welcher hier aber nicht weiter betrachtet wird.
Diesen Sensor habe ich bei Ebay für 1,99 € per Sofort-Kauf bei einem Händler aus Singapur (wiedermal lange Lieferzeiten).
Hier nun ein paar technische Daten:
- Spannung 1,8 V bis 3,6V
- Leistungsaufnahme 0,5µA bei 1Hz
- Genauigkeit 0.02hPa
- Messbereich 300hPa bis 1100hPa
Entspricht einer Höhe bzw Tiefe von +9000 m bis – 500 m.
Der Schaltplan
Es ist darauf zu achten, dass die PINs an den richtigen analogen Buchsen des Mikrocontrollers angeschlossen werden. Leider gibt die Bibliothek keine Möglichkeit die zu bestimmen. (Außer natürlich man ändert die *.h Datei.)
VCC -> 3.3 V
GNG -> GND
SDA -> A4
SCL -> A5
Bei dem Anschlussplan habe ich keinen originalen Maßstab verwendet da der Sensor BMP180 sehr klein ist.
Benötigte Bibliothek
Für den Betrieb des Sensors werden folgende Bibliotheken benötigt:
Wie man eine Bibliothek der Arduino IDE hinzufügt habe ich im Tutorial Arduino IDE, Einbinden einer Bibliothek erläutert.
Der Quellcode
#include <Wire.h> #include <BMP180.h> BMP180 barometer; //Die Instanzvariable eines BMP180 Sensors. void setup() { Serial.begin(9600); // Baudrate auf 9600 setzen. Wire.begin(); //Adafruit Wire Bibliothek für die I2C Kommunikation mit dem BMP180 Sensor. barometer = BMP180(); //setzen einer Instanz des BMP180 Sensors. //Prüfen ob ein BMP180 Sensor gefunden wurde. if(!barometer.EnsureConnected()){ Serial.println("Es wurde kein BMP180 Sensor gefunden."); } } void loop() { //Nur wenn ein BMP180 Sensor gefunden wurde dann soll eine Ausgabe erfolgen. if(barometer.IsConnected) { //Lesen des Wertes für den Luftdruck aus dem Sensor. long currentPressure = barometer.GetPressure(); //Schreiben des gelesenen Wertes auf den Serielenausgang Serial.print("Luftdruck: "); Serial.print(currentPressure / 100); Serial.print(" hPa"); Serial.println(); //Eine neue Zeile einfügen. delay(1000); //Kurze Pause von 1 sek. } }
Der Aufbau
Screenshot der Ausgabe auf dem seriellen Monitor
Der Quellcode zum Download
Nachtrag (05.12.2019)
Wenn du nicht die Adafruit Bibliothek herunterladen kannst oder möchtest, so kannst du diese auch über den Bibliotheksverwalter installieren.
Den Bibliotheksverwalter öffnest du diesen über „Sketch“ > „Bibliothek einbinden“ >“Bibliotheken verwalten…“.
Nachdem diese Bibliothek installiert wurde, kannst du das Beispiel über „Datei“ > „Beispiele“ >“Adafruit BMP085 Library“ > „BMP085test“ öffnen und auf den Mikrocontroller schreiben.
Oder du nutzt dieses kleine, modifizierte Beispiel:
#include <Wire.h> #include <Adafruit_BMP085.h> //Instanz eines Sensors Adafruit_BMP085 bmp; void setup(){ //beginn der seriellen Kommunikation mit 9600 Baud Serial.begin(9600); //Wenn kein Sensor gefunden wurde dann... if (!bmp.begin()) { Serial.println("Es wurde kein Sensor gefunden, bitte prüfe die Verkabelung!"); //eine Endlosschleife //Dieses sorgt dafür das die Loop nicht erreicht wird! while (1) {} } } void loop(){ //Ausgabe des Luftdrucks auf der seriellen Schnittstelle Serial.print("Luftdruck = "); Serial.print(bmp.readPressure()); Serial.println(" Pa"); delay(1000); //Kurze Pause von 1 sek. }
Du solltest nun, wenn du alles so wie oben beschrieben angeschlossen hast, nachfolgende Ausgabe im seriellen Monitor finden.
Danke für die tolle Vorstellung. Dein Codebeispiel funktioniert gut. Vielleicht solltest du noch eine Temperatur-Ausgabe im Code einbringen, wie hier z.B.: http://www.aeq-web.com/bmp085-180-arduino/?ref=ws
LOL als ob bei dir irgendwas funktioniert hat, das ist doch fake. Bei mir hat gar nichts funktioniert
Hi Werner,
was ist denn dein Fehler?
Gerne kann ich das ganze neu aufbauen und den Beitrag um ein kleines Video ergänzen.
Gruß,
Stefan Draeger
Diese seite bringt nichts. Da dieser skatch einfach nicht klapt.
Beim mir hat es auch nicht geklappt. Es kam die ganze zeit der gleiche Fehler.
Hi,
welcher Fehler kommt denn bei dir?
Gruß,
Stefan Draeger
Hallo,
ich habe soeben den Sketch ausprobiert und er klappt bei mir.
Aber ich habe den Beitrag um eine „zweite Lösung“ erweitert, ich hoffe das wird dir weiterhelfen.
Ansonsten empfehle ich dir gerne eine Kontaktaufnahme über das Kontaktformular und dort kannst du mir dann ausführlich dein Problem beschreiben.
Gruß,
Stefan Draeger
Hallo,
als Arduinoanfänger habe ich mir Dein Bespiel herunter geladen und die Bibliotheken per ZIP geladen und eingebunden. so weit hat alles geklappt.
Den Sketch in die Arduino IDE geladen und versucht zu kompilieren.
Dabei kommt immer eine Fehlermeldung.
Meine IDE Version ist die 2.0.2
Hier ist sie:
In file included from C:\Users\Jokim\Documents\Arduino\BMP180 Test\BMP180 Test.ino:2:0:
c:\Users\Jokim\Documents\Arduino\libraries\bmp180/BMP180.h:26:10: fatal error: ../Wire/Wire.h: No such file or directory
#include „../Wire/Wire.h“
^~~~~~~~~~~~~~~~
compilation terminated.
exit status 1
Compilation error: exit status 1
Hallo,
da fehlt die eigentlich vorhandene Bibliothek Wire. Diese kannst du über den Bibliotheksmanager achinstallieren.
Gruß
Stefan
Super Toll beschrieben!
Danke für Deine Bemühungen!
Gruß
Ralf
Hallo,
ich habe eben den Sketch ausprobiert und er funktioniert.
Aber : Die Konsolenausgabe, ich nehme an, das ist die Ausgabe über den seriellen Monitor, erhalte ich nicht.
Wo ist denn da überhaupt die barometrische Höhenformel hinterlegt? Zumindest müsste man doch irgendwo die lokale Höhe eingeben, oder?
Vielen Dank vorab!
Gruß Josef
Hallo Josef,
danke für dein Kommentar, ich freue mich das du dich auf mein Blog verirrt hast.
Wenn du die Ausgabe auf dem seriellen Monitor nicht erhältst, wie kommst du dann zu der Annahme das der Sketch funktioniert?
Erhältst du eine Fehlermeldung?
Ist die Baudzahl im seriellen Monitor korrekt eingestellt?
Gruß,
Stefan
Hallo Stefan,
der Sketch funktioniert in sofern, dass dass der Druck angezeigt wird.
Aber alle anderen Daten aus Deinem obigen Beispiel „Konsolenausgabe des Beispieles zum BMP180 Sensor“ erhalte ich nicht. Naja, die stehen in dem Sketch ja auch nicht drin. Wo kommen diese her?
Wobei Du allerdings darauf hinweist, dass die Daten auf dem Seriellen Monitor zu finden sein sollten.
Gruß Josef
Hi Josef,
danke für deinen Hinweis.
Diese Ausgabe auf der Konsole erhältst du, wenn du das Beispiel verwendest welches der Bibliothek „Adafruit BMP085 Library“ beiliegt.
Wenn du dieses nutzt erhälst du genau die Ausgabe wie gezeigt.
Gruß,
Stefan
Hallo,
oh, sorry wer lesen kann ist wie immer klar im Vorteil….:)
Ich hatte vermutet, dass das auch so mit dem modifizierten Beispiel funktionieren soll. Mein Fehler! Mit dem Beispiel aus der Arduino funktioniert es nun auch
Vielen Dank!
Gruß Josef