إنّ محرّكات الاهتزاز الأكثر شيوعًا على أجهزة Android هي محرّكات التردد التوافقي (LRA). تحاكي تقنية LRAs شعور النقر على زر على سطح زجاجي لا يستجيب. تستمر إشارة ردّ فعل اللمس النابضة الواضحة عادةً بين 10 و20 ملي ثانية. ويمنح هذا الشعور المستخدمين تجربة تفاعل أكثر طبيعية. بالنسبة إلى لوحات المفاتيح الافتراضية، يمكن أن تؤدي هذه الميزة إلى زيادة سرعة الكتابة والحد من الأخطاء.
تتضمّن خطوط النقل ذات الجهد المنخفض بعض الترددات الرنانة الشائعة:
- كانت بعض وحدات LRA ذات ترددات رنين تتراوح بين 200 و300 هرتز، وهو تردد يتزامن مع التردد الذي يكون فيه الجلد البشري الأكثر حساسية للاهتزازات. وعادةً ما يُوصف شعور الاهتزازات في نطاق التردد هذا بأنّه شعور سلس وحاد وثاقبة.
- تتميز الطُرز الأخرى من مكبّرات الصوت ذات الطاقة المنخفضة بمعدّلات رنين أقل، تبلغ 150 هرتز تقريبًا. ويُحسّ المستخدمون بأنّ الصوت أكثر ليونة وامتلاءً (من حيث الحجم).
في حال استخدام الجهد الكهربي نفسه عند ترددَين مختلفَين، يمكن أن تختلف amplitudes الناتجة عن الاهتزاز. وكلما ابتعد التردد عن التردّد المتوافق لملف اللفّ LRA، انخفضت شدة الاهتزاز.
تستخدم التأثيرات اللمسية لجهاز معيّن كلّ من محرّك الاهتزاز وسائقه. يمكن أن تقلل وحدات التحكّم باللمس التي تتضمّن ميزتَي "التسريع الفائق" و"التفرامل النشطة" من وقت الارتفاع والرنّان في محركات LRA، ما يؤدي إلى اهتزاز أكثر سرعة ووضوحًا.
تسريع ناتج أداة الاهتزاز
يصف ربط التردد بتسارع الإخراج (FOAM) الحد الأقصى
لتسارع الإخراج الذي يمكن تحقيقه (بوحدة G peak) عند تردد اهتزاز معيّن (بوحدة
هرتز). بدءًا من الإصدار 16 من Android (المستوى 36 من واجهة برمجة التطبيقات)، توفّر المنصة ميزة مدمجة ل
إتاحة هذا الربط من خلال VibratorFrequencyProfile
. يمكنك استخدام
هذه الفئة، بالإضافة إلى واجهات برمجة تطبيقات الحِزم الأساسية والمتقدّمة، لإنشاء أثر
لمسي.
تُظهر معظم محركات LRA ذروة واحدة في سعة التحميل القصوى، وعادةً ما تكون قريبة من تردد التوافقي. ينخفض التسارع بشكل عام بشكلٍ كبير مع انحراف معدّل التكرار عن هذا النطاق. قد لا يكون المنحنى متماثلاً وقد يعرض منصة حول التردد الرنان لحماية المحرّك من التلف.
تعرِض الرسمة المجاورة مثالاً على مخطط FOAM لمحرّك LRA.
حدّ رصد الإدراك البشري
يشير حدّ رصد الإدراك البشري إلى الحدّ الأدنى لتسارع الاهتزاز الذي يمكن لشخص رصده بشكل موثوق. يختلف هذا المستوى استنادًا إلى وتيرة الاهتزاز.
يعرض الرسم البياني المجاور حدّ رصد الإدراك الحسي لللمس لدى الإنسان، والذي يُقاس بالانطلاق، وذلك بصفتها دالةً للتردد الزمني. يتم تحويل بيانات الحدّ الأدنى من الإزاحة من الشكل 1 في Bolanowski Jr. S. مقالة J.، et al. لعام 1988، "تتوسّط أربع قنوات الجوانب الميكانيكية لللمس"
يعالج نظام التشغيل Android هذا الحدّ تلقائيًا في BasicEnvelopeBuilder
،
الذي يتحقق من أنّ جميع التأثيرات تستخدم نطاق تردد ينتج عنه اهتزازات
بأحجام تتجاوز الحدّ الأدنى لرصد الإدراك البشري بنحو
10 ديسيبل.
يوضّح الدليل التعليمي على الإنترنت المزيد من المعلومات حول التحويل بين amplitudeacceleration وamplitudedisplacement.
مستويات تسارع الاهتزاز
إنّ إدراك الإنسان لمستوى الاهتزاز، وهو مقياس إدراكي، لا يزداد بشكل خطي مع سعة الاهتزاز، وهي مَعلمة فيزيائية. تتميز الكثافة المتأثّرة بمستوى الإحساس (SL)، والذي يتم تعريفه على أنّه مقدار ديسيبل أعلى من حدّ الكشف عند التردد نفسه.
يمكن احتساب سعة تسارع الاهتزاز المقابلة (بوحدة ذروة G) على النحو التالي:
...حيث يكون مقدار الديسيبل هو مجموع SL وحدّ الكشف، أي القيمة على طول المحور العمودي في الرسم المجاور، عند تردد معيّن.
يعرض الرسم البياني المجاور مستويات تسارع الاهتزاز عند 10 و20 و30 و40 و 50 ديسيبل SL، بالإضافة إلى الحدّ الأدنى لرصد الإدراك الحسي للاهتزاز لدى الإنسان (0 ديسيبل SL)، باعتباره دالةً لمعدّل التكرار الزمني. تم تقدير البيانات من الشكل 8 في Verrillo, R. مقالة "Sensation magnitude of vibrotactile stimuli" التي نشرها "تي" وآخرون في عام 1969
يعالج Android هذا التحويل تلقائيًا في BasicEnvelopeBuilder
،
الذي يأخذ القيم على أنّها كثافات عادية في مساحة مستوى الإحساس (dB
SL) ويحوّلها إلى تسارع الإخراج. على صعيدٍ آخر، لا تطبِّق WaveformEnvelopeBuilder
هذه التحويلات وتأخذ القيم على أنّها ناتج إشارة تسارع موحَّدة
في مساحة التسارع (Gs) بدلاً من ذلك. تفترض واجهة برمجة التطبيقات
envelope API أنّ المصمّم أو المطوّر يتوقع أن تتّبع الكثافة المتأثّرة انحناءً خطيًا متقطعًا عند التفكير في التغييرات في
قوة الاهتزاز.
تمويه شكل الموجة التلقائي على الأجهزة
على سبيل المثال، نوضّح كيفية تصرف نمط موجي مخصّص على جهاز عام:
Kotlin
val timings: LongArray = longArrayOf(50, 50, 50, 50, 50, 100, 350, 250)
val amplitudes: IntArray = intArrayOf(77, 79, 84, 99, 143, 255, 0, 255)
val repeatIndex = -1 // Don't repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))
Java
long[] timings = new long[] { 50, 50, 50, 50, 50, 100, 350, 250 };
int[] amplitudes = new int[] { 77, 79, 84, 99, 143, 255, 0, 255 };
int repeatIndex = -1 // Don't repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));
تعرض الرسوم البيانية التالية شكل موجة الإدخال وتسريع الإخراج المرتبطَين بمقتطفات الرموز البرمجية السابقة. يُرجى العلم أنّ التسارع يزداد تدريجيًا وليس بشكل مفاجئ عند حدوث تغيير تدريجي في شدة التردد في النمط، أي عند 0 مللي ثانية و150 مللي ثانية و200 مللي ثانية و250 مللي ثانية و700 مللي ثانية. هناك أيضًا زيادة مفاجئة في كل خطوة من خطوات تغيير الشدة، وهناك رنين مرئي يستمر لمدة 50 ملي ثانية على الأقل عندما ينخفض حجم الإدخال فجأة إلى 0.
نمط لمسي محسَّن
لتجنُّب تجاوز الحد الأقصى وتقليل وقت الرنين، غيِّر النطاقات amplitude بشكلٍ أكثر تدريجيًا. يعرض ما يلي الرسم البياني لموجة الصوت ورسم التسارع للملف المعدَّل:
Kotlin
val timings: LongArray = longArrayOf(
25, 25, 50, 25, 25, 25, 25, 25, 25, 25, 75, 25, 25,
300, 25, 25, 150, 25, 25, 25
)
val amplitudes: IntArray = intArrayOf(
38, 77, 79, 84, 92, 99, 121, 143, 180, 217, 255, 170, 85,
0, 85, 170, 255, 170, 85, 0
)
val repeatIndex = -1 // Do not repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))
Java
long[] timings = new long[] {
25, 25, 50, 25, 25, 25, 25, 25, 25, 25, 75, 25, 25,
300, 25, 25, 150, 25, 25, 25
};
int[] amplitudes = new int[] {
38, 77, 79, 84, 92, 99, 121, 143, 180, 217, 255, 170, 85,
0, 85, 170, 255, 170, 85, 0
};
int repeatIndex = -1; // Do not repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));
إنشاء تأثيرات لمسية أكثر تعقيدًا
إنّ العناصر الأخرى في استجابة النقر المُرضية أكثر تعقيدًا، وتتطلّب بعض معرفة بوحدة LRA المستخدَمة في الجهاز. للحصول على أفضل النتائج، استخدِم موجات الجهد المُعدّة مسبقًا والثوابت المقدَّمة من النظام الأساسي على الجهاز، ما يتيح لك تنفيذ ما يلي:
- أن تُنشئ تأثيرات واضحة وأشكالًا أساسية
- يمكنك تسلسلها لإنشاء تأثيرات لمسية جديدة.
يمكن أن تسريع هذه العناصر الأساسية والثوابت المُحدَّدة مسبقًا لللمس عملك بشكل كبير أثناء إنشاء تأثيرات لمسية عالية الجودة.