Composant d'activation des actionneurs de vibrations

Avant de concevoir des effets haptiques sur un appareil Android, il est utile d'obtenir un aperçu du fonctionnement des actionneurs de vibration.

Illustration des composants d'une LRA haptique

Les actionneurs à vibration les plus courants sont les actionneurs à résonance linéaire (LRA, Linear Resonant Actionuators). Chaque La LRA consiste en une bobine acoustique appuyée contre une masse magnétique en mouvement fixé à un ressort. Une tension alternative appliquée à la bobine acoustique crée un force électromagnétique qui provoque le mouvement de la masse. Le ressort fournit de restauration de la force qui amène la masse à revenir à sa position de départ. La les mouvements de va-et-vient de la masse font vibrer la LRA. Ils ont un fréquence de résonance à laquelle la sortie est maximale.

Avec la même tension d'entrée à deux fréquences différentes, la sortie des vibrations les amplitudes peuvent être différentes. Plus la fréquence est éloignée fréquence de résonance, plus l'amplitude de sa vibration est faible.

L'une des fonctions courantes des LRA dans un appareil est de simuler la sensation d'un bouton cliquez sur une surface en verre qui ne répond pas. Elle sert à faire en sorte que l'interaction utilisateur se sente de manière plus naturelle. Lorsqu'il est appliqué à la saisie sur un clavier virtuel, le retour sur les clics peut accélèrent la saisie et réduisent les erreurs. Un signal de retour sur les clics clair et précis est généralement de moins de 10 à 20 millisecondes. Réussir un clic nécessite une certaine connaissance de la LRA utilisée dans un appareil. C’est pourquoi compter sur les formes d'onde préfabriquées fournissent un retour optimal pour un clic. Vous pouvez utiliser avec les constantes fournies par la plate-forme chaque fois qu'un clic est nécessaires.

Les effets haptiques réalisables dans un appareil sont déterminés par les vibrations et son pilote. Transducteurs haptiques avec surdiffusion et en mouvement de freinage peut réduire le temps de montée et la sonnerie des LRA, ce qui augmente une vibration réactive et claire. À titre d'illustration, voyons comment un modèle modèle de forme d'onde se comporte sur un appareil générique.

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

Le graphique ci-dessous montre la forme d'onde correspondant aux extraits de code affichés. ci-dessus.

Tracé de la forme d'onde d'entrée de la fonction de pas

L'accélération correspondante est illustrée ci-dessous:

Représentation graphique de la forme d'onde mesurée, avec des transitions plus naturelles entre les niveaux

Notez que l'accélération augmente progressivement, et pas soudainement, dès qu'il y a un changement d'amplitude de pas dans le modèle (par exemple, à 0 ms, 150 ms, 200 ms, 250 ms, 700ms). Il y a aussi un dépassement à chaque changement d'amplitude de pas, et il y a est visible, car elle émet une "sonnerie" qui dure au moins 50 ms lorsque l'amplitude d'entrée tombe à 0.

Ce modèle haptique peut être amélioré en augmentant et en diminuant les amplitudes progressivement pour éviter les dépassements de température et réduire la durée de la sonnerie. Vous trouverez ci-dessous la forme d'onde et les graphiques d'accélération de la version révisée.

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

Tracé de la forme d'onde d'entrée avec étapes supplémentaires

Tracé d'une forme d'onde mesurée, avec des transitions plus fluides

Par conséquent, la création d'un effet haptique sur un appareil Android nécessite plus de en fournissant une valeur de fréquence et d'amplitude. Il n'est pas facile de concevoir un un effet haptique à partir de zéro sans accès total aux spécifications techniques de l'actionneur de vibration et du conducteur. Les API Android fournissent des constantes vous permet d'effectuer les opérations suivantes:

  • Effectuez des effets clairs et des primitives.

  • Les concaténer pour créer de nouveaux effets haptiques.

Ces constantes et primitives haptiques prédéfinies peuvent accélérer considérablement votre travail. tout en garantissant des effets haptiques de haute qualité.