12. Arduino-Projekt: Luftdruck und Temperatur mit BMP280-Sensor messen (3/14)

Die Hardware

Der Sensor BMP280 kann wegen seiner winzig kleinen SMD-Bauweise (Surface Mounted Device) nicht direkt an den Arduino angeschlossen werden.

Zum Glück finden sich im Internet sogenannte Breakout-Boards, das sind kleine Platinen, auf denen die Kleinteile mit arduinotauglichen Füßchen aufgelötet sind. Oft haben die Breakout-Boards auch Spannungsregler und Widerstände um die Arduinospannung an die Sensorspannung anzupassen.

Das ist beim BMP-280-Sensor auch notwendig, da er mit 3,3 Volt arbeitet. Beim Kauf also auf Arduinokompatibilität achten und auch darauf, dass das Breakout-Board die I2C-Schnittstelle des Sensor nach außen führt.

IMG_20191217_151847
Breakout-Board für BMP280 mit I2C-Schnittstelle

Die I2C-Verbindung ist ein serieller Zweidrahtbus bestehend aus einer Datenleitung (SDA), welche in beiden Richtungen funktioniert und einer Synchronisationsleitung (SCL), die den Übertragungstakt vorgibt.

Die Verdrahtung kann wie folgt vorgenommen werden:

bmp280_schaltplan

Und so könnte der Steckbrettaufbau aussehen:

bmp280_bestueckung

Die beiden von den I2C-Leitungen zur positiven Versorgungsspannung geschalteten Widerstände von 10 kΩ dienen als sogenante "Pull-Up-Widerstände" mit dem Zweck, die Leitungen im unbelastetem Zustand positiv zu halten. Bei vielen Breakout-Boards sind sie schon mit bestückt und könnten hier entfallen - andererseits schadet eine Doppelbeschaltung auch nicht.

Die Software

Zwar gibt es für die I2C-Schnittstelle eine eingebaute Arduino-Library, aber die Umrechnung der Kalibrierungswerte für den BMP280 ist laut Datenblatt etwas aufwendig, so dass sich die Installation einer Library lohnt (Quelle: https://arduino-projekte.webnode.at/meine-libraries/luftdrucksensor-bmp280/).

Die Library ist wie üblich in das Library-Verzeichnis der Arduino-Installation zu kopieren, damit sie vom Compiler gefunden werden kann. Alternativ kann auch das Library-Verzeichnis unter "Dokumente/Arduino" verwendet werden.

/*
 * Luftdruck- und Temperaturmessung mit dem Sensor BMP280
 */

// Für das Einlesen und die Kalibrierungsberechnung wird
// die Library von Retian (https://arduino-projekte.webnode.at/meine-libraries/luftdrucksensor-bmp280/)
// verwendet. Die entsprechenden Dateien dazu in das Arduino-
// Libraryverzeichnis kopieren. Die Library verwendet intern
// die Wire-Library von Arduino. Auf die entsprechende Verdrahtung achten!

#include <MyBMP280.h>

// Hier wird eine Instanz der Libraryklasse MyBMP280 definiert
// und dazu die I2C-Adresse des Bausteins übergeben: standard-
// mäßig laut Datenblatt 0x76 (Hexadezimal 76).

MyBMP280 Bmp(0x76);

// Initialisierungen

void setup() {

  // Serielle Schnittstelle zum PC initialisieren

  Serial.begin(9600);

  // Verfügbarkeit und Verdrahtung prüfen

  if ( ! Bmp.isReady()) Serial.println("Error");

  // Messgenauigkeit einstellen

  Bmp.setPressOversampling(BMP280_P_OVERSAMPLING_x2);

  // und initialisieren

  Bmp.init();

}

// Messungen periodisch durchführen und Ergebnisse im seriellen
// Monitor oder Plotter anzeigen

void loop() {

  // Temperaturmessung

  float temperature = Bmp.readTemp();
  Serial.print("Temperatur: ");
  Serial.print(temperature);
  Serial.println(" Grad Celsius");

  // Luftdruckmessung

  float pressure = Bmp.readPress();
  Serial.print("Luftdruck: ");
  Serial.print(pressure);
  Serial.println(" hPa");

  // 1 Sekunde pausieren

  delay(1000);

}

Jedes Gerät, das am I2C-Bus hängt, muss eine Adresse haben, unter der es erreichbar ist. Die Adresse wird als Byte-Wert angegeben und ist vom Gerät vorgegeben und aus dem Datenblatt abzulesen. Oft kann durch entsprechende Verdrahtung eines Pins am Sensor eine zweite Adresse gewählt werden, damit zwei baugleiche Sensoren über denselben Bus angesprochen werden können. Die erste Adresse des BMP280 ist 0x76 und wird gleich beim Erzeugen der Instanz mit übergeben (an den sogenannten "Konstruktor" der Klasse):

MyBMP280 Bmp(0x76);

Wenn die Funktion Bmp.isReady() einen als "falsch" eingestuften Wert zurückgibt, z. B. 0, dann ist der Sensor nicht erreichbar, da u. U. falsch verdrahtet, und es wird die Fehlermeldung "Error" ausgegeben:

  // Verfügbarkeit und Verdrahtung prüfen

  if ( ! Bmp.isReady()) Serial.println("Error");

Screenshots wurden mit Fritzing erstellt, falls nicht anders angegeben (https://fritzing.org)

Angerer Harald - Mittwoch, 11. Dezember 2019 (Zuletzt geändert: Mittwoch, 16. Dezember 2020)

Kategorien: Arduino Tutorials

Kommentieren Sie diesen Beitrag

Ihr Kommentar

Captcha