অ্যান্ড্রয়েড ডিভাইসে ব্যারোমেট্রিক প্রেশার (Pressure) সেন্সর সাপোর্ট যাচাই
এই টিউটোরিয়ালে শিখব কিভাবে SensorManager ব্যবহার করে ডিভাইসে ব্যারোমেটার (বায়ুমণ্ডলীয় চাপ) সেন্সর উপলব্ধ কিনা তা যাচাই করতে হয়। এটি высоতা (altitude) মাপা, আবহাওয়া পূর্বাভাস, এবং ইন্ডোর ফ্লোর ডিটেকশনের জন্য ব্যবহৃত হয়।
প্রয়োজনীয় ধাপসমূহ
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন
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 pressureSensor = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE);
if (pressureSensor != null) {
actionEvent.setText("✓ প্রেশার সেন্সর (ব্যারোমেটার) সমর্থিত\n" +
"নাম: " + pressureSensor.getName() + "\n" +
"বেন্ডর: " + pressureSensor.getVendor() + "\n" +
"ম্যাক্স রেঞ্জ: " + pressureSensor.getMaximumRange() + " hPa\n" +
"রেজোলিউশন: " + pressureSensor.getResolution() + " hPa\n" +
"পাওয়ার: " + pressureSensor.getPower() + " mA");
} else {
actionEvent.setText("✗ প্রেশার সেন্সর সমর্থিত নয়");
}
}
}
প্রেশার সেন্সর (ব্যারোমেটার) বিবরণ
| বিষয় | বিস্তারিত |
|---|---|
| সেন্সর টাইপ | Sensor.TYPE_PRESSURE |
| পরিমাপ | বায়ুমণ্ডলীয় চাপ (Atmospheric pressure) |
| একক | হেক্টোপাস্কেল (hPa) = মিলিবার (mbar) |
| সাধারণ রেঞ্জ | ৩০০ - ১১০০ hPa |
| সমুদ্রতলে স্ট্যান্ডার্ড চাপ | ১০১৩.২৫ hPa |
| টেকনোলজি | MEMS পিজোরেজিস্টিভ / ক্যাপাসিটিভ |
| API লেভেল | 9 (Android 2.3 Gingerbread) |
| উপলব্ধতা | মিড-রেঞ্জ+ ফোনে (Samsung Galaxy S3+, Pixel, OnePlus ইত্যাদি) |
প্রেশার থেকে উচ্চতা (Altitude) ক্যালকুলেশন
// ব্যারোমেট্রিক ফর্মুলা (ইন্টারন্যাশনল স্ট্যান্ডার্ড অ্যাটমোসফিয়ার)
public float calculateAltitude(float pressure, float seaLevelPressure) {
// seaLevelPressure: বর্তমান অবস্থানের সমুদ্রস্তরের চাপ (hPa)
// সাধারণত ১০১৩.২৫ hPa ব্যবহার করা হয়, কিন্তু স্থানীয় আবহাওয়া স্টেশন থেকে আপডেট করা ভালো
return 44330.0f * (1.0f - (float) Math.pow(pressure / seaLevelPressure, 0.1903f));
// ফলাফল মিটারে
}
// ব্যবহার
float altitude = calculateAltitude(currentPressure, 1013.25f);
প্রেশার সেন্সর ডেটা পড়া
SensorEventListener listener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float pressure = event.values[0]; // hPa-তে
// উচ্চতা ক্যালকুলেট (স্থানীয় সমুদ্রস্তরের চাপ দরকার)
float altitude = 44330f * (1f - (float)Math.pow(pressure / 1013.25f, 0.1903f));
Log.d("Pressure", "চাপ: " + pressure + " hPa, উচ্চতা: " + altitude + " m");
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
};
ব্যবহারের ক্ষেত্র
- উচ্চতা মাপা (হাইকিং, পর্বতারোহণ, এলিভেশন প্রোফাইল)
- আবহাওয়া পূর্বাভাস (চাপ পরিবর্তন থেকে ঝড়/বৃষ্টি অনুমান)
- ইন্ডোর ফ্লোর ডিটেকশন (লিফ্ট/সিডি ব্যবহার ট্র্যাকিং)
- GPS উচ্চতা আক্যুরেসি উন্নতি (GPS + ব্যারোমেটার ফিউশন)
- ফ্লাইট মোড ডিটেকশন (দ্রুত চাপ পরিবর্তন)
কালিব্রেশন ও সীমাবদ্ধতা
- স্থানীয় চাপ দরকার: সঠিক উচ্চতার জন্য বর্তমান সমুদ্রস্তরের চাপ (QNH) জরুরি
তাপমাত্রা প্রভাব: তাপমাত্রা পরিবর্তন চাপ প্রভাবিত করে (কম্পেনসেশন দরকার) ড্রিফট: সময়ের সাথে স্নippets ড্রিফট করতে পারে ইন্ডোর ভেন্টিলেশন: এসি/পंखা চাপ পরিবর্তন করতে পারে
অ্যাপ্লিকেশন চালানো
রান করলে প্রেশার সেন্সর থাকলে (মিড-রেঞ্জ+ ফোনে) বিস্তারিত স্পেসিফিকেশন সহ "✓ প্রেশার সেন্সর সমর্থিত" দেখাবে। বাজেট ফোনে সাধারণত অনুপস্থিত থাকে।
লক্ষ্য করুন
- GPS উচ্চতা (WGS84 এলিপসয়েড) এবং ব্যারোমেট্রিক উচ্চতা (জিওয়েড) ভিন্ন
- ওয়ेदার অ্যাপ API থেকে বর্তমান সমুদ্রস্তরের চাপ নিয়ে ক্যালিব্রেট করুন
- Sensor.TYPE_PRESSURE এখনো ডিপ্রিকেটেড নয়, কিন্তু TYPE_AMBIENT_TEMPERATURE-এর মতো 스페সিয়ালাইজড