Forum: Mikrocontroller und Digitale Elektronik Problem mit dem BMP280 Sensor


von DerFragende (Gast)


Angehängte Dateien:

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

von THOR (Gast)


Lesenswert?

Du musst die Adresse noch um 1 Bit nach links shiften, das ganz rechte 
Bit ist das Read/Write Bit bei I2C.

von DerFragende (Gast)


Lesenswert?

Das wäre dann 0xEC, anstelle von 0x76, wenn ich richtig liege? Aber das 
geht auch nicht :(

von Lukas (Gast)


Lesenswert?

nimm mal 0x60

von Sebastian S. (amateur)


Lesenswert?

Wir hatten mit dem Teil Probleme, weil wir den Fußabdruck falsch 
übernommen hatten.

von DraconiX (Gast)


Lesenswert?

DerFragende schrieb:
> Vin geht auf 5V

Mal das Datenblatt geblättert? Vielleicht schon gegrillt den kleinen? 
;-)
1
Sensor Supply Voltag: Typ:1.8V Max:3.6V

von Lukas (Gast)


Lesenswert?

Das Board hat normalerweise unten einen 3,3V Regler, sowie einen 
Pegelwandler.

von DraconiX (Gast)


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. ;-)

von kaffeetas (Gast)


Lesenswert?

Du hast nen BME280, da passt die Adafruit Lib für den BMP280 nicht.
probier mal noch folgendes oben einzügen:
1
#undef BMP280_CHIPID
2
#define BMP280_CHIPID                 (0x60)

von Lukas (Gast)


Lesenswert?


von Sebastian S. (amateur)


Lesenswert?

Die Schaltung ist wohl so Geheim, das alle schon Heim (ge)gangen sind.

von DerFragende (Gast)


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?

von R. F. (rfr)


Lesenswert?

Kannst du ein Ack empfangen?

von DerFragende (Gast)


Lesenswert?

Ja ich hab mit einem I2C Scanner nachgeschaut. Es findet den Sensor auf 
0x76.

von Forist (Gast)


Angehängte Dateien:

Lesenswert?

DerFragende schrieb:
> Vielleicht noch eine kurze Erklärung, falls man es nicht gut sieht.

Ja, warum machst du dann so ein Photo?

Leider ist an der Unerkennbarkeit der Leitungsführung auch durch 
fokussierung auf den relevanten Bildteil nicht dran zu ändern.

von DerFragende (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab die Schaltung aufgezeichnet. Ich hoffe es ist besser erklärend 
als das Foto.

von Hp M. (nachtmix)


Lesenswert?

DerFragende schrieb:
> Ich hab die Schaltung aufgezeichnet

Warum ist die GND-Leitung gestrichelt, hast du die evtl. gar nicht 
angeschlossen?
Das ist die wichtigste Leitung überhaupt!

von Manfred Scheer (Gast)


Lesenswert?


von Forist (Gast)


Angehängte Dateien:

Lesenswert?

DerFragende schrieb:
> schaltungszeichnung.jpg

Hast du schon mal ein Bildbearbeitungsprogramm aufgerufen?

Woher soll die Kamera wissen, dass Papier weiss ist und wo dadrauf deine 
Schaltung gemalt ist. Das musst du ihr schon irgendwie sagen. :-(

von Augen auf (Gast)


Lesenswert?

Hp M. schrieb:
> Warum ist die GND-Leitung gestrichelt, hast du die evtl. gar nicht
> angeschlossen?

Guckst du weiße Leitung

Forist schrieb:
> BMP280_UNO.jpg

von DerFragende (Gast)


Lesenswert?

Ich hab sie gestrichelt, weil sie zwei andere Leitungen kreuzt. Ich habe 
gehofft, es käme so zu keiner Verwechslung ;-)

von DerFragende (Gast)


Lesenswert?

Ah und VIN liegt an 5V und nicht an 5.5V wie fälschlicherweise in der 
Schaltung angegeben...

von Bernd K. (prof7bit)


Lesenswert?

Wo sind die Pullups?

von DerFragende (Gast)


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?

von Pegel (Gast)


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

von DerFragende (Gast)


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?

von Heinz (Gast)


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...

von DieAntwort (Gast)


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.

von DerFragende (Gast)


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.

von Wolfgang (Gast)


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.

von Sebastian S. (amateur)


Lesenswert?

Wenn Du keine wandelnde Frostbeule bist, sind "26.75°C" ganz schön 
daneben. Oder ist Deine Freundin, nach der ganzen Warterei, schon am 
Kochen?

von DerFragende (Gast)


Lesenswert?

Es sind keine 26 Grad hier. Die Heizung ist nichtmal an. Die Temperatur 
wird mind. 3 Grad zu hoch angegeben.

von Smart (Gast)


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

von Tom (Gast)


Lesenswert?

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.
Gruß Tom

von Wolfgang (Gast)


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.

von medisnake (Gast)


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

von Winfried (Gast)


Lesenswert?

Das ist Grabschändung!

von Tom (Gast)


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!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.