バイブレーション アクチュエータ入門

Android デバイスで触覚効果を設計する前に、 バイブレーション アクチュエータの仕組みの概要

触覚 LRA のコンポーネントのイラスト

最も一般的な振動アクチュエータは、リニア共振アクチュエータ(LRA)です。各 LRA は、移動する磁性体に押し付けられたボイスコイルで、 付着していますボイスコイルに AC 電圧が加えられると、 質量を動かす電磁力です。スプリングは、 質量を元の位置に戻す力を復元します。「 質量が前後に動くと LRA が振動します。この会社には 出力が最大となる共振周波数。

2 つの異なる周波数で同じ入力電圧の場合、振動出力は 振幅が異なる場合があります周波数が LRA から離れるほど 共振周波数が高いほど、その振動振幅は小さくなります。

デバイスにおける LRA の一般的な機能の一つに、ボタンの感触をシミュレートすることが挙げられます。 タップした場合。これにより、ユーザー操作が、 より自然になれます。仮想キーボードでの入力に適用すると、クリック フィードバックが 入力速度が向上し、入力ミスが減ります。明確でわかりやすいクリック フィードバック シグナル 通常は 10 ~ 20 ミリ秒未満です良好なクリックの達成 デバイスで使用される LRA の知識が必要です。だからこそ クリックに対する最適なフィードバックが得られます次を使用: クリック フィードバックが発生するたびに、プラットフォームから提供される定数に置き換えられます。 必要ありません。

デバイスで達成できる触覚効果は、 アクチュエータとそのドライバですオーバードライブやアクティブなどの触覚ドライバ ブレーキ機能によって LRA の立ち上がり時間と鳴動を低減できるため、 応答性とクリアなバイブレーションを実現。例として、カスタムのアラートタイプを 一般的なデバイスで動作します。

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

以下のプロットは、表示されているコード スニペットに対応する波形を示しています。 ご覧ください。

ステップ関数の入力波形のプロット

対応する加速度は次のとおりです。

実際に測定された波形のプロット、レベル間の有機的な遷移を示す

加速度は、急に急激にではなく、緩やかな増加が パターンの振幅のステップ変化(例:0ms、150ms、200ms、250ms、 700 ミリ秒)。また、振幅の変化のステップごとにオーバーシュートがあり、 少なくとも 50 ミリ秒続く「リンギング」が、入力振幅が突然変わって 下がります。

この触覚パターンは、振幅を増減することで改善できます。 オーバーシュートを防ぎ、呼び出し時間を短くします。以下は、 改訂版の波形と加速度のプロットです。

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

入力波形と追加ステップのプロット

より滑らかな遷移を示す測定波形のプロット

したがって、Android デバイスで触覚効果を作成するには、 周波数と振幅の値が出力されますインフラストラクチャの設計は簡単ではないが、 エンジニアリング仕様に対する完全アクセス権なしで、ゼロから触覚効果を提供する 振動アクチュエータとドライバの振動Android API が提供する定数を使用すると、 次のことができます。

  • 明確な効果とプリミティブを実行します。

  • それらを連結して、新しい触覚効果を作成します。

事前定義の触覚定数とプリミティブを使用すると、作業を大幅に高速化できます 高品質の触覚効果を確保できます