پرایمر محرک های ارتعاشی

قبل از طراحی جلوه‌های لمسی بر روی دستگاه اندرویدی، به شما کمک می‌کند تا یک دید کلی از نحوه عملکرد محرک‌های لرزش داشته باشید.

تصویری از اجزای یک LRA Haptic

رایج ترین محرک های ارتعاشی، محرک های تشدید خطی (LRAs) هستند. هر LRA متشکل از یک سیم پیچ صوتی است که در برابر یک جرم متحرک مغناطیسی که به یک فنر متصل است، فشرده می شود. یک ولتاژ AC اعمال شده به سیم پیچ صدا، نیروی الکترومغناطیسی ایجاد می کند که باعث حرکت جرم می شود. فنر نیروی بازیابی را فراهم می کند که باعث می شود جرم به موقعیت اولیه خود بازگردد. حرکت رفت و برگشت جرم باعث ارتعاش LRA می شود. آنها دارای فرکانس رزونانسی هستند که در آن خروجی حداکثر است.

با توجه به ولتاژ ورودی یکسان در دو فرکانس مختلف، دامنه خروجی ارتعاش می تواند متفاوت باشد. هر چه فرکانس از فرکانس تشدید LRA دورتر باشد، دامنه ارتعاش آن کمتر است.

یکی از عملکردهای رایج LRAها در یک دستگاه، شبیه سازی احساس کلیک دکمه روی سطح شیشه ای است که پاسخگو نیست. این امر باعث می شود که تعامل کاربر طبیعی تر شود. وقتی برای تایپ روی صفحه کلید مجازی اعمال می شود، بازخورد کلیک می تواند سرعت تایپ را افزایش داده و خطاها را کاهش دهد. یک سیگنال بازخورد کلیک واضح و واضح معمولاً کمتر از 10 تا 20 میلی ثانیه است. دستیابی به یک کلیک خوب نیاز به دانش کمی در مورد LRA مورد استفاده در یک دستگاه دارد. به همین دلیل است که تکیه بر شکل موج های از پیش ساخته شده بهترین بازخورد را برای یک کلیک فراهم می کند. هر زمان که به بازخورد کلیکی نیاز است، می‌توانید از آن‌ها با ثابت‌های ارائه‌شده توسط پلتفرم استفاده کنید.

اثرات لمسی قابل دستیابی در یک دستگاه توسط محرک ارتعاش و راننده آن تعیین می شود. درایورهای هپتیک که شامل ویژگی‌های ترمز بیش از حد و فعال هستند، می‌توانند زمان خیز و زنگ LRA را کاهش دهند و منجر به لرزش واضح‌تر و واکنش‌پذیرتر شوند. برای مثال، بیایید ببینیم که یک الگوی شکل موج سفارشی در یک دستگاه عمومی چگونه رفتار می کند.

کاتلین

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 // Do not 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 // Do not repeat.

vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));

نمودار زیر شکل موج مربوط به قطعه کد نشان داده شده در بالا را نشان می دهد.

نمودار شکل موج ورودی تابع پله

شتاب مربوطه در زیر نشان داده شده است:

نمودار شکل موج اندازه‌گیری شده واقعی، انتقال ارگانیک بیشتری را بین سطوح نشان می‌دهد

توجه داشته باشید که شتاب به تدریج افزایش می‌یابد، نه ناگهانی، هر زمان که دامنه تغییر پله‌ای در الگو وجود داشته باشد (مثلاً در 0ms، 150ms، 200ms، 250ms، 700ms). همچنین در هر مرحله تغییر دامنه، یک افزایش بیش از حد وجود دارد، و «زنگ» قابل مشاهده است که حداقل 50 میلی ثانیه طول می کشد که دامنه ورودی ناگهان به 0 کاهش یابد.

این الگوی لمسی را می‌توان با افزایش و کاهش تدریجی دامنه‌ها بهبود بخشید تا از افزایش بیش از حد و کاهش زمان زنگ جلوگیری شود. در زیر نمودارهای شکل موج و شتاب نسخه اصلاح شده را نشان می دهد.

کاتلین

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));

نمودار شکل موج ورودی با مراحل اضافی

نمودار شکل موج اندازه‌گیری شده، انتقال نرم‌تر را نشان می‌دهد

بنابراین ایجاد یک افکت لمسی در دستگاه اندرویدی به چیزی بیش از ارائه مقدار فرکانس و دامنه نیاز دارد. طراحی یک جلوه لمسی از ابتدا بدون دسترسی کامل به مشخصات مهندسی محرک ارتعاش و درایور کار ساده ای نیست. API های Android ثابت هایی را ارائه می دهند که به شما امکان می دهد کارهای زیر را انجام دهید:

  • جلوه های واضح و ابتدایی را اجرا کنید.

  • آنها را به هم متصل کنید تا جلوه های لمسی جدید بسازید.

این ثابت های لمسی و اولیه از پیش تعریف شده می توانند سرعت کار شما را تا حد زیادی افزایش دهند و در عین حال از جلوه های لمسی با کیفیت بالا اطمینان حاصل کنند.