이 문서에서는 Android 기기의 일반적인 진동 액추에이터인 선형 공진 액추에이터 (LRA)를 설명하고, 그 특징과 햅틱 반응 생성 방식, Android API를 사용한 효과적인 햅틱 패턴 생성 방법을 자세히 설명합니다. keywords_public: > Android 햅틱, 햅틱 액추에이터, 선형 공진 액추에이터, LRA, 진동, 햅틱 반응, VibratorFrequencyProfile, VibrationEffect, Android UI
Android 기기에서 가장 일반적인 진동 액추에이터는 선형 공진 액추에이터 (LRA)입니다. LRA는 반응하지 않는 유리 표면에서 버튼 클릭 느낌을 시뮬레이션합니다. 명확하고 선명한 클릭 피드백 신호는 일반적으로 10~20밀리초 동안 지속됩니다. 이러한 감각으로 인해 사용자 상호작용이 더 자연스럽게 느껴집니다. 가상 키보드의 경우 이 클릭 피드백을 통해 타이핑 속도를 높이고 오류를 줄일 수 있습니다.
LRA에는 몇 가지 일반적인 공진 주파수가 있습니다.
- 일부 LRA의 공진 주파수는 200~300Hz 범위로, 이는 인간 피부가 진동에 가장 민감한 주파수와 일치합니다. 이 주파수 범위의 진동은 일반적으로 부드럽고, 날카롭고, 관통하는 것으로 설명됩니다.
- 다른 LRA 모델의 공명 주파수는 약 150Hz로 더 낮습니다. 감각은 질적으로 더 부드럽고 더 풍부합니다 (크기 면에서).
두 가지 다른 주파수에서 동일한 입력 전압이 주어지면 진동 출력 진폭이 다를 수 있습니다. 주파수가 LRA의 공진 주파수에서 멀어질수록 진동 진폭이 낮아집니다.
특정 기기의 햅틱 효과는 진동 액추에이터와 드라이버를 모두 사용합니다. 오버드라이브 및 액티브 브레이킹 기능이 포함된 햅틱 드라이버는 LRA의 상승 시간과 링잉을 줄여 더 반응성이 높고 명확한 진동을 제공할 수 있습니다.
진동기 출력 가속
주파수-출력-가속도 매핑 (FOAM)은 주어진 진동 주파수 (헤르츠)에서 달성할 수 있는 최대 출력 가속도 (G 피크)를 설명합니다. Android 16 (API 수준 36)부터 플랫폼은 VibratorFrequencyProfile를 통해 이 매핑을 위한 기본 지원을 제공합니다. 이 클래스를 기본 및 고급 엔벨로프 API와 함께 사용하여 햅틱 효과를 만들 수 있습니다.
대부분의 LRA 모터는 FOAM에 단일 피크가 있으며 일반적으로 공진 주파수 근처에 있습니다. 일반적으로 주파수가 이 범위에서 벗어나면 가속도가 지수적으로 감소합니다. 곡선이 대칭이 아닐 수 있으며 모터 손상을 방지하기 위해 공진 주파수 주변에 평탄 구간이 있을 수 있습니다.
인접한 플롯은 LRA 모터의 FOAM 예를 보여줍니다.
인간 인식 감지 기준
인간 인식 감지 기준점은 사람이 안정적으로 감지할 수 있는 진동의 최소 가속도를 나타냅니다. 이 수준은 진동 주파수에 따라 다릅니다.
인접한 플롯은 시간적 주파수의 함수로 가속도에서 인간의 햅틱 인식 감지 기준점을 보여줍니다. 기준점 데이터는 Bolanowski Jr.의 그림 1에 나오는 변위 기준점에서 변환됩니다. S. J. 등의 1988년 논문 'Four channels mediate the mechanical aspects of touch'을 참고하세요.
Android는 BasicEnvelopeBuilder에서 이 기준점을 자동으로 처리하여 모든 효과가 인간 인식 감지 기준점을 최소 10dB 초과하는 진동 진폭을 생성하는 주파수 범위를 사용하는지 확인합니다.
온라인 튜토리얼에서는 가속도 진폭과 변위 진폭 간의 변환을 자세히 설명합니다.
진동 가속 수준
진동 강도에 대한 인간의 인식(인식 측정)은 진동 진폭(물리적 매개변수)에 따라 선형으로 증가하지 않습니다. 지각된 강도는 동일한 주파수에서 감지 기준점 위의 dB 양으로 정의되는 감각 수준 (SL)으로 특징지어집니다.
해당 진동 가속도 진폭 (G 피크)은 다음과 같이 계산할 수 있습니다.
여기서 진폭 dB는 특정 주파수에서 SL과 감지 기준점(인접한 플롯의 세로축을 따라 있는 값)의 합계입니다.
인접한 플롯은 시간적 주파수의 함수로 인간의 햅틱 인식 감지 기준점 (0dB SL)과 함께 10, 20, 30, 40, 50dB SL에서의 진동 가속도 수준을 보여줍니다. 데이터는 Verrillo, R.의 그림 8에서 추정됩니다. T. 외 1969년 논문, '진동 촉각 자극의 감각 크기'.
Android는 BasicEnvelopeBuilder에서 이 변환을 자동으로 처리합니다.
는 감각 수준 공간 (dB
SL)에서 값을 정규화된 강도로 가져와 출력 가속도로 변환합니다. 반면 WaveformEnvelopeBuilder는 이 변환을 적용하지 않고 가속도 공간 (Gs)에서 정규화된 출력 가속도 진폭으로 값을 가져옵니다. 엔벨로프 API는 디자이너나 개발자가 진동 강도의 변화를 생각할 때 인지된 강도가 조각별 선형 엔벨로프를 따를 것으로 예상한다고 가정합니다.
기기에서 기본 파형 스무딩
예를 들어 일반 기기에서 맞춤 파형 패턴이 어떻게 동작하는지 생각해 보세요.
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 // Don't 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 // Don't repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));
다음 그림은 앞의 코드 스니펫에 해당하는 입력 파형과 출력 가속도를 보여줍니다. 패턴의 진폭이 단계적으로 변경될 때마다(0ms, 150ms, 200ms, 250ms, 700ms) 가속이 갑자기 증가하지 않고 점진적으로 증가합니다. 또한 진폭의 각 단계 변경 시 오버슈트가 있으며 입력 진폭이 갑자기 0으로 떨어지면 최소 50ms 동안 지속되는 링이 표시됩니다.
햅틱 패턴 개선
오버슈트를 방지하고 링잉 시간을 줄이려면 진폭을 더 점진적으로 변경하세요. 다음은 수정된 버전의 파형 및 가속도 플롯을 보여줍니다.
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 // Don't 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; // Don't repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));
더 복잡한 햅틱 효과 만들기
만족스러운 클릭 응답의 다른 요소는 더 복잡하며 기기에 사용된 LRA에 관한 지식이 필요합니다. 최상의 결과를 얻으려면 기기의 사전 제작된 파형과 플랫폼 제공 상수를 사용하세요. 이를 통해 다음 작업을 할 수 있습니다.
- 명확한 효과와 프리미티브를 실행합니다.
- 이를 연결하여 새로운 햅틱 효과를 구성합니다.
이러한 사전 정의된 햅틱 상수와 기본 요소를 사용하면 고품질 햅틱 효과를 만드는 동안 작업 속도를 크게 높일 수 있습니다.