บารอมิเตอร์ในสมาร์ทโฟนคือเซนเซอร์ MEMS ที่วัดความดันบรรยากาศเพื่อกำหนดระดับความสูงและพยากรณ์อากาศ บารอมิเตอร์สมัยใหม่บันทึกความดันในช่วง 300 ถึง 1100 hPa ด้วยความแม่นยำ 1 hPa ซึ่งสอดคล้องกับความคลาดเคลื่อนของระดับความสูงน้อยกว่า 1 เมตร ตามข้อมูลของ Bosch Sensortec BMP580, 2024 ความแม่นยำสัมบูรณ์ ของเซนเซอร์วัดความดันสมัยใหม่คือ ±0.5 hPa ซึ่งช่วยให้กำหนดระดับความสูงได้ด้วยความแม่นยำ 0.4 เมตร
ประเด็นสำคัญ
บารอมิเตอร์ ในโทรศัพท์มือถือคือเซนเซอร์วัดความดันสัมบูรณ์ขนาดเล็กที่ใช้เทคโนโลยี MEMS (ระบบไมโครไฟฟ้าเครื่องกล) มันวัดความดันบรรยากาศในหน่วยเฮกโตปาสกาล (hPa) ซึ่งเทียบเท่ากับมิลลิบาร์ สมาร์ทโฟนรุ่นแรกที่มีบารอมิเตอร์ — Samsung Galaxy Note 2 (2012) — ได้เริ่มกระแสการรวมเซนเซอร์เข้าในอุปกรณ์เรือธง
ผู้นำตลาดคือ Bosch Sensortec (ซีรีส์ BMP) และ STMicroelectronics (ซีรีส์ LPS) เซนเซอร์ BMP580 ทั่วไปมีขนาด 2.0×2.0×0.7 มม. ใช้กระแส 1.3 µA ในโหมดพลังงานต่ำ และมีช่วง 300–1250 hPa ความแม่นยำสัมพัทธ์คือ ±0.08 hPa ซึ่งช่วยให้ตรวจจับการเปลี่ยนแปลงระดับความสูงได้ 0.7 เมตร ตามเอกสารข้อมูล BMP580 (2024) ระดับสัญญาณรบกวนไม่เกิน 0.2 Pa
| พารามิเตอร์ | ค่า |
|---|---|
| ช่วง | 300–1250 hPa |
| ความแม่นยำสัมบูรณ์ | ±0.5 hPa |
| ความแม่นยำสัมพัทธ์ | ±0.08 hPa |
| การใช้พลังงาน | 1.3 µA (พลังงานต่ำ) |
| ขนาด | 2.0×2.0×0.7 มม. |
| อินเทอร์เฟซ | I²C / SPI |
หน้าที่หลักคือ การปรับแต่งระดับความสูง ในการนำทาง ในสหรัฐอเมริกา คณะกรรมการกำกับดูแลการสื่อสารกลาง (FCC) แนะนำตั้งแต่ปี 2015 ให้ติดตั้งบารอมิเตอร์ในสมาร์ทโฟนเพื่อปรับปรุงความแม่นยำของตำแหน่งระหว่างการโทรฉุกเฉิน 911 — ความแม่นยำในแนวตั้งช่วยชีวิตในอาคารหลายชั้น
หัวใจของบารอมิเตอร์ MEMS คือ ไดอะแฟรมซิลิคอน หนา 1–3 ไมครอนที่โค้งงอภายใต้ความดันบรรยากาศ ไดอะแฟรมถูกบูรณาการกับโพรงสุญญากาศ — ความดันอ้างอิง ในการวัดการโค้งงอจะใช้วิธีคาปาซิทีฟหรือเพียโซรีซิสทีฟ
ในเซนเซอร์แบบคาปาซิทีฟ (Bosch BMP) ไดอะแฟรมทำหน้าที่เป็นอิเล็กโทรดเคลื่อนที่ของตัวเก็บประจุ เมื่อความดันเปลี่ยนไป ช่องว่างระหว่างไดอะแฟรมและอิเล็กโทรดคงที่จะเปลี่ยนไป 0.1–1 นาโนเมตร ทำให้ความจุเปลี่ยนไป 5–50 fF วงจรแปลง C/V (คาปาซิแตนซ์เป็นแรงดันไฟฟ้า) ขยายสัญญาณให้ถึงระดับที่เพียงพอสำหรับ ADC 24 บิต
บารอมิเตอร์ MEMS มี เซนเซอร์วัดอุณหภูมิในตัว เนื่องจากความดันของก๊าซขึ้นอยู่กับอุณหภูมิโดยตรงตามกฎ P = ρRT หากไม่มีการชดเชย การเปลี่ยนแปลงอุณหภูมิ 1 °C จะทำให้เกิดความคลาดเคลื่อน 0.1 hPa — เทียบเท่ากับระดับความสูง 0.8 เมตร เซนเซอร์สมัยใหม่ใช้ค่าสัมประสิทธิ์การสอบเทียบที่เก็บไว้ในหน่วยความจำ OTP (ตั้งโปรแกรมครั้งเดียว) สำหรับการแก้ไขแบบดิจิทัลในช่วง -40 ถึง +85 °C
GPS กำหนดระดับความสูงโดยอาศัยการวัดระยะสามด้านของสัญญาณดาวเทียม — ความคลาดเคลื่อนในแนวตั้งคือ 10–30 เมตรเนื่องจากเรขาคณิตของดาวเทียมและการหน่วงเวลาของชั้นบรรยากาศไอโอโนสเฟียร์ บารอมิเตอร์ ให้ระดับความสูงด้วยความแม่นยำ 0.5–1 เมตรโดยใช้สูตรบารอเมตริก ในสถานการณ์ที่ทัศนวิสัยท้องฟ้าจำกัด (หุบเขาในเมือง, ภายในอาคาร) GPS อาจไม่พร้อมใช้งาน — บารอมิเตอร์ทำงานเสมอ
ระดับความสูงคำนวณโดยใช้สูตร: h = (T₀ / L) × (1 − (P / P₀)^(R×L / g)) โดยที่ T₀ คืออุณหภูมิที่ระดับน้ำทะเล L คือการไล่ระดับอุณหภูมิ P คือความดันที่วัดได้ P₀ คือความดันที่ระดับน้ำทะเล โดยย่อ: การเปลี่ยนแปลงความดัน 1 hPa สอดคล้องกับประมาณ 8.4 เมตรที่ระดับความสูงต่ำ การคำนวณที่แม่นยำต้องใช้ข้อมูลสถานีตรวจอากาศสำหรับ P₀
ระบบนำทางสมัยใหม่ (Google Maps, Yandex Maps) ใช้ อัลกอริทึมแบบไฮบริด: GPS ให้ระดับความสูงสัมบูรณ์โดยมีความคลาดเคลื่อน 15 เมตร บารอมิเตอร์ให้การเปลี่ยนแปลงสัมพัทธ์ด้วยความแม่นยำ 0.5 เมตร ตัวกรองคาลมานรวมสัญญาณทั้งสองเข้าด้วยกัน โดยให้ระดับความสูงด้วยความแม่นยำ 1–3 เมตรแบบเรียลไทม์
data class BaroReading(
val pressure: Float,
val altitude: Float
)
private val P0_SEA_LEVEL = 1013.25f
fun calculateAltitude(pressure: Float): Float {
return SensorManager.getAltitude(
P0_SEA_LEVEL, pressure
)
}
fun calibratePressure(
gpsAltitude: Float, baroPressure: Float
): Float {
// การสอบเทียบ P0 โดยใช้ระดับความสูง GPS
val expectedPressure = P0_SEA_LEVEL *
Math.pow(1f - (0.0065f * gpsAltitude) / 288.15f, 5.255f)
.toFloat()
return P0_SEA_LEVEL * baroPressure / expectedPressure
}
Android ให้การเข้าถึงบารอมิเตอร์ผ่าน Sensor.TYPE_PRESSURE ข้อมูลจะถูกส่งคืนในหน่วยเฮกโตปาสกาล (hPa) ซึ่งเทียบเท่ากับมิลลิบาร์ ค่าทั่วไปที่ระดับน้ำทะเลคือประมาณ 1013.25 hPa เซนเซอร์จัดอยู่ในหมวดหมู่เซนเซอร์สิ่งแวดล้อม — ไม่ต้องการการสอบเทียบจากผู้ใช้และทำงานทันทีหลังการเริ่มต้น
บารอมิเตอร์ไม่ต้องการอัตราการสอบถามที่สูง — SENSOR_DELAY_UI (67 มิลลิวินาที) หรือ SENSOR_DELAY_NORMAL (200 มิลลิวินาที) ก็เพียงพอแล้ว ความดันบรรยากาศเปลี่ยนแปลงช้า ๆ สูงสุด 0.5–1 hPa ต่อชั่วโมงเมื่อสภาพอากาศเปลี่ยนแปลง หรือ 1–2 hPa ต่อนาทีเมื่อเคลื่อนที่ในลิฟต์ ความถี่ที่มากเกินไปจะทำให้แบตเตอรี่หมดเท่านั้น
class BarometerActivity : AppCompatActivity() {
private val sensorManager by lazy {
getSystemService(SENSOR_SERVICE) as SensorManager
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val barometer = sensorManager
.getDefaultSensor(Sensor.TYPE_PRESSURE)
barometer?.let { sensor ->
sensorManager.registerListener(
this, sensor,
SensorManager.SENSOR_DELAY_NORMAL
)
}
}
override fun onSensorChanged(event: SensorEvent) {
val pressure = event.values[0]
val altitude = SensorManager
.getAltitude(1013.25f, pressure)
updateUI(pressure, altitude)
}
}
อุปกรณ์ Android บางรุ่นไม่มีบารอมิเตอร์ — เซนเซอร์ไม่มีในรุ่นประหยัดและอุปกรณ์ระดับกลางหลายรุ่น ก่อนใช้งาน ให้ตรวจสอบความพร้อมใช้งานผ่าน PackageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_BAROMETER) หรือผ่าน sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE) — การคืนค่า null หมายถึงไม่มีเซนเซอร์
บารอมิเตอร์ถูกใช้ในแอปพลิเคชันที่หลากหลาย — ตั้งแต่อุตุนิยมวิทยาไปจนถึง ตัวติดตามกีฬา และการนำทางในอาคาร แอป WeatherPro ใช้ข้อมูลบารอมิเตอร์เพื่อสร้างแผนภูมิความดัน 24 ชั่วโมง ซึ่งช่วยให้พยากรณ์การเปลี่ยนแปลงสภาพอากาศล่วงหน้า 6–12 ชั่วโมงด้วยความแม่นยำสูงสุด 80%
เมื่อสภาพอากาศเปลี่ยนแปลง ความดันบรรยากาศจะเปลี่ยนแปลง 1–3 hPa ใน 6–12 ชั่วโมง บริเวณความดันสูง (แอนติไซโคลน) ให้ค่า 1020–1040 hPa บริเวณความดันต่ำ (ไซโคลน) — 970–1010 hPa การเปลี่ยนแปลงเหล่านี้ต้องนำมาพิจารณาเมื่อคำนวณระดับความสูง: หากเมื่อวานความดันที่ระดับน้ำทะเลคือ 1013 hPa และวันนี้คือ 1025 hPa ความคลาดเคลื่อนในการกำหนดระดับความสูงโดยไม่ปรับแก้ P₀ จะอยู่ที่ประมาณลบ 100 เมตร แอปนำทางสมัยใหม่ได้รับความดันอ้างอิง P₀ ผ่านอินเทอร์เน็ตจากสถานีตรวจอากาศที่ใกล้ที่สุด
ใน ห้างสรรพสินค้าและสนามบิน บารอมิเตอร์ใช้เพื่อกำหนดว่าผู้ใช้อยู่ชั้นใด ความแตกต่างของความดันระหว่างชั้นของอาคารทั่วไป (ความสูงของชั้น 3–4 เมตร) คือ 0.35–0.5 hPa — เพียงพอสำหรับการตรวจจับที่เชื่อถือได้ การรวมบารอมิเตอร์เข้ากับการวัดระยะสามด้านด้วย Wi-Fi การนำทางในอาคารจะระบุตำแหน่งด้วยความแม่นยำสูงสุด 5 เมตร
บารอมิเตอร์กันน้ำ รุ่นใหม่ (Infineon DPS368, 2024) ทนทานต่อการแช่น้ำลึกถึง 10 เมตรและมีความแม่นยำ ±0.05 hPa การพัฒนาเทคโนโลยี MEMS กำลังทำให้บารอมิเตอร์เข้าใกล้ความแม่นยำมาตรฐานควอตซ์ — คาดว่าภายในปี 2027 ความคลาดเคลื่อนโดยทั่วไปจะลดลงเหลือ ±0.2 hPa
คำถามที่พบบ่อย
คุณสามารถตรวจสอบได้โดยใช้แอป Sensor Test จาก Google Play บารอมิเตอร์มีอยู่ในสมาร์ทโฟนเรือธง Samsung Galaxy S และ Note ทุกรุ่น (ตั้งแต่ S3), Google Pixel (ทุกรุ่น), iPhone 6 และรุ่นที่ใหม่กว่า ในรุ่นประหยัด เซนเซอร์มักจะไม่มี
โดยใช้ สูตรบารอเมตริก: ความดันบรรยากาศลดลงตามระดับความสูง ที่ระดับน้ำทะเล ความดันคือ 1013.25 hPa ที่ระดับความสูง 500 เมตร — ประมาณ 955 hPa ทุก ๆ 8.4 เมตรที่สูงขึ้นจะลดความดันลงประมาณ 1 hPa เพื่อความแม่นยำ จำเป็นต้องมีการสอบเทียบตามสถานีตรวจอากาศที่ใกล้ที่สุด
ได้ ในแอปสถานีตรวจอากาศ ความดันลดลงอย่างรวดเร็ว 3–5 hPa ใน 3 ชั่วโมงบ่งบอกถึงพายุไซโคลนที่กำลังใกล้เข้ามาและสภาพอากาศแย่ลง การเพิ่มขึ้นของความดันเป็นสัญญาณของการปรับปรุง อย่างไรก็ตาม สำหรับการพยากรณ์ที่แม่นยำ จำเป็นต้องใช้ข้อมูลจากบริการอุตุนิยมวิทยา
ไม่ — การสอบเทียบเกิดขึ้นโดยอัตโนมัติ ผู้ผลิตตั้งค่าสัมประสิทธิ์การสอบเทียบที่โรงงาน อย่างไรก็ตาม หากคุณอาศัยอยู่ที่ระดับความสูง 1000+ เมตรเหนือระดับน้ำทะเล ควรตั้งค่าความดันอ้างอิงในแอปนำทางเพื่อความแม่นยำที่ดีขึ้น
SENSOR_DELAY_NORMAL (200 มิลลิวินาที) เหมาะสมที่สุด — ความดันบรรยากาศเปลี่ยนแปลงช้า ๆ สำหรับการติดตามการเคลื่อนที่ในลิฟต์ 200 มิลลิวินาทีก็เพียงพอแล้ว ความถี่ที่มากเกินไป (FASTEST) ไม่ได้ให้ข้อได้เปรียบ แต่เพิ่มการใช้พลังงาน 20–30%
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม