Барометърът в смартфона е MEMS сензор, който измерва атмосферно налягане за определяне на височина и прогноза на времето. Съвременните барометри записват налягане в диапазона 300–1100 hPa с точност 1 hPa, което съответства на грешка в определянето на височина под 1 метър. Според данните на Bosch Sensortec BMP580, 2024, абсолютната точност на съвременните сензори за налягане е ±0,5 hPa, което позволява да се определя височина с точност на 0,4 метра.
Основни моменти
Барометър в мобилния телефон е миниатюрен сензор за абсолютно налягане, базиращ се на MEMS технологията (Micro-Electro-Mechanical Systems). Той измерва атмосферното налягане в хектопаскали (hPa), което е еквивалентно на милибари. Първият масов смартфон с барометър — Samsung Galaxy Note 2 (2012) — подхвърли тренда за интеграция на сензора в флагманските устройства.
Лидерите на пазара са Bosch Sensortec (серия BMP) и STMicroelectronics (серия LPS). Типичен сензор BMP580 има размери 2,0×2,0×0,7 mm, консумация 1,3 µA в режим ниска мощност и обхват 300–1250 hPa. Относителната точност е ±0,08 hPa, което позволява записване на промяна на височината от 0,7 метра. Според Datasheet BMP580 (2024), нивото на шум не надвишава 0,2 Pa.
| Параметър | Стойност |
|---|---|
| Обхват | 300–1250 hPa |
| Абсолютна точност | ±0,5 hPa |
| Относителна точност | ±0,08 hPa |
| Консумация | 1,3 µA (ниска мощност) |
| Размери | 2,0×2,0×0,7 mm |
| Интерфейс | I²C / SPI |
Основната функция — уточняване на височината в навигацията. В СЩА Федералната комисия по комуникациите (FCC) от 2015 г. препоръчва смартфоните да са оборудвани с барометри за подобряване на точността при определяне на местоположението при спешни обаждания 911 — вертикалната точност спасява живот в многоетажни сгради.
В основата на MEMS барометъра стои силициева диафрагма с дебелина 1–3 микрона, която се огъва под действието на атмосферното налягане. Диафрагмата е интегрирана с вакуумна кухијна — референтно налягане. За измерване на огъването се използва капацитивен или пиезорезистивен метод.
При капацитивните сензори (Bosch BMP) диафрагмата служи като подвижен електрод на кондензатора. При промяна на налягането, разстоянието между диафрагмата и неподвижния електрод се променя с 0,1–1 nm, което причинява промяна на капацитета от 5–50 fF. C/V преобразувателна верига (capacitance-to-voltage) усилва сигнала до ниво достатъчно за 24-битов ADC.
MEMS барометрите съдържат вграден температурен сензор, тъй като налягането на газа зависи прекио от температурата според P = ρRT. Без компензация, промяна на температурата с 1 °C причинява грешка от 0,1 hPa — еквивалент на 0,8 метра височина. Съвременните сензори използват калибрационни коефициенти, съхранени в OTP памет (One-Time Programmable), за цифрова корекция в диапазона от -40 до +85 °C.
GPS определя височината на базата на трилатерация на сателитни сигнали — вертикалната грешка е 10–30 метра поради геометрията на сателитите и йоносферните закъснения. Барометър дава височина с точност 0,5–1 метра според барометричната формула. В сценарии с ограничена видимост на небето (градски кањони, закрити помещения) GPS може да е недостъпен — барометърът работи винаги.
Височината се изчислява по формулата: h = (T₀ / L) × (1 − (P / P₀)^(R×L / g)), където T₀ — температура на ниво морето, L — температурен градиент, P — измерено налягане, P₀ — налягане на ниво морето. Опростено: промяна на налягането с 1 hPa съответства на около 8,4 метра при ниски височини. За точно изчисляване са необходими данни от метеорологични станции за P₀.
Съвременните навигационни системи (Google Maps, Yandex Maps) използват хибриден алгоритъм: GPS дава абсолютна височина с грешка от 15 метра, барометърът — относителна промяна с точност 0,5 метра. Калмановият филтър комбинира и двата сигнала, предоставяйки височина с точност 1–3 метра в реално време.
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 {
// Калибриране на P0 по GPS височина
val expectedPressure = P0_SEA_LEVEL *
Math.pow(1f - (0.0065f * gpsAltitude) / 288.15f, 5.255f)
.toFloat()
return P0_SEA_LEVEL * baroPressure / expectedPressure
}
Android предоставя достъп до барометъра чрез Sensor.TYPE_PRESSURE. Данните се връщат в хектопаскали (hPa), което е еквивалентно на милибари. Типичната стойност на ниво морето е около 1013,25 hPa. Сензорът принадлежи към категорията Environmental Sensors — не изисква калибриране от потребителя и работи веднага след инициализация.
Барометърът не изисква висока честота на запитване — SENSOR_DELAY_UI (67 ms) или SENSOR_DELAY_NORMAL (200 ms) са напълно достатъчни. Атмосферното налягане се променя бавно, максимум 0,5–1 hPa на час при смяна на времето или 1–2 hPa на минута при движение в асансъор. Прекалената честота само изпразва батерията.
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)
}
}
Не всички Android устройства разполагат с барометър — сензорът липсва в бюджетните модели и много устройства от среден клас. Преди употреба трябва да проверите наличието чрез PackageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_BAROMETER) или sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE) — връщането на null означава липса на сензора.
Барометърът се използва в широк спектър от приложения — от метеорология до спортни трекери и навигация на закрито. Приложението WeatherPro използва данни от барометъра за изграждане на 24-часова графика на налягането, което позволява да се предвижда промяната на времето 6–12 часа напред с точност до 80%.
При смяна на времето, атмосферното налягане се променя с 1–3 hPa за 6–12 часа. Антициклонът (област на високо налягане) дава стойности 1020–1040 hPa, циклонът (ниско налягане) — 970–1010 hPa. Тези промени трябва да се вземат предвид при изчисляването на височината: ако вчера наляганеето на ниво морето е било 1013 hPa, а днес 1025 hPa, грешката при определянето на височината без корекция на P₀ ще бъде около минус 100 метра. Съвременните навигационни приложения получават референтното налягане P₀ през интернет от най-близката метеорологична станция.
В търговските центрове и летищата барометърът се използва за определяне на етажа, на който се намира потребителят. Разликата в налягането между етажите на типична сграда (височина на етажа 3–4 метра) е 0,35–0,5 hPa — достатъчно за надеждно определяне. Чрез комбиниране на барометъра с Wi-Fi трилатерация, навигацията на закрито определя местоположението с точност до 5 метра.
Ново поколение водонепроницаеми барометри (Infineon DPS368, 2024) издръжа потапяне до 10 метра и има точност ±0,05 hPa. Развитието на MEMS технологията доближава барометрите до точността на кварцовите еталони — очаква се, че до 2027 г. типичната грешка ще се понижи до ±0,2 hPa.
Често задавани въпроси
Можете да проверите чрез приложението Sensor Test от Google Play. Барометър има в всички флагмански смартфони Samsung Galaxy S и Note (започнайки от S3), Google Pixel (всички модели), iPhone 6 и по-новите. В бюджетните модели сензорът обикновено липсва.
Според барометричната формула: атмосферното налягане намалява с височината. На ниво морето налягането е 1013,25 hPa, на височина 500 метра — около 955 hPa. Всеки 8,4 метра издигане намалява налягането с около 1 hPa. За точност е необходимо калибриране според най-близката метеорологична станция.
Да, в приложенията за метеорологични станции. Внезапното падане на налягането с 3–5 hPa за 3 часа показва приближаващ циклон и влошаване на времето. Повишаването на налягането е признак за подобрение. За точна прогноза обаче са необходими данни от метеорологичните служби.
Не — калибрирането става автоматично. Производителите програмират калибрационните коефициенти в завода. Ако обаче живеете на височина 1000+ метра над морето, струва да зададете референтното налягане в навигационното приложение за повишаване на точността.
SENSOR_DELAY_NORMAL (200 ms) е оптимален — атмосферното налягане се променя бавно. За проследяване на движението в асансъор, 200 ms са достатъчни. Прекалената честота (FASTEST) не дава предимство, но увеличава консумацията на енергия с 20–30%.
Обобщение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също