Ortam sensörleri

Android platformu, çeşitli çevre özelliklerini izlemenize olanak tanıyan dört sensör sağlar. Bu sensörleri kullanarak ortamdaki bağıl nemi, aydınlatmayı, ortam basıncını ve ortam sıcaklığını görebilirsiniz. Dört ortam sensörünün tümü donanım tabanlıdır ve yalnızca cihaz üreticisi tarafından cihazda yerleşik olarak bulunması durumunda kullanılabilir. Para birimi Çoğu cihaz üreticisinin ekran parlaklığını, ortamı ve çevreyi kontrol etmek için kullandığı ışık sensörü cihazlarda her zaman bulunmayabilir. Bu nedenle, verilerinizi kaydetmek için kendisinden veri almaya çalışmadan önce, çalışma zamanında bir ortam sensörünün mevcut olup olmadığını doğrulayın somut olarak ortaya koyar.

Çoğu hareket sensörünün ve konum sensörünün aksine, çok boyutlu bir sensör dizisi döndüren Her SensorEvent için değerleri, ortam sensörleri tek bir sensör döndürür değerini belirlemektir. Örneğin, °C cinsinden sıcaklık veya hPa cinsinden basınç. Ayrıca, genellikle yüksek geçiş veya düşük geçiş gerektiren hareket sensörlerinin ve konum sensörlerinin aksine olduğundan, ortam sensörleri genellikle herhangi bir veri filtreleme veya veri işleme gerektirmez. Tablo 1, Android platformunda desteklenen ortam sensörlerinin özetini sağlar.

Tablo 1. Android platformunda desteklenen ortam sensörleri.

Sensör Sensör etkinlik verileri Ölçü birimleri Veri açıklaması
TYPE_AMBIENT_TEMPERATURE event.values[0] °C Ortam hava sıcaklığı.
TYPE_LIGHT event.values[0] lx Aydınlatma.
TYPE_PRESSURE event.values[0] hPa veya mbar Ortam hava basıncı.
TYPE_RELATIVE_HUMIDITY event.values[0] % Ortam bağıl nem.
TYPE_TEMPERATURE event.values[0] °C Cihaz sıcaklığı.1

1 Uygulamalar cihazdan cihaza farklılık gösterir olanak tanır. Bu sensörün desteği, Android 4.0 (API Düzeyi 14) sürümünde sonlandırılmıştır.

Işık, basınç ve sıcaklık sensörlerini kullanma

Işık, basınç ve sıcaklık sensörlerinden edindiğiniz ham veriler genellikle Bu nedenle, kullanımı en kolay sensörler arasında yer alan kalibrasyon, filtreleme veya modifikasyon. Alıcı: Bu sensörlerden veri elde etmek için önce SensorManager sınıfının bir örneğini oluşturursunuz. Bu örneği, fiziksel bir sensörün örneğini almak için kullanabilirsiniz. Ardından, onResume() yöntemine bir sensör dinleyici kaydedip onSensorChanged() geri çağırma yönteminde gelen sensör verilerini işlemeye başlıyorsunuz. İlgili içeriği oluşturmak için kullanılan aşağıdaki kod bunu nasıl yapacağınızı gösterir:

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

Her zaman hem onAccuracyChanged() hem de onSensorChanged() geri çağırma yönteminin uygulamalarını eklemeniz gerekir. Ayrıca, Bir etkinlik duraklatıldığında sensörün kaydını her zaman iptal ettiğinizden emin olun. Bu işlem, sensörün verileri sürekli algılamak ve pili tüketmektir.

Nem sensörünü kullanın

Nem sensörünü kullandığınız şekilde kullanarak ham bağıl nem verilerini elde edebilirsiniz ışık, basınç ve sıcaklık sensörleridir. Ancak bir cihazda hem nem sensörü varsa (TYPE_RELATIVE_HUMIDITY) ve sıcaklık sensörü (TYPE_AMBIENT_TEMPERATURE) ile şu iki veri akışını kullanarak hesaplama yapabilirsiniz: çiy noktası ve mutlak nem oranı.

Çiy noktası

Çiy noktası, belirli bir hava hacminin sabit, soğutulması gereken sıcaklıktır barometrik basınçla çalışan su buharının suya yoğunlaşması için kullanılır. Aşağıdaki denklem, çiy noktasını hesaplayabilir:

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

Nerede,

  • td = C derece cinsinden çiy noktası sıcaklığı
  • t = C derece cinsinden gerçek sıcaklık
  • Bağıl nem = yüzde (%) cinsinden gerçek bağıl nem
  • m = 17,62
  • Tn = 243,12

Mutlak nem

Mutlak nem, belirli bir kuru hava hacmindeki su buharının kütlesidir. Mutlak nem, gram/metre cinsinden ölçülür3. Aşağıdaki denklem, mutlak nem oranını hesaplayabilir:

d_v(t,RH) =  (DH/100) · A · exp(m·
t/(T_n+t)/(273,15 + t)

Nerede,

  • dv = gram/metre cinsinden mutlak nem3
  • t = C derece cinsinden gerçek sıcaklık
  • Bağıl nem = yüzde (%) cinsinden gerçek bağıl nem
  • m = 17,62
  • Tn = 243,12 derece C
  • A = 6,112 hPa

Ayrıca şunları da okumalısınız: