BMP280 - Tem­pe­ra­tur und Luft­druck messen

Lese­zeit: 4 Minu­ten

Lösung
Seite als PDF

Der Sen­sor BMP280 kann die Tem­pe­ra­tur mes­sen und den Luft­druck bestim­men. Er wird über ➨I2C ange­steu­ert. Auf einem LCD sol­len Tem­pe­ra­tur und Luft­druck ange­zeigt werden.

So sieht es aus:

Schlie­ße das LCD an:

LCD

Nor­ma­ler­wei­se wäre eine kom­ple­xe Ver­ka­be­lung zum Betrieb eines LCDs nötig. Der ➨I2C-Bus regelt über einen eige­nen Mikro­pro­zes­sor die Kom­mu­ni­ka­ti­on der Daten­lei­tun­gen unter­ein­an­der. Es wer­den des­halb nur vier Anschlüs­se benötigt.

Die Hel­lig­keit kann mit einem Poten­tio­me­ter auf der Rück­sei­te des LCDs ein­ge­stellt werden.

Benö­tig­te Bauteile:

  • BMP280
  • LCD 1602
  • Lei­tungs­dräh­te

Der BMP280 wird auch in ande­ren Bau­for­men mit unter­schied­li­cher Pin­be­le­gung ange­bo­ten.

Bei einem BMP280 mit sechs Pins müs­sen SDO und CSB eben­falls an VCC (5V) ange­schlos­sen werden.

Quel­le: 🔗https://​sen​sor​kit​.joy​-it​.net/​d​e​/​s​e​n​s​o​r​s​/​k​y​-​052 (abge­ru­fen am 01.03.23)

Die Schal­tung weist eine Beson­der­heit auf:

Weil I²C (Inter Inte­gra­ted Cir­cuit) ein seri­el­les Bus­sys­tem ist, kön­nen die Daten­lei­tun­gen auf die Lei­ter­plat­te geführt wer­den. Die Anschlüs­se für 5V (VCC) und GND befin­den sich auf der ande­ren Sei­te der Steckplatine. 

SDA SCL Master Slave

Benö­tig­te Bibliotheken:

Bin­de die benö­ti­gen Biblio­the­ken und defi­nie­re die Bauteile.

# include "Adafruit_BMP280.h"
# include "LiquidCrystal_I2C.h"

// LCD definieren
// 0x27 -> Hex-Adresse, 20 Zeichen, 4 Zeilen
LiquidCrystal_I2C lcd(0x27, 20, 4);

Adafruit_BMP280 bmp;

Im set­up-Teil wer­den das LCD und der BMP280 gestartet:

void setup()
{
  // BMP280 starten
  bmp.begin();

  Serial.begin(9600);

  // auf serielle Verbindung warten
  while (!Serial) {;}

  // LCD starten
  lcd.init();
  lcd.backlight();
}

Im loop-Teil wird die Tem­pe­ra­tur und der Luft­druck gemes­sen. Beach­te die Kommentare.

void loop()
{
  // readTemperature() Temperatur messen und Messergebnis formatieren
  String Temperatur = String(bmp.readTemperature());

  // . durch , ersetzen
  Temperatur.replace(".", ",");

  /* 
    readPressure() Luftdruck messen und Messergebnis formatieren
    readPressure() liest in Pascal, ausgabe in hPa (Hekto-Pascal)
    Ergebnis durch 100 teilen
  */
  String Luftdruck = String(bmp.readPressure() / 100);
  Luftdruck.replace(".", ",");

  // Ausgabe Serieller Monitor
  Serial.println("Temperatur: " + Temperatur + "°C");
  Serial.println("Luftdruck: " + Luftdruck + " hPa");

  // Ausgabe LCD
  lcd.setCursor(0, 0);
  lcd.print("Temperatur: ");
  lcd.setCursor(0, 1);

  // \337C -> °
  lcd.print(Temperatur + "\337C");

  lcd.setCursor(0, 2);
  lcd.print("Luftdruck: ");
  lcd.setCursor(0, 3);
  lcd.print(Luftdruck + " hPa");

  delay(3000);
}

Ver­gleich der Mess­da­ten DHT22 und BMP280

Vergleich BMP280 DHT22

Das dazu­ge­hö­ri­ge Programm:

# include "SimpleDHT.h"
# include "Adafruit_BMP280.h"
int SENSOR_DHT22 = 8;
SimpleDHT22 dht22(SENSOR_DHT22);
Adafruit_BMP280 bmp;

void setup()
{
  Serial.begin(9600);

  // auf serielle Verbindung warten
  while (!Serial) {;}

  bmp.begin();
}

void loop()
{
  float TemperaturDHT22;
  float LuftfeuchtigkeitDHT22;

  String AnzeigeTemperaturBMP280 = String(bmp.readTemperature());
  AnzeigeTemperaturBMP280.replace(".", ",");
  
  dht22.read2(&TemperaturDHT22, &LuftfeuchtigkeitDHT22, NULL);
  String AnzeigeTemperaturDHT22 = String(TemperaturDHT22);
  AnzeigeTemperaturDHT22.replace(".", ",");

  Serial.println("DHT22: " + AnzeigeTemperaturDHT22);
  Serial.println("BMP280: " + AnzeigeTemperaturBMP280);
  Serial.println("------------------------------");
  delay(3000);
}

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 20. Nov 2023 @ 15:28