رایج ترین محرک های ارتعاشی در دستگاه های اندرویدی ، محرک های تشدید خطی (LRAs) هستند. LRAها احساس کلیک روی یک دکمه را شبیه سازی می کنند که در غیر این صورت یک سطح شیشه ای بی پاسخ است. یک سیگنال بازخورد کلیک واضح و واضح معمولا بین 10 تا 20 میلی ثانیه طول می کشد. این حس باعث می شود که تعامل با کاربر طبیعی تر شود. برای صفحه کلیدهای مجازی، این بازخورد کلیک می تواند سرعت تایپ را افزایش داده و خطاها را کاهش دهد.
LRA ها دارای چند فرکانس تشدید مشترک هستند:
- برخی از LRAها دارای فرکانس تشدید در محدوده 200 تا 300 هرتز بودند که با فرکانسی که پوست انسان در آن بیشترین حساسیت را به ارتعاش دارد همزمان است. احساس ارتعاشات در این محدوده فرکانس معمولاً به صورت صاف، تیز و نافذ توصیف می شود.
- مدلهای دیگر LRA فرکانسهای تشدید پایینتری دارند، در حدود 150 هرتز. احساس از نظر کیفی نرمتر و پرتر (از نظر ابعاد) است.
با توجه به ولتاژ ورودی یکسان در دو فرکانس مختلف، دامنه خروجی ارتعاش می تواند متفاوت باشد. هر چه فرکانس از فرکانس تشدید LRA دورتر باشد، دامنه ارتعاش آن کمتر است.
جلوه های لمسی یک دستگاه خاص از محرک لرزش و درایور آن استفاده می کند. درایورهای هپتیک که شامل ویژگیهای ترمز بیش از حد و فعال هستند، میتوانند زمان خیز و زنگ LRA را کاهش دهند و منجر به لرزش واضحتر و واکنشپذیرتر شوند.
شتاب خروجی ویبراتور
نگاشت شتاب فرکانس به خروجی (FOAM) حداکثر شتاب خروجی قابل دستیابی (در پیک G) را در یک فرکانس ارتعاش معین (به هرتز) توصیف می کند. با شروع Android 16 (سطح API 36)، این پلتفرم از طریق VibratorFrequencyProfile
پشتیبانی داخلی برای این نقشه برداری ارائه می دهد. می توانید از این کلاس به همراه API های اولیه و پیشرفته envelope برای ایجاد جلوه های لمسی استفاده کنید.
اکثر موتورهای LRA دارای یک پیک واحد در فوم خود هستند که معمولاً نزدیک به فرکانس تشدیدشان است. به طور کلی با انحراف فرکانس از این محدوده، شتاب به طور تصاعدی کاهش می یابد. منحنی ممکن است متقارن نباشد و ممکن است دارای یک فلات در اطراف فرکانس تشدید برای محافظت از موتور در برابر آسیب باشد.
نمودار مجاور یک نمونه FOAM را برای یک موتور LRA نشان می دهد.
آستانه تشخیص ادراک انسانی
آستانه تشخیص ادراک انسانی به حداقل شتاب یک ارتعاش اشاره دارد که یک فرد می تواند به طور قابل اعتماد تشخیص دهد. این سطح بر اساس فرکانس ارتعاش متفاوت است.
نمودار مجاور آستانه تشخیص ادراک لمسی انسان را در شتاب به عنوان تابعی از فرکانس زمانی نشان می دهد. داده های آستانه از آستانه جابجایی در شکل 1 از مقاله Bolanowski Jr., SJ, et al. در سال 1988، "چهار کانال واسطه جنبه های مکانیکی لمس" است. .
Android بهطور خودکار این آستانه را در BasicEnvelopeBuilder
کنترل میکند، که تأیید میکند که همه افکتها از محدوده فرکانسی استفاده میکنند که دامنههای ارتعاشی را ایجاد میکند که حداقل ۱۰ دسیبل از آستانه تشخیص درک انسان فراتر میرود.
یک آموزش آنلاین تبدیل بین دامنه شتاب و دامنه جابجایی را بیشتر توضیح می دهد.
سطوح شتاب ارتعاش
درک انسان از شدت ارتعاش، یک معیار ادراک ، با دامنه ارتعاش، یک پارامتر فیزیکی ، به صورت خطی رشد نمی کند. شدت درک شده با سطح حس (SL) مشخص می شود که به عنوان مقدار دسی بل بالاتر از آستانه تشخیص در همان فرکانس تعریف می شود.
دامنه شتاب ارتعاش مربوطه (در پیک G) را می توان به صورت زیر محاسبه کرد:
... که در آن دامنه dB مجموع SL و آستانه تشخیص - مقدار در امتداد محور عمودی در نمودار مجاور - در یک فرکانس خاص است.
نمودار مجاور سطوح شتاب ارتعاش را در 10، 20، 30، 40 و 50 dB SL، همراه با آستانه تشخیص ادراک لمسی انسان (0dB SL)، به عنوان تابعی از فرکانس زمانی نشان می دهد. داده ها از شکل 8 در مقاله Verrillo، RT و همکاران در سال 1969، "قدرت حس محرک های ارتعاشی" برآورد شده است. .
Android بهطور خودکار این تبدیل را در BasicEnvelopeBuilder
انجام میدهد، که مقادیر را به صورت شدتهای عادی در فضای سطح حس (dB SL) میگیرد و آنها را به شتاب خروجی تبدیل میکند. از طرف دیگر، WaveformEnvelopeBuilder
این تبدیل را اعمال نمی کند و به جای آن مقادیر را به عنوان دامنه شتاب خروجی نرمال شده در فضای شتاب (Gs) می گیرد. Envelope API فرض میکند که وقتی یک طراح یا توسعهدهنده به تغییرات در قدرت ارتعاش فکر میکند، انتظار دارند که شدت درک شده از یک پوشش خطی تکهای پیروی کند.
هموارسازی شکل موج پیش فرض در دستگاه ها
برای مثال، نحوه رفتار یک الگوی شکل موج سفارشی در یک دستگاه عمومی را در نظر بگیرید:
کاتلین
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));
نمودارهای زیر شکل موج ورودی و شتاب خروجی مربوط به قطعه کد قبلی را نشان می دهد. توجه داشته باشید که شتاب به تدریج افزایش مییابد، نه ناگهانی، هر زمان که دامنه تغییر پلهای در الگو وجود دارد - یعنی در 0ms، 150ms، 200ms، 250ms و 700ms. همچنین در هر مرحله تغییر دامنه، یک افزایش بیش از حد وجود دارد و زمانی که دامنه ورودی ناگهان به 0 می رسد، زنگ قابل مشاهده ای وجود دارد که حداقل 50 میلی ثانیه طول می کشد.
الگوی لمسی بهبود یافته
برای جلوگیری از بیش از حد و کاهش زمان زنگ، دامنه ها را به تدریج تغییر دهید. شکل زیر نمودارهای شکل موج و شتاب نسخه اصلاح شده را نشان می دهد:
کاتلین
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))
جاوا
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 مورد استفاده در دستگاه نیاز دارند. برای بهترین نتیجه، از شکل موج های از پیش ساخته شده دستگاه و ثابت های ارائه شده توسط پلت فرم استفاده کنید که به شما امکان می دهد کارهای زیر را انجام دهید:
- جلوه های واضح و ابتدایی را اجرا کنید.
- آنها را به هم متصل کنید تا جلوه های لمسی جدید بسازید.
این ثابت های لمسی و اولیه از پیش تعریف شده می توانند در عین ایجاد جلوه های لمسی با کیفیت بالا، سرعت کار شما را تا حد زیادی افزایش دهند.