অ্যান্ড্রয়েড ডিভাইসে জাইরোস্কোপ (Gyroscope) সেন্সর সাপোর্ট যাচাই
এই টিউটোরিয়ালে শিখব কিভাবে SensorManager ব্যবহার করে ডিভাইসে জাইরোস্কোপ সেন্সর উপলব্ধ কিনা তা যাচাই করতে হয়। জাইরোস্কোপ ঘূর্ণন বেগ (angular velocity) পরিমাপ করে এবং গেমিং, AR/VR, নেভিগেশনের জন্য অপরিহার্য।
প্রয়োজনীয় ধাপসমূহ
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন
Android Studio-তে File → New Project নির্বাচন করে প্রজেক্ট তৈরি করুন।
ধাপ ২: লেআউট ফাইল
res/layout/activity_main.xml ফাইলে:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:gravity="center"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<TextView
android:id="@+id/actionEvent"
android:textSize="40sp"
android:layout_marginTop="30dp"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
ধাপ ৩: জাভা কোড
src/MainActivity.java ফাইলে:
package com.example.myapplication;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private SensorManager sensorManager;
TextView actionEvent;
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actionEvent = findViewById(R.id.actionEvent);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
// জাইরোস্কোপ সেন্সর যাচাই
Sensor gyroscopeSensor = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
if (gyroscopeSensor != null) {
actionEvent.setText("✓ জাইরোস্কোপ সমর্থিত\n" +
"নাম: " + gyroscopeSensor.getName() + "\n" +
"ম্যাক্স রেঞ্জ: " + gyroscopeSensor.getMaximumRange() + " rad/s\n" +
"রেজোলিউশন: " + gyroscopeSensor.getResolution() + " rad/s\n" +
"পাওয়ার: " + gyroscopeSensor.getPower() + " mA\n" +
"মিন ডिले: " + gyroscopeSensor.getMinDelay() + " μs");
} else {
actionEvent.setText("✗ জাইরোস্কোপ সমর্থিত নয়");
}
}
}
জাইরোস্কোপ সেন্সর বিবরণ
| বিষয় | বিস্তারিত |
|---|---|
| সেন্সর টাইপ | Sensor.TYPE_GYROSCOPE |
| পরিমাপ | X, Y, Z অক্ষে ঘূর্ণন বেগ (radians/second) |
| একক | রেডিয়ান পার সেকেন্ড (rad/s) |
| API লেভেল | 1 (Android 1.0 থেকে) |
| সাধারণ রেঞ্জ | ±34.91 rad/s (২০০০ deg/s) বা বেশি |
জাইরোস্কোপ ডেটা পড়া
SensorEventListener listener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float x = event.values[0]; // X-অক্ষ ঘূর্ণন
float y = event.values[1]; // Y-অক্ষ ঘূর্ণন
float z = event.values[2]; // Z-অক্ষ ঘূর্ণন
// UI আপডেট বা গেম লজিক
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
};
sensorManager.registerListener(listener, gyroscopeSensor, SensorManager.SENSOR_DELAY_GAME);
জাইরোস্কোপ vs এক্সিলারোমিটার
| বৈশিষ্ট্য | জাইরোস্কোপ | এক্সিলারোমিটার |
|---|---|---|
| পরিমাপ | ঘূর্ণন বেগ (Angular velocity) | লিনিয়ার ত্বরণ (Linear acceleration) |
| গ্র্যাভিটি প্রভাব | না | হ্যাঁ (গ্র্যাভিটি কম্পোনেন্ট থাকে) |
| ড্রিফট | সময়ের সাথে বেড়ে (integration error) | নहीं |
| দ্রুত প্রতিক্রিয়া | হ্যাঁ | মধ্যম |
সেন্সর ফিউশন (Sensor Fusion)
সর্বোত্তম ফলাফলের জন্য জাইরোস্কোপ + এক্সিলারোমিটার + ম্যাগনেটোমিটার মিলিয়ে ব্যবহার করা হয় (AHRS алгоритম, Kalman filter, Complementary filter)।
ব্যবহারের ক্ষেত্র
- মোবাইল গেমিং (রেসিং, FPS কন্ট্রোল)
- AR/VR অ্যাপ্লিকেশন (হেড ট্র্যাকিং)
- ইমেজ স্ট্যাবিলাইজেশন (OIS/EIS)
- ইন্ডোর নেভিগেশন (Dead reckoning)
- ফলো মোড ড্রোন কন্ট্রোল
অ্যাপ্লিকেশন চালানো
রান করলে ডিভাইসে জাইরোস্কোপ থাকলে বিস্তারিত স্পেসিফিকেশন সহ "✓ জাইরোস্কোপ সমর্থিত" দেখাবে। অধিকাংশ মিড-রেঞ্জ ও প্রিমিয়াম ফোনে এটি থাকে।
লক্ষ্য করুন
- বাজেট ফোনে (Go edition, এন্ট্রি লেভেল) জাইরোস্কোপ থাকে না
- GAME_DELAY রেট ব্যবহার করুন গেমিং-এর জন্য