Compass (قطبنما) در گوشی هوشمند یک حسگر دیجیتال مبتنی بر مغناطیسسنج است که جهت قطبهای مغناطیسی زمین را تعیین میکند. این فناوری به برنامههای ناوبری، نقشهنگاری و واقعیت افزوده امکان میدهد تا جهتگیری دستگاه در فضا را به دقت تعیین کنند. بر اساس دادههای STMicroelectronics، 2025، MEMS-مغناطیسسنجهای مدرن دقت تعیین جهت را تا ۱–۲ درجه تضمین میکنند.
نکات کلیدی
قطبنمای دیجیتال (compass) در گوشی هوشمند — حسگری مبتنی بر مغناطیسسنج است که شدت میدان مغناطیسی زمین را اندازهگیری کرده و آزیموت (زاویه نسبت به شمال مغناطیسی) را تعیین میکند. بر خلاف قطبنمای مکانیکی، قطبنمای دیجیتال از سیستمهای میکروالکترومکانیکی (MEMS) برای ثبت میدان مغناطیسی استفاده میکند. مغناطیسسنج میدان را در سه محور اندازهگیری میکند که امکان تعیین صحیح جهت را در هر زاویه گوشی هوشمند فراهم میکند.
MEMS-مغناطیسسنج مدرن — یک میکروچیپ به ابعاد ۲×۲×۱ میلیمتر است که در بدنه گوشی هوشمند همراه با شتابسنج و ژیروسکوپ (در ترکیب IMU 9 محوره) یکپارچه شده است. حسگر نه تنها جهت، بلکه شدت میدان مغناطیسی زمین (۲۵–۶۵ µT بسته به عرض جغرافیایی) را نیز اندازهگیری میکند. وجود اشیاء فلزی و میدانهای مغناطیسی مزاحم از بلندگوها، موتور ویبره و دوربین اعوجاج ایجاد میکند، بنابراین برای عملکرد دقیق نیاز به تصحیح نرمافزاری قرائتها است.
اولین قطبنماهای دیجیتال در تلفنهای همراه در سال ۲۰۰۹ با عرضه iPhone 3GS — اولین گوشی هوشمند با مغناطیسسنج داخلی — ظاهر شدند. امروزه مغناطیسسنج در اکثریت قریب به اتفاق گوشیهای هوشمند، از جمله مدلهای اقتصادی نصب میشود. طبق دادههای Yole Group، بازار MEMS-مغناطیسسنجها برای دستگاههای موبایل از ۱.۵ میلیارد واحد در سال فراتر میرود که تقاضا برای این فناوری را تأیید میکند.
اساس MEMS-مغناطیسسنج را یک عنصر حساس تشکیل میدهد که ویژگیهای الکتریکی خود را تحت تأثیر میدان مغناطیسی خارجی تغییر میدهد. در گوشیهای هوشمند مدرن از اثر هال یا اثر مغناطیست مقاومتی (AMR — Anisotropic Magneto-Resistance) استفاده میشود. اصل بر این است که ماده حامل جریان تحت تأثیر میدان مغناطیسی مقاومت خود را تغییر میدهد و با تغییر ولتاژ، بردار میدان مغناطیسی محاسبه میشود.
حسگرهای مبتنی بر اثر هال تغییر ولتاژ در لبههای صفحه نیمههادی را ثبت میکنند که تحت تأثیر نیروی لورنتس بر بارهای متحرک ایجاد میشود. حسگرهای مغناطیست مقاومتی (AMR) از لایهای از پرمالوی (NiFe) استفاده میکنند که مقاومت آن به جهت میدان مغناطیسی بستگی دارد. حسگرهای AMR اندازه کوچکتری و حساسیت بالاتری نسبت به حسگرهای هال دارند، بنابراین در گوشیهای هوشمند مدرن غالب هستند.
| نوع | حساسیت | مصرف انرژی | اندازه |
|---|---|---|---|
| هال | متوسط | کم | متوسط |
| AMR | زیاد | کم | کوچک |
| GMR | بسیار زیاد | متوسط | کوچک |
دادههای مغناطیسسنج با قرائتهای شتابسنج برای تصحیح شیب و تعیین جهت شمال در صفحه افقی ترکیب میشوند. الگوریتم تلفیق حسگر (sensor fusion) از فیلتر ماجویک یا فیلتر کالمن برای ترکیب دادههای مغناطیسسنج، ژیروسکوپ و شتابسنج استفاده میکند. این امکان را فراهم میکند تا آزیموت پایدار و دقیقی حتی در چرخشهای سریع و لرزش دستگاه به دست آید.
در صنعت موبایل از سه نوع اصلی MEMS-مغناطیسسنج استفاده میشود: مبتنی بر اثر هال، مغناطیست مقاومتی ناهمسانگرد (AMR) و مغناطیست مقاومتی غولپیکر (GMR). مغناطیسسنجهای AMR به دلیل ترکیب بهینه حساسیت، مصرف انرژی و هزینه در گوشیهای هوشمند بیشترین شیوع را دارند. تولیدکنندگان پیشرو — AKM (Asahi Kasei Microdevices)، STMicroelectronics و Bosch Sensortec.
حساسیت AMR-مغناطیسسنج یک گوشی هوشمند معمولی ۰.۳–۱ µT با محدوده دینامیکی ±۱۰۰۰ µT (±۸ گاوس) است که برای اندازهگیری دقیق میدان زمین (۳۰–۶۵ µT) و جبران میدانهای مزاحم کافی است. فرکانس پرسوجوی حسگر میتواند به ۱۰۰–۲۰۰ هرتز برسد، اما بیشتر برنامهها برای صرفهجویی در انرژی از ۱۰–۵۰ هرتز استفاده میکنند. جبران خودکار دما و تغییر شکلهای تنشی بدنه در سطح درایور حسگر پیادهسازی شده است.
کالیبراسیون قطبنما — فرآیند جبران میدانهای مغناطیسی مزاحم تولید شده توسط اجزای گوشی هوشمند: بلندگوها، موتور ویبره، دوربین و باتری است. بدون کالیبراسیون، قرائتهای مغناطیسی میتوانند ۱۰–۳۰ درجه از جهت واقعی انحراف داشته باشند. سیستم کالیبراسیون ماتریس جابجایی (hard-iron bias) را در سه محور تعیین کرده و آن را برای تصحیح همه اندازهگیریهای بعدی اعمال میکند.
روش استاندارد کالیبراسیون قطبنما — کشیدن «عدد ۸»: کاربر گوشی هوشمند را در مسیر شبیه به عدد ۸ میچرخاند. در حین حرکت، حسگر میدان مغناطیسی را در همه جهتگیریهای ممکن ثبت میکند و الگوریتم نقاط را جمعآوری کرده و کرهای با مرکز جابجا شده نسبت به صفر تقریب میزند. شعاع کره با بزرگی میدان مغناطیسی زمین و مرکز — بردار جابجایی مزاحم — مطابقت دارد. پس از تقریب، سیستم ضرایب تصحیح را برای هر محور محاسبه میکند.
الگوریتمهای مدرن کالیبراسیون از Qualcomm و MediaTek کالیبراسیون پسزمینه پیوسته را بدون دخالت کاربر انجام میدهند. آنها تغییرات میدان مغناطیسی را هنگام چرخش دستگاه تحلیل کرده و به طور خودکار پارامترهای تصحیح را بهروز میکنند. اگر حسگر میدان مزاحم جدیدی تشخیص دهد (مثلاً هنگام نصب قاب مغناطیسی)، سیستم در عرض ۱–۲ ثانیه حرکت مداوم دستگاه، کالیبراسیون مجدد را آغاز میکند.
قطبنمای دیجیتال در طیف گستردهای از برنامههای موبایل استفاده میشود. کاربرد اصلی — خدمات ناوبری و نقشهنگاری (Google Maps، Yandex.Maps، 2GIS) که جهتگیری دستگاه را روی نقشه برای نمایش صحیح جهت حرکت کاربر تعیین میکنند. در برنامههای واقعیت افزوده (AR) قطبنما موقعیتیابی صحیح اشیاء مجازی را نسبت به جهتهای جغرافیایی تضمین میکند.
در برنامههای نجومی (Star Walk، SkySafari) قطبنما همراه با شتابسنج جهتی را که گوشی هوشمند به آن نشانه رفته است تعیین کرده و ناحیه مربوط به آسمان پرستاره را نشان میدهد. برنامههای ماهیگیری و گردشگری از قطبنما برای علامتگذاری نقاط مورد علاقه روی نقشه با ارجاع به آزیموت استفاده میکنند. ردیابی تناسب اندام با GPS از قرائتهای قطبنما برای تعیین جهت دویدن یا دوچرخهسواری استفاده میکند که دقت نمایش مسیر را افزایش میدهد.
برای دسترسی به قطبنمای دیجیتال در اندروید از سنسور TYPE_MAGNETIC_FIELD از Sensor API استفاده میشود. توسعهدهندگان یک شنونده برای تغییرات قرائتهای مغناطیسسنج ثبت کرده و آرایهای از مقادیر شدت میدان مغناطیسی را در سه محور به میکروتسلا دریافت میکنند. برای تعیین آزیموت، دادههای مغناطیسسنج از طریق ماتریس چرخش sensor fusion با دادههای شتابسنج ترکیب میشوند.
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 بر حسب رادیان اندازهگیری میشود و میتواند مقادیری از -π تا π داشته باشد، که در آن ۰ معادل شمال مغناطیسی است. برای نمایش روی صفحه، مقادیر با نرمالسازی به محدوده ۰–۳۶۰ به درجه تبدیل میشوند (Math.toDegrees). مهم است که انحراف مغناطیسی — زاویه بین شمال مغناطیسی و حقیقی (جغرافیایی) که به موقعیت جغرافیایی بستگی دارد و با زمان تغییر میکند — در نظر گرفته شود. نقشههای گوگل به طور خودکار انحراف را از طریق GeomagneticField API تصحیح میکنند.
پرسشهای متداول
قطبنمای دیجیتال از MEMS-مغناطیسسنج — چیپ ۲×۲ میلیمتری که میدان مغناطیسی زمین را در سه محور اندازهگیری میکند — استفاده میکند. دادههای مغناطیسسنج با قرائتهای شتابسنج برای تعیین آزیموت — زاویه بین جهت شمال و جهتگیری دستگاه — ترکیب میشوند.
قرائتهای نادرست قطبنما اغلب به دلیل نبود کالیبراسیون، تداخل مغناطیسی از بلندگوها یا موتور ویبره و همچنین قابهای مغناطیسی ایجاد میشود. راهحل — کالیبراسیون با حرکت «عدد ۸» یا حذف لوازم جانبی مغناطیسی. در صورت خطاهای مداوم ممکن است بررسی حسگر لازم باشد.
بله، کالیبراسیون قطبنما برای جبران میدانهای مغناطیسی مزاحم داخل گوشی هوشمند ضروری است. در اکثر دستگاههای مدرن، کالیبراسیون به طور خودکار در پسزمینه انجام میشود. برای کالیبراسیون دستی، با گوشی هوشمند «عدد ۸» را در هوا بکشید — سیستم دادهها را از همه زوایا جمعآوری کرده و قرائتها را تصحیح میکند.
در اندروید دسترسی به قطبنما از طریق Sensor API با سنسور TYPE_MAGNETIC_FIELD انجام میشود. آزیموت از طریق SensorManager.getRotationMatrix() و getOrientation() محاسبه میشود که دادههای مغناطیسسنج و شتابسنج را ترکیب میکنند. آزیموت به دست آمده را میتوان برای نمایش روی صفحه تطبیق داد.
دقیقترین قطبنماها در گوشیهای هوشمند با حسگر سهگانه IMU (مغناطیسسنج + ژیروسکوپ + شتابسنج) و سیستم کالیبراسیون فعال نصب شدهاند. پرچمداران Google Pixel، Samsung Galaxy سری S و iPhone Pro — آنها از مغناطیسسنجهای AKM و Bosch با حساسیت ۰.۳ µT و تصحیح خودکار استفاده میکنند.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید