أدوات استشعار البيئة

يوفر نظام Android الأساسي أربعة أجهزة استشعار تتيح لك مراقبة الخصائص البيئية المختلفة. يمكنك استخدام أدوات الاستشعار هذه لمراقبة الرطوبة النسبية والإضاءة والضغط المحيط ودرجة الحرارة في البيئة المحيطة بالقرب من جهاز يعمل بنظام التشغيل Android. جميع مستشعرات البيئة الأربعة تعتمد على الأجهزة ولا تتوفر إلا إذا قامت الشركة المصنعة للجهاز ببنائها في الجهاز. باستثناء مستشعر الضوء، الذي تستخدمه معظم الشركات المصنّعة للأجهزة للتحكم في سطوع الشاشة، لا تتوفر أجهزة استشعار البيئة دائمًا على الأجهزة. ولهذا السبب، من المهم على وجه الخصوص أن تتحقّق في وقت التشغيل من وجود مستشعر للبيئة قبل محاولة الحصول على البيانات منه.

على عكس معظم أجهزة استشعار الحركة وأجهزة استشعار الموضع التي تعرض مجموعة متعددة الأبعاد من قيم أداة الاستشعار لكل SensorEvent، تعرض أجهزة استشعار البيئة قيمة أداة استشعار واحدة لكل حدث بيانات. على سبيل المثال، درجة الحرارة بالدرجة المئوية أو الضغط بالهلوسة البالونية. وعلى عكس أجهزة استشعار الحركة وأجهزة استشعار الموضع التي تتطلب في كثير من الأحيان تصفية التمرير العالي أو المنخفض، لا تتطلب أجهزة استشعار البيئة عادةً أي فلترة للبيانات أو معالجة للبيانات. يقدم الجدول 1 ملخصًا لأدوات استشعار البيئة المتوافقة مع نظام Android الأساسي.

الجدول 1. أدوات استشعار البيئة المتوافقة مع نظام Android الأساسي

أداة استشعار بيانات أحداث أجهزة الاستشعار وحدات القياس وصف البيانات
TYPE_AMBIENT_TEMPERATURE event.values[0] °م درجة حرارة الهواء المحيط:
TYPE_LIGHT event.values[0] لُكس السطوع
TYPE_PRESSURE event.values[0] هيكتو باسكال أو ميللي بار ضغط الهواء المحيط
TYPE_RELATIVE_HUMIDITY event.values[0] % الرطوبة النسبية المحيطة.
TYPE_TEMPERATURE event.values[0] °م درجة حرارة الجهاز.1

1 تختلف عمليات التنفيذ من جهاز لآخر. تم إيقاف أداة الاستشعار هذه نهائيًا في الإصدار Android 4.0 (المستوى 14 من واجهة برمجة التطبيقات).

استخدام أجهزة استشعار الضوء والضغط ودرجة الحرارة

فالبيانات الأولية التي تحصل عليها من أجهزة استشعار الضوء والضغط ودرجة الحرارة لا تحتاج عادةً إلى معايرة أو تصفية أو تعديل، ما يجعلها من الأسهل استخدام أدوات الاستشعار. للحصول على البيانات من أدوات الاستشعار هذه، عليك أولاً إنشاء مثيل من الفئة SensorManager التي يمكنك استخدامها للحصول على مثيل لجهاز استشعار مادي. بعد ذلك، عليك تسجيل أداة معالجة الحدث في طريقة onResume()، وتبدأ معالجة البيانات الواردة من أداة الاستشعار في طريقة معاودة الاتصال onSensorChanged(). يوضح لك الرمز التالي كيفية القيام بذلك:

Kotlin

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)
    }
}

Java

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) = تينيسي · (ln(RH/100) + m·t/(T_n+t
))/(م - [ln(RH/100%) + m·t/(T_n+t)])

أين،

  • td = درجة حرارة نقطة الندى بالدرجات C
  • t = درجة الحرارة الفعلية بالدرجات C
  • RH = الرطوبة النسبية الفعلية بالنسبة المئوية (%)
  • م = 17.62
  • Tn = 243.12

الرطوبة المطلقة

الرطوبة المطلقة هي كتلة بخار الماء في حجم معين من الهواء الجاف. تُقاس الرطوبة المطلقة بالجرام/المتر3. توضّح المعادلة التالية طريقة حساب الرطوبة المطلقة:

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

أين،

  • dv = الرطوبة المطلقة بالجرام/المتر3
  • t = درجة الحرارة الفعلية بالدرجات C
  • RH = الرطوبة النسبية الفعلية بالنسبة المئوية (%)
  • م = 17.62
  • Tn = 243.12 درجة مئوية
  • A = 6.112 هكتو باسكال

يجب عليك أيضًا قراءة