磁力計は、地球の磁場の強さを測定して方位を決定するセンサーです。モバイル端末ではデジタルコンパスとして機能し、適切なキャリブレーションにより1–2度の精度を提供します。Bosch Sensortec Application Note、2024によると、最新のMEMS磁力計はわずか0.5–2 mAの消費電力で、1.5×1.5×0.7 mmのパッケージに収まります。
重要なポイント
モバイル端末の磁力計は、ホール効果に基づく3軸磁場センサーです。X、Y、Z軸への磁気誘導ベクトルの投影を測定します。加速度計と組み合わせることで、磁力計は方位角 — 北方向と電話の軸との間の角度 — を決定します。
最新のスマートフォンは、異方性磁気抵抗効果(AMR)とホール効果に基づくMEMS磁力計を使用しています。AMRセンサー(Asahi Kasei MicrodevicesのAKMシリーズ)は、0.15 µT/LSBの感度と±1200 µTの範囲を提供し — 地球の磁場(25–65 µT)を測定するのに十分です。
| パラメータ | 値 |
|---|---|
| 技術 | AMR / ホール効果 |
| 範囲 | ±1200 — ±1300 µT |
| 消費電力 | 0.5–2 mA |
| サイズ | 1.5×1.5×0.7 mm |
| 感度 | 0.15 µT/LSB |
デジタルコンパスがないと、ナビゲーションアプリは移動方向を判断できません。Googleマップは磁力計を使用して、ユーザーの視線方向に対する地図の向きを表示します。センサーが故障すると、アプリは青い方向矢印なしで地図上の位置のみを表示します。
ホール効果は、導電性プレートが磁場にさらされたときにその端に電位差が生じる物理現象です。MEMS磁力計は、パーマロイ(NiFe)で作られた薄膜構造を使用し、その抵抗は外部磁場(AMR効果)の影響で変化します。
3つのチャンネル(X、Y、Z)のそれぞれは、ホイートストンブリッジに接続された4つの磁気抵抗素子で構成されています。磁場は抵抗値を2–3%変化させ、差動増幅器によって電圧に変換されます。内蔵の16ビットADCは、最大100 Hzの周波数で信号をデジタル化します。
磁場の垂直成分を測定するために、集積磁気集中器(IMC)が使用されます。これはNiFeの薄膜構造で、水平磁場を垂直面に偏向させ、単一のAMRブリッジが3軸すべてを測定できるようにします。
磁力計は地球の磁場に対する方向(絶対基準)を決定しますが、ジャイロスコープは角度変化(相対データ)のみを測定します。ジャイロスコープは短い間隔で正確なデータを提供しますが、ドリフト誤差が蓄積されます。磁力計はドリフトしませんが、磁気干渉の影響を受けやすいです。
AndroidはSensorManager.getRotationMatrixを介して3つのセンサーからのデータを結合します。磁力計は、長い間隔でのジャイロスコープのドリフトを補正するために使用されます。磁力計がない場合、ジャイロスコープは5分で10–20度の誤差を蓄積します。Google ARCore(2024)によると、フュージョンアルゴリズムは磁力計を使用して1–3度の精度を達成します。
val accelerometerReading = FloatArray(3)
val magnetometerReading = FloatArray(3)
val rotationMatrix = FloatArray(9)
val orientationAngles = FloatArray(3)
SensorManager.getRotationMatrix(
rotationMatrix, null,
accelerometerReading,
magnetometerReading
)
SensorManager.getOrientation(
rotationMatrix, orientationAngles
)
// orientationAngles[0] — ラジアン単位の方位角
ハードアイアン — 電話内部の強磁性材料(スピーカーマグネット、振動モーター、金属フレーム)によって生成される永久磁場。ハードアイアン歪みは、各軸に沿った一定のオフセット(バイアス)として現れます。ソフトアイアン — 磁力線を歪める透磁性材料によって引き起こされる磁場方向の変化。
磁力計の標準的なキャリブレーション手順は、電話を8の字に回転させることです。プロセス中、センサーは3次元空間のポイントを記録します。歪みがない場合、ポイントは半径25–65 µTの球上にあります。ハードアイアンは球の中心を移動させ、ソフトアイアンはそれを楕円体に変えます。キャリブレーションアルゴリズムは、オフセットとスケーリングパラメータを計算します。
data class CalibrationParams(
val biasX: Float,
val biasY: Float,
val biasZ: Float,
val scaleX: Float,
val scaleY: Float,
val scaleZ: Float
)
fun applySoftIronCorrection(
raw: FloatArray, p: CalibrationParams
): FloatArray {
return floatArrayOf(
(raw[0] - p.biasX) * p.scaleX,
(raw[1] - p.biasY) * p.scaleY,
(raw[2] - p.biasZ) * p.scaleZ
)
}
開発者は、デバイスの移動中にデータを収集することで、独自の磁力計キャリブレーションを実装できます。楕円体フィッティングアルゴリズムは、球からの偏差の二乗和を最小化することにより、ハードアイアンとソフトアイアンのパラメータを見つけます。Apache Commons Mathライブラリは、このタスクのための非線形最小二乗法(Levenberg-Marquardt)の実装を提供します — ソフトウェアキャリブレーション後の精度は0.5度に達します。
ハードアイアンを最小限に抑えるために、メーカーは磁力計を電話の上部、スピーカーと振動モーターから離して配置します。AppleのエンジニアはiPhone 16 Pro Max(2024)で磁力計にパーマロイ箔シールドを使用し、スピーカーの影響を4分の1に低減しました。Samsung Galaxy S24 Ultraは、誘導磁場を差し引くためにスピーカー電流をリアルタイムで測定する追加の補償回路を使用しています。磁気マウント付きのケース(車載ホルダーなど)は強い歪みを生み出します — 使用後、磁力計は再キャリブレーションまで誤った方向を示す可能性があります。
Androidは2つのセンサーを提供します:TYPE_MAGNETIC_FIELD(µT単位のキャリブレーションデータ)とTYPE_MAGNETIC_FIELD_UNCALIBRATED(歪み推定付きの生データ)。ナビゲーションアプリでは、キャリブレーション済みセンサーを使用することをお勧めします — システムは最後の8の字動作に基づいて自動的に内蔵キャリブレーションを適用します。
SENSOR_DELAY_NORMAL(200 ms)はコンパスに十分であり、SENSOR_DELAY_FASTEST(0 ms)は特殊な研究アプリケーション専用です。値を受信した後、getRotationMatrix + getOrientationを介して方位角に変換できます。event.accuracyを介してセンサーの精度を確認することが重要です — SENSOR_STATUS_UNRELIABLEはキャリブレーションが必要であることを意味します。
override fun onSensorChanged(event: SensorEvent) {
if (event.sensor.type == Sensor.TYPE_MAGNETIC_FIELD) {
val accuracy = event.accuracy
if (accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE) {
showCalibrationHint()
return
}
System.arraycopy(event.values, 0,
magnetometerReading, 0, 3)
}
}
磁力計はコンパスだけでなく使用されます。ARアプリケーション(Pokemon GOを含む)は、現実世界に対するカメラの向きを決定するために磁力計を使用します。磁力計がない場合、ARCoreはScreen Axisモードに切り替わり — 方向はジャイロスコープのみで決定され、精度が低下します。
Android Autoベースの自動車ナビゲーションシステムでは、トンネルや密集した都市部でGPS信号が失われたときに移動方向を決定するために磁力計が使用されます。車輪からの走行距離データ(OBD-IIを介して取得)と組み合わせることで、磁力計はGPSなしで最大5分間、10–20メートルの位置精度でナビゲーションを継続できます。Google Maps Engineering Blog(2024)によると、ハイブリッドアルゴリズムは都市の谷間でのルート損失を40%削減します。
ナビゲーションアプリは磁力計を使用して移動の方位角を決定します — 北とユーザーの現在の進行方向との間の角度。Googleマップでは、磁力計データがGPSトラックと移動履歴と組み合わされて、青い方向矢印が表示されます。GPS信号が失われた場合(トンネル、地下通路)、磁力計が唯一の方向情報源となります。
統合ASICを備えた新しい世代の3軸磁力計(BoschのBMM350、2024)はわずか0.35 mAを消費し、最大200 Hzをサポートします。モバイル端末向けの量子磁力計とダイヤモンド中のNVセンターの開発は、まだ実験室段階を出ていません。2028年までに、モバイル磁力計の精度は0.01 µTに達すると予想されています。
よくある質問
電話で空中に8の字を描きます — これがデジタルコンパスをキャリブレーションする標準的なジェスチャーです。コンパスがまだ正しく表示されない場合は、ケースを確認してください:磁気マウントと金属要素が強いハードアイアン歪みを生成します。
主な原因:電話のスピーカーと振動モーターからの磁気干渉、ケース交換後のキャリブレーション不足、近くの金属物体の影響。鉄筋コンクリート構造の屋内では、磁場が特に強く歪められます。
はい、金属探知機アプリは内蔵磁力計を使用して磁場異常を検出します。ただし、検出深度は10–20 cmを超えず、デバイスは金属の種類を区別しません — どちらかというと教育ツールです。
TYPE_MAGNETIC_FIELDはシステムによって適用されたキャリブレーション後のデータを返します。TYPE_MAGNETIC_FIELD_UNCALIBRATEDは生の値にバイアス推定値を加えて提供し、開発者が独自のキャリブレーションを適用できるようにします。
加速度計と磁力計のデータでSensorManager.getRotationMatrixを使用し、次にgetOrientation — 最初の配列要素(方位角)はラジアン単位になります。コンパスを表示するには、度に変換します:Math.toDegrees(azimuth)。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。