Sensores de entorno

La plataforma de Android proporciona cuatro sensores que permiten supervisar varias propiedades del entorno. Puedes usar estos sensores para supervisar la humedad ambiental relativa, la iluminación, la presión ambiente y temperatura ambiente cerca de un dispositivo con Android. Los cuatro sensores de entorno se basan en hardware y solo están disponibles si un fabricante de dispositivos las incorporó en el dispositivo. A excepción de el sensor de luz, que la mayoría de los fabricantes de dispositivos usan para controlar el brillo de la pantalla, el medioambiente los sensores no siempre están disponibles en los dispositivos. Debido a esto, es particularmente importante que verificar en el tiempo de ejecución si existe un sensor de entorno antes de intentar adquirir datos de que la modifica.

A diferencia de la mayoría de los sensores de movimiento y de posición, que devuelven una matriz multidimensional de sensores para cada SensorEvent, los sensores de entorno devuelven un solo sensor para cada evento de datos. Por ejemplo, la temperatura en °C o la presión en hPa. A diferencia de los sensores de movimiento y de posición, que suelen requerir pasos de paso alto o bajo por lo que los sensores de entorno no suelen requerir ningún filtro ni procesamiento de datos. Tabla 1 proporciona un resumen de los sensores de entorno compatibles con la plataforma de Android.

Tabla 1: Sensores de entorno compatibles con la plataforma de Android.

Sensor Datos del evento del sensor Unidades de medición Descripción de los datos
TYPE_AMBIENT_TEMPERATURE event.values[0] °C Temperatura ambiente
TYPE_LIGHT event.values[0] lx Iluminación
TYPE_PRESSURE event.values[0] hPa o mbar Presión de aire ambiental
TYPE_RELATIVE_HUMIDITY event.values[0] % Humedad relativa ambiental
TYPE_TEMPERATURE event.values[0] °C Temperatura del dispositivo1

1 Las implementaciones varían de un dispositivo a otro dispositivo. Este sensor quedó en desuso en Android 4.0 (API nivel 14).

Cómo usar los sensores de luz, presión y temperatura

Los datos sin procesar que se adquieren de los sensores de luz, presión y temperatura calibración, filtrado o modificación, lo que los convierte en algunos de los sensores más fáciles de usar. Para Si adquieres datos de estos sensores, primero debes crear una instancia de la clase SensorManager, que puedes usar para obtener una instancia de un sensor físico. Luego, registra un objeto de escucha de un sensor en el método onResume() y comienza a controlar los datos entrantes del sensor en el método de devolución de llamadas onSensorChanged(). El siguiente código te muestra cómo hacerlo:

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

Siempre debes incluir implementaciones de los métodos de devolución de llamadas onAccuracyChanged() y onSensorChanged(). Además, trata asegúrate de cancelar siempre el registro de un sensor cuando se detenga una actividad. Esto evita que un sensor sin dejar de detectar datos y agotar la batería.

Cómo usar el sensor de humedad

Puedes adquirir datos de humedad relativa sin procesar usando el sensor de humedad de la misma manera que usas los sensores de luz, presión y temperatura. Sin embargo, si un dispositivo cuenta con un sensor de humedad, (TYPE_RELATIVE_HUMIDITY) y un sensor de temperatura (TYPE_AMBIENT_TEMPERATURE), puedes usar estos dos flujos de datos para calcular el punto de condensación y la humedad absoluta.

Punto de condensación

El punto de condensación es la temperatura a la que se debe enfriar un volumen determinado de aire, a una presión barométrica para que el vapor de agua se condense en agua. La siguiente ecuación muestra cómo podemos calcular el punto de condensación:

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

Donde:

  • td = temperatura del punto de condensación en °C
  • t = temperatura real en °C
  • RH = humedad relativa real en porcentaje (%)
  • m = 17.62
  • Tn = 243.12

Humedad absoluta

La humedad absoluta es la masa de vapor de agua en un volumen determinado de aire seco. Absoluta la humedad se mide en gramos/metro3. La siguiente ecuación muestra cómo calcula la humedad absoluta:

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

Donde:

  • dv = humedad absoluta en gramos/metro3
  • t = temperatura real en °C
  • RH = humedad relativa real en porcentaje (%)
  • m = 17.62
  • Tn = 243.12 °C
  • A = 6.112 hPa

También debes leer: