진동 액추에이터 기본 지침서

Android 기기에서 햅틱 효과를 설계하기 전에 진동 액추에이터의 작동 방식에 대한 개요

햅틱 LRA의 구성요소 삽화

가장 일반적인 진동 액추에이터는 선형 공진 액추에이터 (LRA)입니다. 각 LRA는 고체 성분의 자력 운동 질량에 압착되는 음성 코일로 스프링에 부착되어 있습니다. 음성 코일에 적용된 AC 전압은 질량을 움직이는 전자기력입니다. 스프링은 질량을 시작 위치로 되돌리는 복원력을 제공합니다. 이 질량의 앞뒤로 움직이면 LRA가 진동합니다. 그들은 출력이 최대인 공명 주파수입니다.

두 개의 다른 주파수에서 동일한 입력 전압이 주어지면 진동 출력은 진폭은 다를 수 있습니다. 주파수가 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))

자바

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, 700ms)입니다. 또한 진폭의 각 단계 변경에서 초과가 있으며, 입력 진폭이 갑자기 50ms 이상 지속되는 '벨소리'가 보이는 경우 0으로 떨어집니다.

이 햅틱 패턴은 진폭을 늘리거나 줄여 개선할 수 있습니다. 점진적으로 해야 오버슈트를 피하고 벨이 울리는 시간을 줄일 수 있습니다. 다음은 가속도 그래프와 파형 플롯을 그래프로 변환할 수 있습니다.

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

자바

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는 다음과 같은 작업을 할 수 있습니다.

  • 명확한 효과와 프리미티브를 실행합니다.

  • 이를 연결하여 새 햅틱 효과를 구성합니다.

사전 정의된 햅틱 상수와 프리미티브를 사용하면 작업 속도를 크게 높일 수 있습니다 높은 품질의 햅틱 효과를 보장해야 합니다