Titreşim dalga formlarını analiz etme

Android cihazlarda en yaygın titreşim aktüatörleri doğrusal rezonanslı aktüatörlerdir (LRA'lar). LRA'lar, normalde yanıt vermeyen cam yüzeylerde düğme tıklama hissini simüle eder. Net ve net bir tıklama geri bildirimi sinyali genellikle 10 ila 20 milisaniye sürer. Bu his, kullanıcı etkileşimlerinin daha doğal olmasını sağlar. Sanal klavyelerde bu tıklama geri bildirimi, yazma hızını artırabilir ve hataları azaltabilir.

LRA'ların birkaç yaygın rezonans frekansı vardır:

  • Bazı LRA'ların rezonans frekansları 200 ila 300 Hz aralığındaydı. Bu frekans, insan derisinin titreşime en duyarlı olduğu frekansla aynıdır. Bu frekans aralığındaki titreşim hissi genellikle düzgün, keskin ve nüfuz edici olarak tanımlanır.
  • Diğer LRA modellerinin rezonans frekansları yaklaşık 150 Hz'dir. Bu modellerin verdiği his, nitelik açısından daha yumuşak ve daha dolgundur (boyut olarak).
Bileşenler, yukarıdan aşağıya doğru; kapak, plaka, orta mıknatıs, 2 yan mıknatıs, kütle, 2 yay, bobin, esnek devre, taban ve yapıştırıcıdan oluşur.
Doğrusal rezonanslı aktüatör (LRA) bileşenleri.

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

Belirli bir cihazın dokunma etkileri hem titreşim aktüatörünü hem de sürücüsünü kullanır. Aşırı hız ve aktif frenleme özellikleri içeren dokunma duyarlı sürücüler, LRA'ların yükselme süresini ve zil sesini azaltarak daha duyarlı ve net bir titreşim sağlar.

Titreşimli motor çıkışı hızlandırması

Sıklıktan çıkış hızına eşleme (FOAM), belirli bir titreşim sıklığında (Hertz cinsinden) elde edilebilecek maksimum çıkış hızını (G tepesinde) tanımlar. Android 16'dan (API düzeyi 36) itibaren platform, VibratorFrequencyProfile aracılığıyla bu eşleme için yerleşik destek sunar. Dokunsal efektler oluşturmak için bu sınıfı temel ve gelişmiş zarf API'leriyle birlikte kullanabilirsiniz.

Çoğu LRA motorunun FOAM'ında, genellikle rezonans frekanslarının yakınında tek bir tepe noktası bulunur. Sıklık bu aralığın dışına çıktıkça hız genellikle katlanarak azalır. Eğri simetrik olmayabilir ve motoru hasara karşı korumak için rezonans frekansı etrafında bir plato içerebilir.

Bitişik grafikte, LRA motor için örnek bir FOAM gösterilmektedir.

Sıklık yaklaşık 120 Hz'e yükseldikçe ivme de katlanarak artar. İvmelenme, yaklaşık 180 Hz'ye kadar sabit kalır ve ardından azalır.
LRA motor için örnek FOAM.

İnsan algısı algılama eşiği

İnsan algılama algılama eşiği, bir kişinin güvenilir bir şekilde algılayabileceği minimum titreşim ivmesini ifade eder. Bu seviye, titreşim sıklığına göre değişir.

Bitişik grafikte, zamansal frekansın bir işlevi olarak insan dokunma algısı algılama eşiği (ivmelenme cinsinden) gösterilmektedir. Eşik verileri, Bolanowski Jr., S. J., et al.'ın 1988 tarihli makalesi, "Dört kanal, dokunmanın mekanik yönlerini aracılık eder.".

Android, BasicEnvelopeBuilder içinde bu eşiği otomatik olarak yönetir. Bu işlem, tüm efektlerin insan algılama eşik değerini en az 10 dB aşan titreşim genlikleri üreten bir frekans aralığı kullandığını doğrular.

Frekans yaklaşık 20 Hz'ye yükseldikçe insan algılama eşiği de yaklaşık -35 dB'ye kadar logaritmik olarak yükselir. Eşik yaklaşık 200 Hz'ye kadar sabit kalır, ardından yaklaşık olarak -20 dB'ye kadar doğrusal olarak artar.
İnsan dokunsal algılama algılama eşiği.

İvme genliği ile yer değiştirme genliği arasındaki dönüşüm, bir online eğitimde daha ayrıntılı olarak açıklanmaktadır.

Titreşim hızlanma seviyeleri

Titreşim yoğunluğuyla ilgili insan algısı, bir algı ölçüsü olarak, fiziksel bir parametre olan titreşim genliğiyle doğrusal olarak artmaz. Algılanan yoğunluk, aynı frekansta algılama eşiğinin üzerindeki dB miktarı olarak tanımlanan duyum düzeyi (SL) ile karakterize edilir.

Karşılık gelen titreşim ivmesi genliği (G tepesinde) aşağıdaki şekilde hesaplanabilir:

$$ Amplitude(G) = 10^{Amplitude(db)/20} $$

Burada, genlik dB, belirli bir frekansta SL ve algılama eşiğinin (bitişik grafikteki dikey eksen boyunca değer) toplamıdır.

Bitişik grafikte, zamansal frekansın bir işlevi olarak 10, 20, 30, 40 ve 50 dB SL'deki titreşim ivme seviyeleri ile insan dokunma algısı algılama eşiği (0 dB SL) gösterilmektedir. Veriler, Verrillo, R. T. ve arkadaşlarının 1969 tarihli "Sensation magnitude of vibrotactile stimuli." (Titreşimli dokunma uyaranlarının duyusal büyüklüğü) makalesine bakabilirsiniz.

İstenen duyum seviyesi arttıkça, dB cinsinden gereken ivme de yaklaşık olarak aynı miktarda artar. Örneğin, 100 Hz'lik bir titreşim için 10 dB'lik duyum seviyesi, -30 dB yerine yaklaşık -20 dB'dir.
Titreşim hızlandırma seviyeleri.

Android, bu dönüşümü BasicEnvelopeBuilder içinde otomatik olarak gerçekleştirir. BasicEnvelopeBuilder, değerleri duyum düzeyi alanında (dB SL) normalleştirilmiş yoğunluklar olarak alır ve çıkış ivmesine dönüştürür. Öte yandan WaveformEnvelopeBuilder, bu dönüşümü uygulamaz ve değerleri hız alanındaki normalleştirilmiş çıkış hız amplitüdü olarak (Gs) alır. Zarf API'si, bir tasarımcı veya geliştiricinin titreşim gücündeki değişiklikleri düşündüğünde, algılanan yoğunluğun parçalara ayrılmış doğrusal bir zarfı takip etmesini beklediğini varsayar.

Cihazlarda varsayılan dalga sönümleme

Özel bir dalga biçimi deseninin genel bir cihazda nasıl davrandığını açıklamak için aşağıdakileri göz önünde bulundurun:

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 // Don't 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 // Don't repeat.

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

Aşağıdaki grafiklerde, önceki kod snippet'lerine karşılık gelen giriş dalga biçimi ve çıkış ivmesi gösterilmektedir. Desende genlikte ani bir değişiklik olduğunda (yani 0 ms, 150 ms, 200 ms, 250 ms ve 700 ms'de) ivmenin aniden değil, kademeli olarak arttığını unutmayın. Ayrıca, her bir adım amplitüdü değişikliğinde aşırı aşma vardır ve giriş amplitüdü aniden 0'a düştüğünde en az 50 ms süren görünür bir zil sesi vardır.

Adım işlevi giriş dalga biçiminin grafiği.
Seviyeler arasında daha organik geçişler gösteren, gerçek ölçülen dalga biçiminin grafiği.

İyileştirilmiş dokunma deseni

Aşırı aşmayı önlemek ve zil çalmasını azaltmak için genlikleri daha kademeli olarak değiştirin. Aşağıda, düzeltilen sürümün dalga biçimi ve hızlandırma çizelgeleri 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 biçiminin grafiği.
Daha yumuşak geçişleri gösteren, ölçülen dalga formunun grafiği.

Daha karmaşık dokunma efektleri oluşturma

Tatmin edici bir tıklama yanıtındaki diğer öğeler daha karmaşıktır ve cihazda kullanılan LRA hakkında bilgi sahibi olmayı gerektirir. En iyi sonuçlar için cihazın önceden oluşturulmuş dalga formlarını ve platform tarafından sağlanan sabitleri kullanın. Bu sayede şunları yapabilirsiniz:

  • Net efektler ve ilkel öğeler kullanın.
  • Yeni dokunma etkileri oluşturmak için bunları birleştirin.

Bu önceden tanımlanmış dokunma sabitleri ve primitifleri, yüksek kaliteli dokunma efektleri oluştururken işinizi büyük ölçüde hızlandırabilir.