Problem mit dem BMP280 Sensor

Gast #4984397
Lesenswert?

Hallo zusammen

Ich habe mir auf AliExpress ein BMP280 Modul gekauft (mit 4 Pins, VIN, 
GND, SCL und SDA).

Ich habs nach Anleitung verdrahtet, jedoch kommt immer die Meldung 
"Could not find a valid BMP280 sensor, check wiring!".

Ich finde den Fehler einfach nicht. Die Adresse von 0x77 auf 0x76 ändern 
bringt auch keine Änderung...

Hier mein Code:
1
#include <Wire.h>
2
#include <SPI.h>
3
#include <Adafruit_Sensor.h>
4
#include <Adafruit_BMP280.h>
5

6
#undef BMP280_ADDRESS
7
#define BMP280_ADDRESS (0x76)
8

9
//#define BMP_SCK 13
10
//#define BMP_MISO 12
11
//#define BMP_MOSI 11 
12
//#define BMP_CS 10
13

14
Adafruit_BMP280 bmp; // I2C
15
//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
16
//Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK);
17

18
void setup() {
19
  Serial.begin(9600);
20
  Serial.println(F("BMP280 test"));
21
  
22
  if (!bmp.begin()) {  
23
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
24
    while (1);
25
  }
26
}
27

28
void loop() {
29
   
30
    Serial.print(F("Temperature = "));
31
    Serial.print(bmp.readTemperature());
32
    Serial.println(" *C");
33
    
34
    Serial.print(F("Pressure = "));
35
    Serial.print(bmp.readPressure());
36
    Serial.println(" Pa");
37
    
38
    Serial.println();
39
    delay(2000);
40
}

Im Anhang hab ich ein Bild der Schaltung angefügt. Vielleicht noch eine 
kurze Erklärung, falls man es nicht gut sieht.

-Vin geht auf 5V
-GND geht auf GND
-SCL geht auf SCL
-SDA geht auf SDA


Beste Grüsse
DerFragende
Angehängte Dateien:
Gast #4984542
Lesenswert?

Lukas schrieb:
> Das Board hat normalerweise unten einen 3,3V Regler, sowie einen
> Pegelwandler.

Ja keine Ahnung, welches "Board" er da verwendet. Ich sehe da 
ausschließlich den BMP280 und gehe davon aus das er da ohne weiteres 
Hühnerfutter werkelt. Somal auch nichts Gegenteiliges gesagt wurde 
außer: 5V->Vin.

Lass mich da aber gerne eines besseren belehren. Bzw eine komplette 
Schaltung wäre da halt hilfreich. ;-)
Gast #4984639
Lesenswert?

Ich hab jetzt die Library zu BME geändert und auch den Vorschlag von 
Kaffeetas versucht. Jedoch haben beide nicht funktioniert. Ich hab es 
noch mit einem zweiten BME versucht, mit dem selben Resultat. Könnte es 
sein, dass beide defekt sind?
Gast #4985475
Lesenswert?

Ich bin mir nicht sicher, ob ich deine Frage richtig verstehe. Du meinst 
einen Widerstand (10k Ohm?) and +5V hängen? Gabs da nicht was mit 
pinMode(), also schon im Atmega eingebaute Pullups die man ansteuern 
kann?
Gast #4985481
Lesenswert?

DraconiX schrieb:
> DerFragende schrieb:
>> Vin geht auf 5V
>
> Mal das Datenblatt geblättert? Vielleicht schon gegrillt den kleinen?
> ;-)
>
> Sensor Supply Voltag: Typ:1.8V Max:3.6V

Lukas schrieb:
> Das Board hat normalerweise unten einen 3,3V Regler, sowie einen
> Pegelwandler.

Das sollte der TO erstmal klären. Ich habe ein ähnliches Breakoutboard 
mit dem bmp280 hier, auf dem nur Pullups und ein Stützkondensator sind.

Neben der Versorgungsspannung müssen die Pegel vom I2C dann natürlich 
auch passen
Gast #4985522
Lesenswert?

So es scheint endlich zu funktionieren. Ich hab eine weitere, noch nicht 
versuchte, Bibliothek gefunden. 
https://github.com/Seeed-Studio/Grove_BME280

Damit hat es geklappt. Ich benutze jetzt denn 3.3V Pin und ich hab SCL 
auf A5 und SDA auf A4 gelegt. Die 5V scheinen ihn jedoch nicht gegrillt 
zuhaben und sollten es nach verschiedenen Angaben auch nicht.

Was genau das Problem war, weiss ich nicht. Problem in der Adafruit 
Bibliothek? Mit der neuen Schaltung läufts zumindest auch nicht mit der 
Adafruit Bibliothek.

Temp: 26.75C
Pressure: 98759.00Pa
Altitude: 216.17m
Humidity: 38%

Da scheinen gewisse Werte nicht in Ordnung zu sein (vielleicht doch 
gegrillt?). Die Höhe kann mit 216.17m nicht stimmen. Wohnort ist auf 
~250m. Temperatur ist innen vielleicht 2-3 Grad tiefer und die Feuchte 
zeigt mir eine App draussen mit 48% an. Der Luftdruck scheint +/- 
zustimmen. 984hPa bei mir auf der App.

Muss der Sensor sich "aklimatisieren", also eine Weile laufen, bis er 
zuverlässigere Angaben macht?
Gast #4985531
Lesenswert?

Der Sensor kann die Höhe nicht wissen, die kann man nur bei bekanntem 
Luftdruck ausrechnen.
Du kannst nur in der Software eine bekannte Höhe vorgeben, wenn Du dann 
auf einen Berg steigst zeigt die Software de Höhe an

Am nächsten Tag ist das aber schon wieder alles anders, wieder von 
vorne...
Gast #4985548
Lesenswert?

Im Zweiffelsfall noch mal kurz damit beschäftigen was man da messen 
will.

Höhe ist ja schon genannt worden. Die wird aus dem Luftdruck berechnet - 
wozu man einen bekannten Bezug braucht.

Luftfeuchtigkeit ist die sog. relative Luftfeuchtigkeit - die hängt ganz 
entscheidend von der Temperatur ab und ist daher drinnen/draußen nicht 
vergleichbar.
Gast #4985562
Lesenswert?

Danke fürs Feedback, ich hab mir das mit der Höhe nochmal angeschaut und 
bin auf folgende Formel gestossen:

Altitude = 44330.0 * ( 1.0 - 
(gemessenerDruck/DruckAufMeereshöhe)^(1/5.255)

1
Serial.print("Altitude: ");
2
  Serial.print(44330.0 * (1.0 - pow(pressure/seaLevelPressure, 0.19029495)));
3
  Serial.println("m");

Aber wie bereits von Heinz erwähnt wurde, wird sich der Luftdruck auf 
Meereshöhe dauernd ändern, die Frage ist wie stark das schwankt. Ich hab 
folgenden benutzt, mal schauen wie er sich in den nächsten Tagen 
verändert, vielleicht kann man ja einen "Durchschnittswert" ermitteln 
und den dann benutzen um immer ein mehr oder weniger genaues Ergebnis zu 
erzielen:
1
float seaLevelPressure = 102260;

Die Höhe beträgt jetzt 292.73m. Das passt schon eher da ich höher 
gelegen Wohne.
Gast #4985673
Lesenswert?

DerFragende schrieb:
> Die Höhe kann mit 216.17m nicht stimmen. Wohnort ist auf ~250m.
Wie soll der BME280 die Höhe auch bestimmen können. Das Ding kann den 
Luftdruck messen. Mehr nicht. Um daraus eine Höhe zu berechnen, braucht 
die Software den Luftdruck auf Meeresspiegelhöhe. Die ist in der Methode 
calcAltitude() entsprechend der internationalen Höhenformel fest als 
1013.25hPa kodiert.
https://de.wikipedia.org/wiki/Barometrische_H%C3%B6henformel#Internationale_H.C3.B6henformel

DerFragende schrieb:
> Aber wie bereits von Heinz erwähnt wurde, wird sich der Luftdruck auf
> Meereshöhe dauernd ändern, die Frage ist wie stark das schwankt.

Der Luftdruck in Meeresspiegelhöhe kann locker mal zwischen 970 und 
1030hPa schwanken, in extremen Wettersituationen noch deutlich mehr. Aus 
der barometrischen Höhenformel ergibt sich, dass 1 hPa Druckänderung 
nahe NN einer Höhendifferenz von etwa 8 Metern entspricht. Wenn man den 
aktuellen Luftdruck auf Meereshöhe nicht berücksichtigt, entspricht der 
oben genannten Druckbereich einem Höhenbereich von 500 Metern.
Gast #5078301
Lesenswert?

Hallo.

Also es gibt einen BMP und einen BME.
Der BMP misst Temperatur, Luftdruck.
Der BME misst Temperatur, Luftdruck, Luftfeuchte.

Du benötigst folgende Libs:

https://github.com/adafruit/Adafruit_Sensor
und
https://github.com/adafruit/Adafruit_BMP280_Library
bzw.
https://github.com/adafruit/Adafruit_BME280_Library

Mit einem I2C Scanner kannst Du Adresse herausfinden.
Das ist bei dem Sensor entweder 0x76 oder 0x77, je nachdem wie du den 
Pin SDO beschaltet hast, diesen bitte nicht offen lassen.

Kann man hier nachlesen:
https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BME280_DS001-11.pdf

Bei der Adafruit Lib ist in der Lib die Adresse 0x77 der default.
Wenn Du das ändern möchtest, bitte nicht im Sketch, dondern besser in 
der Lib in der Datei Adafruit_BMP280.h bzw. Adafruit_BME280.h anpassen.

Deine Lib (https://github.com/Seeed-Studio/Grove_BME280) verwendet die 
Adresse 0x76 als default :-)
Das war wohl die Lösung für dein Problem.

Gruß,
Alex
Gast #5078358
Lesenswert?

Tom schrieb:
> und wenn die Meereshöhe von größerer Bedeutung sein sollte, dann ist ein
> GPS Modul besser dafür geeignet. Das zeigt dir die Höhe direkt ohne
> Bezug an.

Dann probiere mal, mit GPS die Höhe im Dezimeterbereich zu bestimmen. 
Das geht aber soetwas von schief.

Vergleiche mal die Höhenanzeige von GPS und barometrischem Höhensensor 
über einige Stunden.
Gast #5602787
Lesenswert?

Hallo,

noch ein kleiner Nachtrag:

du hast lt deinen Bildern den Chip per SPI verkabelt.

im Programm aber I2C ausgewählt.

[c]
Adafruit_BMP280 bmp; // I2C
//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
//Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK);
[c/]
Wenn du die letzte Zeile nimmst und die erste auskommentierst sollte es 
klappen

Gruß medisnake
Gast #6185752
Lesenswert?

Hi ich habe das selbe Problem. :(

Ich habe den BME280 an einen UNO angeschlossen.

Vin = 3.3V
GND = GND
SCL = A4
SDA = A5

Was cool wäre wenn jemand jetzt das Richtige Programm reinstellen 
könnte.
Mit Libs und und und...



Eigentlich war mein Plan das Ding an das Stemedu Board anzuschließen.
Ich habe den Code von AEQ-WEB genommen. Aber da wir mir dann keine Daten 
auf dem ESP32 angezeigt.

Hier auch nochmal der Link:
https://www.aeq-web.com/stemedu-low-power-atmega-328-lora-board/

Viele Grüße TOM!

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