TY桃園智造感測器教學庫
感測器教學庫/環境感測器/MS5837-02BA 壓力/水深
BATCH 02 · 已發布

SENSOR / MS5837

MS5837-02BA 壓力/水深感測器從氣壓讀值延伸到水深與海拔估算

MS5837-02BA 是數位壓力與溫度感測模組,具有 24 位元 ADC 與防水封裝。桃園版 Blockly 同時提供壓力、溫度、水深與海拔積木,本篇先用乾式壓力觀察建立安全概念。

入門45 分鐘Arduino UNO(I2C,Blue Robotics MS5837 Library)
READYDATA
SIGNAL STABLE
MS5837-02BA 壓力/水
VCC / 依模組規格GND / GND
01 / PREPARE

課前準備

先確認這一課要學會什麼,以及桌面上需要哪些材料。

學習目標

  1. 分辨壓力、海拔與水深是不同的換算情境。
  2. 使用 MS5837-02BA 初始化與更新積木。
  3. 理解流體密度與密封是水深量測的必要條件。

材料清單

1 個MS5837-02BA 模組確認模組版本與 I2C 接線。
1 組Arduino UNO 與 USB 線UNO 使用 A4/A5 I2C。
2 處以上不同高度的固定位置先進行不接觸液體的乾式實驗。
適用對象國中生活科技與 Arduino 初學者
建議課時45 分鐘
示範平台Arduino UNO(I2C,Blue Robotics MS5837 Library)
02 / HOW IT WORKS

壓力換成水深需要條件

MS5837 直接量測絕對壓力與溫度;水深與海拔都是由壓力模型估算,還需要流體密度、海平面基準與安全密封。

01

初始化型號

啟動 library 並設定 MS5837_02BA。

02

更新資料

呼叫 read 取得最新壓力與溫度。

03

選擇換算

依情境讀取 mbar、Pa、水深或海拔。

DISTANCE FORMULAdepth = pressure difference / (fluid density × gravity)

教學積木的水深結果依 library 目前流體密度設定;未密封模組不可直接下水。

03 / WIRING

接線配置

本篇只做乾式 I2C 測試;MS5837-02BA 的壓力介面與整個模組仍需依密封與安裝方式使用。

MODULEMS5837-02BA 壓力/水VCCGNDSDASCL
CONTROLArduino UNO(I2C,Blue Robotics MS5837 Library)依模組規格GNDA4 / SDAA5 / SCL
模組腳位接到控制板訊號方向檢查重點
VCC依模組規格電源裸晶片與轉接板的電壓不可混用。
GNDGND地線I2C 共地。
SDAA4 / SDAI2C 資料UNO SDA。
SCLA5 / SCLI2C 時脈UNO SCL。
✓ WIRING ROWS ALIGNED

已將 4 條線路依同一筆資料逐列對齊;電壓仍須依手上模組版本確認。

04 / BLOCK GUIDE

本課會用到的積木

積木名稱與型別以桃園版 Blockly 現行程式為準,不以通用積木替代。

MS5837-02BA 初始化
BLOCK 01playrobot_ms5837_setup

MS5837-02BA 初始化

啟動並設定 02BA 型號

位置:感測器 → 環境感測器 → MS5837-02BA
MS5837-02BA 更新資料
BLOCK 02playrobot_ms5837_update

MS5837-02BA 更新資料

讀取最新壓力與溫度

位置:感測器 → 環境感測器 → MS5837-02BA
壓力(mbar)
BLOCK 03playrobot_ms5837_pressure_mbar

壓力(mbar)

取得壓力

位置:感測器 → 環境感測器 → MS5837-02BA
水深(m)
BLOCK 04playrobot_ms5837_depth

水深(m)

依流體密度估算水深

位置:感測器 → 環境感測器 → MS5837-02BA
海拔(m)
BLOCK 05playrobot_ms5837_altitude

海拔(m)

依氣壓估算海拔

位置:感測器 → 環境感測器 → MS5837-02BA
05 / BLOCK EXAMPLE

比較樓梯上下的壓力

先更新 MS5837,再記錄壓力與海拔估算值。

桃園版 BLOCKLY / WORKSPACE● BLOCK STYLE
Arduino 程式
初始化
MS5837-02BA 初始化playrobot_ms5837_setup
重複執行arduino_delay
MS5837-02BA 更新資料playrobot_ms5837_update
MS5837-02BA 壓力(mbar)playrobot_ms5837_pressure_mbar
MS5837-02BA 海拔(m)playrobot_ms5837_altitude
序列埠列印arduino_serial_print
重複執行
MS5837-02BA 初始化playrobot_ms5837_setup
重複執行arduino_delay
MS5837-02BA 更新資料playrobot_ms5837_update
MS5837-02BA 壓力(mbar)playrobot_ms5837_pressure_mbar
MS5837-02BA 海拔(m)playrobot_ms5837_altitude
序列埠列印arduino_serial_print
X / 010Y / 024

組合步驟

01
先確認初始化

讀取已初始化積木或觀察序列埠。

為什麼:錯誤的型號或 I2C 會使後續數值無效。
02
固定海平面基準

上下樓層使用同一時間的基準。

為什麼:天氣變化會影響壓力。
03
保持乾燥

只做空氣壓力測試。

為什麼:真正水深量測需要完整防水結構。
積木使用重點先辨認積木是「回傳值」還是「執行動作」,再放到正確的拼接位置。

playrobot_ms5837_setup啟動並設定 02BA 型號

預期觀察結果

測試情境可能讀值判讀
位置升高壓力通常略降氣壓會隨高度改變。
直接把模組放入水中可能損壞裸露電子模組不能取代防水壓力探頭。
06 / CODE EXPLAINED

範例程式逐段解說

這段程式把「MS5837-02BA 壓力/水深感測器」的實體接線、桃園版 Blockly 積木與 Arduino 執行流程接在一起。先對照腳位,再看初始化、讀值、輸出與等待的順序;每一步都可以回到本頁的積木範例實測。

GENERATED LOGIC / EXCERPT積木背後的程式碼收合程式碼 −
TAOYUAN BLOCKLY / ARDUINO C++READ ONLY
#include <Wire.h>
#include <MS5837.h>

MS5837 sensor;

void setup() {
  Serial.begin(115200);
  Wire.begin();
  if (!sensor.begin()) Serial.println("MS5837 init failed");
  sensor.setModel(MS5837::MS5837_02BA);
  sensor.setFluidDensity(1029);
}

void loop() {
  sensor.read();
  Serial.println(sensor.pressure());
  delay(500);
}
SELF STUDY GUIDE先看哪一段、為什麼?
01
先載入函式庫與建立裝置#include <Wire.h>

函式庫提供桃園版 Blockly 產生器所需的底層功能;若這裡的函式庫或物件名稱不對,後面的 playrobot_ms5837_setup 就算接線正確也無法使用。

02
把程式腳位對回接線表// VCC → 依模組規格、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL

本頁接線是 VCC → 依模組規格、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL。程式常數、積木欄位與實體線材必須使用同一組設定;若改了其中一邊,另外兩邊也要一起改。

03
在 setup 只做一次初始化void setup() {

啟動序列埠、I²C/UART 或感測器初始化通常只需要做一次,所以要放在「初始化」區,不要每一圈重複建立裝置。這也對應範例中的啟動積木。

04
在 loop 更新並取得資料void loop() {

重複執行區先讓感測器更新,再讀取 MS5837-02BA 初始化。若元件有 data ready、可用性或逾時條件,先判斷狀態再使用數值,避免把無效資料當成真實測量。

05
輸出結果並控制取樣速度if (!sensor.begin()) Serial.println("MS5837 init failed");

先把原始值、單位或狀態送到序列埠,才能和預期結果比較;等待時間則決定更新速度。若看到亂碼,先檢查鮑率;若數值跳動,先增加合理的取樣間隔或做校正。

自學檢查
  • 實體接線:VCC → 依模組規格、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL。
  • 主要積木:playrobot_ms5837_setup;先確認它是回傳值還是執行動作。
  • 本課板子:Arduino UNO(I2C,Blue Robotics MS5837 Library);更換控制板或模組版本時,電壓、腳位與函式庫都要重新確認。
07 / DEBUG

常見問題與故障排除

先從「電源、接線、腳位、物體」四個方向檢查,再修改程式。

ERR 01

初始化失敗

先檢查:檢查 SDA/SCL、供電與 library 型號。

處理方式:確認使用 02BA 設定並重新檢查 I2C。

ERR 02

水深結果不合理

先檢查:確認流體密度與壓力基準。

處理方式:先在空氣中測試,水深活動必須加入密封與正確密度。

ERR 03

接觸水後失效

先檢查:檢查模組是否進水。

處理方式:停止供電,不要把未密封模組直接放入液體。

08 / NEXT MISSION

延伸挑戰

從顯示數值,逐步走向條件判斷、燈號回饋與雷達專題。

L1

壓力單位換算

題目:同時列印 mbar 與 Pa,確認 Pa 約為 mbar 的 100 倍。

解題方向

這題要延伸「MS5837-02BA 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。

  1. 先匯入本頁 Blockly 範例,確認感測器在沒有加入挑戰功能時能穩定讀值。
  2. 保留 playrobot_ms5837_setup,先把讀值送到序列埠,建立正常範圍或基準值。
  3. 依題目「同時列印 mbar 與 Pa,確認 Pa 約為 mbar 的 100 倍。」加入比較、分類、累計或時間判斷;門檻要用實測資料決定,不要直接猜一個數字。
  4. 用至少三種不同情境測試,記錄輸入、程式判斷與輸出結果,再修正門檻或取樣間隔。
完成檢核:完成後應能指出:哪一個積木取得資料、哪一段負責判斷或換算、先把資料整理成可觀察的序列埠或表格結果是否在所有測試情境都正確反應。
L2

上下樓層比較

題目:在相同時間記錄兩個高度的壓力。

解題方向

這題要延伸「MS5837-02BA 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。

  1. 先匯入本頁 Blockly 範例,確認感測器在沒有加入挑戰功能時能穩定讀值。
  2. 保留 playrobot_ms5837_setup,先把讀值送到序列埠,建立正常範圍或基準值。
  3. 依題目「在相同時間記錄兩個高度的壓力。」加入比較、分類、累計或時間判斷;門檻要用實測資料決定,不要直接猜一個數字。
  4. 用至少三種不同情境測試,記錄輸入、程式判斷與輸出結果,再修正門檻或取樣間隔。
完成檢核:完成後應能指出:哪一個積木取得資料、哪一段負責判斷或換算、先把資料整理成可觀察的序列埠或表格結果是否在所有測試情境都正確反應。
L3

設計防水方案

題目:畫出不讓液體接觸電子板、又能傳遞壓力的結構。

解題方向

這題要延伸「MS5837-02BA 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。

  1. 先匯入本頁 Blockly 範例,確認感測器在沒有加入挑戰功能時能穩定讀值。
  2. 保留 playrobot_ms5837_setup,先把讀值送到序列埠,建立正常範圍或基準值。
  3. 依題目「畫出不讓液體接觸電子板、又能傳遞壓力的結構。」加入比較、分類、累計或時間判斷;門檻要用實測資料決定,不要直接猜一個數字。
  4. 用至少三種不同情境測試,記錄輸入、程式判斷與輸出結果,再修正門檻或取樣間隔。
完成檢核:完成後應能指出:哪一個積木取得資料、哪一段負責判斷或換算、先把資料整理成可觀察的序列埠或表格結果是否在所有測試情境都正確反應。
教師快速檢核4 POINT CHECK
  • 能分辨壓力、海拔與水深的換算條件。
  • 能正確設定 MS5837-02BA 型號。
  • 能指出直接下水的安全風險。
09 / EVIDENCE資料來源與版本展開查看 +
LAST REVIEWED / 2026-08-13

本頁使用零件圖鑑標準範本,內容可由網站編輯模式持續維護。

返回教學庫 →