ไพรเมอร์แอคชูเอเตอร์แบบสั่น

ก่อนที่จะออกแบบเอฟเฟกต์แบบรู้สึกได้บนอุปกรณ์ Android วิธีนี้จะช่วยให้ ภาพรวมการทำงานของตัวกระตุ้นการสั่น

ภาพส่วนประกอบของ Haptic LRA

ตัวกระตุ้นการสั่นสะเทือนที่พบบ่อยที่สุดคือ Linear Resonant Actuator (LRA) ชิ้น LRA ประกอบด้วยคอยล์เสียงที่กดทับมวลแม่เหล็กที่เคลื่อนที่ ซึ่งแนบกับสปริง แรงดันไฟฟ้า AC ที่ใช้กับคอยล์เสียงจะสร้าง แรงแม่เหล็กไฟฟ้าที่ทำให้มวลเคลื่อนที่ ฤดูใบไม้ผลิจะมี การคืนค่าแรงที่ทำให้มวลกลับสู่ตำแหน่งเริ่มต้น การเคลื่อนที่กลับไปกลับมาทำให้ LRA สั่น พวกเขามี ความถี่เรโซแนนซ์ที่มีเอาต์พุตสูงสุด

ด้วยแรงดันไฟฟ้าอินพุตเดียวกันที่ความถี่ 2 ความถี่ที่แตกต่างกัน เอาต์พุตการสั่น แอมพลิจูดอาจแตกต่างกัน ยิ่งความถี่ห่างจาก LRA ความถี่สะท้อน ยิ่งแอมพลิจูดการสั่นต่ำลงเท่าใด

ฟังก์ชันทั่วไปอย่างหนึ่งของ LRA ในอุปกรณ์คือการจำลองความรู้สึกของปุ่ม คลิกที่พื้นผิวกระจกที่ไม่ตอบสนอง ทำให้การโต้ตอบของผู้ใช้รู้สึก เป็นธรรมชาติมากขึ้น เมื่อใช้กับการพิมพ์บนแป้นพิมพ์เสมือน การคลิกความคิดเห็นจะ เพิ่มความเร็วในการพิมพ์และลดข้อผิดพลาด สัญญาณความคิดเห็นเกี่ยวกับการคลิกที่ชัดเจนและชัดเจน โดยปกติจะมีความยาวน้อยกว่า 10 ถึง 20 มิลลิวินาที การได้รับการคลิกที่ดี ซึ่งจำเป็นต้องมีความรู้บางอย่างเกี่ยวกับ LRA ที่ใช้ในอุปกรณ์ นี่คือเหตุผลที่การพึ่งพา รูปแบบคลื่นที่ประกอบไว้ล่วงหน้าจะให้ผลตอบรับที่ดีที่สุดสำหรับการคลิก คุณสามารถใช้ ด้วยข้อมูลคงที่ที่แพลตฟอร์มมีให้ เมื่อใดก็ตามที่มีการคลิกตอบสนอง ที่จำเป็น

ผลการตอบสนองแบบรู้สึกได้ในอุปกรณ์จะกำหนดโดยการสั่น ตัวดำเนินการและคนขับ ไดรเวอร์ Haptic ที่มีโอเวอร์ไดรฟ์และแอ็กทีฟ คุณสมบัติเบรกจะช่วยลดเวลาการเพิ่มขึ้นและเสียงเรียกเข้าของ LRA ซึ่งทำให้ ตอบสนองดีและการสั่นสะเทือนที่ชัดเจน สำหรับภาพประกอบ เราลองมาดูวิธีกำหนดค่า รูปแบบ Waveform จะทำงานบนอุปกรณ์ทั่วไป

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

พล็อตด้านล่างแสดง Waveform ที่สอดคล้องกับข้อมูลโค้ดที่แสดง ที่ด้านบน

พล็อตของรูปแบบคลื่นอินพุตของฟังก์ชันขั้นตอน

ความเร่งที่สอดคล้องกันแสดงอยู่ด้านล่าง

พล็อตรูปแบบคลื่นที่วัดได้จริง แสดงการเปลี่ยนผ่านแบบออร์แกนิกระหว่างระดับต่างๆ มากขึ้น

โปรดทราบว่าการเร่งความเร็วจะเพิ่มขึ้นทีละน้อย ไม่ใช่ในทันที การเปลี่ยนแปลงระดับแอมพลิจูดในรูปแบบนี้ (เช่น ที่ 0 มิลลิวินาที, 150 มิลลิวินาที, 200 มิลลิวินาที, 250 มิลลิวินาที 700 มิลลิวินาที) นอกจากนี้ยังมีการข้ามการเปลี่ยนแปลงของแอมพลิจูดในแต่ละขั้นตอนด้วย ปรากฏขึ้นแบบ "ส่งเสียง" เป็นเวลาอย่างน้อย 50 มิลลิวินาที เมื่อแอมพลิจูดอินพุตกระทันหัน ลดลงเหลือ 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))

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

พล็อต Waveform ของอินพุตพร้อมขั้นตอนเพิ่มเติม

แปลงรูปแบบคลื่นที่วัดได้เพื่อแสดงการเปลี่ยนฉากที่ราบรื่นยิ่งขึ้น

โดยจะทำตามว่าการสร้างการตอบสนองแบบรู้สึกได้ในอุปกรณ์ Android ต้องใช้ระยะเวลามากกว่า เพื่อระบุความถี่และค่าแอมพลิจูด เพราะการออกแบบเว็บไซต์ไม่ใช่งานหนัก การตอบสนองแบบรู้สึกได้ตั้งแต่ต้นโดยไม่มีสิทธิ์เข้าถึงข้อกำหนดทางวิศวกรรมอย่างเต็มรูปแบบ ของตัวกระตุ้นการสั่นสะเทือนและคนขับ Android API มีค่าคงที่ที่ ช่วยให้คุณทำสิ่งต่อไปนี้ได้

  • สร้างเอฟเฟกต์และพื้นฐานที่ชัดเจน

  • ให้เชื่อมต่อเพื่อสร้างเอฟเฟกต์แบบรู้สึกได้ใหม่

ค่าคงที่แบบรู้สึกได้และตัวแปรพื้นฐานที่กำหนดไว้ล่วงหน้าเหล่านี้ช่วยให้คุณทำงานได้เร็วขึ้นอย่างมาก ในขณะเดียวกันก็มั่นใจได้ว่ามีผลกระทบแบบรู้สึกมีคุณภาพสูง