Vibrationsschalter Grundierung

Bevor Sie auf einem Android-Gerät haptische Effekte entwerfen, sollten Sie sich einen Überblick über die Funktionsweise von Vibrationsaktoren verschaffen.

Darstellung der Komponenten eines haptischen LRA

Die gängigsten Vibrationsantriebe sind Linear-Resonanz-Aktoren (Linear Resonant Actuators, LRAs). Jedes LRA besteht aus einer Schwingspule, die auf eine sich bewegende magnetische Masse gedrückt wird und mit einer Feder verbunden ist. Eine an die Schwingspule angewandte Wechselspannung erzeugt eine elektromagnetische Kraft, die die Masse bewegt. Die Feder sorgt für die Wiederherstellungskraft, die dazu führt, dass die Masse in ihre Ausgangsposition zurückkehrt. Durch das Hin- und Herbewegen der Masse vibriert das LRA. Sie haben eine Resonanzfrequenz mit maximaler Ausgabe.

Bei derselben Eingangsspannung bei zwei verschiedenen Frequenzen können die Amplituden der Vibrationsausgänge unterschiedlich sein. Je weiter die Frequenz von der Resonanzfrequenz des LRA entfernt ist, desto geringer ist die Schwingungsamplitude.

Eine häufige Funktion von LRAs in einem Gerät besteht darin, das Gefühl eines Tastenklicks auf einer nicht reagierenden Glasoberfläche zu simulieren. Sie sorgt dafür, dass sich die User-Interaktion natürlicher anfühlt. Bei Anwendung auf die Eingabe über eine virtuelle Tastatur kann das Klick-Feedback die Eingabegeschwindigkeit erhöhen und Fehler reduzieren. Ein klares und scharfes Klick-Feedbacksignal dauert in der Regel weniger als 10 bis 20 Millisekunden. Für einen guten Klick sind Kenntnisse über die auf dem Gerät verwendete LRA erforderlich. Daher erhalten vorgefertigte Wellenformen das beste Feedback für einen Klick. Sie können sie mit den von der Plattform bereitgestellten Konstanten verwenden, wenn ein Klick-Feedback erforderlich ist.

Die haptischen Effekte, die mit einem Gerät erreichbar sind, werden sowohl vom Vibrationsaktuator als auch von seinem Treiber bestimmt. Haptische Treiber mit Overdrive- und aktiven Bremsfunktionen können die Steigungszeit und das Klingeln von LRAs reduzieren, was zu einer reaktionsschnelleren und deutlicheren Vibration führt. Sehen wir uns zur Veranschaulichung an, wie sich ein benutzerdefiniertes Wellenformmuster auf einem generischen Gerät verhält.

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

Das Diagramm unten zeigt die Wellenform entsprechend den oben gezeigten Code-Snippets.

Darstellung der Eingangswellenform für die Schrittfunktion

Hier die entsprechende Beschleunigung:

Darstellung der tatsächlich gemessenen Wellenform mit mehr organischen Übergängen zwischen den Ebenen

Beachten Sie, dass die Beschleunigung bei jeder Schrittänderung im Muster allmählich und nicht plötzlich zunimmt (z.B. bei 0 ms, 150 ms, 200 ms, 250 ms, 700 ms). Außerdem tritt bei jeder Schritt-Amplitudenänderung ein Überschwenken auf und ein sichtbares "Klingeln" dauert mindestens 50 ms, wenn die Eingabeamplitude plötzlich auf 0 sinkt.

Dieses haptische Muster kann verbessert werden, indem die Amplituden schrittweise erhöht und verringert werden, um eine Überschreitung zu vermeiden und die Klingelzeit zu reduzieren. Im Folgenden sehen Sie die Wellenform- und Beschleunigungsdiagramme der überarbeiteten Version.

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

Darstellung der Eingabewellenform mit zusätzlichen Schritten

Darstellung der gemessenen Wellenform mit weicheren Übergängen

Demnach erfordert die Bereitstellung eines haptischen Effekts auf einem Android-Gerät mehr als die Angabe eines Frequenz- und Amplitudenwerts. Es ist keine leichte Aufgabe, einen haptischen Effekt von Grund auf neu zu entwerfen, ohne uneingeschränkten Zugriff auf die technischen Spezifikationen des Vibrationsaktuators und des Treibers zu haben. Android APIs stellen Konstanten bereit, mit denen Sie Folgendes tun können:

  • Führen Sie klare Effekte und Primitive aus.

  • Durch Verketten können neue haptische Effekte entstehen.

Diese vordefinierten haptischen Konstanten und Primitive können Ihre Arbeit erheblich beschleunigen und gleichzeitig qualitativ hochwertige haptische Effekte sicherstellen.