Sensor lingkungan

Platform Android menyediakan empat sensor yang memungkinkan Anda memantau berbagai properti lingkungan. Anda dapat menggunakan sensor ini untuk memantau kelembapan ruangan relatif, pencahayaan, tekanan sekitar, dan suhu sekitar di dekat perangkat berbasis Android. Keempat sensor lingkungan tersebut berbasis hardware dan hanya tersedia jika produsen perangkat telah memasukkannya ke dalam perangkat. Dengan pengecualian sensor cahaya, yang digunakan oleh sebagian besar produsen untuk mengontrol kecerahan layar, sensor tidak selalu tersedia di perangkat. Karena itu, sangat penting bagi Anda memverifikasi pada saat waktu proses apakah ada sensor lingkungan sebelum Anda mencoba memperoleh data dari anotasi.

Tidak seperti kebanyakan sensor gerakan dan sensor posisi, yang menampilkan array sensor multi-dimensi nilai untuk setiap SensorEvent, sensor lingkungan menampilkan satu sensor nilai untuk setiap peristiwa data. Misalnya, suhu dalam °C atau tekanan dalam hPa. Selain itu, tidak seperti sensor gerakan dan sensor posisi, yang sering kali memerlukan high-pass atau low-pass penyaringan, sensor lingkungan biasanya tidak memerlukan pemfilteran data atau pemrosesan data. Meja 1 menyediakan ringkasan sensor lingkungan yang didukung di platform Android.

Tabel 1. Sensor lingkungan yang didukung di platform Android.

Sensor Data peristiwa sensor Satuan ukuran Deskripsi data
TYPE_AMBIENT_TEMPERATURE event.values[0] °C Suhu udara sekitar.
TYPE_LIGHT event.values[0] lx Pencahayaan.
TYPE_PRESSURE event.values[0] hPa atau mbar Tekanan udara sekitar.
TYPE_RELATIVE_HUMIDITY event.values[0] % Kelembapan udara relatif.
TYPE_TEMPERATURE event.values[0] °C Suhu perangkat.1

1 Implementasi bervariasi dari satu perangkat ke perangkat lainnya perangkat seluler. Sensor ini tidak lagi tersedia di Android 4.0 (API Level 14).

Menggunakan sensor cahaya, tekanan, dan suhu

Data mentah yang diperoleh dari sensor cahaya, tekanan, dan suhu biasanya tidak memerlukan kalibrasi, pemfilteran, atau modifikasi, yang menjadikannya beberapa sensor yang paling mudah digunakan. Kepada memperoleh data dari sensor ini, pertama-tama Anda membuat instance class SensorManager, yang dapat digunakan untuk mendapatkan instance sensor fisik. Kemudian Anda harus mendaftarkan pemroses sensor dalam metode onResume(), dan mulai menangani data sensor yang masuk dalam metode callback onSensorChanged(). Tujuan kode berikut menunjukkan cara melakukannya:

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

Anda harus selalu menyertakan penerapan metode callback onAccuracyChanged() dan onSensorChanged(). Selain itu, bersikaplah pastikan Anda selalu membatalkan pendaftaran sensor ketika suatu aktivitas dijeda. Hal ini mencegah sensor mendeteksi data dan menghabiskan baterai.

Menggunakan sensor kelembapan

Anda dapat memperoleh data kelembapan relatif mentah menggunakan sensor kelembapan dengan cara yang sama seperti saat sensor cahaya, tekanan, dan suhu. Namun, jika perangkat memiliki sensor kelembapan (TYPE_RELATIVE_HUMIDITY) dan sensor suhu (TYPE_AMBIENT_TEMPERATURE), Anda dapat menggunakan kedua aliran data ini untuk menghitung titik embun dan kelembapan mutlak.

Titik embun

Titik embun adalah suhu di mana volume udara tertentu harus didinginkan, pada tekanan barometrik, untuk uap air mengembun menjadi air. Persamaan berikut menunjukkan bagaimana Anda dapat menghitung titik embun:

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

Di mana,

  • td = suhu titik embun dalam derajat C
  • t = suhu aktual dalam derajat C
  • RH = kelembapan aktual relatif dalam persen (%)
  • m = 17,62
  • Tn = 243,12

Kelembapan mutlak

Kelembapan mutlak adalah massa uap air dalam volume udara kering yang ditentukan. Absolut kelembapan diukur dalam gram/meter3. Persamaan berikut menunjukkan bagaimana Anda dapat menghitung kelembapan absolut:

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

Di mana,

  • dv = kelembapan mutlak dalam gram/meter3
  • t = suhu aktual dalam derajat C
  • RH = kelembapan aktual relatif dalam persen (%)
  • m = 17,62
  • Tn = 243,12 derajat C.
  • A = 6,112 hPa

Anda juga harus membaca