スマートフォンの気圧計は、高度測定と天気予報のために大気圧を測定するMEMSセンサーです。最新の気圧計は300~1100 hPaの範囲で1 hPaの精度で圧力を記録し、1メートル未満の高度誤差に相当します。Bosch Sensortec BMP580、2024によると、最新の圧力センサーの絶対精度は±0.5 hPaで、0.4メートルの精度で高度を測定できます。
重要なポイント
気圧計は、MEMS技術(マイクロエレクトロメカニカルシステム)に基づく小型の絶対圧センサーです。ヘクトパスカル(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メートルの高度変化を検出できます。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変換回路(容量-電圧変換)が信号を増幅し、24ビットADCで処理可能なレベルにします。
MEMS気圧計には内蔵温度センサーが搭載されています。気体の圧力は法則P = ρRTに従って温度に直接依存するためです。補償がない場合、1 °Cの温度変化は0.1 hPaの誤差を生じ、これは0.8メートルの高度差に相当します。最新のセンサーはOTPメモリー(ワンタイムプログラマブル)に保存されたキャリブレーション係数を使用し、-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マップ、Yandexマップ)はハイブリッドアルゴリズムを使用しています。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 {
// GPS高度によるP0キャリブレーション
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です。このセンサーは環境センサーのカテゴリーに属し、ユーザーによるキャリブレーションは不要で、初期化後すぐに動作します。
気圧計は高いポーリングレートを必要としません — 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時間の気圧チャートを作成し、最大80%の精度で6~12時間先の天候変化を予測できます。
天候変化時には大気圧は6~12時間で1~3 hPa変化します。高気圧(高圧帯)は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に低減すると予想されています。
よくある質問
Google PlayのSensor Testアプリで確認できます。フラッグシップのSamsung Galaxy SおよびNoteシリーズ(S3以降)、Google Pixel(全モデル)、iPhone 6以降には気圧計が搭載されています。低価格モデルには通常搭載されていません。
気圧式を使用します:大気圧は高度とともに低下します。海面では1013.25 hPa、高度500メートルでは約955 hPaです。8.4メートル上昇するごとに気圧が約1 hPa低下します。正確さのためには最寄りの気象観測所によるキャリブレーションが必要です。
はい、気象観測所アプリで使用できます。3時間で3~5 hPaの急激な気圧低下は低気圧の接近と天候悪化を示します。気圧上昇は好転の兆候です。ただし、正確な予報には気象サービスのデータが必要です。
いいえ — キャリブレーションは自動的に行われます。メーカーが工場でキャリブレーション係数をプログラムしています。ただし、海抜1000メートル以上の高地にお住まいの場合は、ナビゲーションアプリで基準気圧を設定すると精度が向上します。
SENSOR_DELAY_NORMAL(200 ms)が最適です — 大気圧はゆっくり変化します。エレベーターの動きを追跡する場合でも200 msで十分です。過剰な頻度(FASTEST)は利点がなく、消費電力を20~30%増加させるだけです。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。