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 nên 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

Cá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ột LRA bao gồm một cuộn dây giọng nói được ép vào một khối chuyển động từ tính được gắn vào một lò xo. Điện áp xoay chiều áp dụng cho cuộn dây thoại tạo ra lực điện từ làm cho vật khối chuyển động. Mùa xuân mang đến phục hồi lực làm cho khối lượng trở về vị trí ban đầu. Chiến lược phát hành đĩa đơn chuyển động qua lại của khối lượng làm cho LRA rung. Họ có tần số cộng hưởng mà đầu ra là tối đa.

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

Một chức năng phổ biến của LRA trong thiết bị là mô phỏng cảm giác của một nút nhấn nhấp vào một mặt kính không phản hồi. Giúp người dùng cảm thấy tương tác tự nhiên hơn. Khi áp dụng cho việc nhập trên bàn phím ảo, thao tác nhấp vào phản hồi 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 dưới 10 đến 20 mili giây. Có được lượt nhấp tốt yêu cầu bạn phải biết một số kiến thức về LRA được sử dụng trong thiết bị. Đây là lý do vì sao dựa vào dạng sóng chế tạo sẵn cung cấp phản hồi tốt nhất cho một cú nhấp chuột. Bạn có thể sử dụng bằng các hằng số do nền tảng cung cấp bất cứ khi nào có một lượt nhấp cần thiết.

Hiệu ứng xúc giác có thể đạt được trên thiết bị được xác định bằng cả độ rung bộ truyền động và trình điều khiển của nó. Trình điều khiển xúc giác bao gồm ổ đĩa quá mức và đang hoạt động các tính năng phanh có thể làm giảm thời gian gia tăng và tiếng chuông của LRA, dẫn đến rung phản hồi nhanh và rõ ràng. Để minh hoạ, hãy xem cách mẫu sóng hoạt động trên 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 đồ dưới đây cho thấy dạng sóng tương ứng với các đoạn mã xuất hiện ở trên.

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

Mức tăng tốc tương ứng được thể hiện dưới đây:

Biểu đồ dạng sóng thực tế được đo lường, thể hiện nhiều chuyển đổi tự nhiên hơn giữa các cấp độ

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 biên độ theo bước trong mẫu (ví dụ: 0 ms, 150 ms, 200 ms, 250 ms, 700 mili giây). Cũng có một mức chênh lệch tại mỗi bước thay đổi biên độ và có hiển thị hiện tượng "đổ chuông" 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.

Mẫu xúc giác này có thể được cải thiện bằng cách tăng và giảm biên độ để tránh tình trạng vượt quá ngưỡng và giảm thời gian đổ chuông. Sau đây là ví dụ về đồ thị 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 cần hơn cung cấp giá trị tần số và biên độ. Việc thiết kế một hiệu ứng xúc giác từ đầu mà không cần truy cập đầy đủ các thông số kỹ thuật của bộ truyền động rung và người lái. API Android cung cấp các hằng số cho phép bạn làm những việc sau:

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

  • Kết hợp các chương trình này để tạo hiệu ứng xúc giác mới.

Những hằng số xúc giác và dữ liệu gốc này có thể giúp bạn tăng tốc đáng kể công việc mà vẫn đảm bảo hiệu ứng xúc giác chất lượng cao.