บทความนี้ก็จะยังคงต่อเนื่องกันอยู่ที่เรื่องเซนเซอร์กันต่อ คราวก่อนเป็นเรื่อง Accelerometer คราวนี้เป็น Gyroscope บ้าง สำหรับ Gyroscope ก็จะคล้ายๆกับ Acclerometer นั่นแหละ คือวัดความเร่งของการเอียงเครื่อง แต่ว่าจะแตกต่างกันออกไป โดยที่ Accelerometer จะวัดความเร่งตามแนวแกน XYZ แต่ว่าสำหรับ Gyroscope จะเป็นความเร่งเชิงมุมของแกน XYZ

สำหรับแกน XYZ บนอุปกรณ์แอนดรอยด์ใดๆ จะมีตำแหน่งดังนี้

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

ส่วนภาพข้างบนนี้คือแกน XYZ บนเครื่องที่เป็นมือถือจะเห็นว่าแนวแกน X กับ Y ไม่เหมือนกับบนแทบเลต ดังนั้นเวลาใช้ Gyroscope ก็ให้คำนึงถึงเรื่องนี้ด้วย

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

ถ้าดูจากภาพข้างบนนี้แล้ว ลองสังเกตแกน X และ Y ดู จะพบว่าการหมุนในแกน Y ก็คือการเอียงเครื่องในแกน X และการหมุนในแกน X ก็คือการเอียงเครื่องในแกน Y แต่ความแตกต่างอยู่ที่แกน Z ถ้าเป็นของ Accelerometer แกน Z จะมีการเปลี่ยนแปลงไปตามแกน X และแกน Y แต่ Gyroscope การหมุนแกน Z จะเป็นอิสระจากแกนอื่น

จากวีดีโอจะเห็นว่าหมดปัญหาเรื่องหมุนในแนวระนาบกับพื้นโลก เนื่องมาจากการที่ Gyroscope ใช้หลักการวัดความเร่งเชิงมุม

สำหรับการใช้งาน Gyroscope จะให้ใช้เฉพาะบางเครื่องเท่านั้น ไม่เหมือนกับ Accelerometer ที่มีอยู่บนแอนดรอยด์ทุกเครื่อง ดังนั้นก่อนจะเริ่มทำตามตัวอย่างในบทความนี้ให้เช็คก่อนว่าเครื่องที่ใช้ทดสอบอยู่นั้น มี Gyroscope ให้ใช้หรือไม่ สามารถเช็คง่ายๆได้จากแอปพลิเคชันที่ชื่อว่า Sensor Checker [Google Play] ในการใช้งาน Gyroscope นิยมใช้กับการหมุนเครื่อง

สำหรับคำสั่งพื้นฐานในการเริ่มใช้งานเซนเซอร์ให้อ่านจากบทความของ Accelerometer แทน Sensor API in Android — การใช้งาน Accelerometer

เวลาใช้ประกาศใช้งาน Gyroscope ก็เปลี่ยนคำสั่งจากเดิมเป็น

SensorManager sensorManager = (SensorManager)getSystemService(Context. SENSOR_SERVICE ); Sensor sensor = sensorManager.getDefaultSensor(Sensor. TYPE_GYROSCOPE);




ทีนี้มาดูตัวอย่างในบทความนี้กันเลยดีกว่า

package app.akexorcist.sensor_gyroscope; android.hardware.Sensor; android.hardware.SensorEvent; android.hardware.SensorEventListener; android.hardware.SensorManager; android.os.Bundle; android.app.Activity; android.content.Context; android.widget.TextView;public class  Main Activity { TextView textX, textY, textZ; SensorManager sensorManager; Sensor sensor; public void  onCreate(Bundle savedInstanceState) { .onCreate(savedInstanceState); setContentView(R.layout.); sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE ); sensor = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE ); textX = (TextView)findViewById(R.id.textY = (TextView)findViewById(R.id.textZ = (TextView)findViewById(R.id.); }public void  onResume() { .onResume(); sensorManager.registerListener(gyroListener, sensor, SensorManager.textX);SENSOR_DELAY_NORMAL ); }public void  onStop() { .onStop(); sensorManager.unregisterListener(textY); gyroListener); } SensorEventListener gyroListener = SensorEventListener() {public void  onAccuracyChanged(Sensor sensor, acc) { }public void  onSensorChanged(SensorEvent event) { x = event.values[0]; y = event.values[1]; z = event.values[2]; textX.setText("X : " + (" rad/s"); textY.setText("Y : " + (" rad/s"); textZ.setText("Z : " + (" rad/s"); } }; }int)x + int)y + int)z +

ตอนทดสอบ Gyroscope ต้องลองหมุนเครื่องไปมาดู เพราะค่าที่ได้เป็นค่าความเร่งเชิงมุม ดังนั้นถ้าหยุดหมุน ค่าที่ได้ก็จะเป็น 0 นั่นเอง อาจจะทดสอบลำบากไปหน่อย

สำหรับผู้ที่หลงเข้ามาอ่านคนไหนต้องการไฟล์ตัวอย่างสามารถดาวน์โหลดได้จาก