blogy logo
login PRIHLÁS SA
BLOG deadawp
ČLÁNKY
DISKUSIE
3
SLEDUJETE BLOG
Programátor
deadawp



Prepočet atmosférického tlaku na hladinu mora
pridal deadawp 17.5. 2019 o 2:23



Dnes niečo z praktického súdka. Každý správny Arduinista začne prvým zložitejším projektom - meteostanicou. Meteostanica by mala vo svojej minimálnej funkčnosti snímať aspoň 3 veličiny:

  • Teplotu
  • Atmosférický tlak
  • Vlhkosť vzduchu

Obľúbenými vylepšeniami môže byť aj záznam ďalších veličín:

  • Intenzita osvetlenia
  • čas východu a západu Slnka
  • kvalita ovzdušia
  • rýchlosť vetra
  • množstvo zrážok

Záznam údajov s využitím štandardných barometrov znamená vo výsledku meranie absolútneho atmosférického tlaku, to znamená tlak v aktuálnej nadmorskej výške. Tu nastáva problém, keďže z nameraných údajov nie je zrejmé, či sa jedná o vysoký, alebo naopak nízky atmosférický tlak. Riešenie spočíva v možnosti prepočítať absolútny atmosférický tlak na relatívny, teda na úrovni mora.

Najpoužívanejšie barometre od  Boschu - cenovo dostupné senzory BME280 (záznam teploty, vlhkosti, atmosférického tlaku, nadmorskej výšky), BMP280 (záznam teploty, atmosférického tlaku, nadmorskej výšky) dokážu túto konverziu vykonať vďaka nameraným údajom.

Najčastejšie sa využívajú 3 vzorce prepočtu pre BM(X) senzory:

  • relativny_t = abs_t / pow(1 - ((0.0065 * nadm_vyska) / (teplota + (0.0065 * nadm_vyska) + 273.15)), 5.257)
  • relativny_t = abs_t / pow(1.0 - nadm_vyska/ 44330.0, 5.255)
  • relativny_t  = abs_t / pow(1.0 - 0.0065 * nadm_vyska/ (teplota + 273.15), 5.255)
  • Vysvetlivky:
  • relativny_t = relatívny tlak (na hladine mora)
  • abs_t = absolútny tlak (nameraný)
  • nadm_vyska = nadmorská výška
  • teplota = zaznamenaná teplota

Druhý vzorec, určený pre interiér nepoužíva pre výsledný tlak nameranú teplotu, nakoľko tá je vnútorná a nie vonkajšia. Vo výsledku by bolo meranie nepresné a neodpovedalo by skutočnosti (vo výsledku sú vzorce totožné, druhý vzorec je implementácia teploty 15°C).

Programovaná implementácia pre Arduino (príklad pre BMP280):

#include "Adafruit_BMP280.h"
#include 
Adafruit_BMP280 bmp;
void setup() {
  bmp.begin();
  Serial.begin(115200);
}


void loop() {
  float teplota = bmp.readTemperature();
  float tlak = bmp.readPressure() / 100;
  float nadmorska_vyska = bmp.readAltitude(1013.25);
  float tlak_hladina_mora = tlak / pow(1 - ((0.0065 * nadmorska_vyska) / (teplota + (0.0065 * nadmorska_vyska) + 273.15)), 5.257);
  float tlak_hladina_mora2 = tlak / pow(1.0 - nadmorska_vyska / 44330.0, 5.255);
  float tlak_hladina_mora3 = tlak / pow(1.0 - 0.0065 * nadmorska_vyska / (teplota + 273.15), 5.255);
  Serial.print("Teplota = ");
  Serial.print(teplota);
  Serial.println(" *C");

  Serial.print("Absolutny tlak = ");
  Serial.print(tlak);
  Serial.println(" hPa");

  //RELATIVNY TLAK --> prepocitany na hladinu mora bosch vzorcom
  Serial.print("Relativny tlak (origo Bosch vzorec) = ");
  Serial.print(tlak_hladina_mora);
  Serial.println(" hPa");

  Serial.print("Relativny tlak (upraveny Bosch vzorec 2 - najviac odpoveda skutocnosti z merani) = ");
  Serial.print(tlak_hladina_mora2);
  Serial.println(" hPa");

  Serial.print("Relativny tlak (upraveny Bosch vzorec 3) = ");
  Serial.print(tlak_hladina_mora3);
  Serial.println(" hPa");

  Serial.print("Nadmorska vyska = ");
  Serial.print(nadmorska_vyska); /* Adjusted to local forecast! */
  Serial.println(" m.n.m");

  Serial.println();
  delay(10000);
}

Výstup programu do Serial monitoru bude vyzerať cca následovne:

Nameraná hodnota v druhom vzorci (meral som v interiéri) najviac zodpovedala skutočnosti. Blízka meteostanica hlásila 1013,01hPa. Odchýlka v ostatných vzorcoch je spôsobená využitím nameranej teploty v interiéri, ktorá ovlyvní výslednú konverziu. 

Zapojenie:

Arduino (AtMega328P compatible) BME/BMP
Vcc Vcc
GND GND
A4 (Hardware SDA) SDA
A5 (Hardware SCL) SCL

Pozor! Niektoré BME a BMP senzory sú iba na 3.3V, čo vyžaduje konverziu aj SDA/SCL pinov na 3.3V napäťovým deličom pri použití 5V Arduina.

Tester pre BMP280 je dostupný na Githube v mojom repozitári: https://github.com/martinius96/BMP-280-tester

Tester pre BME280 je dostupný na Githube v mojom repozitári: https://github.com/martinius96/BME-280-tester

Riešenie je možné použiť aj na nižšie verzie senzorov 085, 180...
V prípade záujmu môžete navštíviť aj môj web s mojom implementáciou meteostanice: https://arduino.php5.sk/meteostanica-arduino.php



Prístupov 12691
Kvalita článku
hlasov 0

PRÍSPEVKY
SLEDUJETE
Prosím prihláste sa pre možnosť pridania komentáru.
Prihláste sa, alebo použite facebook login facebook login
ĎALŠIE ČLÁNKY V BLOGU
Oplatí sa teplovodivá pasta z Aliexpress...
[ 4.4.2024] (príspevkov 0)
Recenzia 3D podznačky BEZ KOMPRESE
[ 4.4.2024] (príspevkov 0)
GTA IV fix spustenia na Windowse 10 N
[ 24.3.2024] (príspevkov 0)
RFID DOMINATOR licencia na predaj
[ 4.1.2024] (príspevkov 0)
ATtiny85 Digispark - programovanie, použ...
[ 28.12.2023] (príspevkov 0)
Prečo by som si už nekúpil ESPD-35 2.0 /...
[ 26.12.2023] (príspevkov 0)
ATtiny85 - programovanie Arduino as ISP
[ 19.12.2023] (príspevkov 0)
MasterTherm - webscraper ESP32
[ 25.11.2023] (príspevkov 0)
RFID DOMINATOR 2.0 - rozdiely s 1.0
[ 15.11.2023] (príspevkov 0)
Rozšírená realita (AR) - IoT dashboard
[ 29.10.2023] (príspevkov 0)