موبائل آلات میں ایکسلرومیٹر ایک MEMS سینسر ہے جو آلے کی سمت اور حرکت کا تعین کرنے کے لیے تین محاسون پر لینیر ایکسلریشن ناپتا ہے۔ Google Android Sensors Guide (2025) کے مطابق، ایکسلرومیٹر موبائل ایپلیکیشنز میں سب سے زیادہ استعمال ہونے والا سینسر ہے۔ MEMS ٹیکنالوجی سینسر کو 1 ملیمیٹر کے چپ میں رکھنے کی اجازت دیتی ہے جو 1 mW سے کم بجلی استعمال کرتا ہے۔
اہم نکات
ایکسلرومیٹر ایک مائیکروالیکٹرومیکانیکل (MEMS) سینسر ہے جو تین باہمی عمودی محاسون پر ایکسلریشن کے پروجیکشن کو ناپتا ہے: X (افقی، دائیں جانب)، Y (عمودی، اوپر کی جانب) اور Z (سکرین کے جہاز پر عمودی)۔ آرام کی حالت میں، ایکسلرومیٹر Z محور پر 9.8 m/s² دکھاتا ہے — یہ زمین کے مرکز کی جانب رخت کشش ثقل کا ایکسلریشن ہے۔ اس قیمت کی بنیاد پر، سسٹم آلے کی سمت متعین کرتا ہے: اگر Z کی قیمت 0 کے قریب ہو اور Y کی قیمت -9.8 m/s² کے قریب ہو، تو آلا افقی طور پر گھوما ہوتا ہے۔ ایکسلرومیٹر کی پیمائش کی حد چپ ماڈل کے مطابق عموماً ±2g، ±4g، ±8g یا ±16g ہوتی ہے۔
جدید ایکسلرومیٹر کائی اہم پیرامیٹرز سے پہچانے جاتے ہیں: حساسیت (0.001 m/s² سے)، سیمپلنگ ریٹ (1000 Hz تک)، پیمائش کی حد اور شور کی سطح۔ فلیگ شپ آلات 1600 Hz تک کی فرائینسی اور فعال موڈ میں 0.5 mW سے کم بجلی کی کھپت کے ساتھ STMicroelectronics LSM6DSO یا Bosch BMI270 سینسر استعمال کرتے ہیں۔ سیمپلنگ ریٹ جتنی زیادہ ہوگی، ایپلیکیشن کو اتنا ہی مفصل سگنل ملے گا — گیمز کو 200–400 Hz کی ضرورت ہوتی ہے، جبکہ قدموں کی گینتی کے لیے 10–50 Hz کافی ہے۔ سینسر کا شور پیمائش کی درستی کو متاثر کرتا ہے اور عاموراً OS کی سطح پر لو-پاس فلٹر سے تلافی کی جاتی ہے۔
ایک MEMS ایکسلرومیٹر اندرونی طور پر سیلیکون کے ایک خوردبین ڍانچے پر مشتمل ہے: ایک پروف ماس جو مقرر الیکٹروڈز کے درمیان لچیلے کنٹی لیورز پر لٹکا ہوتا ہے۔ جب ایکسلریشن ہوتی ہے، ماس حرکت کرتا ہے، حرکت پذیر اور مقرر عناصر کے درمیان کیپیسٹینس بدلتا ہے — اس تبدیلی کو ناپا جاتا ہے اور ایک برقی سگنل میں تبدیل کیا جاتا ہے۔ ایک بند-لوپ فیڈبیک سرکٹ الیکٹرواسٹیٹک قوت کا استعمال کرکے ماس کو مرکزی پوزیشن میں رکھتا ہے، پورے رینج میں لینیاٹی کو یقینی بناتا ہے۔ کھلے-لوپ سسٹمز میں، ماس آزادانہ حرکت کرتا ہے، حساب سادہ ہیں لیکن درستی کم ہوتی ہے۔ STMicroelectronics (2025) کے مطابق، بند-لوپ ایکسلرومیٹر 0.1 mg/°C سے کم درجہ حرارت کے دھرا کے ساتھ 0.001g تک کی درستی حاصل کرتے ہیں۔
ایکسلرومیٹر کے تین محاسور تین مکانی جہتوں کے مطابق ہیں: X (بائیں-دائیں جھکاو)، Y (اوپر-نیچے) اور Z (سکرین کے نسبت آگے-پیچھے)۔ جب آلا سکرین اوپر کرکے میز پر پڑا ہوتا ہے، کشش ثقل کا ایکسلریشن ویکٹر Z محور پر 9.8 m/s² پر ہوتا ہے۔ جب آلا جھکایا جاتا ہے، کشش ثقل کے پروجیکشنز محاسور کے درمیان تقسیم ہو جاتے ہیں — ان پروجیکشنز سے، 0.1 ڈگری تک کی درستی سے جھکاو کا زاویہ لگایا جا سکتا ہے۔ کشش ثقل کے اثر کے بغیر حرکت کا پتہ لگانے کے لیے، ایک ہائی-پاس فلٹر استعمال کیا جاتا ہے جو ایکسلریشن کے متحرک جزو (آلے کی اپنی حرکت) کو مادم جزو (کشش ثقل) سے جدا کرتا ہے۔
Android پر، ایکسلرومیٹر تک رسائی SensorManager کلاس اور SensorEventListener انٹرفیس کے ذریعے فراہم کی جاتی ہے۔ ایپلیکیشن SENSOR_SERVICE سسٹم سروس حاصل کرتی ہے، TYPE_ACCELEROMETER سینسر کا مطالبہ کرتی ہے، اور ایک متعین اپڈیٹ ریٹ کے ساتھ ایک سننے والا رجسٹر کرتا ہے۔ سسٹم اقدار کی ایک ایرے کے ساتھ ہر نئی پیمائش کے ساتھ onSensorChanged کو کال کرتا ہے: values[0] = X، values[1] = Y، values[2] = Z۔ ذیل میں Kotlin میں ایکسلرومیٹر ڈیٹا پڑھنے کی ایک مکمل مثال ہے۔
val sensorManager = getSystemService(SENSOR_SERVICE) as SensorManager
val accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
val sensorEventListener = object : SensorEventListener {
override fun onSensorChanged(event: SensorEvent) {
val x = event.values[0]
val y = event.values[1]
val z = event.values[2]
// جھکاو زاویہ لگانا
val pitch = Math.atan2(
x.toDouble(),
Math.sqrt(y.toDouble() * y + z.toDouble() * z)
)
// نئے زاویہ کے ساتھ UI اپڈیٹ کرنا
textViewAngle.text = "جھکاؤ: ${Math.toDegrees(pitch)}°"
}
override fun onAccuracyChanged(
sensor: Sensor, accuracy: Int
) { }
}
sensorManager.registerListener(
sensorEventListener,
accelerometer,
SensorManager.SENSOR_DELAY_GAME
)
مثال میں، SensorManager.SENSOR_DELAY_GAME اپڈیٹ ریٹ کو ~50 Hz پر مقرر کرتا ہے، جو گیمز اور انٹریکٹو ایپلیکیشنز کے لیے موزوں ہے۔ قدموں کی گینتی کے لیے، SENSOR_DELAY_NORMAL (~5 Hz) استعمال کریں؛ درست پیمائش کے لیے، SENSOR_DELAY_FASTEST (~200 Hz) استعمال کریں۔ onSensorChanged میں، event.values ایرے میں موجودہ سینسر ریڈنگز ہوتی ہیں۔ X، Y، Z قیمتوں کی بنیاد پر، atan2 کا استعمال کرکے جھکاو زاویہ لگایا جاتا ہے — یہ واقفیت سینسر کا استعمال کیے بغیر آلے کی سمت متعین کرنے کا بنیادی فارمولا ہے۔ بیٹری بچانے کے لیے onPause میں سننے والے کو ان رجسٹر کرنا نہ بہولیں۔
private val alpha = 0.8f
private val gravity = FloatArray(3)
private val linearAcceleration = FloatArray(3)
override fun onSensorChanged(event: SensorEvent) {
// کشش ثقل نکالنے کے لیے لو-پاس فلٹر (LPF)
gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0]
gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1]
gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2]
// کشش ثقل منہا کرنا — لینیر ایکسیلریشن حاصل کرنا
linearAcceleration[0] = event.values[0] - gravity[0]
linearAcceleration[1] = event.values[1] - gravity[1]
linearAcceleration[2] = event.values[2] - gravity[2]
}
گانانگ alpha کے ساتھ ایک لو-پاس فلٹر کشش ثقل کے جزو (مادم ویکٹر) کو نکالتا ہے؛ اسے منہا کرنے سے آلے کی خالص ایکسلریشن (لینیر ایکسلریشن) ملتی ہے۔ سمت کو مدنظر رکھتے حوئے حرکت کا پتہ لگانے کے لیے یہ ضروری ہے — مثالاً، ایک قدم، جھٹکا یا صدمہ کا پتہ لگانا۔ alpha کی قیمت 0.8 کا مطلب ہے کہ فلٹر تقریباً 20% نئے سگنل کو گزارتا ہے اور 80% پچھلے کو برقرار رکھتا ہے — بدیر تاخیر کے بغیر شور ختم کرنے کے لیے کافی ہے۔
iOS پر، ایکسلرومیٹر تک رسائی Core Motion فریمورک کے CMMotionManager کلاس کے ذریعے فراہم کی جاتی ہے۔ ایپلیکیشن ایک مینیجر انسٹینس بناتی ہے اور ایک کیو اور ہینڈلر کے ساتھ startAccelerometerUpdates کو کال کرتی ہے۔ ڈیٹا CMAccelerometerData کے طور پر واپس کیا جاتا ہے، جس میں x، y اور z فیلڈز کے ساتھ ایک CMAcceleration سٹرکچر ہوتا ہے۔ ذیل میں شور فلٹرنگ کے ساتھ Swift میں ایکسلرومیٹر ڈیٹا حاصل کرنے کی ایک مثال ہے۔
import CoreMotion
let motionManager = CMMotionManager()
motionManager.accelerometerUpdateInterval = 1.0 / 60.0
guard motionManager.isAccelerometerAvailable else { return }
motionManager.startAccelerometerUpdates(to: OperationQueue.current!) {
data, error in
guard let acceleration = data?.acceleration,
error == nil else { return }
// g میں قیمتیں (1 g = 9.8 m/s²)
let magnitude = sqrt(
acceleration.x * acceleration.x +
acceleration.y * acceleration.y +
acceleration.z * acceleration.z
)
// اگر magnitude > 2.5 g — جھٹڧا پایا گیا
if magnitude > 2.5 {
DispatchQueue.main.async {
self.handleShake()
}
}
}
مثال میں، accelerometerUpdateInterval کو 1/60 سیکنڈ (~60 Hz) پر مقرر کیا جاتا ہے — ہموار اینیمیشن اور گیمز کے لیے موزوں۔ isAccelerometerAvailable میتھڈ چیک کرتا ہے کہ سینسر آلے پر موجود ہے یا نہیں۔ ایکسلریشن کی قیمتیں g یکائیوں میں واپس کی جاتی ہیں (1 g = 9.8 m/s²)۔ magnitude ویکٹر کو تین اجزاء کے یوکلڈین نارم کے طور پر لگایا جاتا ہے — اگر قیمت 2.5 g سے تجاوز کرتی ہے، تو اسے آلے کا جھٹکا سمجھا جاتا ہے۔ اپڈیٹز روکنے کے لیے، اسکرین سے نکلتے وقت ہمیشہ stopAccelerometerUpdates کو کال کریں۔
ایکسلرومیٹر موبائل ایپلیکیشنز کی ایک وسیع رینج میں استعمال ہوتا ہے۔ سب سے واضح منظر خودکار سکرین گھماؤ ہے: سسٹم ایکسلرومیٹر ڈیٹا کی بنیاد پر پورٹریٹ اور لینڈسکیپ کے درمیان سوئچ کرتا ہے۔ گیمز میں، ایکسلرومیٹر ایک کنٹرول انپٹ کے طور پر کام کرتا ہے — آلے کو جھکانے سے اسٹیارنگ ویل گھومتا ہے یا کردار حرکت کرتا ہے۔ فٹنس ایپلیکیشنز چلنے کے دوران خصوصی ایکسلریشن پیکس کی بنیاد پر قدموں کی گینتی کرتی ہیں۔ ذیل میں معیاری مناظر اور سینسر کی ضروریات کی ایک تیارہ ہے۔
| منظر | فرائینسی (Hz) | درستی | فلٹرنگ |
|---|---|---|---|
| خودکار سکرین گھماؤ | 5–10 | کم | LPF |
| قدموں کی گینتی | 20–50 | درمیانہ | HPF + پیک ڈیٹیکٹر |
| گیمز (ریسنگ) | 50–200 | زیادہ | کیلیبریشن + LPF |
| کیمرا اسٹیبلائیزیشن | 200–1000 | زیادہ سے زیادہ | کمپلیمینٹری فلٹر |
| اشاروں کی پہچان | 50–100 | درمیانہ | HPF + حد ڈیٹیکٹر |
ایکسلرومیٹر کو نافذ کرتے وقت، یاد رکھیں کہ آلے کا گرم ہونا اور سینسر کی عمر پڑھنے کی درستی کو متاثر کر سکتی ہے۔ اہم پیمائشوں (ویڈیو اسٹیبلائیزیشن، قطب نما) کے لیے، سینسر فیوژن کے حصہ کے طور پر جائروسکوپ اور میگنیٹومیٹر بھی استعمال کرنے کی سفارش کی جاتی ہے۔
ایکسلرومیٹر کائی قسم کی خرابیوں کا شکار ہیں: صفر بائیس — جب سینسر آرام میں غیر صفری قیمت دکھاتا ہے؛ پیمانہ کا عامل خرابی — جب محاسور کے درمیان حساسیت میں فرق ہو؛ اور پیمائش کا شور، جو ایک بار پڑھنے کی درستی کو کم کرتا ہے۔ MEMS سینسر تیاری کے دوران کیلیبریڈ کیے جاتے ہیں، لیکن وقت گزرنے کے ساتھ درجہ حرارت اور میکانیکی دباؤ کی وجہ سے پیرامیٹر بہک سکتے ہیں۔ ایپلیکیشن میں تلافی کے لیے، ایک سادہ کیلیبریشن نافذ کیا جا سکتا ہے: آرام میں، اوسط قیمت (بائیس) رکارڈ کریں اور اسے بعد کی سب پیمائشوں سے منہا کریں۔ زیادہ درست کیلیبریشن کے لیے آلے کو سب محاسور پر گھمانا پڑتا ہے — اس طریقے کو چھ نکاتی کیلیبریشن کہا جاتا ہے اور یہ 0.5% سے کم خرابی حاصل کرتا ہے۔
اکثر پوچھے جانے والے سوالات
ایکسلرومیٹر ایک سمارٹ فون میں تقریباً 1 ملیمیٹر کا ایک MEMS سینسر ہے جو تین محاسور پر ایکسلریشن ناپتا ہے۔ یہ بیرونی ذرائع کا استعمال کیے آلے کی سمت (پورٹریٹ یا لینڈسکیپ)، جھٹکے، قدم اور حرکت کا پتہ لگاتا ہے۔
ایکسلرومیٹر لینیر ایکسلریشن (کشش ثقل سمیت) ناپتا ہے، جبکہ جائروسکوپ زاویہ سرعت (گھماؤ) ناپتا ہے۔ ایکسلرومیٹر سمت متعین کرتا ہے؛ جائروسکوپ گھماؤ کا پتہ لگاتا ہے۔ اکٹھے وہ خلا میں درست حرکت کا پتہ لگانا (سینسر فیوژن) فراہم کرتے ہیں۔
سینسر حاصل کرنے کے لیے SensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) استعمال کریں، پھر SensorEventListener کے ساتھ registerListener کریں۔ onSensorChanged میں، event.values ایرے میں X، Y، Z کی قیمتیں m/s² میں ہوتی ہیں۔ onPause میں ہمیشہ رجسٹریشن منسوخ کریں۔
magnitude = sqrt(x² + y² + z²) لگائیں۔ اگر قیمت 2–3 g (کشش ثقل کی فلٹرنگ کے بعد) سے تجاوز کرتی ہے، تو آلا جھٹکا گیا ہے۔ iOS پر، 2.5 g کی حد کے ساتھ CMMotionManager استعمال کریں؛ Android پر، 15 m/s² کی حد کے ساتھ Sensor.TYPE_LINEAR_ACCELERATION استعمال کریں۔
جی ہاں، ایک سادہ کیلیبریشن کے لیے، آلے کو ایک ہموار سطح پر رکھیں، 2–3 سیکنڈ کے لیے ہر محور کی اوسط قیمتیں رکارڈ کریں اور ان قیمتوں کو بعد کی سب پیمائشوں سے منہا کریں۔ یہ صفر بائیس کی تلافی کرتا ہے لیکن پیمانہ کی خرابی کی نہیں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں