스마트폰의 나침반(compass)은 자기계를 기반으로 지구의 자기극 방향을 결정하는 디지털 센서입니다. 이 기술은 내비게이션, 지도 제작 및 증강 현실 애플리케이션이 공간에서 장치의 방향을 정확하게 결정할 수 있게 해줍니다. STMicroelectronics, 2025에 따르면, 최신 MEMS 자기계는 최대 1–2도의 방향 결정 정확도를 제공합니다.
핵심 사항
스마트폰의 디지털 나침반은 자기계를 기반으로 한 센서로, 지구 자기장의 세기를 측정하고 방위각(자북에 대한 각도)을 결정합니다. 기계식 나침반과 달리 디지털 나침반은 미세전자기계 시스템(MEMS)을 사용하여 자기장을 감지합니다. 자기계는 세 축으로 자기장을 측정하여 스마트폰의 모든 기울기에서 올바른 방향을 결정할 수 있습니다.
최신 MEMS 자기계는 2×2×1mm 크기의 마이크로칩으로, 가속도계 및 자이로스코프와 함께(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(Asahi Kasei Microdevices), STMicroelectronics 및 Bosch Sensortec입니다.
일반적인 스마트폰의 AMR 자기계 감도는 0.3–1 µT이며 동적 범위는 ±1000 µT(±8 가우스)로, 지구 자기장(30–65 µT)을 정확하게 측정하고 기생 자기장을 보상하기에 충분합니다. 센서의 샘플링 속도는 100–200Hz에 도달할 수 있지만 대부분의 애플리케이션은 에너지 절약을 위해 10–50Hz를 사용합니다. 온도 및 하우징 응력 변형의 자동 보상은 센서 드라이버 수준에서 구현됩니다.
나침반 보정은 스마트폰 구성 요소(스피커, 진동 모터, 카메라, 배터리)가 생성하는 기생 자기장을 보상하는 프로세스입니다. 보정 없이 자기계 측정값은 실제 방향에서 10–30도까지 벗어날 수 있습니다. 보정 시스템은 세 축의 오프셋 행렬(하드 아이언 바이어스)을 결정하고 모든 후속 측정을 보정하는 데 적용합니다.
표준 나침반 보정 방법은 “8자”를 그리는 것입니다: 사용자가 숫자 8과 같은 궤적으로 스마트폰을 회전시킵니다. 움직임 동안 센서는 가능한 모든 방향에서 자기장을 기록하고 알고리즘은 점을 축적하여 중심이 0에서 오프셋된 구를 근사합니다. 구의 반지름은 지구 자기장의 크기에 해당하고 중심은 기생 오프셋 벡터를 나타냅니다. 근사 후 시스템은 각 축에 대한 보정 계수를 계산합니다.
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())
// 방위각: 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은 자북에 해당합니다. 화면 표시를 위해 값은 0–360 범위로 정규화하여 도(degrees, Math.toDegrees)로 변환됩니다. 자기 편각 — 자북과 진북(지리적 북) 사이의 각도로, 지리적 위치에 따라 달라지고 시간이 지남에 따라 변함 — 을 고려하는 것이 중요합니다. Google Maps는 GeomagneticField API를 통해 편각을 자동으로 조정합니다.
자주 묻는 질문
디지털 나침반은 MEMS 자기계 — 세 축으로 지구 자기장을 측정하는 2×2mm 칩 — 를 사용합니다. 자기계 데이터는 방위각 — 북쪽 방향과 장치 방향 사이의 각도 — 를 결정하기 위해 가속도계 측정값과 결합됩니다.
나침반의 잘못된 측정값은 대부분 보정 부족, 스피커나 진동 모터의 자기 간섭, 자기 케이스로 인해 발생합니다. 해결책은 “8자” 보정 동작을 수행하거나 자기 액세서리를 제거하는 것입니다. 지속적인 오류가 있는 경우 센서 점검이 필요할 수 있습니다.
네, 스마트폰 내부의 기생 자기장을 보상하기 위해 나침반 보정이 필요합니다. 대부분의 최신 기기에서는 보정이 백그라운드에서 자동으로 수행됩니다. 수동 보정을 위해 스마트폰으로 공중에 “8자”를 그리면 시스템이 모든 각도에서 데이터를 수집하여 측정값을 보정합니다.
Android에서는 TYPE_MAGNETIC_FIELD 센서와 함께 Sensor API를 통해 나침반에 액세스할 수 있습니다. 방위각은 자기계와 가속도계 데이터를 결합하는 SensorManager.getRotationMatrix() 및 getOrientation()을 통해 계산됩니다. 결과 방위각은 화면 표시에 맞게 조정할 수 있습니다.
가장 정확한 나침반은 트리플 IMU 센서(자기계 + 자이로스코프 + 가속도계)와 활성 보정 시스템을 갖춘 스마트폰에 설치되어 있습니다. 플래그십 Google Pixel, Samsung Galaxy S 시리즈 및 iPhone Pro 모델이 선두를 달리고 있습니다 — 이들은 0.3 µT 감도와 자동 보정 기능을 갖춘 AKM 및 Bosch 자기계를 사용합니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.