Hallo, ich verwende die Joy-It "SEN-BME680" Sensorplatine (IIC Schnittstelle) an einem Microchip PIC18F46K22 und programmier diesem per mikroC von mikroelektronika. Die Programmierung ist stark angelehnt an das Datenblatt von BOSCH. Die Temperatur gibt der Controller im Vergleich zu einem KLIMA Logg_Pro Sensor (Temp und Luftfeuchte) ok aus und die Luftfeuchte ist grundsätzlich etwa 6%RH zu hoch (auch noch ok). Den Luftdruck gibt er ziemlich hoch aus. Hab die Berechnung der einfachheit halber mit float gemacht statt integer Variante. Hat jemand von Euch diese Library aus dem Datenblatt erfolgreich in Betrieb genommen? Kann auch gerne, den Quelltext posten. Für weitere Tipps zur Fehlersuche bin ich offen Gruss und Danke im Voraus Tobias
:
Verschoben durch Moderator
Hallo, der Luftdruck braucht ja immer eine Höhenkorrektur, ohne ist der angezeigte Wert zu niedrig - ist da in der Lib vielleicht standartmäßig was hinterlegt? Sascha
Tobias B. schrieb: > Den Luftdruck gibt er ziemlich hoch aus. Was heißt das? Ein Faktor 10/100/1000 oder 10hPa? Was verwendest du als Vergleichswert?
Sascha W. schrieb: > der Luftdruck braucht ja immer eine Höhenkorrektur, ohne ist der > angezeigte Wert zu niedrig Höhenkorrektur, mußte ich auch erst einmal lernen. Der Deutsche Wetterdienst bietet hier Hilfe. https://www.dwd.de/DE/service/lexikon/begriffe/B/Barometrische_Hoehenformel_pdf.pdf?__blob=publicationFile&v=4 Ich habe einen BME280 und konnte den Luftdruck gut nachvollziehen. Nachtrag: Der Sensor liefert schon den richtigen, örtlichen Luftdruck. Die Wettervorhersagen beziehen sich immer auf Meereshöhe! mfg Klaus
:
Bearbeitet durch User
Klaus R. schrieb: > Sascha W. schrieb: >> der Luftdruck braucht ja immer eine Höhenkorrektur, ohne ist der >> angezeigte Wert zu niedrig > > Höhenkorrektur, mußte ich auch erst einmal lernen. Der Deutsche > Wetterdienst bietet hier Hilfe. Der Sensor soll mit dem im DB angegebenen Algorithmus den absoluten Druck auswerfen. Ich nehme nicht an, dass Tobias irgendwo am Toten Meer wohnt. Tobias B. schrieb: > Den Luftdruck gibt er ziemlich hoch aus.
Wolfgang schrieb: > Der Sensor soll mit dem im DB angegebenen Algorithmus den absoluten > Druck auswerfen. Ich habe bei Joy-it im Datenblatt nachgeschaut. Da wird keine Formel auf geführt. In der Anleitung ebenfalls nicht. Was ist denn der absolute Druck? https://www.dwd.de/DE/fachnutzer/luftfahrt/download/produkte/runwaymap/06_luftdruck_und_standardatmoshaere.pdf?__blob=publicationFile&v=2 Schauen wir doch mal wieder beim DWD nach.
1 | Reduktion des Luftdruckes |
2 | Der Luftdruck ist also höhenabhängig. Will man Luftdruckwerte, die am Boden – aber nicht zwangsläufig in Meereshöhe – gemessen worden sind, miteinander vergleichen, so muss man die Höhenabhängigkeit herausrechnen und den Luftdruck auf Meereshöhe „reduzieren“. Nur damit sind gemessene Luftdruckwerte vergleichbar. |
Der Sensor weiß ja nicht wo er gerade ist. Er kann also nur den Luftdruck messen an dem er sich befindet. Ich habe meine Werte des BME280 mit Wetterdaten eines Wetterdienstes vergleichen wollen. Erst als ich die barometrische Höhenformel angewandt habe näherten sich die Werte zu meiner Zufriedenheit. Tobias sollte mal mit den Daten des Agrawetter - Dienstes vergleichen und natürlich die Höhenformel verwenden. https://www.agrarwetter.net/ mfg klaus
Aus den Infos vom deutschen Wetterdienst habe ich folgende Prozedur für einen STM32 gemacht (Partialdruck H2O bzw. Luftfeuchte geht auch mit ein):
1 | uint16_t DEV_GetPressureNN(uint16_t abspressure, int16_t temperature, uint16_t humidity, int16_t altitude) |
2 | // INPUT: [ zum Beispiel pNN = DEV_GetPressureNN(9946,273,446,240) = 10200 ]
|
3 | { // abspressure in Pa/10 (9946 <- 994.6mbar bzw hPa) |
4 | // temperature in °C*10 (273 <- 27.3°C)
|
5 | // humidity in %*10 (446 <- 44.6% rH)
|
6 | // altitude in m
|
7 | // OUTPUT: NN-pressure in Pa/10 (9946 -> 994.6mbar bzw hPa)
|
8 | |
9 | uint16_t relpress=0; //relative pressure (NN) |
10 | |
11 | float E,th,h,ph; |
12 | th=((float)temperature)/10; // °C |
13 | h=(float)altitude; // m |
14 | ph=((float)abspressure)*10; // Pascal |
15 | |
16 | if (humidity!=0) |
17 | {
|
18 | float rH; |
19 | rH=((float)humidity)/1000; //100% -> 1.0 |
20 | E=rH*6.11213*exp(17.5043*th/(241.2+th)); |
21 | }else{ |
22 | if (temperature<91) // <9.1°C |
23 | {
|
24 | E = 5.6402*(-0.0916+0.06*th); |
25 | }else{ |
26 | E = 18.2194*(1.0463-0.0666*th); |
27 | }
|
28 | }
|
29 | |
30 | relpress = (uint16_t)((ph*exp(9.80665*h/(287.05*(th+273.15+0.12*E+0.0065*h/2))))/10); // in Pascal/10 |
31 | return relpress;//(uint32_t)(ph*exp(9.80665*h/(287.05*(th+273.15+0.12*E+0.0065*h/2)))); // Pascal |
32 | }
|
Die Höhe habe ich aus Google Earth. Druckwerte stimmen sehr gut mit der lokalen Wetterwarte überein, üblicherweise < 1mbar Abweichung
Jürgen S. schrieb: > Aus den Infos vom deutschen Wetterdienst habe ich folgende Prozedur für > einen STM32 gemacht Kannst Du uns die Quelle angeben? mfg Klaus
:
Bearbeitet durch User
Klaus R. schrieb: > Der Sensor weiß ja nicht wo er gerade ist. Er kann also nur den > Luftdruck messen an dem er sich befindet. Aber Tobis wird ziemlich sicher wissen, dass er sich nicht unter dem Meeresspiegel befindet. Seine zu hohen Druckwerte lassen sich also nicht damit erklären, dass er mit offziellen Wetterdaten vergleicht und dabei die Höhenkorrektur vergessen hat.
Wolfgang schrieb: > Seine zu hohen Druckwerte lassen sich also nicht > damit erklären, dass er mit offziellen Wetterdaten vergleicht und dabei > die Höhenkorrektur vergessen hat. Tobias B. schrieb: > Für weitere Tipps zur Fehlersuche bin ich offen Ich sehe meinen Hinweis als einen Weg den Fehler besser einzugrenzen. Wer sagt denn das Tobias KLIMA Logg ProSensor richtig und genauer mißt? Immerhin ist der BME680 nicht unter 20 € zu bekommen. Um da weiter zukommen würde ich in der Tat einen BME280 vergleichsweise testen. Die Frage ist so und so, was war bei Bosch eher da? Der BME280 oder der BME680? Ich denke, im BME680 wird viel vom BME280 wiederzufinden sein. Interessant wären Meßreihen beider Sensoren zu vergleichen und dies noch mit den stündlichen Werten des Agrarwetter. Wobei ich mir vorstellen kann, daß die die Daten des DWD nutzen. Durch diese systematische Vorgehensweise kommt man zumindest weiter. Bei Conrad könnte man dann sicher reklamieren. Beim Chinesen sieht es da vermutlich anders aus. mfg Klaus
Klaus R. schrieb: > Kannst Du uns die Quelle angeben? https://de.wikipedia.org/wiki/Barometrische_H%C3%B6henformel Dort unter "Reduktion auf Meereshöhe" wird die vom Deutschen Wetterdienst empfohlene Reduktionsformel aufgeführt. Den Druck sollte man bei den BME/BMP-Sensoren eigentlich als uint32_t berechnen. Für meine Zwecke brauche ich es aber nicht so präzise, eine Nachkommastelle reicht. Edit: Mir ist gerade aufgefallen, daß bei den Werten für den Druck ohne bekannte Luftfeuchte noch Fehler ist, es muß bei humidity == 0 heißen
1 | if (temperature<91) // <9.1°C |
2 | {
|
3 | E = 5.6402*(-0.0916+exp(0.06*th)); |
4 | }else{ |
5 | E = 18.2194*(1.0463-exp(-0.0666*th)); |
6 | }
|
Hi, danke für euren Zahlreichen Beiträge. -Der compensierte Druckwert der ausgegeben wird laut DB ist in Pa. Der aktuell errechnete Wert ist 152300 Pa --> 15230hPa. Faktor 15x Da die gültige Ausgabe zwischen 300 und 1100 hPa liegt, muss was an der Berechnung oder am Chip liegen. -Benutze keine Höhenformel bzw. Vergleichsert. - Wohnort NRW 1007,8hPa 66,4%RH 12,4°C STand heute Abend. Laut Website die ihr gepostet habt. Weiter: - Werde auch den Chip BME280 mal ausprobieren, den hab ich bestimmt irgendwo - Die Druckberechnung mit Integer ausprobieren - Kann auch den Quelltext mal posten bei Bedarf. Danke
Jürgen S. schrieb: > Den Druck sollte man bei den BME/BMP-Sensoren eigentlich als uint32_t > berechnen. Für meine Zwecke brauche ich es aber nicht so präzise, eine > Nachkommastelle reicht. Wie machst Du das mit der Berechnung von E, speziell bei exp(-0.0666*th)? Deine Quelle ist wirklich interssant. Meine Quelle dürfte da ungenauer sein. Stellt sich nur die Frage, wozu brauche ich den Luftdruck auf Meereshöhe? https://www.dwd.de/DE/service/lexikon/begriffe/B/Barometrische_Hoehenformel_pdf.pdf?__blob=publicationFile&v=4 mfg klaus
Tobias B. schrieb: > Weiter: > - Werde auch den Chip BME280 mal ausprobieren, den hab ich bestimmt > irgendwo > - Die Druckberechnung mit Integer ausprobieren > - Kann auch den Quelltext mal posten bei Bedarf. Ich bin gespannt! mfg Klaus
Tobias B. schrieb: > Der aktuell errechnete Wert ist 152300 Pa --> 15230hPa. Faktor 15x Nö. 152300Pa -> 1523.00hPa. Faktor 1.5x (bzgl. der realen 1007.8hPa) Irgendwo ist in Deiner Berechnung des absoluten Druckes noch ein Fehler. @klara > Wie machst Du das mit der Berechnung von E, speziell bei exp(-0.0666*th)? Liegt schon länger zurück, und ehrlich gesagt hatte ich immer einen rH-Wert != 0, deshalb war mir der Fehler mit der exp-Funktion bei rH = 0 auch nicht aufgefallen. Es ist nur die math.h im arm-gcc eingebunden, ich hoffe mal, die macht das mit exp(-0.0666*th) richtig. Ansonsten habe ich above sealevel mit Druck bzgl. NormalNull gleichgesetzt und da gar nicht drüber nachgedacht, ob NN anders als above sealevel definiert sein könnte. Ist das unterschiedlich?
Jürgen S. schrieb: > @klara >> Wie machst Du das mit der Berechnung von E, speziell bei exp(-0.0666*th)? > Liegt schon länger zurück, und ehrlich gesagt hatte ich immer einen > rH-Wert != 0, deshalb war mir der Fehler mit der exp-Funktion bei rH = 0 > auch nicht aufgefallen. Es ist nur die math.h im arm-gcc eingebunden, > ich hoffe mal, die macht das mit exp(-0.0666*th) richtig. > Für meine Zwecke brauche ich es aber nicht so präzise, eine > Nachkommastelle reicht. Bei "exp(-0.0666*th)" kommst Du mit einer Nachkommastelle aber nicht aus. mfg Klaus
Klaus R. schrieb: > Bei "exp(-0.0666*th)" kommst Du mit einer Nachkommastelle aber nicht > aus. Achso, ja klar. Mein Ansatz ist so, daß ich Zwischenrechnung mit ausreichender oder meinetwegen übertriebener Präzision mache. Ich gehe also mit 16 Bit rein, erzeuge mit den floats Zwischenrechnungen, die auf jeden Fall präziser als 16bit sind, und gehe dann mit 16bit wieder raus. Da kommt also kein zusätzlicher Fehler dazu, abgesehen davon, daß man noch über das korrekte Runden philosophieren müßte. Wenn man die Rechnungen auf einem AVR macht, ist das was Anderes. Da würde ich dann entweder Taylor entwickeln oder einfachere Formeln nehmen. Die Prozeduren rund um die Barometrische Höhenformel sind übrigens die einzigen, wo ich float (bzw. double) einsetze, bin da also kein Experte. Alles andere mache ich sonst mit Integerarithmetik.
Bosch Sensortec bietet doch die Library als rund-um sorglos Paket an, habe ich schon verwendet und gab nie Probleme: https://github.com/BoschSensortec/BME680_driver Grüße, Mic Roller
Klaus R. schrieb: > Der Sensor weiß ja nicht wo er gerade ist. Er kann also nur den > Luftdruck messen an dem er sich befindet. könnte er aber wissen wenn man dem µC seine Koordinaten mitteilt so berechne ich Sonnen -aufgang und -untergang https://support.google.com/earth/answer/7420934?co=GENIE.Platform%3DDesktop&hl=de google earth sagt mir ich wohne auf 54m über N.N. gilt natürlich nicht im dritten Stock Wer die Höhe wie die Geokoordinaten in seinem Luftdruckmesser µC also in den Sourcecode einbaut hat schon mal gute Vorraussetzungen. Wenn es nicht im Source kodiert werden soll muss man sich anderes überlegen, so ein Druckmesser alleine tut ja nichts, mit µC kann daraus aber evtl. Ort und Lage abgeleitet werden.
Joachim B. schrieb: > könnte er aber wissen wenn man dem µC seine Koordinaten mitteilt > so berechne ich Sonnen -aufgang und -untergang Die Koordinaten sagen da herzlich wenig. Stell dir einfach vor, dass der Sensor in einem Heißluftballon über diesem Ort fährt ...
Sorry! Was soll bei der Luftdruckmessung eine Höhenkorrektur? Das ist doch unsinnig. Oder nur dann sinnvoll, wenn Du die Fliege machen willst. Also aus dem gemessenen Druck auf die (Flug-)Höhe schließen willst. Soweit mir bekannt sind die meisten Druckmesser Festkörpersensoren. Die haben also "ihre" Toleranzen, aber darüber hinaus gibt es nichts zu korrigieren. Hält man sich darüber hinaus an die erlaubten "Umweltbedingungen", sind die Teile auch noch sehr robust.
Sebastian S. schrieb: > Sorry! Was soll bei der Luftdruckmessung eine Höhenkorrektur? > Das ist doch unsinnig. Das kommt auf den Anwendungszweck an. Die einen betreiben eine Wetterstation und wollen ihre Daten in Realtion zur Wetterkarte setzten, die anderen wollen eine barometrische Höhenmessung machen und brauchen als Input den auf NN korrierten Bodendruck (QNH). Und wieder andere wollen auf einem Flugplatz landen und wollen mit dem aktuellen Bodendruck am Flugplatz (QFE) vergleichen.
@ Wolfgang Gratulation zu Deiner Fähigkeit selektiv zu lesen!
Sebastian S. schrieb: > @ Wolfgang > Gratulation zu Deiner Fähigkeit selektiv zu lesen! ja so isser :-) Wolfgang schrieb: > Stell dir einfach vor, dass der > Sensor in einem Heißluftballon über diesem Ort fährt ... ist klar, schrieb ich auch Joachim B. schrieb: > gilt natürlich nicht > im dritten Stock oder im Ballon
Der BME860 ist ja auch ein 'Air quality & well-being indicator'. Kann an anhand der Sensordaten Aussagen treffen wie: 'es müsste eigentlich mal gelüftet werden'?
Sascha W. schrieb: > standartmäßig > was hinterlegt? standartmäßig ist nie etwas hinterlegt. Eventuell aber standardmäßig. man man man
JSebastian S. schrieb: > @ Wolfgang > Gratulation zu Deiner Fähigkeit selektiv zu lesen! Es ging um den Unterschied QNH vs. QFE, sorry wenn das nicht deutlich genug heraus kam. Beides wären in meinem Beispiel Werte, die auf dem Flughafen bestimmt werden - einmal mit und einmal ohne Höhenkorrektur. Du fragtest doch genau nach dem Sinn einer Höhenkorrektur.
Frischluftfanatiker schrieb: > Kann an anhand der Sensordaten Aussagen treffen wie: 'es müsste > eigentlich mal gelüftet werden'? Steht im Datenblatt auf Seite 10 und 11. https://www.bosch-sensortec.com/products/environmental-sensors/gas-sensors-bme680/ Reagiert auf einige Ausdünstungen und Gasdämpfe, die bei Fahrzeugen eine Rolle spielen. Auf CO reagiert der Sensor. Ob und wie er auf CO2 reagiert ist nicht angegeben. Er ist wegen der fehlenden CO2 Empfindlichkeit also nur bedingt geeignet. Eine Ergänzung um einen CO2 Sensor und Sensor, der auf Furzgase (im Normalfall nimmt der Darm diese auf und werden über Lunge mit ausgeatmet) ebenfalls reagiert, wäre daher zu empfehlen. Jefe schrieb: > standartmäßig ist nie etwas hinterlegt. Eventuell aber standardmäßig. Es gibt Sensoren, die den Einfluss-Trias von Druck, Temperatur und Feuchte bereits intern verrechnen und kompensieren, d.h. es muss nicht die externe Verarbeitung über Formeln die Aufgabe erledigen. Der BME müßte ein solcher Sensor sein. Auf der Seite 23 im Datenblatt steht: After the uncompensated values of temperature, pressure and humidity have been read, the actual humidity, pressure and temperature need to be calculated using the compensation parameters stored in the device. Please refer to the BME6xy API for more details. Es sind also standardmäßig "compensation parameters stored in the device". Z.B. Offsetwerte & Faktoren. Durchaus möglich, dass der Zugriff auf das Device durch des TO µC versehentlich uncompensated nimmt oder eine Fehler beim Lesen der Kompensationsparameter macht.
Hallo, viel Zeit vergangen seit euren Vorschlägen. Hab auch den Chip BME280 mal ausprobiert. Dabei hatte ich andersweitig Probleme mit der Berechnung der Luftfeuchtigkeit. Statt wie beim BME680 dem Luftdruck. Nach langen hin und her bin ich dan auf dem BME680 zurückgeswitcht, da bei den drei BME280 nichts einheitlich funktioniert hat (Kalibrierwerte verglichen usw.) Dort habe ich die Berechnung mit Integer und Double erneut ausprobiert und auch die Berechungen nachgerechnet. Logik war okay. Allerdings nicht das Ergebnis an sich. Nach näheren Recherche hab ich dan rausgefunden das ich die Kalibrierwerte alle für den Luftdruck in unsigned short / integer ausgelesen habe. Nicht ganz korrekt. Letzendlich habe ich die Berechnung in float gemacht. Wie hier zu finden: "https://github.com/BoschSensortec/BME680_driver/blob/master/bme680.c" Die Messwerte sind wie folgt. Luftfeuchte ist 8%RH zuviel, ggf. da KlimaLogg Pro Sensor eingehaust ist). Luftdruck ist wie beim mobilen Sensor an der Smart watch. Ganz zufrieden stellend. Anzeige PIC: Sensorplatine --> "Joy-It Sen-BME680" 20,86°C 65,1%RH 63kOhm 999hPa Anziege KLimaLOGG PRO (Eingehaust Sensor unbekannt) 20,5°C 57%RH Samsung Galaxy Watch2: 999hPa Nächster Schritt ist die Logik nachzuprogrammieren um die Luftgüte zu ermitteln. Anhang: Zur Ansicht die kommentierte Version.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.