رایجترین محرکهای لرزش در دستگاههای Android محرکهای رزونانس خطی (LRAs) هستند. «منطقههای پاسخدهی محلی» احساس کلیک دکمه را در سطحی شیشهای که درغیراینصورت پاسخگو نیست شبیهسازی میکنند. سیگنال بازخورد کلیک واضح و شفاف معمولاً بین ۱۰ تا ۲۰ میلیثانیه طول میکشد. این حس باعث میشود تعاملات کاربر طبیعیتر بهنظر برسد. برای صفحهکلیدهای مجازی، این بازخورد کلیک میتواند سرعت تایپ را افزایش دهد و خطاها را کاهش دهد.
«محرکهای خطی تشدیدی» چند بسامد تشدیدی رایج دارند:
- برخیاز «عملگرهای خطی تشدیدشونده» در محدوده ۲۰۰ تا ۳۰۰ هرتز فرکانس تشدیدشونده داشتند که با فرکانسی که پوست انسان بیشترین حساسیت را به لرزش دارد همزمان است. احساس لرزش در این محدوده فرکانسی معمولاً بهصورت نرم، تیز، و نافذ توصیف میشود.
- مدلهای دیگر بلندگوهای برد بلند فرکانسهای تشدید پایینتری در حدود ۱۵۰ هرتز دارند. حس بهدستآمده از آنها ازنظر کیفی نرمتر و کاملتر (در ابعاد) است.
با درنظر گرفتن ولتاژ ورودی یکسان در دو فرکانس مختلف، دامنههای خروجی لرزش میتواند متفاوت باشد. هرچه فرکانس از فرکانس تشدید LRA دورتر باشد، دامنه ارتعاش آن کمتر است.
جلوههای لمسی یک دستگاه معین از هر دو محرک لرزش و درایور آن استفاده میکنند. گردانندههای فناوری لمسی که شامل ویژگیهای «اَبَرگرداننده» و «ترمز فعال» هستند میتوانند زمان صعود و زنگ زدن «عملگرهای تشدید خطی» را کاهش دهند و درنتیجه لرزش پاسخگوتر و واضحتری ایجاد کنند.
شتاب برونداد لرزاننده
نگاشت بسامد به شتاب خروجی (FOAM) حداکثر شتاب خروجی قابلدستیابی (برحسب G peak) را در بسامد لرزش معین (برحسب هرتز) توصیف میکند. از Android 16 (سطح API 36) به بعد، پلاتفرم ازطریق VibratorFrequencyProfile از این نگاشت پشتیبانی داخلی ارائه میدهد. میتوانید از این کلاس، بههمراه میاناهای برنامهسازی کاربردی پاکت پایه و پیشرفته، برای ایجاد جلوههای لمسی استفاده کنید.
اکثر موتورهای LRA یک پیک در FOAM خود دارند که معمولاً نزدیک فرکانس تشدید آنها است. شتاب معمولاً با انحراف بسامد از این محدوده بهصورت نمایی کاهش مییابد. منحنی ممکن است متقارن نباشد و ممکن است در اطراف فرکانس تشدید دارای یک فلات باشد تا از آسیب دیدن موتور جلوگیری کند.
طرح مجاور نمونهای از FOAM برای موتور LRA را نشان میدهد.
آستانه تشخیص ادراک انسانی
آستانه تشخیص ادراک انسانی به حداقل شتاب لرزشی اشاره دارد که یک فرد میتواند بهطور قابلاعتمادی آن را تشخیص دهد. این سطح براساس فرکانس لرزش متفاوت است.
طرح مجاور آستانه تشخیص ادراک لمسی انسان را برحسب شتاب بهعنوان تابعی از بسامد زمانی نشان میدهد. دادههای آستانه از آستانه جابهجایی در «شکل ۱» از Bolanowski Jr. تبدیل شده است، S. مقاله ۱۹۸۸ جی. و همکاران، «چهار کانال جنبههای مکانیکی لمس را میانجیگری میکنند.».
Android بهطور خودکار این آستانه را در BasicEnvelopeBuilder مدیریت میکند،
که تأیید میکند همه جلوهها از محدوده فرکانسی استفاده میکنند که
دامنههای ارتعاشی تولید میکند که حداقل ۱۰ دسیبل از آستانه تشخیص ادراک انسانی فراتر میرود.
یک آموزش آنلاین تبدیل بین دامنه شتاب و دامنه جابجایی را بیشتر توضیح میدهد.
سطوح شتاب لرزش
درک انسان از شدت لرزش، یک معیار ادراکی، با دامنه لرزش، یک پارامتر فیزیکی، بهصورت خطی افزایش نمییابد. شدت درکشده با سطح احساس (SL) مشخص میشود که بهعنوان مقدار دسیبل بالاتر از آستانه تشخیص در همان فرکانس تعریف میشود.
دامنه شتاب لرزش مربوطه (برحسب G اوج) را میتوان بهصورت زیر محاسبه کرد:
…که در آن دامنه dB مجموع SL و آستانه تشخیص—مقدار در امتداد محور عمودی در طرح مجاور—در یک فرکانس خاص است.
طرح مجاور سطوح شتاب لرزش را در ۱۰، ۲۰، ۳۰، ۴۰، و ۵۰ دسیبل SL، همراه با آستانه تشخیص ادراک لمسی انسان (۰ دسیبل SL)، بهعنوان تابعی از بسامد زمانی نشان میدهد. دادهها از «شکل ۸» در Verrillo, R. تخمین زده شده است. مقاله ۱۹۶۹ تی. و همکاران، «بزرگی حس محرکهای لرزشی-لمسی».
Android بهطور خودکار این تبدیل را در BasicEnvelopeBuilder انجام میدهد،
که مقادیر را بهعنوان شدتهای نرمالشده در فضای سطح احساس (dB
SL) میگیرد و آنها را به شتاب خروجی تبدیل میکند. WaveformEnvelopeBuilder، از طرف دیگر، این تبدیل را اعمال نمیکند و بهجای آن مقادیر را بهعنوان دامنههای شتاب خروجی نرمالسازیشده در فضای شتاب (Gs) درنظر میگیرد. وقتی طراح یا توسعهدهندهای به تغییرات قدرت لرزش فکر میکند،
واسط برنامهسازی کاربردی پاکت فرض میکند که انتظار دارد شدت درکشده از پاکت خطی تکهتکه پیروی کند.
هموارسازی پیشفرض شکل موج در دستگاهها
برای نمونه، درنظر بگیرید که الگوی شکل موج سفارشی در دستگاه عمومی چگونه عمل میکند:
کاتلین
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))
جاوا
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));
طرحهای زیر شکل موج ورودی و شتاب خروجی مربوط به تکهکدهای قبلی را نشان میدهد. توجه داشته باشید که شتاب هرگاه تغییر گام در دامنه الگو وجود داشته باشد—یعنی در ۰ میلیثانیه، ۱۵۰ میلیثانیه، ۲۰۰ میلیثانیه، ۲۵۰ میلیثانیه، و ۷۰۰ میلیثانیه—بهتدریج افزایش مییابد، نه ناگهانی. همچنین در هر تغییر گام دامنه، جهش وجود دارد و زنگ زدن قابلمشاهدهای وجود دارد که وقتی دامنه ورودی بهطور ناگهانی به ۰ کاهش مییابد، حداقل ۵۰ میلیثانیه طول میکشد.
الگوی لمسی بهبودیافته
برای جلوگیری از جهش و کاهش زمان زنگ، دامنهها را بهتدریجتر تغییر دهید. در زیر نمودارهای شکل موج و شتاب نسخه اصلاحشده نشان داده شده است:
کاتلین
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 // Don't repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))
جاوا
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; // Don't repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));
ایجاد جلوههای لمسی پیچیدهتر
عناصر دیگر در پاسخ کلیک رضایتبخش پیچیدهتر هستند و به دانشی درباره LRA استفادهشده در دستگاه نیاز دارند. برای بهترین نتایج، از شکل موجهای پیشساخته دستگاه و ثابتهای ارائهشده توسط پلاتفرم استفاده کنید که به شما امکان میدهد موارد زیر را انجام دهید:
- جلوههای واضح و عناصر اولیه را اجرا کنید.
- آنها را بههم بچسبانید تا جلوههای لمسی جدیدی بسازید.
این ثابتها و عناصر اولیه لمسی ازپیشتعریفشده میتوانند سرعت کار شما را در حین ایجاد جلوههای لمسی با کیفیت بالا بهطور قابلتوجهی افزایش دهند.