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