[Android] Android Sensors Overview

Sathittham (Phoo) Sangthong
SS Blog
Published in
3 min readJan 23, 2014
Best-Android-Games-with-Accelerometer-Control

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

เนื่องจากเซนเซอร์ของ Android มีให้เลือกหลากหลาย ขึ้นอยู่กับอุปกรณ์ ขึ้นอยู่กับการนำไปใช้งาน ขึ้นอยู่กับชนิดของเซนเซอร์
มีทั้งส่วนที่เป็นค่าดิบ (Raw Data) จาก Hardware ส่วนที่ได้จากการนำค่าดิบมาผ่านกระบวนการทาง Software เพื่อให้ได้ค่าของ sensor นั้นๆใหม่มา และ Sensor ที่ทาง Android ยกเลิกให้มีการใช้แล้ว (ยังใช้งานได้ แต่ไม่แนะนำให้ใช้ เพราะ Error สูง )

ผมจะแบ่งเซนเซอร์ต่าง เป็น 2 ลักษณะ คือ แบ่งตามการนำไปใช้งาน และประเภทของเซนเซอร์

  • แบ่งเซนเซอร์ตามการใช้งาน
  • Motion Sensors
    เป็นเซนเซอร์ที่เกี่ยวกับการตรวจจับการเคลื่อนไหวเช่นความเร่งและแรงของการหมุนในแนวแกนทั้ง 3 มิติ โดยเซนเซอร์ที่อยู่ในหมวดนี้ ก็คือ Accelerometer, Gravity sensor, Gyroscopes, Rotational Vector Sensor
  • Environmental Sensors
    เป็นเซนเซอร์เกี่ยวกับการตรวจสภาพแวดล้อม เช่น อุณหภูมิและความกดอากาศ (รอบๆเครื่อง) ความสว่าง ความชื่น โดยเซนเซอร์ที่อยู่ในหมวดนี้ ก็คือ Barometer, Photometers, Thermometers
  • Position Sensors
    เซนเซอร์เกี่ยวกับการตรวจหาตำแหน่งทางกายภาพของเครื่อง โดยเซนเซอร์ที่อยู่ในหมวดนี้ก็คือ Orientation sensor และ Magnetomerter
  • แบ่งตามประเภทของเซนเซอร์
  • Hardware Sensor
  • Accelerometer
  • Ambient Temperature
  • Gyroscope
  • Light
  • Magnetic Field
  • Pressure
  • Proximity
  • Relative Humidity
  • Software Sensor
  • Gravity
  • Linear Accelerometer
  • Rotation Vector
  • Deprecated Sensor
  • Orientation
  • Temperature

ตารางแสดงเซนเซอร์ที่มีใน Android แต่ละรุ่น

8-2-2557 16-51-32

ตัวอย่าง Sensor ที่ซ่อนอยู่ใน Galaxy S4

samsung-sensor

รายละเอียดของเซนเซอร์แต่ละตัว

Hardware Sensor

เป็นเซนเซอร์ที่มีอุปกรณ์ Hardware ให้ค่าดิบครับ โดยแต่ละตัวมีลักษณะการใช้งานที่แตกต่างกันไปครับ

  • Accelerometer
  • เซนเซอร์วัดความเร่ง
  • สำหรับ : วัดความเร่งที่กระทำต่ออุปกรณ์ทั้ง 3 แกน มีหน่วยเป็น m/s2 โดยรวมแรงดึงดูดของโลกด้วย
  • ชนิด : Hardware
  • นำไปใช้ : ตรวจจับการเคลื่อนไหว เช่น การสั่น การเอียง เป็นต้น
  • การเรียกใช้งาน : TYPE_ACCELEROMETER
  • ผลลัพธ์ที่ได้
  • ค่าบนแกน x : SensorEvent.values[0]
  • ค่าบนแกน y : SensorEvent.values[1]
  • ค่าบนแกน z : SensorEvent.values[2]
  • Ambient Temperature
  • เซนเซอร์วัดอุณหภูมิรอบๆ (อุณหภมิภายนอก)
  • สำหรับ : สำหรับวัดอุณหภูมิรอบๆอุปกรณ์หรืออุณหภูมิห้อง มีหน่วยเป็นเซลเซียส (°C)
  • ชนิด : Hardware
  • นำไปใช้ : ตรวจวัดอุณหภูมิของอากาศ
  • การเรียกใช้งาน : TYPE_AMBIENT_TEMPERATURE
  • ผลลัพธ์ที่ได้ : SensorEvent.values[0]
  • Gyroscope
  • เซนเซอร์ไจโรสโคป
  • สำหรับ : วัดอัตราการหมุนของอุปกรณ์ทั้ง 3 แกน มีหน่วยเป็น rad/s
  • ชนิด : Hardware
  • นำไปใช้ : ตรวจจับการหมุน เช่น การหมุน การเลี้ยวเอียง เป็นต้น
  • การเรียกใช้งาน : TYPE_GYROSCOPE
  • ผลลัพธ์ที่ได้
  • ค่าบนแกน x : SensorEvent.values[0]
  • ค่าบนแกน y : SensorEvent.values[1]
  • ค่าบนแกน z : SensorEvent.values[2]
  • Light
  • เซนเซอร์วัดความเข้มแสง
  • สำหรับ : วัดระดับความเข้มแสง มีหน่วยเป็น lx (lux)
  • ชนิด : Hardware
  • นำไปใช้ : ช่วยควบคุมความสว่างของหน้าจอ
  • การเรียกใช้งาน : TYPE_LIGHT
  • ผลลัพธ์ที่ได้ : SensorEvent.values[0]
  • Magnetic Field
  • เซนเซอร์ความเข้มสนามแม่เหล็ก
  • สำหรับ : วัดค่าความเข้มของสนามแม่เหล็ก ทั้ง 3 แกน มีหน่วยเป็น μT (micro-Tesla)
  • ชนิด : Hardware
  • นำไปใช้ : เข็มทิศดิจิตอล
  • การเรียกใช้งาน : TYPE_MAGNETIC_FIELD
  • ผลลัพธ์ที่ได้
  • ค่าบนแกน x : SensorEvent.values[0]
  • ค่าบนแกน y : SensorEvent.values[1]
  • ค่าบนแกน z : SensorEvent.values[2]
  • Pressure
  • เซนเซอร์ความดันบรรยากาศ
  • สำหรับ : วัดความดันบรรยากาศรอบๆอุปกรณ์ มีหน่วยเป็น hPa (hectopascal) หรือ mbar (milibar)
  • ชนิด : Hardware
  • นำไปใช้ : ตรวจวัดการเปลี่ยนแปลงสภาพความกดอากาศ
  • การเรียกใช้งาน : TYPE_PRESSURE
  • ผลลัพธ์ที่ได้ : SensorEvent.values[0]
  • Proximity
  • เซนเซอร์วัดความใกล้ (ประมาณ)
  • สำหรับ : วัดความใกล้ของวัตถุกับหน้าจอของอุปกรณ์ มีหน่วยเป็น cm.
  • ชนิด : Hardware
  • นำไปใช้ : ตรวจสอบว่ามือถือได้ถูกยกไปแนบหูหรือเปล่า (เพื่อทำการปิดหน้าจอ ระหว่างการสนทนา)
  • การเรียกใช้งาน : TYPE_PROXIMITY
  • ผลลัพธ์ที่ได้ : SensorEvent.values[0]
  • Relative Humidity
  • เซนเซอร์ความชื้นสัมพัทธ์
  • สำหรับ : วัดความชื้นโดยรอบอุปกรณ์ มีหน่วยเป็นเปอร์เซนต์ (%)
  • ชนิด : Hardware
  • นำไปใช้ : ตรวจวัดค่าจุดไอน้ำกลั่นตัว (dewpoint) ค่าสัมบูรณ์ (absolute) และค่าความชื้นสัมพัทธ์
  • การเรียกใช้งาน : TYPE_RELATIVE_HUMIDITY
  • ผลลัพธ์ที่ได้ : SensorEvent.values[0]

Software Sensor

เป็นเซนเซอร์ที่นำค่าดิบจาก Hardware ต่างๆ (1 อันหรือหลายๆอันมาผสมกัน) เพื่อสังเคราะห์เป็นเซอร์เพื่อใช้งานดังต่อไปนี้ครับ

  • Gravity
  • เซนเซอร์วัดแรงดึงดูด
  • สำหรับ : วัดแรงดึงดูดที่กระทำกับอุปกรณ์ทั้ง 3 แกน มีหน่วยเป็น m/s2
  • ชนิด : Software
  • นำไปใช้ : ตรวจกับการเคลื่อนไหว เช่นการสั่น การเอียง
  • การเรียกใช้งาน : TYPE_GRAVITY
  • ผลลัพธ์ที่ได้ :
  • ค่าบนแกน x : SensorEvent.values[0]
  • ค่าบนแกน y : SensorEvent.values[1]
  • ค่าบนแกน z : SensorEvent.values[2]
  • Linear Accelerometer
  • เซนเซอร์วัดความเร่งเชิงเส้น
  • สำหรับ : วัดความเร่งที่กระทำกับอุปกรณ์ในแนวเชิงเส้นทั้ง 3 แกน มีหน่วยเป็น m/s2 โดยไม่รวมแรงโน้มถ่วง
  • ชนิด : Software
  • นำไปใช้ : ตรวจวัดความเร่งในแนวแกนใดแกนหนึ่ง
  • การเรียกใช้งาน : TYPE_LINEAR_ACCELERATION
  • ผลลัพธ์ที่ได้ :
  • ค่าบนแกน x : SensorEvent.values[0]
  • ค่าบนแกน y : SensorEvent.values[1]
  • ค่าบนแกน z : SensorEvent.values[2]
  • Rotation Vector
  • เซนเซอร์เวกเตอร์การหมุน
  • สำหรับ : ตรวจวัดการหมุนของอุปกรณ์ด้วยกาหาเวกเตอร์การหมุน
  • ชนิด : Software
  • นำไปใช้ : ตรวจจับการเคลื่อนไหวและการหมุน
  • การเรียกใช้งาน : TYPE_ROTATION_VECTOR
  • ผลลัพธ์ที่ได้ :
  • ค่าบนแกน x (x * sin(θ/2)) : SensorEvent.values[0]
  • ค่าบนแกน y (y * sin(θ/2)) : SensorEvent.values[1]
  • ค่าบนแกน z (z * sin(θ/2)) : SensorEvent.values[2]
  • ค่าสเกล่าส่วนประกอบของเวกเตอร์ ((cos(θ/2)) : SensorEvent.values[3] (scalar value)

Deprecated Sensor

เซ็นเซอร์เหล่านี้ทาง Android ไม่แนะนำให้ใช้แล้วครับ เนื่องจากค่าความผิดพลาดสูง แต่ก็ยังใช้ได้อยู่นะครับ (ถ้าจะใช้จริงๆ)

  • Orientation
  • เซนเซอร์วัดการหมุน
  • สำหรับ : ตรวจวัดองศาการหมุนของอุปกรณ์รอบๆอุปกรณ์ทั้ง 3 แกน
  • ชนิด : Software
  • นำไปใช้ : หาตำแหน่งของอุปกรณ์
  • การเรียกใช้งาน : TYPE_ORIENTATION
  • ผลลัพธ์ที่ได้ :
  • ค่าบนแกน x : SensorEvent.values[0]
  • ค่าบนแกน y : SensorEvent.values[1]
  • ค่าบนแกน z : SensorEvent.values[2]
  • Temperature
  • เซนเซอร์วัดอุณหภูมิ
  • สำหรับ : วัดอุณหภูมิภายในอุปกรณ์ มีหน่วยเป็นเซลเซียส (°C)
  • ชนิด : Hardware
  • นำไปใช้ : ตรวจวัดอุณหภูมิ
  • การเรียกใช้งาน : TYPE_TEMERATURE
  • ผลลัพธ์ที่ได้ : SensorEvent.values[0]

อ้างอิง

--

--

Sathittham (Phoo) Sangthong
SS Blog

Hi! It's me Phoo! I’m a Software Developer 👨‍💻 , a Startup Entrepreneur 📱 and a Runner 🏃 . Currently, I’m a Co-Founder and CTO of a Startup name “Urbanice”.