學習目標
- ✓理解絕對壓力與高度估算的關係。
- ✓使用 MS5803-14BA 的初始化與更新積木。
- ✓比較壓力 hPa、Pa 與估算高度,討論水深應用限制。
SENSOR / MS5803
MS5803-14BA 是高解析度數位壓力感測器,支援 I2C/SPI 類型的模組應用。桃園版 Blockly 以初始化、更新、壓力、溫度與海拔高度積木組成教學流程。
先確認這一課要學會什麼,以及桌面上需要哪些材料。
MS5803 將壓力與溫度轉成數位資料;海拔高度是依目前壓力與海平面基準估算,並不是感測器直接量出一個固定高度。
啟動 MS5803 library 並確認感測器回應。
讀取最新溫度與壓力。
用 hPa、Pa 或海平面氣壓換算高度。
14BA 代表約 1 bar 等級的壓力範圍;水深實驗必須使用適合液體壓力、密封與安全規格的完整系統。
本篇先以乾式空氣壓力觀察為主;請勿把裸露電子模組直接放入水中。
| 模組腳位 | 接到控制板 | 訊號方向 | 檢查重點 |
|---|---|---|---|
| VCC | 依模組規格 | 電源 | 確認模組是否含穩壓與電平轉換。 |
| GND | GND | 地線 | 建立共同地線。 |
| SDA | A4 / SDA | I2C 資料 | 桃園版產生器以 I2C 0x76 為主。 |
| SCL | A5 / SCL | I2C 時脈 | UNO 的 SCL。 |
已將 4 條線路依同一筆資料逐列對齊;電壓仍須依手上模組版本確認。
積木名稱與型別以桃園版 Blockly 現行程式為準,不以通用積木替代。
playrobot_ms5803_setup啟動感測器並進行初始化檢查
位置:感測器 → 環境感測器 → MS5803-14BAplayrobot_ms5803_update取得最新壓力與溫度
位置:感測器 → 環境感測器 → MS5803-14BAplayrobot_ms5803_temperature讀取溫度
位置:感測器 → 環境感測器 → MS5803-14BAplayrobot_ms5803_pressure_hpa讀取 hPa/mbar 壓力
位置:感測器 → 環境感測器 → MS5803-14BAplayrobot_ms5803_pressure_pa讀取 Pa 壓力
位置:感測器 → 環境感測器 → MS5803-14BAplayrobot_ms5803_altitude用海平面氣壓估算高度
位置:感測器 → 環境感測器 → MS5803-14BA把 MS5803 放在不同高度,更新後比較壓力與估算高度。
playrobot_ms5803_setuparduino_delayplayrobot_ms5803_updateplayrobot_ms5803_pressure_hpaplayrobot_ms5803_altitudearduino_serial_printplayrobot_ms5803_setuparduino_delayplayrobot_ms5803_updateplayrobot_ms5803_pressure_hpaplayrobot_ms5803_altitudearduino_serial_print先觀察 initialized 積木或序列埠訊息。
為什麼:MS5803 需要通過初始化與 CRC 檢查。同一時段使用相同海平面氣壓基準。
為什麼:否則高度差可能只是基準不同。上下移動感測器,觀察壓力與高度的相反變化。
為什麼:學生可以從資料看到大氣壓力隨高度變化。playrobot_ms5803_setup:啟動感測器並進行初始化檢查
下載桃園版 Blockly 專案或對應的文字程式。
| 測試情境 | 可能讀值 | 判讀 |
|---|---|---|
| 感測器移到較高處 | 壓力通常略降,估算高度略升 | 高度公式反映大氣壓力變化。 |
| 模組未密封卻放入水中 | 可能損壞且資料失真 | 水深量測需要專用密封與壓力介面。 |
這段程式把「MS5803-14BA 壓力/高度感測器」的實體接線、桃園版 Blockly 積木與 Arduino 執行流程接在一起。先對照腳位,再看初始化、讀值、輸出與等待的順序;每一步都可以回到本頁的積木範例實測。
#include <Wire.h>
#include <MS5803_14.h>
MS_5803 sensor(512);
bool initialized = false;
float pressureHpa = 0.0f;
void setup() {
Serial.begin(115200);
Wire.begin();
initialized = sensor.initializeMS_5803(false);
}
void loop() {
if (!initialized) return;
sensor.readSensor();
pressureHpa = sensor.pressure();
Serial.println(pressureHpa);
delay(500);
}#include <Wire.h>函式庫提供桃園版 Blockly 產生器所需的底層功能;若這裡的函式庫或物件名稱不對,後面的 playrobot_ms5803_setup 就算接線正確也無法使用。
// VCC → 依模組規格、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL本頁接線是 VCC → 依模組規格、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL。程式常數、積木欄位與實體線材必須使用同一組設定;若改了其中一邊,另外兩邊也要一起改。
void setup() {啟動序列埠、I²C/UART 或感測器初始化通常只需要做一次,所以要放在「初始化」區,不要每一圈重複建立裝置。這也對應範例中的啟動積木。
float pressureHpa = 0.0f;重複執行區先讓感測器更新,再讀取 MS5803-14BA 初始化。若元件有 data ready、可用性或逾時條件,先判斷狀態再使用數值,避免把無效資料當成真實測量。
if (!initialized) return;先把原始值、單位或狀態送到序列埠,才能和預期結果比較;等待時間則決定更新速度。若看到亂碼,先檢查鮑率;若數值跳動,先增加合理的取樣間隔或做校正。
先從「電源、接線、腳位、物體」四個方向檢查,再修改程式。
先檢查:確認 I2C 接線、供電與模組型號。
處理方式:重新檢查 SDA/SCL、位址與 MS5803_14 library。
先檢查:比較 hPa 與 Pa 的數值大小。
處理方式:hPa 乘以 100 才是 Pa,顯示時標明單位。
先檢查:確認海平面基準與當時天氣。
處理方式:使用同一基準比較相對變化,不要把估算值當作絕對高度。
從顯示數值,逐步走向條件判斷、燈號回饋與雷達專題。
題目:列印 MS5803 的 hPa 與 Pa,確認換算關係。
這題要延伸「MS5803-14BA 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。
題目:在兩個樓層記錄壓力差與估算高度差。
這題要延伸「MS5803-14BA 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。
題目:提出一個不接觸液體、可重複驗證壓力變化的實驗。
這題要延伸「MS5803-14BA 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。
確認 MS5803 系列的數位絕對壓力、24-bit ADC 與模組化應用。
補充 MS5803 高解析度壓力感測與 I2C/SPI 介面資訊。
對照 setup、update、溫度、壓力與高度積木及 MS5803_14 library 產生器。