Titreşim aktüatörleri astarı

Bir Android cihazda dokunmatik efektleri tasarlamadan önce titreşim aktüatörlerinin çalışma şekline dair genel bir fikir edinmek yardımcı olur.

Dokunsal LRA bileşenlerinin çizimi

En yaygın titreşim aktüatörleri doğrusal Rezonant Aktüatörleridir (LRA). Her bir LRA, bir yayına bağlı manyetik hareket eden bir kütleye bastırılmış bir ses bobininden oluşur. Ses bobinine uygulanan AC voltaj, kütlenin hareket etmesine neden olan elektromanyetik bir kuvvet oluşturur. Yay, kütlenin başlangıç konumuna geri dönmesini sağlayan geri yükleme kuvvetini sağlar. Kütlenin bir ileri bir geri hareketi, LRA'nın titreşmesine neden olur. Çıkışın maksimum olduğu bir rezonans frekansı vardır.

İki farklı frekansta aynı giriş voltajı verildiğinde titreşim çıkış genliği farklı olabilir. Frekans LRA'nın rezonans frekansından ne kadar uzaktaysa titreşim genliği de o kadar düşük olur.

Cihazlardaki LRA'ların yaygın bir işlevi, yanıt vermeyen cam yüzeye düğme tıklaması hissini simüle etmektir. Kullanıcı etkileşiminin daha doğal hale gelmesine yarar. Tıklama geri bildirimi, sanal klavyede yazmaya uygulandığında yazma hızını artırıp hataları azaltabilir. Net ve net bir tıklama geri bildirim sinyalinin süresi genellikle 10 ila 20 milisaniyeden kısadır. İyi bir tıklama elde etmek için bir cihazda kullanılan LRA hakkında bazı bilgiler gerekir. Bu nedenle, önceden üretilmiş dalga şekillerini kullanmak, bir tıklama için en iyi geri bildirimi sağlar. Tıklama geri bildirimi gerektiğinde bunları, platform tarafından sağlanan sabit değerlerle kullanabilirsiniz.

Bir cihazda ulaşılabilen dokunsal geri bildirim efektleri, hem titreşim aktüatörü hem de sürücüsü tarafından belirlenir. Aşırı sürüş ve aktif frenleme özelliklerine sahip dokunsal sürücüler, LRA'ların yükselme süresini ve çalma süresini kısaltarak daha duyarlı ve net bir titreşim sağlayabilir. Örnek olarak özel dalga biçimi kalıplarının genel cihazlarda nasıl davrandığını inceleyelim.

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

Aşağıdaki grafikte, yukarıda gösterilen kod snippet'lerine karşılık gelen dalga biçimi gösterilmektedir.

Adım fonksiyonu girdi dalga biçiminin grafiği

İlgili hızlanma aşağıda gösterilmiştir:

Seviyeler arasında daha organik geçişleri gösteren, ölçülen gerçek dalga biçimi grafiği

Kalıpta genlikte bir adım değişikliği olduğunda (ör. 0 ms, 150 ms, 200 ms, 250 ms, 700 ms) hızlanmanın aniden değil de kademeli olarak artacağını unutmayın. Ayrıca, genlikteki her adım değişiminde bir aşım vardır ve giriş genliği aniden 0'a düştüğünde en az 50 ms süren görünür bir "çalıştırma" vardır.

Bu dokunsal desen, taşmalardan kaçınmak ve çalma süresini kısaltmak için genlikleri kademeli olarak artırıp azaltarak iyileştirilebilir. Aşağıda, düzeltilmiş sürümün dalga biçimi ve ivme grafikleri gösterilmektedir.

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

Ek adımlar içeren giriş dalga formunun grafiği

Daha yumuşak geçişleri gösteren, ölçülen dalga biçimi resmi

Buna göre, bir Android cihazda dokunsal efekt oluşturmak için frekans ve genlik değeri sağlamaktan daha fazlası gerekir. Titreşim aktüatörünün ve sürücünün mühendislik özelliklerine tam erişim olmadan sıfırdan dokunsal bir efekt tasarlamak, basit bir görev değildir. Android API'leri aşağıdakileri yapmanızı sağlayan sabit değerler sağlar:

  • Net efektler ve temel öğeler uygulayın.

  • Yeni dokunsal efektler oluşturmak için bunları birleştirin.

Önceden tanımlanmış bu dokunsal sabitler ve temel öğeler, yüksek kaliteli dokunsal efektler sağlarken çalışmanızı büyük ölçüde hızlandırabilir.