เซ็นเซอร์สภาพแวดล้อม

แพลตฟอร์ม Android มีเซ็นเซอร์ 4 ตัวที่ช่วยให้คุณตรวจสอบคุณสมบัติด้านสิ่งแวดล้อมที่หลากหลายได้ คุณสามารถใช้เซ็นเซอร์เหล่านี้เพื่อตรวจดูความชื้นสัมพัทธ์ ความสว่าง ความดันบรรยากาศ และ อุณหภูมิแวดล้อมใกล้กับอุปกรณ์ที่ใช้ Android เซ็นเซอร์ตรวจจับสภาพแวดล้อมทั้ง 4 ตัวทำงานด้วยฮาร์ดแวร์ และพร้อมใช้งานก็ต่อเมื่อผู้ผลิตอุปกรณ์ได้ผสานรวมอุปกรณ์ไว้ ยกเว้นในกรณี เซ็นเซอร์แสง ซึ่งผู้ผลิตอุปกรณ์ส่วนใหญ่ใช้เพื่อควบคุมความสว่างและสภาพแวดล้อมของหน้าจอ เซ็นเซอร์อาจไม่พร้อมใช้งานในอุปกรณ์เสมอไป ด้วยเหตุนี้ คุณจึงจำเป็นต้อง ตรวจสอบขณะรันไทม์ว่ามีเซ็นเซอร์สภาพแวดล้อมหรือไม่ก่อนที่คุณจะพยายามดึงข้อมูลจาก ได้

ต่างจากเซ็นเซอร์ตรวจจับการเคลื่อนไหวและเซ็นเซอร์ตำแหน่งส่วนใหญ่ ซึ่งแสดงผลเซ็นเซอร์แบบหลายมิติ ค่าสำหรับ SensorEvent แต่ละรายการ เซ็นเซอร์สภาพแวดล้อมจะแสดงเซ็นเซอร์เดียว สําหรับเหตุการณ์ข้อมูลแต่ละเหตุการณ์ เช่น อุณหภูมิในหน่วย°C หรือความดันในหน่วย hPa นอกจากนี้ ต่างจากเซ็นเซอร์ตรวจจับการเคลื่อนไหวและเซ็นเซอร์ตำแหน่ง ซึ่งมักต้องใช้ความถี่สูงหรือต่ำ ในการกรองข้อมูลทั่วไป เซ็นเซอร์ตรวจจับสภาพแวดล้อมจึงไม่จําเป็นต้องกรองข้อมูลหรือประมวลผลข้อมูล ตาราง 1 จะให้ข้อมูลสรุปเกี่ยวกับเซ็นเซอร์สภาพแวดล้อมที่แพลตฟอร์ม Android รองรับ

ตาราง 1 เซ็นเซอร์สภาพแวดล้อมที่แพลตฟอร์ม Android รองรับ

เซ็นเซอร์ ข้อมูลเหตุการณ์เซ็นเซอร์ หน่วยวัด คำอธิบายข้อมูล
TYPE_AMBIENT_TEMPERATURE event.values[0] °C อุณหภูมิของอากาศแวดล้อม
TYPE_LIGHT event.values[0] ลักซ์ ความสว่าง
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 ซึ่งสามารถใช้เพื่อรับอินสแตนซ์ของเซ็นเซอร์ทางกายภาพได้ จากนั้นลงทะเบียน Listener เซ็นเซอร์ในเมธอด onResume() และเริ่มจัดการข้อมูลเซ็นเซอร์ที่เข้ามาในเมธอด Callback 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);
    }
}

คุณต้องมีการใช้งานทั้งเมธอด Callback 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 = ความชื้นสัมพัทธ์ตามจริงในหน่วยเปอร์เซ็นต์ (%)
  • ม. = 17.62
  • = 243.12

ความชื้นสัมบูรณ์

ความชื้นสัมบูรณ์คือมวลไอน้ำในปริมาณอากาศแห้งที่ระบุ สัมบูรณ์ ความชื้นวัดเป็นหน่วยกรัม/เมตร3 สมการต่อไปนี้จะแสดงวิธีที่คุณ สามารถคำนวณความชื้นสัมบูรณ์ได้

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

ที่ไหน

  • dv = ความชื้นสัมบูรณ์เป็นกรัม/เมตร3
  • t = อุณหภูมิจริงเป็นองศา C
  • RH = ความชื้นสัมพัทธ์ตามจริงในหน่วยเปอร์เซ็นต์ (%)
  • ม. = 17.62
  • Tn = 243.12 องศาC
  • A = 6.112 hPa

คุณควรอ่าน