เครื่องวัดความเร่งในแอปมือถือ: มันคืออะไร, ทำงานอย่างไร และใช้ที่ไหน

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-03-22 เวลาอ่าน: 9 นาที

เครื่องวัดความเร่งในอุปกรณ์มือถือคือเซ็นเซอร์ MEMS ที่วัดความเร่งเชิงเส้นตามสามแกนเพื่อกำหนดทิศทางและการเคลื่อนที่ของอุปกรณ์ ตาม Google Android Sensors Guide (2025) เครื่องวัดความเร่งเป็นเซ็นเซอร์ที่ใช้มากที่สุดในแอปพลิเคชันมือถือ เทคโนโลยี MEMS ช่วยให้วางเซ็นเซอร์ในชิปขนาด 1 มม. ที่กินไฟน้อยกว่า 1 มิลลิวัตต์

ประเด็นสำคัญ

  • เครื่องวัดความเร่ง — เซ็นเซอร์ MEMS วัดความเร่งบนแกน X, Y และ Z ในหน่วย m/s² หรือ g
  • หลักการทำงาน อาศัยการเคลื่อนที่ของมวลขนาดเล็กภายใต้ความเร่ง ซึ่งตรวจวัดโดยเซ็นเซอร์แบบคาปาซิทีฟ
  • Android ให้การเข้าถึงผ่าน SensorManager และ SensorEventListener
  • iOS ใช้ CoreMotion กับ CMMotionManager เพื่อรับข้อมูลจากเครื่องวัดความเร่ง
  • การใช้งาน — ตรวจจับทิศทางหน้าจอ, นับก้าว, เกม, คงภาพนิ่ง

เครื่องวัดความเร่งคืออะไร

เครื่องวัดความเร่ง คือเซ็นเซอร์ไมโครอิเล็กโทรเมคานิกส์ (MEMS) ที่วัดการฉายของความเร่งบนสามแกนที่ตั้งฉากกัน: X (แนวนอน, ไปทางขวา), Y (แนวตั้ง, ขึ้นด้านบน) และ Z (ตั้งฉากกับระนาบหน้าจอ) ในสภาวะนิ่ง เครื่องวัดความเร่งจะแสดงค่า 9.8 m/s² บนแกน Z — นี่คือความเร่งเนื่องจากแรงโน้มถ่วงที่มุ่งสู่ศูนย์กลางโลก จากค่านี้ ระบบจะกำหนดทิศทางของอุปกรณ์: ถ้าค่า Z ใกล้ 0 และค่า Y ใกล้ -9.8 m/s² แสดงว่าอุปกรณ์ถูกหมุนในแนวนอน ช่วงการวัดของเครื่องวัดความเร่งโดยทั่วไปคือ ±2g, ±4g, ±8g หรือ ±16g ขึ้นอยู่กับรุ่นของชิป

พารามิเตอร์ทางกายภาพของเครื่องวัดความเร่ง

เครื่องวัดความเร่ง สมัยใหม่มีลักษณะเฉพาะด้วยพารามิเตอร์สำคัญหลายประการ: ความไว (ตั้งแต่ 0.001 m/s²), อัตราการสุ่มตัวอย่าง (สูงถึง 1000 Hz), ช่วงการวัด และระดับสัญญาณรบกวน อุปกรณ์เรือธงใช้เซ็นเซอร์ STMicroelectronics LSM6DSO หรือ Bosch BMI270 ที่มีความถี่สูงถึง 1600 Hz และกินไฟน้อยกว่า 0.5 mW ในโหมดทำงาน ยิ่งอัตราการสุ่มตัวอย่างสูง สัญญาณที่แอปได้รับก็ยิ่งละเอียด — เกมต้องการ 200–400 Hz ในขณะที่นับก้าวต้องการเพียง 10–50 Hz สัญญาณรบกวนของเซ็นเซอร์ส่งผลต่อความแม่นยำของการวัดและมักได้รับการชดเชยด้วยตัวกรองความถี่ต่ำที่ระดับ OS

หลักการทำงานของเครื่องวัดความเร่ง

เครื่องวัดความเร่ง MEMS ภายในประกอบด้วยโครงสร้างซิลิคอนขนาดเล็ก: มวลทดสอบที่แขวนอยู่บนคานยืดหยุ่นระหว่างอิเล็กโทรดคงที่ เมื่อมีความเร่ง มวลจะเคลื่อนที่ เปลี่ยนความจุระหว่างองค์ประกอบที่เคลื่อนที่และคงที่ — การเปลี่ยนแปลงนี้จะถูกวัดและแปลงเป็นสัญญาณไฟฟ้า วงจรป้อนกลับแบบวงปิดจะรักษามวลให้อยู่ในตำแหน่งกึ่งกลางด้วยแรงไฟฟ้าสถิต เพื่อให้มั่นใจถึงความเป็นเชิงเส้นตลอดช่วง ในระบบวงเปิด มวลจะเคลื่อนที่อย่างอิสระ การคำนวณง่ายกว่าแต่ความแม่นยำต่ำกว่า ตามข้อมูลของ STMicroelectronics (2025) เครื่องวัดความเร่งแบบวงปิดให้ความแม่นยำสูงถึง 0.001g โดยมีการเลื่อนอุณหภูมิน้อยกว่า 0.1 มก./°C

แกนวัด

สามแกน ของเครื่องวัดความเร่งสอดคล้องกับสามมิติของพื้นที่: X (เอียงซ้าย-ขวา), Y (ขึ้น-ลง) และ Z (หน้า-หลังสัมพันธ์กับหน้าจอ) เมื่ออุปกรณ์วางบนโต๊ะโดยหงายหน้าจอขึ้น เวกเตอร์ความเร่งโน้มถ่วงจะชี้ไปตามแกน Z ที่ 9.8 m/s² เมื่อเอียงอุปกรณ์ การฉายของแรงโน้มถ่วงจะกระจายใหม่ระหว่างแกน — จากการฉายเหล่านี้ สามารถคำนวณมุมเอียงได้ด้วยความแม่นยำสูงถึง 0.1 องศา ในการตรวจจับการเคลื่อนที่โดยไม่มีอิทธิพลของแรงโน้มถ่วง จะใช้ตัวกรองความถี่สูงเพื่อแยกองค์ประกอบไดนามิกของความเร่ง (การเคลื่อนที่ของอุปกรณ์เอง) ออกจากองค์ประกอบคงที่ (แรงโน้มถ่วง)

รับข้อมูลจากเครื่องวัดความเร่งบน Android

บน Android การเข้าถึงเครื่องวัดความเร่ง ทำได้ผ่านคลาส SensorManager และอินเทอร์เฟซ SensorEventListener แอปจะรับบริการระบบ SENSOR_SERVICE ขอเซ็นเซอร์ TYPE_ACCELEROMETER และลงทะเบียนตัวฟังด้วยอัตราการอัปเดตที่ระบุ ระบบจะเรียก onSensorChanged ทุกครั้งที่มีการวัดใหม่พร้อมอาร์เรย์ของค่า: values[0] = X, values[1] = Y, values[2] = Z ด้านล่างเป็นตัวอย่างสมบูรณ์ของการอ่านข้อมูลเครื่องวัดความเร่งใน Kotlin

kotlin
val sensorManager = getSystemService(SENSOR_SERVICE) as SensorManager
val accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)

val sensorEventListener = object : SensorEventListener {
    override fun onSensorChanged(event: SensorEvent) {
        val x = event.values[0]
        val y = event.values[1]
        val z = event.values[2]

        // คำนวณมุมเอียง
        val pitch = Math.atan2(
            x.toDouble(),
            Math.sqrt(y.toDouble() * y + z.toDouble() * z)
        )
        // อัปเดต UI ด้วยมุมใหม่
        textViewAngle.text = "ความเอียง: ${Math.toDegrees(pitch)}°"
    }

    override fun onAccuracyChanged(
        sensor: Sensor, accuracy: Int
    ) { }
}

sensorManager.registerListener(
    sensorEventListener,
    accelerometer,
    SensorManager.SENSOR_DELAY_GAME
)

ในตัวอย่าง SensorManager.SENSOR_DELAY_GAME กำหนดอัตราการอัปเดตที่ ~50 Hz ซึ่งเหมาะสมที่สุดสำหรับเกมและแอปแบบโต้ตอบ สำหรับการนับก้าว ให้ใช้ SENSOR_DELAY_NORMAL (~5 Hz); สำหรับการวัดที่แม่นยำ ให้ใช้ SENSOR_DELAY_FASTEST (~200 Hz) ใน onSensorChanged อาร์เรย์ event.values จะมีค่าที่อ่านได้ปัจจุบันของเซ็นเซอร์ จากค่า X, Y, Z มุมเอียงจะคำนวณโดยใช้ atan2 — นี่คือสูตรพื้นฐานสำหรับกำหนดทิศทางของอุปกรณ์โดยไม่ต้องใช้เซ็นเซอร์ทิศทาง อย่าลืมยกเลิกการลงทะเบียนตัวฟังใน onPause เพื่อประหยัดแบตเตอรี่

การกรองสัญญาณรบกวน

kotlin
private val alpha = 0.8f
private val gravity = FloatArray(3)
private val linearAcceleration = FloatArray(3)

override fun onSensorChanged(event: SensorEvent) {
    // ตัวกรองความถี่ต่ำ (LPF) สำหรับแยกแรงโน้มถ่วง
    gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0]
    gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1]
    gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2]

    // ลบแรงโน้มถ่วง — ได้ความเร่งเส้นตรง
    linearAcceleration[0] = event.values[0] - gravity[0]
    linearAcceleration[1] = event.values[1] - gravity[1]
    linearAcceleration[2] = event.values[2] - gravity[2]
}

ตัวกรองความถี่ต่ำที่มีค่าสัมประสิทธิ์ alpha จะแยกองค์ประกอบแรงโน้มถ่วง (เวกเตอร์คงที่); การลบออกจะได้ความเร่งบริสุทธิ์ของอุปกรณ์ (ความเร่งเชิงเส้น) ซึ่งจำเป็นสำหรับการตรวจจับการเคลื่อนที่โดยไม่คำนึงถึงทิศทาง — เช่น การตรวจจับก้าว การเขย่า หรือการกระแทก ค่า alpha 0.8 หมายความว่าตัวกรองยอมให้สัญญาณใหม่ผ่านประมาณ 20% และคงไว้ 80% ของสัญญาณก่อนหน้า — เพียงพอที่จะกำจัดสัญญาณรบกวนโดยไม่มีความล่าช้าที่มีนัยสำคัญ

รับข้อมูลจากเครื่องวัดความเร่งบน iOS

บน iOS การเข้าถึงเครื่องวัดความเร่ง จัดเตรียมโดยเฟรมเวิร์ก Core Motion ผ่านคลาส CMMotionManager แอปสร้างอินสแตนซ์ของผู้จัดการและเรียก startAccelerometerUpdates พร้อมคิวและตัวจัดการ ข้อมูลจะถูกส่งกลับเป็น CMAccelerometerData ซึ่งมีโครงสร้าง CMAcceleration พร้อมฟิลด์ x, y และ z ด้านล่างเป็นตัวอย่างการรับข้อมูลเครื่องวัดความเร่งใน Swift พร้อมการกรองสัญญาณรบกวน

swift
import CoreMotion

let motionManager = CMMotionManager()
motionManager.accelerometerUpdateInterval = 1.0 / 60.0

guard motionManager.isAccelerometerAvailable else { return }

motionManager.startAccelerometerUpdates(to: OperationQueue.current!) {
    data, error in

    guard let acceleration = data?.acceleration,
          error == nil else { return }

    // ค่าในหน่วย g (1 g = 9.8 m/s²)
    let magnitude = sqrt(
        acceleration.x * acceleration.x +
        acceleration.y * acceleration.y +
        acceleration.z * acceleration.z
    )

    // ถ้า magnitude > 2.5 g — ตรวจจับการเขย่า
    if magnitude > 2.5 {
        DispatchQueue.main.async {
            self.handleShake()
        }
    }
}

ในตัวอย่าง accelerometerUpdateInterval ถูกตั้งค่าเป็น 1/60 วินาที (~60 Hz) — เหมาะสมที่สุดสำหรับแอนิเมชันที่ลื่นไหลและเกม เมธอด isAccelerometerAvailable ตรวจสอบว่าเซ็นเซอร์พร้อมใช้งานบนอุปกรณ์หรือไม่ ค่าความเร่งจะถูกส่งกลับในหน่วย g (โดย 1 g = 9.8 m/s²) เวกเตอร์ magnitude คำนวณเป็นบรรทัดฐานแบบยุคลิดของสามองค์ประกอบ — ถ้าค่าเกิน 2.5 g จะถูกตีความว่าเป็นการเขย่าอุปกรณ์ หากต้องการหยุดการอัปเดต ให้เรียก stopAccelerometerUpdates เสมอเมื่อออกจากหน้าจอ

กรณีการใช้งาน

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

สถานการณ์ความถี่ (Hz)ความแม่นยำการกรอง
หมุนหน้าจออัตโนมัติ5–10ต่ำLPF
นับก้าว20–50ปานกลางHPF + ตัวตรวจจับจุดสูงสุด
เกม (แข่งรถ)50–200สูงการสอบเทียบ + LPF
คงภาพกล้อง200–1000สูงสุดตัวกรองเสริม
จดจำท่าทาง50–100ปานกลางHPF + ตัวตรวจจับเกณฑ์

เมื่อใช้งานเครื่องวัดความเร่ง โปรดทราบว่าความร้อนของอุปกรณ์และอายุของเซ็นเซอร์อาจส่งผลต่อความแม่นยำในการอ่านค่า สำหรับการวัดที่สำคัญ (คงภาพวิดีโอ, เข็มทิศ) แนะนำให้ใช้ไจโรสโคปและแมกนีโตมิเตอร์เพิ่มเติมเป็นส่วนหนึ่งของการรวมเซ็นเซอร์

การสอบเทียบและข้อผิดพลาด

เครื่องวัดความเร่ง มีแนวโน้มที่จะเกิดข้อผิดพลาดหลายประเภท: การเลื่อนศูนย์ (bias) — เมื่อเซ็นเซอร์แสดงค่าที่ไม่ใช่ศูนย์ในสภาวะนิ่ง; ข้อผิดพลาดของปัจจัยมาตราส่วน — เมื่อความไวแตกต่างกันระหว่างแกน; และสัญญาณรบกวนการวัด ซึ่งลดความแม่นยำของการอ่านครั้งเดียว เซ็นเซอร์ MEMS ได้รับการสอบเทียบระหว่างการผลิต แต่เมื่อเวลาผ่านไป พารามิเตอร์อาจเลื่อนเนื่องจากอุณหภูมิและความเค้นเชิงกล สำหรับการชดเชยในแอป สามารถดำเนินการสอบเทียบอย่างง่าย: ในสภาวะนิ่ง ให้บันทึกค่าเฉลี่ย (การเลื่อน) และลบค่านั้นออกจากการวัดที่ตามมาทั้งหมด การสอบเทียบที่แม่นยำยิ่งขึ้นต้องหมุนอุปกรณ์ตามทุกแกน — วิธีการนี้เรียกว่าการสอบเทียบหกจุดและให้ข้อผิดพลาดน้อยกว่า 0.5%

คำถามที่พบบ่อย

เครื่องวัดความเร่งในโทรศัพท์คืออะไร?

เครื่องวัดความเร่ง ในสมาร์ทโฟนคือเซ็นเซอร์ MEMS ขนาดประมาณ 1 มม. ที่วัดความเร่งบนสามแกน โดยกำหนดทิศทางของอุปกรณ์ (แนวตั้งหรือแนวนอน), การเขย่า, ก้าว และการเคลื่อนที่โดยไม่ต้องใช้แหล่งภายนอก

เครื่องวัดความเร่งต่างจากไจโรสโคปอย่างไร?

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

วิธีรับข้อมูลเครื่องวัดความเร่งบน Android?

ใช้ SensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) เพื่อรับเซ็นเซอร์ จากนั้น registerListener กับ SensorEventListener ใน onSensorChanged อาร์เรย์ event.values จะมีค่า X, Y, Z ในหน่วย m/s² ยกเลิกการลงทะเบียนใน onPause เสมอ

วิธีตรวจจับการเขย่าอุปกรณ์?

คำนวณ magnitude = sqrt(x² + y² + z²) ถ้าค่าเกิน 2–3 g (หลังจากกรองแรงโน้มถ่วง) แสดงว่าอุปกรณ์ถูกเขย่า บน iOS ให้ใช้ CMMotionManager ที่เกณฑ์ 2.5 g; บน Android ให้ใช้ Sensor.TYPE_LINEAR_ACCELERATION ที่เกณฑ์ 15 m/s²

สามารถสอบเทียบเครื่องวัดความเร่งด้วยซอฟต์แวร์ได้หรือไม่?

ได้ สำหรับการสอบเทียบอย่างง่าย วางอุปกรณ์บนพื้นผิวเรียบ บันทึกค่าเฉลี่ยของแต่ละแกนเป็นเวลา 2–3 วินาที และลบค่าเหล่านั้นออกจากการวัดที่ตามมาทั้งหมด ซึ่งชดเชยการเลื่อนศูนย์ แต่ไม่ชดเชยข้อผิดพลาดของมาตราส่วน

สรุป

  • เครื่องวัดความเร่ง — เซ็นเซอร์ MEMS สำหรับวัดความเร่งบนแกน X, Y, Z อาศัยการเคลื่อนที่ของมวลขนาดเล็ก
  • หลักการทำงาน — MEMS แบบคาปาซิทีฟพร้อมป้อนกลับวงปิด ความแม่นยำสูงถึง 0.001g
  • Android จัดเตรียม SensorManager กับ TYPE_ACCELEROMETER และ SensorEventListener สำหรับการเข้าถึงข้อมูล
  • iOS ใช้ Core Motion กับ CMMotionManager และ startAccelerometerUpdates เพื่อรับข้อมูล
  • การกรอง — ความถี่ต่ำสำหรับแรงโน้มถ่วง และความถี่สูงสำหรับความเร่งเชิงเส้น
  • การใช้งาน — หมุนหน้าจออัตโนมัติ, นับก้าว, เกม, คงภาพนิ่ง และจดจำท่าทาง
  • คำแนะนำ — เลือกอัตราการอัปเดตตามสถานการณ์: 20–50 Hz สำหรับก้าว, 50–200 Hz สำหรับเกม, 200–1000 Hz สำหรับคงภาพนิ่ง

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม