환경 센서

Android 플랫폼은 다양한 환경 속성을 모니터링할 수 있는 센서 4개를 제공합니다. 이러한 센서를 사용하여 상대 주변 습도, 조도, 주변 압력 및 80도. 4개의 환경 센서는 모두 하드웨어 기반입니다 기기 제조업체에서 기기에 내장한 경우에만 사용할 수 있습니다. 단, 대부분의 기기 제조업체가 화면 밝기, 주변 환경을 제어하는 데 사용하는 광센서 기기에서 센서를 항상 사용할 수 있는 것은 아닙니다. 그렇기 때문에 환경 센서의 존재 여부를 런타임에 확인( 있습니다.

센서의 다차원 배열을 반환하는 대부분의 움직임 감지 센서 및 위치 센서와 달리 값이 SensorEvent이므로 환경 센서는 값을 정의합니다. 예를 들어 온도는 °C, 압력은 hPa로 반환됩니다. 또한 종종 고역 전달 또는 저역 통과를 요구하는 움직임 감지 센서 및 위치 센서와는 달리 필터링, 환경 센서에는 일반적으로 데이터 필터링이나 데이터 처리가 필요하지 않습니다. 테이블 1은 Android 플랫폼에서 지원되는 환경 센서의 요약을 제공합니다.

표 1. Android 플랫폼에서 지원되는 환경 센서

센서 센서 이벤트 데이터 측정 단위 데이터 설명
TYPE_AMBIENT_TEMPERATURE event.values[0] °C 주변 기온.
TYPE_LIGHT event.values[0] lx 조도.
TYPE_PRESSURE event.values[0] hPa 또는 mbar 주변 기압.
TYPE_RELATIVE_HUMIDITY event.values[0] % 주변 상대 습도.
TYPE_TEMPERATURE event.values[0] °C 기기 온도.1

1 구현은 기기마다 다릅니다. 있습니다. 이 센서는 Android 4.0(API 레벨 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)
    }
}

자바

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)
))/(m - [ln(RH/100%) + m·t/(T_n+t)])

여기서

  • td = 이슬점 온도(˚C)
  • t = 실제 온도(˚C)
  • RH = 실제 상대 습도(%)
  • m = 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 = 실제 상대 습도(%)
  • m = 17.62
  • Tn = 243.12˚C
  • A = 6.112 hPa

참고 사항