Primer attuatori vibrazioni

Prima di progettare effetti aptici su un dispositivo Android, è utile avere una panoramica del funzionamento degli attuatori della vibrazione.

Illustrazione dei componenti di un LRA aptica

Gli attuatori a vibrazione più comuni sono gli attuatori a risonanza lineare (LRA). Ciascuna L'LRA è costituito da una bobina mobile premuta contro una massa magnetica in movimento che è fissato a una molla. Una tensione CA applicata alla bobina mobile crea un forza elettromagnetica che causa lo spostamento della massa. La molla fornisce ripristinare la forza che fa tornare la massa alla posizione iniziale. La un movimento avanti e indietro della massa fa vibrare l'LRA. Hanno un la frequenza di risonanza alla quale l'uscita è massima.

Data la stessa tensione di ingresso a due frequenze diverse, l'output della vibrazione ampiezze possono essere diverse. Più la frequenza è lontana dall'LRA frequenza di risonanza, minore è l'ampiezza della vibrazione.

Una funzione comune degli LRA in un dispositivo è simulare la sensazione di un pulsante fai clic su una superficie di vetro che non risponde. Serve a dare la sensazione di interazione dell'utente più naturale. Quando viene applicato alla digitazione su una tastiera virtuale, il feedback sui clic può aumenta la velocità di digitazione e riduci gli errori. Un indicatore di feedback sui clic chiaro e nitido ha una durata generalmente inferiore a 10-20 ms. Ottenere un buon clic richiede una certa conoscenza dell'LRA utilizzato in un dispositivo. Ecco perché affidarsi le forme d'onda prefabbricate forniscono il miglior feedback per un clic. Puoi utilizzare con le costanti fornite dalla piattaforma ogni volta che viene ricevuto un feedback sui clic necessaria.

Gli effetti aptici ottenibili in un dispositivo sono determinati dalla vibrazione un attuatore e il relativo driver. Driver aptici che includono overdrive e dispositivi attivi le funzionalità di frenata possono ridurre i tempi di salita e le chiamate degli LRA, reattiva e nitida. Ad esempio, vediamo come viene creata un pattern della forma d'onda si comporta su un dispositivo generico.

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

Il grafico seguente mostra la forma d'onda corrispondente agli snippet di codice mostrati in alto.

Traccia della forma d'onda di ingresso della funzione passo-passo

L'accelerazione corrispondente è mostrata di seguito:

Traccia della forma d'onda misurata effettiva, che mostra transizioni più organiche tra i livelli

Nota che l'accelerazione aumenta gradualmente, non all'improvviso, ogni volta che c'è un cambio di passo di ampiezza nel pattern (ad es. a 0 ms, 150 ms, 200 ms, 250 ms, 700ms). Si verifica anche un superamento ad ogni cambio di ampiezza del passo è visibile uno squillo che dura almeno 50 ms quando l'ampiezza dell'input improvvisa scende a 0.

Questo pattern aptico può essere migliorato aumentando e diminuendo le ampiezze gradualmente per evitare di sforare e ridurre il tempo di squillo. Di seguito viene illustrato il funzionamento i grafici delle forme d'onda e dell'accelerazione della versione rivista.

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

Traccia della forma d'onda di ingresso con passi aggiuntivi

Traccia della forma d'onda misurata, che mostra transizioni più fluide

Ne consegue che la creazione di un effetto aptico su un dispositivo Android richiede più di fornendo un valore di frequenza e ampiezza. Non è un compito banale progettare una effetto aptico da zero senza accesso completo alle specifiche tecniche dell'attuatore della vibrazione e del conducente. Le API Android forniscono costanti ti consentono di:

  • Eseguire effetti chiari e primitivi.

  • Concatenale per comporre nuovi effetti aptici.

Queste costanti aptiche e primitive predefinite possono velocizzare notevolmente il tuo lavoro garantendo al contempo effetti aptici di alta qualità.