Sơ lược về bộ truyền động rung

Trước khi thiết kế hiệu ứng xúc giác trên thiết bị Android, bạn cần nắm được thông tin tổng quan về cách hoạt động của bộ truyền động rung.

Hình minh hoạ các thành phần của LRA xúc giác

Bộ truyền động rung phổ biến nhất là Bộ truyền động cộng hưởng tuyến tính (LRA). Mỗi LRA bao gồm một cuộn dây thoại được ép vào một khối lượng chuyển động từ tính được gắn vào một lò xo. Điện áp xoay chiều đặt vào cuộn dây bằng giọng nói sẽ tạo ra một lực điện từ khiến khối lượng dịch chuyển. Lò xo cung cấp lực khôi phục khiến khối lượng trở về vị trí ban đầu. Sự chuyển động qua lại của khối sẽ làm cho LRA rung. Chúng có tần suất cộng hưởng mà tại đó đầu ra là tối đa.

Với cùng một điện áp đầu vào ở 2 tần số khác nhau, biên độ đầu ra rung có thể khác nhau. Tần số càng xa tần số cộng hưởng của LRA thì biên độ rung của LRA càng thấp.

Một chức năng phổ biến của LRA trên thiết bị là mô phỏng cảm giác khi người dùng nhấp vào một nút trên bề mặt kính không phản hồi. Điều này giúp cho việc tương tác của người dùng tự nhiên hơn. Khi áp dụng cho việc nhập trên bàn phím ảo, phản hồi nhấp chuột có thể tăng tốc độ nhập và giảm lỗi. Tín hiệu phản hồi về lượt nhấp rõ ràng và sắc nét thường có thời lượng chưa đến 10 đến 20 mili giây. Để đạt được lượt nhấp tốt, bạn cần có một số kiến thức về LRA được sử dụng trong thiết bị. Đây là lý do tại sao việc dựa vào dạng sóng tiền chế tạo sẵn sẽ đem lại phản hồi tốt nhất cho một lượt nhấp. Bạn có thể sử dụng các công cụ này với các hằng số do nền tảng cung cấp mỗi khi cần ý kiến phản hồi về lượt nhấp.

Các hiệu ứng xúc giác có thể đạt được trong một thiết bị được xác định bởi cả bộ truyền động rung và trình điều khiển của thiết bị đó. Trình điều khiển xúc giác bao gồm chế độ lái xe quá tốc độ và các tính năng phanh chủ động có thể làm giảm thời gian báo động và tiếng chuông của LRA, dẫn đến rung phản hồi nhanh hơn và rõ ràng hơn. Để minh hoạ, hãy xem cách một mẫu dạng sóng tuỳ chỉnh hoạt động trên một thiết bị chung.

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

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

Biểu đồ bên dưới cho thấy dạng sóng tương ứng với các đoạn mã hiển thị ở trên.

Biểu đồ dạng sóng đầu vào của hàm bước

Mức tăng tốc tương ứng như sau:

Biểu đồ dạng sóng thực tế đo được, cho thấy nhiều chuyển đổi hữu cơ hơn giữa các mức

Lưu ý rằng gia tốc tăng dần, không đột ngột, bất cứ khi nào có sự thay đổi bước về biên độ trong mẫu (ví dụ: ở 0 mili giây, 150 mili giây, 200 mili giây, 250 mili giây, 700 mili giây). Ngoài ra, còn có tình trạng quá mức ở mỗi bước thay đổi biên độ và "Đổ chuông" có thể nhìn thấy kéo dài ít nhất 50 mili giây khi biên độ đầu vào đột ngột giảm xuống 0.

Bạn có thể cải thiện mẫu xúc giác này bằng cách tăng và giảm dần biên độ để tránh quá mức và giảm thời gian đổ chuông. Dưới đây là biểu đồ dạng sóng và gia tốc của phiên bản sửa đổi.

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

Biểu đồ dạng sóng đầu vào với các bước bổ sung

Biểu đồ dạng sóng đo được, cho thấy sự chuyển đổi mượt mà hơn

Theo đó, việc tạo hiệu ứng xúc giác trên thiết bị Android không chỉ đòi hỏi việc cung cấp tần số và giá trị biên độ. Việc thiết kế hiệu ứng xúc giác từ đầu mà không có toàn quyền truy cập vào các thông số kỹ thuật của bộ truyền động rung và trình điều khiển không phải là một nhiệm vụ đơn giản. API Android cung cấp các hằng số cho phép bạn thực hiện những việc sau:

  • Thực hiện các hiệu ứng rõ ràng và gốc.

  • Hãy nối các thành phần này để tạo các hiệu ứng xúc giác mới.

Các hằng số xúc giác và dữ liệu gốc được xác định trước này có thể giúp tăng tốc đáng kể công việc của bạn, đồng thời đảm bảo hiệu ứng xúc giác chất lượng cao.