Compass(指南针)在智能手机中是一种基于磁力计的数字传感器,用于确定地球磁极的方向。该技术使导航、地图绘制和增强现实应用能够精确确定设备在空间中的方向。根据 STMicroelectronics,2025 的数据,现代MEMS磁力计 可提供 高达1-2度的方向确定精度。
要点
数字指南针(compass) 在智能手机中是一种基于磁力计的传感器,用于测量地球磁场的强度并确定方位角(相对于磁北的角度)。与机械指南针不同,数字指南针使用微机电系统(MEMS)来记录磁场。磁力计在三个轴上测量磁场,从而可以在智能手机的任何倾斜角度下正确确定方向。
现代 MEMS磁力计 是一个尺寸为2×2×1 mm的微芯片,与加速度计和陀螺仪一起(作为9轴IMU的一部分)集成在智能手机机身中。传感器不仅测量方向,还测量地球磁场的强度(25–65 µT,取决于纬度)。金属物体以及来自扬声器、振动电机和相机的寄生磁场的存在 会引起失真,因此精确工作需要软件校正读数。
第一款 数字指南针 于2009年随着iPhone 3GS(第一款内置磁力计的智能手机)的推出而出现在手机中。如今,绝大多数智能手机(包括预算型号)都安装了磁力计。根据 Yole Group 的数据,用于移动设备的MEMS磁力计市场每年超过15亿个,这证实了对该技术的需求。
MEMS磁力计 的基础是一个敏感元件,它在外加磁场的作用下改变其电特性。现代智能手机使用霍尔效应或磁阻效应(AMR — 各向异性磁阻)。其原理基于载流材料在磁场作用下改变其电阻,通过电压变化计算磁场矢量。
基于 霍尔效应 的传感器记录半导体板边缘在洛伦兹力作用于移动电荷时产生的电压变化。磁阻传感器(AMR)使用一层坡莫合金(NiFe),其电阻取决于磁场方向。与霍尔传感器相比,AMR传感器 尺寸更小,灵敏度更高,因此在现代智能手机中占主导地位。
| 类型 | 灵敏度 | 能耗 | 尺寸 |
|---|---|---|---|
| 霍尔 | 中等 | 低 | 中等 |
| AMR | 高 | 低 | 小 |
| GMR | 非常高 | 中等 | 小 |
磁力计的数据与 加速度计 的读数相结合,用于校正倾斜度并确定水平面上的北方方向。传感器融合算法使用Madgwick滤波器或Kalman滤波器来组合磁力计、陀螺仪和加速度计的数据。这使得即使在设备快速旋转和摇晃时也能获得稳定而精确的方位角。
移动行业使用三种主要类型的 MEMS磁力计:基于霍尔效应、各向异性磁阻(AMR)和巨磁阻(GMR)。AMR磁力计因其在灵敏度、能耗和成本方面的最佳组合而在智能手机中最为普及。领先的制造商 — AKM(旭化成微器件)、STMicroelectronics 和 Bosch Sensortec。
典型智能手机的 AMR磁力计灵敏度 为0.3–1 µT,动态范围为±1000 µT(±8高斯),足以精确测量地球磁场(30–65 µT)并补偿寄生磁场。传感器的轮询频率可达100–200 Hz,但大多数应用为节省能源而使用10–50 Hz。温度和机身应力变形的自动补偿在传感器驱动级别实现。
指南针校准 是补偿智能手机组件(扬声器、振动电机、摄像头和电池)产生的寄生磁场的过程。未经校准时,磁力计读数可能偏离真实方向10–30度。校准系统确定三个轴上的偏移矩阵(hard-iron bias),并将其应用于校正所有后续测量。
标准的 指南针校准 方法 — 画8字形:用户沿着类似数字8的轨迹旋转智能手机。在运动过程中,传感器记录所有可能方向上的磁场,算法收集点并逼近一个中心相对于零点偏移的球体。球体的半径对应于地球磁场的大小,中心对应于 寄生偏移矢量。逼近后,系统计算每个轴的校正系数。
Qualcomm和MediaTek的现代 校准算法 在后台持续执行校准,无需用户参与。它们分析设备旋转时磁场的变化,并自动更新校正参数。如果传感器检测到新的寄生磁场(例如安装磁吸手机壳时),系统会在设备连续运动1–2秒内启动重新校准。
数字指南针 广泛用于各种移动应用。主要用途 — 导航和地图服务(Google Maps、Yandex.Maps、2GIS),它们确定设备在地图上的方向,以正确显示用户的移动方向。在增强现实(AR)应用中,指南针确保虚拟对象相对于基本方向的 正确定位。
在 天文应用(Star Walk、SkySafari)中,指南针与加速度计结合确定智能手机所指的方向,并显示相应的星空区域。钓鱼和旅游应用使用指南针在地图上标记兴趣点,并参考方位角。带GPS的健身追踪使用指南针读数来确定跑步或骑自行车的方向,从而提高路线显示的准确性。
要在Android上访问 数字指南针,使用Sensor API中的TYPE_MAGNETIC_FIELD传感器。开发人员注册磁力计读数变化的监听器,并接收三个轴上以微特斯拉为单位的磁场强度值数组。为确定方位角,磁力计数据通过传感器融合旋转矩阵与加速度计数据相结合。
import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager
class CompassManager(
private val sensorManager: SensorManager
) : SensorEventListener {
private val magnetometer = FloatArray(3)
private val accelerometer = FloatArray(3)
private val rotationMatrix = FloatArray(9)
private val orientation = FloatArray(3)
override fun onSensorChanged(event: SensorEvent) {
if (event.sensor.type == Sensor.TYPE_MAGNETIC_FIELD) {
event.values.copyInto(magnetometer)
} else if (event.sensor.type == Sensor.TYPE_ACCELEROMETER) {
event.values.copyInto(accelerometer)
}
SensorManager.getRotationMatrix(
rotationMatrix, null,
accelerometer, magnetometer
)
SensorManager.getOrientation(rotationMatrix, orientation)
val azimuth = Math.toDegrees(orientation[0].toDouble())
// azimuth: 0 = 北, 90 = 东, 180 = 南, 270 = 西
}
fun start() {
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
SensorManager.SENSOR_DELAY_UI)
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_UI)
}
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {}
}
通过 getOrientation 获得的方位角以弧度为单位,取值范围为-π到π,其中0对应磁北。为在屏幕上显示,这些值被转换为度数(Math.toDegrees),并归一化到0–360范围。重要的是要考虑 磁偏角 — 磁北与真北(地理北)之间的角度,它取决于地理位置并随时间变化。谷歌地图通过GeomagneticField API自动校正磁偏角。
常见问题
数字指南针 使用MEMS磁力计 — 一个2×2 mm的芯片,在三个轴上测量地球磁场。磁力计数据与加速度计读数相结合,以确定方位角 — 北方方向与设备方向之间的角度。
指南针 读数不准确通常是由于缺少校准、来自扬声器或振动电机的磁干扰以及磁吸手机壳造成的。解决方法 — 通过8字形运动进行校准,或移除磁性配件。如果错误持续存在,可能需要检查传感器。
是的,指南针校准 对于补偿智能手机内部的寄生磁场是必要的。在大多数现代设备中,校准在后台自动进行。手动校准时,用智能手机在空中画一个8字形 — 系统将从所有角度收集数据并校正读数。
在 Android 上,通过使用TYPE_MAGNETIC_FIELD传感器的Sensor API访问指南针。方位角通过SensorManager.getRotationMatrix()和getOrientation()计算,它们结合了磁力计和加速度计的数据。获得的方位角可以调整以在屏幕上显示。
最精确的指南针 安装在配备三重IMU传感器(磁力计+陀螺仪+加速度计)和主动校准系统的智能手机中。领先的是旗舰机型Google Pixel、Samsung Galaxy S系列和iPhone Pro — 它们使用AKM和Bosch磁力计,灵敏度为0.3 µT,具有自动校正功能。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。