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

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

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

الجدول 1. أجهزة استشعار البيئة المتاحة على نظام Android الأساسي

أداة استشعار بيانات أحداث أداة الاستشعار وحدات القياس وصف البيانات
TYPE_AMBIENT_TEMPERATURE event.values[0] درجة مئوية درجة حرارة الهواء المحيطة
TYPE_LIGHT event.values[0] لُكس الإضاءة.
TYPE_PRESSURE event.values[0] hPa أو mbar ضغط الهواء المحيط.
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) = Tn · (ln(RH/100) + m·t/(T_n+t
))/(م - [ln(RH/100%) + m·t/(T_n+t)])

أين،

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

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

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

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

أين،

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

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