এনভায়রনমেন্ট সেন্সর

অ্যান্ড্রয়েড প্ল্যাটফর্ম চারটি সেন্সর প্রদান করে যা আপনাকে বিভিন্ন পরিবেশগত বৈশিষ্ট্য নিরীক্ষণ করতে দেয়। আপনি একটি Android-চালিত ডিভাইসের কাছাকাছি আপেক্ষিক পরিবেষ্টিত আর্দ্রতা, আলোকসজ্জা, পরিবেষ্টিত চাপ এবং পরিবেষ্টিত তাপমাত্রা নিরীক্ষণ করতে এই সেন্সরগুলি ব্যবহার করতে পারেন। চারটি এনভায়রনমেন্ট সেন্সরই হার্ডওয়্যার-ভিত্তিক এবং শুধুমাত্র তখনই পাওয়া যায় যদি কোনো ডিভাইস প্রস্তুতকারক সেগুলিকে একটি ডিভাইসে তৈরি করে থাকে। লাইট সেন্সর বাদে, যা বেশিরভাগ ডিভাইস নির্মাতারা স্ক্রীনের উজ্জ্বলতা নিয়ন্ত্রণ করতে ব্যবহার করে, পরিবেশ সেন্সর সবসময় ডিভাইসে উপলব্ধ থাকে না। এই কারণে, এটি বিশেষভাবে গুরুত্বপূর্ণ যে আপনি রানটাইমে যাচাই করে নিন যে আপনি এটি থেকে ডেটা অর্জন করার চেষ্টা করার আগে একটি পরিবেশ সেন্সর বিদ্যমান কিনা।

বেশিরভাগ মোশন সেন্সর এবং অবস্থান সেন্সরগুলির বিপরীতে, যা প্রতিটি SensorEvent জন্য একটি বহু-মাত্রিক সেন্সর মান প্রদান করে, পরিবেশ সেন্সর প্রতিটি ডেটা ইভেন্টের জন্য একটি একক সেন্সর মান প্রদান করে। উদাহরণস্বরূপ, °সে তাপমাত্রা বা hPa-তে চাপ। এছাড়াও, মোশন সেন্সর এবং অবস্থান সেন্সরগুলির বিপরীতে, যার জন্য প্রায়শই উচ্চ-পাস বা নিম্ন-পাস ফিল্টারিংয়ের প্রয়োজন হয়, পরিবেশ সেন্সরগুলির সাধারণত কোনও ডেটা ফিল্টারিং বা ডেটা প্রক্রিয়াকরণের প্রয়োজন হয় না। সারণী 1 এন্ড্রয়েড প্ল্যাটফর্মে সমর্থিত পরিবেশ সেন্সরগুলির একটি সারাংশ প্রদান করে।

সারণী 1. এনভায়রনমেন্ট সেন্সর যা অ্যান্ড্রয়েড প্ল্যাটফর্মে সমর্থিত।

সেন্সর সেন্সর ইভেন্ট ডেটা পরিমাপের একক ডেটা বিবরণ
TYPE_AMBIENT_TEMPERATURE event.values[0] °সে পরিবেষ্টিত বায়ু তাপমাত্রা।
TYPE_LIGHT event.values[0] lx আলোকসজ্জা।
TYPE_PRESSURE event.values[0] এইচপিএ বা এমবার পরিবেষ্টিত বায়ু চাপ।
TYPE_RELATIVE_HUMIDITY event.values[0] % পরিবেষ্টিত আপেক্ষিক আর্দ্রতা।
TYPE_TEMPERATURE event.values[0] °সে ডিভাইসের তাপমাত্রা। 1

1 ইমপ্লিমেন্টেশন ডিভাইস থেকে ডিভাইসে পরিবর্তিত হয়। এই সেন্সরটি Android 4.0 (API লেভেল 14)-এ বাতিল করা হয়েছে।

আলো, চাপ এবং তাপমাত্রা সেন্সর ব্যবহার করুন

আলো, চাপ এবং তাপমাত্রা সেন্সর থেকে আপনি যে কাঁচা ডেটা অর্জন করেন তার জন্য সাধারণত কোন ক্রমাঙ্কন, ফিল্টারিং বা পরিবর্তনের প্রয়োজন হয় না, যা তাদের ব্যবহার করার জন্য সবচেয়ে সহজ কিছু সেন্সর করে তোলে। এই সেন্সরগুলি থেকে ডেটা অর্জন করতে আপনি প্রথমে SensorManager ক্লাসের একটি উদাহরণ তৈরি করুন, যা আপনি একটি শারীরিক সেন্সরের উদাহরণ পেতে ব্যবহার করতে পারেন। তারপর আপনি onResume() পদ্ধতিতে একটি সেন্সর শ্রোতা নিবন্ধন করুন এবং onSensorChanged() কলব্যাক পদ্ধতিতে ইনকামিং সেন্সর ডেটা পরিচালনা শুরু করুন। নিম্নলিখিত কোড আপনাকে দেখায় কিভাবে এটি করতে হবে:

কোটলিন

class SensorActivity : Activity(), SensorEventListener {

    private lateinit var sensorManager: SensorManager
    private var pressure: Sensor? = null

    public override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main)

        // Get an instance of the sensor service, and use that to get an instance of
        // a particular sensor.
        sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
        pressure = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE)
    }

    override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) {
        // Do something here if sensor accuracy changes.
    }

    override fun onSensorChanged(event: SensorEvent) {
        val millibarsOfPressure = event.values[0]
        // Do something with this sensor data.
    }

    override fun onResume() {
        // Register a listener for the sensor.
        super.onResume()
        sensorManager.registerListener(this, pressure, SensorManager.SENSOR_DELAY_NORMAL)
    }

    override fun onPause() {
        // Be sure to unregister the sensor when the activity pauses.
        super.onPause()
        sensorManager.unregisterListener(this)
    }
}

জাভা

public class SensorActivity extends Activity implements SensorEventListener {
    private SensorManager sensorManager;
    private Sensor pressure;

    @Override
    public final void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      // Get an instance of the sensor service, and use that to get an instance of
      // a particular sensor.
      sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
      pressure = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE);
    }

    @Override
    public final void onAccuracyChanged(Sensor sensor, int accuracy) {
      // Do something here if sensor accuracy changes.
    }

    @Override
    public final void onSensorChanged(SensorEvent event) {
      float millibarsOfPressure = event.values[0];
      // Do something with this sensor data.
    }

    @Override
    protected void onResume() {
      // Register a listener for the sensor.
      super.onResume();
      sensorManager.registerListener(this, pressure, SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    protected void onPause() {
      // Be sure to unregister the sensor when the activity pauses.
      super.onPause();
      sensorManager.unregisterListener(this);
    }
}

আপনাকে সর্বদা onAccuracyChanged() এবং onSensorChanged() কলব্যাক পদ্ধতি উভয়ের বাস্তবায়ন অন্তর্ভুক্ত করতে হবে। এছাড়াও, নিশ্চিত হোন যে আপনি সবসময় একটি সেন্সর নিবন্ধনমুক্ত করেন যখন একটি কার্যকলাপ বিরতি দেয়। এটি একটি সেন্সরকে ক্রমাগত ডেটা সেন্সিং এবং ব্যাটারি নিষ্কাশন থেকে বাধা দেয়।

আর্দ্রতা সেন্সর ব্যবহার করুন

আপনি যেমন আলো, চাপ এবং তাপমাত্রা সেন্সর ব্যবহার করেন তেমনি আর্দ্রতা সেন্সর ব্যবহার করে আপনি কাঁচা আপেক্ষিক আর্দ্রতার ডেটা অর্জন করতে পারেন। যাইহোক, যদি একটি ডিভাইসে আর্দ্রতা সেন্সর ( TYPE_RELATIVE_HUMIDITY ) এবং একটি তাপমাত্রা সেন্সর ( TYPE_AMBIENT_TEMPERATURE ) উভয়ই থাকে তবে আপনি শিশির বিন্দু এবং পরম আর্দ্রতা গণনা করতে এই দুটি ডেটা স্ট্রিম ব্যবহার করতে পারেন৷

শিশির বিন্দু

শিশির বিন্দু হল সেই তাপমাত্রা যেখানে জলীয় বাষ্পকে জলে ঘনীভূত করার জন্য একটি নির্দিষ্ট আয়তনের বায়ুকে স্থির ব্যারোমেট্রিক চাপে ঠান্ডা করতে হবে। নিচের সমীকরণটি দেখায় কিভাবে আপনি শিশির বিন্দু গণনা করতে পারেন:

t_d(t,RH) = Tn · (ln(RH/100) + m·t/(T_n+t)/(m - [ln(RH/100%) + m·t/(T_n+t)] )

কোথায়,

  • t d = শিশির বিন্দু তাপমাত্রা ডিগ্রি সে
  • t = প্রকৃত তাপমাত্রা ডিগ্রি সেলসিয়াসে
  • RH = প্রকৃত আপেক্ষিক আর্দ্রতা শতাংশে (%)
  • m = 17.62
  • T n = 243.12

পরম আর্দ্রতা

পরম আর্দ্রতা শুষ্ক বাতাসের একটি নির্দিষ্ট আয়তনে জলীয় বাষ্পের ভর। পরম আর্দ্রতা গ্রাম/মিটার 3 এ পরিমাপ করা হয়। নিম্নলিখিত সমীকরণ দেখায় কিভাবে আপনি পরম আর্দ্রতা গণনা করতে পারেন:

d_v(t,RH) = (RH/100) · A · exp(m· t/(T_n+t)/(273.15 + t)

কোথায়,

  • d v = পরম আর্দ্রতা গ্রাম/মিটারে 3
  • t = প্রকৃত তাপমাত্রা ডিগ্রি সেলসিয়াসে
  • RH = প্রকৃত আপেক্ষিক আর্দ্রতা শতাংশে (%)
  • m = 17.62
  • T n = 243.12 ডিগ্রি সে
  • A = 6.112 hPa

আপনারও পড়া উচিত