blogy logo
login PRIHLÁS SA
BLOG deadawp
ČLÁNKY
DISKUSIE
3
SLEDUJETE BLOG
PHP, Arduino 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 210
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
Nerov (v)zostup v Caldárii
[ 3.6.2019] (príspevkov 0)
Prepočet atmosférického tlaku na hladinu...
[ 17.5.2019] (príspevkov 0)
Monitor výšky hladiny vody v studni
[ 29.4.2019] (príspevkov 0)
Meteostanica - ESP32 - Webclient
[ 19.4.2019] (príspevkov 0)
Webportál - Vykurovanie cez internet - o...
[ 24.3.2019] (príspevkov 0)
Capture points (DOMINATION) - Arduino + ...
[ 23.2.2019] (príspevkov 0)
Notifikátor udalostí cez mikrokontróler
[ 22.2.2019] (príspevkov 0)
Ovládanie relé cez Arduino s webaplikáci...
[ 10.2.2019] (príspevkov 0)
Meteostanica s ESP8266 - NodeMCU
[ 5.2.2019] (príspevkov 0)
Wifi teplomer s ESP8266
[ 3.2.2019] (príspevkov 0)