কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েড মোবাইল হিউমিডিটি সেন্সর সাপোর্ট যাচাই

অ্যান্ড্রয়েড ডিভাইসে রিলেটিভ হিউমিডিটি (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 ফিল্ড পাওয়া যায় (বেশ নির্ভরযোগ্য)
  1. অ্যান্ড্রয়েড মোবাইল প্রেশার সেন্সর সাপোর্ট যাচাই

  2. অ্যান্ড্রয়েডে বর্তমান Wi-Fi 5 GHz ব্যান্ড সমর্থন করে কিনা যাচাই করুন

  3. অ্যান্ড্রয়েডে Wi-Fi সবসময় আবিষ্কারযোগ্য (Discoverable) কিনা যাচাই করুন

  4. অ্যান্ড্রয়েডে চলমান অ্যাপ্লিকেশন তালিকা পাওয়ার উপায়