BMP280 mit Arduino auslesen

Gast #5093931
Lesenswert?

Hallo Ihr,

mein Arduino Nano und mein BMP280 Luftdrucksensor verstehen sich nicht 
so richtig.

Der Sensor ist sehr wahrscheinlich richtig angeschlossen und liefert 
auch Werte. Wenn ich die Adafruit lib verwende sind die Werte für 
Luftdruck und Temperatur auch plausibel.

Jetzt habe ich natürlich (mit Hilfe diverser Foren und Beiträge) "meinen 
eigenen" Code schreiben wollen und dies auch getan. Der tut aber leider 
nicht so richtig.

Ich habe den Code mit 2 verschiedenen BMP280 Sensoren getestet. Einmal 
lande ich bei ca. 30°C und einmal bei ca. 50°C (Druck stimmt auch 
nicht). Irgendetwas ist da also faul.

Hier die Kurzform...
1
void setup() {
2

3
//BMP280 Konfigurieren
4
  Wire.begin();
5
  Wire.beginTransmission(I2C_ADDRESS);
6
  Wire.write(0xF4);
7
  Wire.write(B01010011);
8
  Wire.write(0xF5);
9
  Wire.write(B00000000);
10
  Wire.endTransmission();
11

12

13
//Auslesen der Kalibrierkonstanten (hier nur die Konstanten zur Temperaturberechnung)
14
  Wire.beginTransmission(I2C_ADDRESS);
15
  Wire.write(0x88);
16
  Wire.endTransmission();
17

18
  Wire.requestFrom(I2C_ADDRESS, 24);
19
  while (!Wire.available());
20
  unsigned short dig_T1 = Wire.read() << 8 | Wire.read();
21
  signed short dig_T2 = Wire.read() << 8 | Wire.read();
22
  signed short dig_T3 = Wire.read() << 8 | Wire.read();
23
  ...
24

25
//Umrechnung der Kalibrierkonstanten a la -> https://www.mikrocontroller.net/topic/366173 (ganz unten)
26
  float aT1 = (float)dig_T1*pow(2,4);
27
  float aT2 = (float)dig_T2*pow(2,-14);
28
  float aT3 = (float)dig_T3*pow(2,-34);
29
...
30

31
//Auslesen der relevanten Register
32
  Wire.beginTransmission(I2C_ADDRESS);
33
  Wire.write(0xFA);
34
  Wire.endTransmission();
35

36
  Wire.requestFrom(I2C_ADDRESS, 3);
37
  while (!Wire.available());
38
  long msb = Wire.read();
39
  long lsb = Wire.read();
40
  long xlsb = Wire.read();
41
//Zusammensetzen des Rohwertes der Temperatur
42
  signed long adc_t = (((long)msb << 12) | ((long)lsb << 4) | ((long)xlsb) >> 4);
43

44
//Umrechnung a la -> https://www.mikrocontroller.net/topic/366173
45
   float ofs = (float) adc_t - aT1;
46
   float t_fine = (ofs * aT3 + aT2) * ofs;
47
   double Temperatur = t_fine * (1.0 / 5120.0);
48
}

Wäre super lieb, wenn jemand den ein oder anderen Hinweis für mich hätte 
:)

Viele Grüße und ein schönes Wochenende

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren