Manyetometre, ana yönleri belirlemek için Dünya'nın manyetik alan şiddetini ölçen bir sensördür. Mobil cihazlarda, dijital pusula olarak çalışır ve uygun kalibrasyonla 1–2 dereceye kadar doğruluk sağlar. Bosch Sensortec Application Note, 2024'e göre, modern MEMS manyetometreler yalnızca 0.5–2 mA tüketir ve 1.5×1.5×0.7 mm boyutunda bir pakete sığar.
Önemli noktalar
Mobil cihazdaki manyetometre, Hall etkisine dayanan üç eksenli bir manyetik alan sensörüdür. Manyetik indüksiyon vektörünün X, Y ve Z eksenlerindeki izdüşümlerini ölçer. İvmeölçer ile birleştirildiğinde, manyetometre azimutu — kuzey yönü ile telefon ekseni arasındaki açıyı — belirler.
Modern akıllı telefonlar, anizotropik manyetodirenç etkisi (AMR) ve Hall etkisine dayanan MEMS manyetometreler kullanır. AMR sensörleri (Asahi Kasei Microdevices'den AKM serisi) 0.15 µT/LSB hassasiyet ve ±1200 µT aralık sağlar — Dünya'nın alanını (25–65 µT) ölçmek için yeterlidir.
| Parametre | Değer |
|---|---|
| Teknoloji | AMR / Hall Etkisi |
| Aralık | ±1200 — ±1300 µT |
| Tüketim | 0.5–2 mA |
| Boyut | 1.5×1.5×0.7 mm |
| Hassasiyet | 0.15 µT/LSB |
Dijital pusula olmadan, navigasyon uygulamaları hareket yönünü belirleyemez. Google Maps, kullanıcının bakış yönüne göre harita yönünü görüntülemek için manyetometreyi kullanır. Sensör arızalandığında, uygulama mavi yön oku olmadan haritada yalnızca konumu gösterir.
Hall etkisi, iletken bir plaka manyetik alana maruz kaldığında kenarlarında potansiyel farkı oluşması fiziksel olayıdır. MEMS manyetometreler, direnci harici bir manyetik alanın (AMR etkisi) etkisi altında değişen permalloy (NiFe)'den yapılmış ince film yapıları kullanır.
Üç kanalın (X, Y, Z) her biri Wheatstone köprüsünde bağlı dört manyetodirençten oluşur. Manyetik alan, dirençlerin direncini %2–3 oranında değiştirir ve bu, bir diferansiyel yükseltici tarafından voltaja dönüştürülür. Dahili 16 bitlik ADC, sinyali 100 Hz'e kadar frekansta dijitalleştirir.
Alanın dikey bileşenini ölçmek için entegre manyetik yoğunlaştırıcı (IMC) kullanılır. Bu, yatay alanı dikey düzleme saptıran ve tek bir AMR köprüsünün üç ekseni de ölçmesine izin veren ince bir NiFe film yapısıdır.
Manyetometre, Dünya'nın manyetik alanına göre yönü (mutlak referans) belirlerken, jiroskop yalnızca açısal değişimi (göreli veri) ölçer. Jiroskop kısa aralıklarda doğru veri sağlar ancak sürüklenme hatası biriktirir. Manyetometre sürüklenmez ancak manyetik girişime karşı hassastır.
Android, SensorManager.getRotationMatrix aracılığıyla üç sensörden gelen verileri birleştirir. Manyetometre, uzun aralıklarda jiroskop sürüklenmesini düzeltmek için kullanılır. Manyetometre olmadan, jiroskop 5 dakikada 10–20 derecelik bir hata biriktirir. Google ARCore'a (2024) göre, füzyon algoritması manyetometre ile 1–3 derece doğruluk elde eder.
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] — radyan cinsinden azimut
Hard Iron — telefon içindeki ferromanyetik malzemeler (hoparlör mıknatısları, titreşim motoru, metal çerçeve) tarafından oluşturulan kalıcı manyetik alan. Hard Iron bozulması, her eksende sabit bir ofset (bias) olarak görünür. Soft Iron — alan çizgilerini bozan manyetik geçirgen malzemelerin neden olduğu alan yönü değişikliği.
Standart manyetometre kalibrasyon prosedürü, telefonu sekiz şeklinde döndürmektir. İşlem sırasında sensör, üç boyutlu uzayda noktalar kaydeder. Bozulma olmadan, noktalar 25–65 µT yarıçaplı bir küre üzerinde bulunur. Hard Iron kürenin merkezini kaydırır, Soft Iron onu bir elipsoide dönüştürür. Kalibrasyon algoritması ofset ve ölçekleme parametrelerini hesaplar.
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
)
}
Geliştirici, cihaz hareket ederken veri toplayarak kendi manyetometre kalibrasyonunu uygulayabilir. Elipsoid uydurma (ellipsoid fitting) algoritması, küreden sapmaların kareleri toplamını en aza indirerek Hard Iron ve Soft Iron parametrelerini bulur. Apache Commons Math kütüphanesi, bu görev için doğrusal olmayan en küçük kareler uygulaması (Levenberg-Marquardt) sağlar — yazılım kalibrasyonu sonrası doğruluk 0.5 dereceye ulaşır.
Hard Iron'ı en aza indirmek için üreticiler manyetometreyi telefonun üst kısmına, hoparlör ve titreşim motorundan uzağa yerleştirir. Apple mühendisleri iPhone 16 Pro Max'te (2024) manyetometre için permalloy folyo kalkanlama kullanarak hoparlör etkisini 4 kat azalttı. Samsung Galaxy S24 Ultra, indüklenen alanı çıkarmak için hoparlör akımını gerçek zamanlı olarak ölçen ek bir dengeleme devresi kullanır. Manyetik tutuculu kılıflar (örneğin araba tutucularında) güçlü bozulmalar yaratır — kullanımdan sonra manyetometre yeniden kalibrasyona kadar yanlış yön gösterebilir.
Android iki sensör sağlar: TYPE_MAGNETIC_FIELD (µT cinsinden kalibre edilmiş veri) ve TYPE_MAGNETIC_FIELD_UNCALIBRATED (bozulma tahmini ile ham veri). Navigasyon uygulamaları için kalibre edilmiş sensörün kullanılması önerilir — sistem, son sekiz şeklindeki harekete dayalı olarak otomatik olarak yerleşik kalibrasyonu uygular.
SENSOR_DELAY_NORMAL (200 ms) pusula için yeterlidir, SENSOR_DELAY_FASTEST (0 ms) — yalnızca özel araştırma uygulamaları için. Değerleri aldıktan sonra, getRotationMatrix + getOrientation aracılığıyla azimuta dönüştürebilirsiniz. event.accuracy aracılığıyla sensör doğruluğunu kontrol etmek önemlidir — SENSOR_STATUS_UNRELIABLE kalibrasyon gerektiği anlamına gelir.
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)
}
}
Manyetometre yalnızca pusula için kullanılmaz. AR uygulamaları, Pokemon GO dahil, kameranın gerçek dünyaya göre yönünü belirlemek için manyetometreyi kullanır. Manyetometre olmadan, ARCore Screen Axis moduna geçer — yön yalnızca jiroskop tarafından belirlenir, bu da doğruluğu azaltır.
Android Auto tabanlı otomotiv navigasyon sistemlerinde, tünellerde ve yoğun kentsel alanlarda GPS sinyali kaybolduğunda hareket yönünü belirlemek için manyetometre kullanılır. Araba tekerleklerinden odometri verileriyle (OBD-II aracılığıyla elde edilen) birleştirildiğinde, manyetometre 10–20 metre konum doğruluğu ile GPS olmadan 5 dakikaya kadar navigasyona devam etmeyi sağlar. Google Maps Engineering Blog'a (2024) göre, hibrit algoritma kentsel kanyonlarda rota kaybını %40 azaltır.
Navigasyon uygulamaları, hareket azimutunu belirlemek için manyetometreyi kullanır — kuzey ile kullanıcının mevcut yönü arasındaki açı. Google Maps'te manyetometre verileri, GPS izi ve hareket geçmişi ile birleştirilerek mavi yön oku görüntülenir. GPS sinyali kaybolduğunda (tünellerde, yeraltı geçitlerinde), manyetometre tek yön bilgisi kaynağı olarak kalır.
Entegre ASIC'li (Bosch'tan BMM350, 2024) yeni nesil 3 eksenli manyetometreler yalnızca 0.35 mA tüketir ve 200 Hz'e kadar destekler. Mobil cihazlar için kuantum manyetometreleri ve elmasta NV merkezlerinin geliştirilmesi henüz laboratuvar aşamasından çıkmamıştır. 2028 yılına kadar mobil manyetometrelerin doğruluğunun 0.01 µT'ye ulaşması beklenmektedir.
Sıkça sorulan sorular
Telefonla havada sekiz şekli çizin — bu, dijital pusulayı kalibre etmek için standart harekettir. Pusula hala yanlış gösteriyorsa, kılıfı kontrol edin: manyetik tutucular ve metal elemanlar güçlü Hard Iron bozulmaları yaratır.
Ana nedenler: telefon hoparlörlerinden ve titreşim motorundan manyetik girişim, kılıf değişikliğinden sonra kalibrasyon eksikliği, yakındaki metal nesnelerin etkisi. Betonarme yapılara sahip iç mekanlarda manyetik alan özellikle güçlü bir şekilde bozulur.
Evet, metal dedektörü uygulamaları manyetik alan anomalilerini tespit etmek için yerleşik manyetometreyi kullanır. Ancak algılama derinliği 10–20 cm'yi geçmez ve cihaz metal türlerini ayırt etmez — bu daha çok eğitim aracıdır.
TYPE_MAGNETIC_FIELD, sistem tarafından uygulanan kalibrasyondan sonra verileri döndürür. TYPE_MAGNETIC_FIELD_UNCALIBRATED, geliştiricinin kendi kalibrasyonunu uygulamasına izin veren bir bias tahmini ile ham değerler sağlar.
İvmeölçer ve manyetometre verileriyle SensorManager.getRotationMatrix kullanın, ardından getOrientation — ilk dizi öğesi (azimut) radyan cinsinden olacaktır. Pusulayı görüntülemek için dereceye dönüştürün: Math.toDegrees(azimuth).
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun