Barometr w smartfonie to czujnik MEMS mierzący ciśnienie atmosferyczne do określania wysokości i prognozy pogody. Nowoczesne barometry rejestrują ciśnienie w zakresie od 300 do 1100 hPa z dokładnością do 1 hPa, co odpowiada błędowi określania wysokości poniżej 1 metra. Według danych Bosch Sensortec BMP580, 2024, bezwzględna dokładność współczesnych czujników ciśnienia wynosi ±0,5 hPa, co pozwala określać wysokość z dokładnością do 0,4 metra.
Najważniejsze
Barometr w telefonie komórkowym to miniaturowy czujnik ciśnienia bezwzględnego, oparty na technologii MEMS (Micro-Electro-Mechanical Systems). Mierzy ciśnienie atmosferyczne w hektopaskalach (hPa), co jest równoważne milibarom. Pierwszym masowo produkowanym smartfonem z barometrem był Samsung Galaxy Note 2 (2012) — zapoczątkował on trend integracji czujnika w flagowych urządzeniach.
Liderami rynku są Bosch Sensortec (seria BMP) i STMicroelectronics (seria LPS). Typowy czujnik BMP580 ma wymiary 2,0×2,0×0,7 mm, pobór prądu 1,3 µA w trybie niskiego poboru energii i zakres 300–1250 hPa. Dokładność względna wynosi ±0,08 hPa, co pozwala rejestrować zmianę wysokości o 0,7 metra. Według danych Datasheet BMP580 (2024), poziom szumów nie przekracza 0,2 Pa.
| Parametr | Wartość |
|---|---|
| Zakres | 300–1250 hPa |
| Dokładność bezwzględna | ±0,5 hPa |
| Dokładność względna | ±0,08 hPa |
| Pobór prądu | 1,3 µA (niski pobór) |
| Wymiary | 2,0×2,0×0,7 mm |
| Interfejs | I²C / SPI |
Główna funkcja — doprecyzowanie wysokości w nawigacji. W USA Federalna Komisja Łączności (FCC) od 2015 roku zaleca wyposażanie smartfonów w barometry w celu poprawy dokładności określania lokalizacji podczas połączeń alarmowych 911 — dokładność pionowa ratuje życie w budynkach wielopiętrowych.
Podstawą barometru MEMS jest krzemowa membrana o grubości 1–3 mikronów, która ugina się pod wpływem ciśnienia atmosferycznego. Membrana jest zintegrowana z próżniową komorą — ciśnieniem odniesienia. Do pomiaru ugięcia stosuje się metodę pojemnościową lub piezorezystancyjną.
W czujnikach pojemnościowych (Bosch BMP) membrana pełni rolę ruchomej elektrody kondensatora. Pod wpływem zmiany ciśnienia szczelina między membraną a nieruchomą elektrodą zmienia się o 0,1–1 nm, co powoduje zmianę pojemności o 5–50 fF. Układ C/V (capacitance-to-voltage) wzmacnia sygnał do poziomu wystarczającego dla 24-bitowego przetwornika ADC.
Barometry MEMS zawierają wbudowany czujnik temperatury, ponieważ ciśnienie gazu zależy bezpośrednio od temperatury zgodnie z równaniem P = ρRT. Bez kompensacji zmiana temperatury o 1 °C powoduje błąd 0,1 hPa — odpowiednik 0,8 metra wysokości. Współczesne czujniki wykorzystują współczynniki kalibracyjne przechowywane w pamięci OTP (One-Time Programmable) do cyfrowej korekcji w zakresie od -40 do +85 °C.
GPS określa wysokość na podstawie trilateracji sygnałów satelitarnych — błąd pionowy wynosi 10–30 metrów z powodu geometrii satelitów i opóźnień jonosferycznych. Barometr podaje wysokość z dokładnością 0,5–1 metra według wzoru barometrycznego. W scenariuszach z ograniczonym widokiem nieba (kaniony miejskie, wnętrza) GPS może być niedostępny — barometr działa zawsze.
Wysokość oblicza się według wzoru: h = (T₀ / L) × (1 − (P / P₀)^(R×L / g)), gdzie T₀ — temperatura na poziomie morza, L — gradient temperatury, P — zmierzone ciśnienie, P₀ — ciśnienie na poziomie morza. W uproszczeniu: zmiana ciśnienia o 1 hPa odpowiada około 8,4 metra na małych wysokościach. Do dokładnych obliczeń wymagane są dane stacji meteorologicznych o P₀.
Nowoczesne systemy nawigacyjne (Google Maps, Yandex Maps) stosują algorytm hybrydowy: GPS podaje wysokość bezwzględną z błędem 15 metrów, barometr — względną zmianę z dokładnością 0,5 metra. Filtr Kalmana łączy oba sygnały, dostarczając wysokość z dokładnością 1–3 metrów w czasie rzeczywistym.
data class BaroReading(
val pressure: Float,
val altitude: Float
)
private val P0_SEA_LEVEL = 1013.25f
fun calculateAltitude(pressure: Float): Float {
return SensorManager.getAltitude(
P0_SEA_LEVEL, pressure
)
}
fun calibratePressure(
gpsAltitude: Float, baroPressure: Float
): Float {
// Kalibracja P0 według wysokości GPS
val expectedPressure = P0_SEA_LEVEL *
Math.pow(1f - (0.0065f * gpsAltitude) / 288.15f, 5.255f)
.toFloat()
return P0_SEA_LEVEL * baroPressure / expectedPressure
}
Android udostępnia dostęp do barometru przez Sensor.TYPE_PRESSURE. Dane są zwracane w hektopaskalach (hPa), co jest równoważne milibarom. Typowa wartość na poziomie morza wynosi około 1013,25 hPa. Czujnik należy do kategorii Environmental Sensors — nie wymaga kalibracji ze strony użytkownika i działa natychmiast po inicjalizacji.
Barometr nie wymaga wysokiej częstotliwości odpytywania — SENSOR_DELAY_UI (67 ms) lub SENSOR_DELAY_NORMAL (200 ms) są w pełni wystarczające. Ciśnienie atmosferyczne zmienia się powoli, maksymalnie o 0,5–1 hPa na godzinę przy zmianie pogody lub o 1–2 hPa na minutę podczas jazdy windą. Nadmierna częstotliwość tylko marnuje baterię.
class BarometerActivity : AppCompatActivity() {
private val sensorManager by lazy {
getSystemService(SENSOR_SERVICE) as SensorManager
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val barometer = sensorManager
.getDefaultSensor(Sensor.TYPE_PRESSURE)
barometer?.let { sensor ->
sensorManager.registerListener(
this, sensor,
SensorManager.SENSOR_DELAY_NORMAL
)
}
}
override fun onSensorChanged(event: SensorEvent) {
val pressure = event.values[0]
val altitude = SensorManager
.getAltitude(1013.25f, pressure)
updateUI(pressure, altitude)
}
}
Nie wszystkie urządzenia z Androidem mają barometr — czujnik jest nieobecny w modelach budżetowych i wielu urządzeniach średniej półki. Przed użyciem należy sprawdzić obecność przez PackageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_BAROMETER) lub przez sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE) — zwrócenie null oznacza brak czujnika.
Barometr jest używany w szerokim spektrum aplikacji — od meteorologii po trackery sportowe i nawigację wewnątrz budynków. Aplikacja WeatherPro wykorzystuje dane barometru do budowania wykresu ciśnienia z 24 godzin, co pozwala prognozować zmianę pogody na 6–12 godzin naprzód z dokładnością do 80%.
Podczas zmiany pogody ciśnienie atmosferyczne zmienia się o 1–3 hPa w ciągu 6–12 godzin. Wyż (obszar wysokiego ciśnienia) daje wartości 1020–1040 hPa, niż (niskie ciśnienie) — 970–1010 hPa. Te zmiany należy uwzględnić przy obliczaniu wysokości: jeśli wczoraj ciśnienie na poziomie morza wynosiło 1013 hPa, a dziś 1025 hPa, błąd określenia wysokości bez korekcji P₀ wyniesie około minus 100 metrów. Nowoczesne aplikacje nawigacyjne pobierają ciśnienie odniesienia P₀ przez internet z najbliższej stacji meteorologicznej.
W centrach handlowych i na lotniskach barometr służy do określania piętra, na którym znajduje się użytkownik. Różnica ciśnienia między piētrami typowego budynku (wysokość piętra 3–4 metry) wynosi 0,35–0,5 hPa — to wystarcza do pewnego określenia. Łącząc barometr z trilateracją Wi-Fi, nawigacja wewnątrz budynków określa lokalizację z dokładnością do 5 metrów.
Nowa generacja wodoodpornych barometrów (Infineon DPS368, 2024) wytrzymuje zanurzenie do 10 metrów i ma dokładność ±0,05 hPa. Rozwój technologii MEMS przybliża barometry do dokładności kwarcowych wzorców — oczekuje się, że do 2027 roku typowy błąd spadnie do ±0,2 hPa.
Często zadawane pytania
Możesz to sprawdzić przez Sensor Test — aplikacje z Google Play. Barometr jest we wszystkich flagowych smartfonach Samsung Galaxy S i Note (począwszy od S3), Google Pixel (wszystkie modele), iPhone 6 i nowszych. W modelach budżetowych czujnik zwykle nie występuje.
Według wzoru barometrycznego: ciśnienie atmosferyczne maleje wraz z wysokością. Na poziomie morza ciśnienie wynosi 1013,25 hPa, na wysokości 500 metrów — około 955 hPa. Każde 8,4 metra wzniesienia obniża ciśnienie o około 1 hPa. Do dokładności potrzebna jest kalibracja według najbliższej stacji meteorologicznej.
Tak, w aplikacjach stacji meteorologicznych. Gwałtowny spadek ciśnienia o 3–5 hPa w ciągu 3 godzin wskazuje na zbliżanie się cyklonu i pogorszenie pogody. Wzrost ciśnienia to oznaka poprawy. Jednak do dokładnej prognozy potrzebne są dane służb meteorologicznych.
Nie — kalibracja odbywa się automatycznie. Producenci programują współczynniki kalibracyjne w fabryce. Jeśli jednak mieszkasz na wysokości 1000+ metrów nad poziomem morza, warto wskazać ciśnienie odniesienia w aplikacji nawigacyjnej w celu zwiększenia dokładności.
SENSOR_DELAY_NORMAL (200 ms) jest optymalny — ciśnienie atmosferyczne zmienia się powoli. Do śledzenia ruchu w windzie wystarczy 200 ms. Nadmierna częstotliwość (FASTEST) nie daje przewagi, ale zwiększa pobór energii o 20–30%.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również