مغناطیسسنج سنسوری است که شدت میدان مغناطیسی زمین را برای تعیین جهتهای جغرافیایی اندازهگیری میکند. در دستگاههای موبایل به عنوان قطبنمای دیجیتال کار میکند و با کالیبراسیون صحیح دقتی تا ۱–۲ درجه ارائه میدهد. به گفته Bosch Sensortec Application Note, 2024، MEMS-مغناطیسسنجهای مدرن تنها ۰.۵–۲ میلیآمپر مصرف میکنند و در بدنهای به ابعاد ۱.۵×۱.۵×۰.۷ میلیمتر جای میگیرند.
نکات کلیدی
مغناطیسسنج در دستگاه موبایل یک سنسور سهمحوره میدان مغناطیسی مبتنی بر اثر هال است. این سنسور بردار القای مغناطیسی را روی محورهای X، Y و Z اندازهگیری میکند. در ترکیب با شتابسنج، مغناطیسسنج امکان تعیین آزیموت — زاویه بین جهت شمال و محور گوشی — را فراهم میکند.
در گوشیهای هوشمند مدرن از MEMS-مغناطیسسنجهای مبتنی بر اثر مغناطومقاومتی ناهمسانگرد (AMR) و اثر هال استفاده میشود. سنسورهای AMR (سری AKM از Asahi Kasei Microdevices) حساسیت ۰.۱۵ µT/LSB و دامنه ±۱۲۰۰ µT را فراهم میکنند — این برای اندازهگیری میدان زمین (۲۵–۶۵ µT) کافی است.
| پارامتر | مقدار |
|---|---|
| فناوری | AMR / اثر هال |
| دامنه | ±۱۲۰۰ — ±۱۳۰۰ µT |
| مصرف انرژی | ۰.۵–۲ میلیآمپر |
| ابعاد | ۱.۵×۱.۵×۰.۷ میلیمتر |
| حساسیت | ۰.۱۵ µT/LSB |
بدون قطبنمای دیجیتال، برنامههای ناوبری نمیتوانند جهت حرکت را تعیین کنند. Google Maps از مغناطیسسنج برای نمایش جهت نقشه نسبت به جهت نگاه کاربر استفاده میکند. در صورت خرابی سنسور، برنامه فقط موقعیت روی نقشه را بدون فلش آبی جهت نشان میدهد.
اثر هال پدیده فیزیکی ایجاد اختلاف پتانسیل در لبههای یک صفحه رسانا تحت تأثیر میدان مغناطیسی است. در MEMS-مغناطیسسنجها از ساختارهای لایهنازک از پرمالوی (NiFe) استفاده میشود که مقاومت آنها تحت تأثیر میدان مغناطیسی خارجی تغییر میکند (اثر AMR).
هر یک از سه کانال (X، Y، Z) از چهار مقاومت مغناطیسی تشکیل شده است که در پل وتستون قرار گرفتهاند. میدان مغناطیسی مقاومت مقاومتها را ۲–۳٪ تغییر میدهد که توسط تقویتکننده تفاضلی به ولتاژ تبدیل میشود. مبدل آنالوگ به دیجیتال ۱۶ بیتی داخلی سیگنال را با فرکانس تا ۱۰۰ هرتز دیجیتالی میکند.
برای اندازهگیری مؤلفه عمودی میدان از متمرکزکننده یکپارچه شار مغناطیسی (IMC — Integrated Magnetic Concentrator) استفاده میشود. این یک ساختار لایهنازک از NiFe است که میدان افقی را به صفحه عمودی منحرف میکند و به پل AMR واحد امکان اندازهگیری هر سه محور را میدهد.
مغناطیسسنج جهتگیری را نسبت به میدان مغناطیسی زمین تعیین میکند (مرجع مطلق)، در حالی که ژیروسکوپ فقط تغییر زاویه را اندازهگیری میکند (دادههای نسبی). ژیروسکوپ در فواصل کوتاه دادههای دقیق ارائه میدهد اما خطای رانش را انباشته میکند. مغناطیسسنج رانش ندارد اما در معرض تداخلات مغناطیسی است.
اندروید دادههای سه سنسور را از طریق SensorManager.getRotationMatrix ترکیب میکند. از مغناطیسسنج برای تصحیح رانش ژیروسکوپ در بازههای طولانی استفاده میشود. بدون مغناطیسسنج، ژیروسکوپ در ۵ دقیقه خطایی تا ۱۰–۲۰ درجه انباشته میکند. به گفته Google ARCore (2024)، الگوریتم fusion با وجود مغناطیسسنج به دقت ۱–۳ درجه میرسد.
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] — آزیموت بر حسب رادیان
Hard Iron — میدان مغناطیسی ثابت ایجاد شده توسط مواد فرومغناطیسی داخل گوشی: آهنرباهای بلندگو، موتور ویبره، قاب فلزی بدنه. اعوجاج Hard Iron به صورت جابجایی ثابت (bias) در هر محور ظاهر میشود. Soft Iron — تغییر جهت میدان به دلیل مواد مغناطیسیپذیر که شکل خطوط میدان را مخدوش میکنند.
روش استاندارد کالیبراسیون مغناطیسسنج چرخاندن گوشی به شکل عدد ۸ (figure-8 pattern) است. در این فرآیند سنسور نقاطی را در فضای سهبعدی ثبت میکند. بدون اعوجاج، نقاط روی کرهای به شعاع ۲۵–۶۵ µT قرار میگیرند. Hard Iron مرکز کره را جابجا میکند، Soft Iron آن را به بیضیوار تبدیل میکند. الگوریتم کالیبراسیون پارامترهای جابجایی و مقیاسگذاری را محاسبه میکند.
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
)
}
توسعهدهنده میتواند با جمعآوری دادهها در حین حرکت دستگاه، کالیبراسیون مغناطیسسنج خود را پیادهسازی کند. الگوریتم برازش بیضیوار (ellipsoid fitting) پارامترهای Hard Iron و Soft Iron را با کمینهسازی مجموع مجذور انحرافات از کره پیدا میکند. کتابخانه Apache Commons Math پیادهسازی روش حداقل مربعات غیرخطی (Levenberg-Marquardt) را برای این کار ارائه میدهد — دقت پس از کالیبراسیون نرمافزاری به ۰.۵ درجه میرسد.
برای به حداقل رساندن Hard Iron، تولیدکنندگان مغناطیسسنج را در قسمت بالایی گوشی و دور از بلندگو و موتور ویبره قرار میدهند. مهندسان اپل در iPhone 16 Pro Max (2024) از محافظبندی مغناطیسسنج با فویل پرمالوی استفاده کردند که تأثیر بلندگو را ۴ برابر کاهش داد. در Samsung Galaxy S24 Ultra از یک مدار جبرانی اضافی استفاده شده است که جریان بلندگو را در زمان واقعی اندازهگیری میکند تا میدان القایی را حذف کند. قابهای دارای اتصالات مغناطیسی (مثلاً در نگهدارندههای خودرو) اعوجاجات شدیدی ایجاد میکنند — پس از استفاده، مغناطیسسنج ممکن است تا کالیبراسیون مجدد جهت نادرست نشان دهد.
اندروید دو سنسور ارائه میدهد: TYPE_MAGNETIC_FIELD (دادههای کالیبره شده بر حسب µT) و TYPE_MAGNETIC_FIELD_UNCALIBRATED (دادههای خام با تخمین اعوجاج). برای برنامههای ناوبری توصیه میشود از سنسور کالیبره شده استفاده کنید — سیستم به طور خودکار کالیبراسیون داخلی را بر اساس آخرین حرکت عدد ۸ اعمال میکند.
تأخیر SENSOR_DELAY_NORMAL (۲۰۰ میلیثانیه) برای قطبنما کافی است، SENSOR_DELAY_FASTEST (۰ میلیثانیه) — فقط برای برنامههای تحقیقاتی خاص. پس از دریافت مقادیر، میتوان آنها را از طریق 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 با دقت موقعیتیابی ۱۰–۲۰ متر را فراهم میکند. به گفته Google Maps Engineering Blog (2024)، الگوریتم ترکیبی درصد از دست رفتن مسیر در درههای شهری را ۴۰٪ کاهش میدهد.
برنامههای ناوبری از مغناطیسسنج برای تعیین آزیموت حرکت — زاویه بین جهت شمال و مسیر فعلی کاربر استفاده میکنند. در Google Maps، دادههای مغناطیسسنج با رد GPS و تاریخچه حرکات ترکیب میشوند تا فلش آبی جهت نمایش داده شود. هنگام از دست دادن سیگنال GPS (در تونلها، زیرگذرها)، مغناطیسسنج تنها منبع اطلاعات در مورد جهتگیری باقی میماند.
نسل جدید مغناطیسسنجهای ۳ محوره با ASIC یکپارچه (BMM350 از Bosch، ۲۰۲۴) تنها ۰.۳۵ میلیآمپر مصرف میکنند و از فرکانس تا ۲۰۰ هرتز پشتیبانی میکنند. توسعه مغناطیسسنجهای کوانتومی و مراکز NV در الماس برای دستگاههای موبایل هنوز از مرحله آزمایشهای آزمایشگاهی خارج نشده است. انتظار میرود تا سال ۲۰۲۸ دقت مغناطیسسنجهای موبایل به ۰.۰۱ µT برسد.
پرسشهای متداول
با گوشی در هوا عدد ۸ بکشید — این حرکت استاندارد برای کالیبره کردن قطبنمای دیجیتال است. اگر قطبنما همچنان نادرست نشان میدهد، قاب گوشی را بررسی کنید: اتصالات مغناطیسی و عناصر فلزی اعوجاجات شدید Hard Iron ایجاد میکنند.
دلایل اصلی: تداخلات مغناطیسی از بلندگوها و موتور ویبره گوشی، عدم کالیبراسیون پس از تعویض قاب، تأثیر اشیاء فلزی مجاور. در فضاهای دارای سازههای بتن مسلح، میدان مغناطیسی به شدت مخدوش میشود.
بله، برنامههای فلزیاب از مغناطیسسنج داخلی برای تشخیص ناهنجاریهای میدان مغناطیسی استفاده میکنند. با این حال، عمق تشخیص از ۱۰–۲۰ سانتیمتر تجاوز نمیکند و دستگاه انواع فلزات را تشخیص نمیدهد — این بیشتر یک ابزار آموزشی است.
TYPE_MAGNETIC_FIELD دادههای پس از کالیبراسیون اعمال شده توسط سیستم را برمیگرداند. TYPE_MAGNETIC_FIELD_UNCALIBRATED مقادیر خام به همراه تخمین جابجایی (bias) را ارائه میدهد و به توسعهدهنده امکان اعمال کالیبراسیون اختصاصی را میدهد.
از SensorManager.getRotationMatrix با دادههای شتابسنج و مغناطیسسنج استفاده کنید، سپس getOrientation — اولین عنصر آرایه (آزیموت) بر حسب رادیان خواهد بود. برای نمایش قطبنما به درجه تبدیل کنید: Math.toDegrees(azimuth).
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید