مقياس التسارع في تطبيقات الهواتف المحمولة: ما هو، كيف يعمل وأين يستخدم

المؤلف: IT Sectr نُشر: 2026-03-22 وقت القراءة: 9 دق

مقياس التسارع في الأجهزة المحمولة هو مستشعر MEMS يقيس التسارع الخطي على ثلاثة محاور لتحديد اتجاه الجهاز وحركته. وفقًا لـ دليل مستشعرات Android من Google (2025)، يعتبر مقياس التسارع أكثر المستشعرات استخدامًا في التطبيقات المحمولة. تسمح تقنية MEMS بوضع المستشعر في شريحة بحجم 1 مم تستهلك أقل من 1 ميلي وات من الطاقة.

النقاط الرئيسية

  • مقياس التسارع — مستشعر MEMS يقيس التسارع على المحاور X، Y و Z بوحدات متر/ثانية² أو g.
  • مبدأ العمل يعتمد على إزاحة كتلة مجهرية تحت تأثير التسارع، يتم الكشف عنها بواسطة مستشعرات سعة.
  • Android يوفر الوصول عبر SensorManager و SensorEventListener.
  • iOS يستخدم CoreMotion مع CMMotionManager للحصول على بيانات مقياس التسارع.
  • التطبيقات — تحديد اتجاه الشاشة، عد الخطوات، الألعاب، تثبيت الصورة.

ما هو مقياس التسارع

مقياس التسارع هو مستشعر كهروميكانيكي دقيق (MEMS) يقيس إسقاط التسارع على ثلاثة محاور متعامدة: X (أفقي، متجه لليمين)، Y (رأسي، متجه للأعلى) و Z (عمودي على سطح الشاشة). في حالة السكون، يظهر مقياس التسارع قيمة 9.8 متر/ثانية² على المحور Z — هذه هي تسارع الجاذبية الموجهة نحو مركز الأرض. بناءً على هذه القيمة، يحدد النظام اتجاه الجهاز: إذا كانت قيمة Z قريبة من 0 وقيمة Y قريبة من -9.8 متر/ثانية²، فإن الجهاز مدور أفقيًا. يتراوح نطاق قياس مقياس التسارع عادةً بين ±2g، ±4g، ±8g أو ±16g حسب طراز الشريحة.

المعامل الفيزيائية لمقياس التسارع

تتميز مقاييس التسارع الحديثة بعدة معامل رئيسية: الحساسية (من 0.001 متر/ثانية²)، معدل أخذ العينات (حتى 1000 هرتز)، نطاق القياس ومستوى الضوضاء. تستخدم الأجهزة المتميزة مستشعرات STMicroelectronics LSM6DSO أو Bosch BMI270 بتردد يصل إلى 1600 هرتز واستهلاك أقل من 0.5 ميلي وات في الوضع النشط. كلما زاد معدل أخذ العينات، كلما كانت الإشارة التي يتلقاها التطبيق أكثر تفصيلًا — تتطلب الألعاب 200–400 هرتز، بينما يحتاج عد الخطوات 10–50 هرتز فقط. يؤثر ضوضاء المستشعر على دقة القياسات ويتم تعويضه عادةً بمرشح تمرير المنخفض على مستوى نظام التشغيل.

مبدأ عمل مقياس التسارع

يتكون مقياس التسارع MEMS داخليًا من هيكل سيليكوني مجهري: كتلة اختبار معلقة على كابوليات مرنة بين أقطاب ثابتة. عند حدوث تسارع، تنزحرح الكتلة مُغيرة السعة بين العناصر المتحركة والثابتة — يتم قياس هذا التغير وتحويله إلى إشارة كهربائية. يحافظ دارة تغذية مرتدة مغلقة على الكتلة في وضع المركز باستخدام القوة الكهروستاتيكية، مما يضمن الخطية عبر النطاق كاملًا. في الأنظمة مفتوحة الحلقة، تتحرك الكتلة بحرية، مما يجعل الحسابات أبسط ولكن الدقة أقل. وفقًا لشركة STMicroelectronics (2025)، تحقق مقاييس التسارع مغلقة الحلقة دقة تصل إلى 0.001g مع انحراف حراري أقل من 0.1 مليغرام/°م.

محاور القياس

تتوافق المحاور الثلاثة لمقياس التسارع مع ثلاثة أبعاد مكانية: X (إمالة يمنة-يسرة)، Y (أعلى-أسفل) و Z (أمام-خلف بالنسبة للشاشة). عندما يكون الجهاز موضوعًا على طاولة والشاشة للأعلى، يتجه متجه تسارع الجاذبية على المحور Z بقيمة 9.8 متر/ثانية². عند إمالة الجهاز، تتوزع إسقاطات الجاذبية بين المحاور — من هذه الإسقاطات يمكن حساب زاوية الإمالة بدقة تصل إلى 0.1 درجة. لكشف الحركة بدون تأثير الجاذبية، يتم استخدام مرشح تمرير عالي لفصل المركب الديناميكي للتسارع (حركة الجهاز نفسه) من المركب الثابت (الجاذبية).

الحصول على بيانات مقياس التسارع في Android

في Android، يتم الوصول إلى مقياس التسارع من خلال فئة SensorManager وواجهة SensorEventListener. تحصل التطبيق على خدمة النظام SENSOR_SERVICE، تطلب المستشعر TYPE_ACCELEROMETER وتسجل مستمعًا بمعدل تحديث محدد. يستدعي النظام onSensorChanged مع كل قياس جديد، موفرًا مصفوفة من القيم: values[0] = X، values[1] = Y، values[2] = Z. أدناه مثال كامل لقراءة بيانات مقياس التسارع بلغة Kotlin.

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)
        )
        // تحديث واجهة المستخدم بالزاوية الجديدة
        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 هرتز، وهو الأمثل للألعاب والتطبيقات التفاعلية. لعد الخطوات، استخدم SENSOR_DELAY_NORMAL (~5 هرتز)؛ للقياسات الدقيقة، استخدم SENSOR_DELAY_FASTEST (~200 هرتز). في onSensorChanged، يحتوي مصفوف event.values على قراءات المستشعر الحالية. بناءً على قيم X، Y، Z، يتم حساب زاوية الإمالة باستخدام atan2 — هذه هي الصيغة الأساسية لتحديد اتجاه الجهاز بدون استخدام مستشعر الاتجاه. تذكر إلغاء تسجيل المستمع في onPause للحفاظ على عمر البطارية.

تصفية الضوضاء

kotlin
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

في iOS، يوفر إطار Core Motion الوصول إلى مقياس التسارع من خلال فئة CMMotionManager. تقوم التطبيق بإنشاء مثال مدير وتستدعي startAccelerometerUpdates مع طابور ومعالج. تعاد البيانات كـ CMAccelerometerData، وهي تحتوي على هيكل CMAcceleration مع حقول x، y و z. أدناه مثال للحصول على بيانات مقياس التسارع في Swift مع تصفية الضوضاء.

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 متر/ثانية²)
    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 هرتز) — وهو الأمثل للرسوم المتحركة السلسة والألعاب. يتحقق الملفوظ isAccelerometerAvailable من توافر المستشعر على الجهاز. تعاد قيم التسارع بوحدات g (حيث 1 g = 9.8 متر/ثانية²). يتم حساب متجه magnitude كقاعدة إيقليدية للمركبات الثلاثة — إذا تجاوزت القيمة 2.5 g، يتم تفسيرها كهز للجهاز. لإيقاف التحديثات، استدع دائمًا stopAccelerometerUpdates عند مغادرة الشاشة.

حالات الاستخدام

يستخدم مقياس التسارع في مجموعة واسعة من التطبيقات المحمولة. أكثر السيناريوهات وضوحًا هو التدوير التلقائي للشاشة: يبدل النظام بين الوضع العمودي والأفقي استنادًا إلى بيانات مقياس التسارع. في الألعاب، يعمل مقياس التسارع كمدخل تحكم — إمالة الجهاز تدير عجلة القيادة أو تحرك الشخصية. تقوم تطبيقات اللياقة البدنية بعد الخطوات بناءً على قمم التسارع المميزة أثناء المشي. أدناه جدول بالسيناريوهات النموذجية ومتطلبات المستشعر.

السيناريوالتردد (هرتز)الدقةالتصفية
التدوير التلقائي للشاشة5–10منخفضةLPF
عد الخطوات20–50متوسطةHPF + كاشف القمم
الألعاب (سباق)50–200عاليةالمعايرة + LPF
تثبيت الكاميرا200–1000قصوىمرشح تكاملي
تعرف الإيماءات50–100متوسطةHPF + كاشف العتبة

عند تطبيق مقياس التسارع، ضع في اعتبارك أن تسخين الجهاز وتقدم المستشعر يمكن أن يؤثرا على دقة القراءات. بالنسبة للقياسات الحرجة (ثبات الفيديو، البوصلة)، يوصى باستخدام الجيروسكوب ومقياس المغناطيسية أيضًا كجزء من دمج المستشعرات.

المعايرة والأخطاء

تتعرض مقاييس التسارع لعدة أنواع من الأخطاء: انحراف الصفر — عندما يظهر المستشعر قيمة غير صفرية في حالة السكون؛ خطأ عامل القياس — عندما تختلف الحساسية بين المحاور؛ وضوضاء القياس، مما يقلل دقة القراءة الواحدة. تتم معايرة مستشعرات MEMS أثناء التصنيع، ولكن بمرور الوقت قد تنحرف المعامل بسبب الحرارة والإجهاد الميكانيكي. للتعويض في التطبيق، يمكن تنفيذ معايرة بسيطة: في حالة السكون، سجل متوسط القيمة (الانحراف) واطرحه من جميع القياسات اللاحقة. تتطلب المعايرة الأكثر دقة تدوير الجهاز على جميع المحاور — يطلق على هذه الطريقة اسم معايرة ست نقاط وتحقق خطأ أقل من 0.5%.

الأسئلة الشائعة

ما هو مقياس التسارع في الهاتف؟

مقياس التسارع في الهاتف الذكي هو مستشعر MEMS بحجم حوالي 1 مم يقيس التسارع على ثلاثة محاور. يحدد اتجاه الجهاز (عمودي أو أفقي)، والهز، والخطوات والحركة دون استخدام مصادر خارجية.

ما الفرق بين مقياس التسارع وجيروسكوب؟

يقيس مقياس التسارع التسارع الخطي (بما في ذلك الجاذبية)، بينما يقيس الجيروسكوب السرعة الزاوية (الدوران). يحدد مقياس التسارع الاتجاه، ويكتشف الجيروسكوب الدوران. معًا، يوفران تتبعًا دقيقًا للحركة في الفضاء (دمج المستشعرات).

كيف أحصل على بيانات مقياس التسارع في Android؟

استخدم SensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) للحصول على المستشعر، ثم registerListener مع SensorEventListener. في onSensorChanged، يحتوي مصفوف event.values على القيم X، Y، Z بوحدات متر/ثانية². ألغ التسجيل دائمًا في onPause.

كيف أكتشف هز الجهاز؟

احسب magnitude = sqrt(x² + y² + z²). إذا تجاوزت القيمة 2–3 g (بعد تصفية الجاذبية)، فقد تم هز الجهاز. في iOS، استخدم CMMotionManager بعتبة 2.5 g؛ في Android، استخدم Sensor.TYPE_LINEAR_ACCELERATION بعتبة 15 متر/ثانية².

هل يمكن معايرة مقياس التسارع برمجيًا؟

نعم، للحصول على معايرة بسيطة ضع الجهاز على سطح مستوٍ، سجل متوسط القراءات لكل محور لمدة 2–3 ثانية، واطرح هذه القيم من جميع القياسات اللاحقة. يعوض ذلك انحراف الصفر ولكن لا يعوض خطأ القياس.

الملخص

  • مقياس التسارع — مستشعر MEMS لقياس التسارع على المحاور X، Y، Z، يعتمد على إزاحة كتلة مجهرية.
  • مبدأ العمل — MEMS سعي مع تغذية مرتدة مغلقة، دقة تصل إلى 0.001g.
  • Android يوفر SensorManager مع TYPE_ACCELEROMETER و SensorEventListener للوصول إلى البيانات.
  • iOS يستخدم Core Motion مع CMMotionManager و startAccelerometerUpdates للحصول على البيانات.
  • التصفية — مرشح تمرير منخفض للجاذبية ومرشح تمرير عالٍ للتسارع الخطي.
  • التطبيقات — التدوير التلقائي للشاشة، عد الخطوات، الألعاب، التثبيت وتعرف الإيماءات.
  • توصية — اختر معدل التحديث حسب السيناريو: 20–50 هرتز للخطوات، 50–200 هرتز للألعاب، 200–1000 هرتز للتثبيت.

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا