學習目標
- ✓分辨壓力、海拔與水深是不同的換算情境。
- ✓使用 MS5837-02BA 初始化與更新積木。
- ✓理解流體密度與密封是水深量測的必要條件。
SENSOR / MS5837
MS5837-02BA 是數位壓力與溫度感測模組,具有 24 位元 ADC 與防水封裝。桃園版 Blockly 同時提供壓力、溫度、水深與海拔積木,本篇先用乾式壓力觀察建立安全概念。
先確認這一課要學會什麼,以及桌面上需要哪些材料。
MS5837 直接量測絕對壓力與溫度;水深與海拔都是由壓力模型估算,還需要流體密度、海平面基準與安全密封。
啟動 library 並設定 MS5837_02BA。
呼叫 read 取得最新壓力與溫度。
依情境讀取 mbar、Pa、水深或海拔。
教學積木的水深結果依 library 目前流體密度設定;未密封模組不可直接下水。
本篇只做乾式 I2C 測試;MS5837-02BA 的壓力介面與整個模組仍需依密封與安裝方式使用。
| 模組腳位 | 接到控制板 | 訊號方向 | 檢查重點 |
|---|---|---|---|
| VCC | 依模組規格 | 電源 | 裸晶片與轉接板的電壓不可混用。 |
| GND | GND | 地線 | I2C 共地。 |
| SDA | A4 / SDA | I2C 資料 | UNO SDA。 |
| SCL | A5 / SCL | I2C 時脈 | UNO SCL。 |
已將 4 條線路依同一筆資料逐列對齊;電壓仍須依手上模組版本確認。
積木名稱與型別以桃園版 Blockly 現行程式為準,不以通用積木替代。
playrobot_ms5837_setup啟動並設定 02BA 型號
位置:感測器 → 環境感測器 → MS5837-02BAplayrobot_ms5837_update讀取最新壓力與溫度
位置:感測器 → 環境感測器 → MS5837-02BAplayrobot_ms5837_pressure_mbar取得壓力
位置:感測器 → 環境感測器 → MS5837-02BAplayrobot_ms5837_depth依流體密度估算水深
位置:感測器 → 環境感測器 → MS5837-02BAplayrobot_ms5837_altitude依氣壓估算海拔
位置:感測器 → 環境感測器 → MS5837-02BA先更新 MS5837,再記錄壓力與海拔估算值。
playrobot_ms5837_setuparduino_delayplayrobot_ms5837_updateplayrobot_ms5837_pressure_mbarplayrobot_ms5837_altitudearduino_serial_printplayrobot_ms5837_setuparduino_delayplayrobot_ms5837_updateplayrobot_ms5837_pressure_mbarplayrobot_ms5837_altitudearduino_serial_print讀取已初始化積木或觀察序列埠。
為什麼:錯誤的型號或 I2C 會使後續數值無效。上下樓層使用同一時間的基準。
為什麼:天氣變化會影響壓力。只做空氣壓力測試。
為什麼:真正水深量測需要完整防水結構。playrobot_ms5837_setup:啟動並設定 02BA 型號
下載桃園版 Blockly 專案或對應的文字程式。
| 測試情境 | 可能讀值 | 判讀 |
|---|---|---|
| 位置升高 | 壓力通常略降 | 氣壓會隨高度改變。 |
| 直接把模組放入水中 | 可能損壞 | 裸露電子模組不能取代防水壓力探頭。 |
這段程式把「MS5837-02BA 壓力/水深感測器」的實體接線、桃園版 Blockly 積木與 Arduino 執行流程接在一起。先對照腳位,再看初始化、讀值、輸出與等待的順序;每一步都可以回到本頁的積木範例實測。
#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);
}#include <Wire.h>函式庫提供桃園版 Blockly 產生器所需的底層功能;若這裡的函式庫或物件名稱不對,後面的 playrobot_ms5837_setup 就算接線正確也無法使用。
// VCC → 依模組規格、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL本頁接線是 VCC → 依模組規格、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL。程式常數、積木欄位與實體線材必須使用同一組設定;若改了其中一邊,另外兩邊也要一起改。
void setup() {啟動序列埠、I²C/UART 或感測器初始化通常只需要做一次,所以要放在「初始化」區,不要每一圈重複建立裝置。這也對應範例中的啟動積木。
void loop() {重複執行區先讓感測器更新,再讀取 MS5837-02BA 初始化。若元件有 data ready、可用性或逾時條件,先判斷狀態再使用數值,避免把無效資料當成真實測量。
if (!sensor.begin()) Serial.println("MS5837 init failed");先把原始值、單位或狀態送到序列埠,才能和預期結果比較;等待時間則決定更新速度。若看到亂碼,先檢查鮑率;若數值跳動,先增加合理的取樣間隔或做校正。
先從「電源、接線、腳位、物體」四個方向檢查,再修改程式。
先檢查:檢查 SDA/SCL、供電與 library 型號。
處理方式:確認使用 02BA 設定並重新檢查 I2C。
先檢查:確認流體密度與壓力基準。
處理方式:先在空氣中測試,水深活動必須加入密封與正確密度。
先檢查:檢查模組是否進水。
處理方式:停止供電,不要把未密封模組直接放入液體。
從顯示數值,逐步走向條件判斷、燈號回饋與雷達專題。
題目:同時列印 mbar 與 Pa,確認 Pa 約為 mbar 的 100 倍。
這題要延伸「MS5837-02BA 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。
題目:在相同時間記錄兩個高度的壓力。
這題要延伸「MS5837-02BA 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。
題目:畫出不讓液體接觸電子板、又能傳遞壓力的結構。
這題要延伸「MS5837-02BA 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。
確認數位絕對壓力、24-bit ADC 與防水模組特性。
補充 MS5837-02BA 壓力/溫度用途。
對照 setup、update、壓力、溫度、水深與海拔積木。