অ্যান্ড্রয়েড ডিভাইসে রিলেটিভ হিউমিডিটি (Humidity) সেন্সর সাপোর্ট যাচাই
এই টিউটোরিয়ালে শিখব কিভাবে SensorManager ব্যবহার করে ডিভাইসে আপেক্ষিক আর্দ্রতা (Relative Humidity) সেন্সর উপলব্ধ কিনা তা যাচাই করতে হয়। এটি খুব বিরল সেন্সর - শুধুমাত্র কিছু স্পেসিয়ালাইজড ডিভাইসে পাওয়া যায়।
প্রয়োজনীয় ধাপসমূহ
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন
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);
// রিলেটিভ হিউমিডিটি সেন্সর যাচাই (API 14+ / Android 4.0+)
Sensor humiditySensor = sensorManager.getDefaultSensor(Sensor.TYPE_RELATIVE_HUMIDITY);
if (humiditySensor != null) {
actionEvent.setText("✓ হিউমিডিটি সেন্সর সমর্থিত\n" +
"নাম: " + humiditySensor.getName() + "\n" +
"বেন্ডর: " + humiditySensor.getVendor() + "\n" +
"ম্যাক্স রেঞ্জ: " + humiditySensor.getMaximumRange() + " %\n" +
"রেজোলিউশন: " + humiditySensor.getResolution() + " %\n" +
"পাওয়ার: " + humiditySensor.getPower() + " mA");
} else {
actionEvent.setText("✗ হিউমিডিটি সেন্সর সমর্থিত নয়\n(বहুত दुर्लभ - শুধু কিছু স্পেসিয়ালাইজড ডিভাইসে)");
}
}
}
হিউমিডিটি সেন্সর বিবরণ
| বিষয় | বিস্তারিত |
|---|---|
| সেন্সর টাইপ | Sensor.TYPE_RELATIVE_HUMIDITY |
| পরিমাপ | আপেক্ষিক আর্দ্রতা (Relative Humidity - RH) |
| একক | প্রতিশত (%) - ০% থেকে ১০০% |
| API লেভেল | 14 (Android 4.0 Ice Cream Sandwich) |
| উপলব্ধতা | অত্যন্ত বিরল (Samsung Galaxy S4, Note 3, Galaxy S5-এ ছিল) |
| আধুনিক ফোনে | প্রায় নেই (২০১৬+ এ বাদ দেওয়া হয়েছে) |
হিউমিডিটি সেন্সর ডেটা পড়া
SensorEventListener listener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float humidity = event.values[0]; // %RH (০-১০০)
Log.d("Humidity", "আর্দ্রতা: " + humidity + "%");
// কমফर्ट লেভেল চেক
String comfort;
if (humidity < 30) comfort = "খুব শুষ্ক";
else if (humidity < 50) comfort = "আরামদায়ক";
else if (humidity < 70) comfort = "আর্দ্র";
else comfort = "খুব আর্দ্র";
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
};
তাপমাত্রা + আর্দ্রতা = হিট ইনডেক্স / ডিউ পয়েন্ট
// ডিউ পয়েন্ট ক্যালকুলেশন (Magnus formula)
public float calculateDewPoint(float tempCelsius, float humidityPercent) {
float a = 17.27f;
float b = 237.7f;
float alpha = (a * tempCelsius) / (b + tempCelsius) + (float)Math.log(humidityPercent / 100.0f);
return (b * alpha) / (a - alpha);
}
// হিট ইনডেক্স (তাপমাত্রা + আর্দ্রতা থেকে অনুভূত তাপমাত্রা)
public float calculateHeatIndex(float tempCelsius, float humidityPercent) {
// ساده ফর্মুলা (NOAA)
float T = tempCelsius * 9/5 + 32; // ফারেনহাইটে
float RH = humidityPercent;
float HI = -42.379f + 2.04901523f*T + 10.14333127f*RH
- 0.22475541f*T*RH - 0.00683783f*T*T - 0.05481717f*RH*RH
+ 0.00122874f*T*T*RH + 0.00085282f*T*RH*RH - 0.00000199f*T*T*RH*RH;
return (HI - 32) * 5/9; // সেলসিয়াসে ফিরিয়ে আনা
}
কেন আধুনিক ফোনে হিউমিডিটি সেন্সর নেই?
- আকার ও খরচ: MEMS হিউমিডিটি সেন্সর বড় এবং মंহংগা
- ক্যালিব্রেশন ড্রিফট: সময়ের সাথে অ্যাক্যুরেসি হ্রাস পায়
- কন্টামিনেশন: ধুলো, তেল, কনডেনসেশন সেন্সর ক্ষতিগ্রস্ত করে
- বিকল্প: আবহাওয়া API (OpenWeather, WeatherAPI) থেকে আর্দ্রতা ডেটা বেশি নির্ভরযোগ্য
ব্যবহারের ক্ষেত্র (ঐতিহাসিক/নির্দিষ্ট)
- পারসোনাল কফোর্ট মনিটরিং
- মোল্ড/ফাঙ্গাস রিস্ক অ্যালার্ট (উচ্চ আর্দ্রতা)
- ইন্ডোর এয়ার কোয়ালিটি ম্যানেজমেন্ট
- কৃষি/গ്രീনহাউস মনিটরিং (স্পেসিয়ালাইজড ডিভাইস)
অ্যাপ্লিকেশন চালানো
রান করলে ৯৯%+ ডিভাইসে "✗ হিউমিডিটি সেন্সর সমর্থিত নয়" দেখাবে। এটি স্বাভাবিক - আধুনিক স্মার্টফোনে এই সেন্সর থাকে না।
বিকল্প: ওয়েদার API ব্যবহার
// Retrofit/Volley দিয়ে OpenWeatherMap API কল
// https://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&appid={API_KEY}
// JSON রেসপন্স থেকে main.humidity ফিল্ড পাওয়া যায় (বেশ নির্ভরযোগ্য)