空速度計
🚗 STM32 風壓與速度資料擷取系統說明
撰寫人: 范紹捷/動力組/5~9代
📌 系統目標
使用 STM32 MCU 從以下來源擷取資料:
- MPXV7002 壓力感測器(透過 ADC 讀取電壓,計算壓力與風速)
- 透過 UART 傳輸格式化資料給 Python GUI 顯示與繪圖
🔧 系統架構
| 感測器/模組 | 功能 | 照片 |
|---|---|---|
| MPXV7002 | 壓力感測 | ![]() |
| stm32 | 運算 | ![]() |
| GUI 主機 | 顯示資料 | USARTx_TX (UART 傳輸腳位) |
🔌 感測器與接腳

軟體架構
MPXV7002 ⇩ ADC ⇩ 壓力/風速計算 ⇩ STM32 格式化字串 ⇩ UART 傳送給 GUI
🧮 風速計算公式
壓力轉換公式:
pressure_kPa = (voltage - 2.5) / 1.0; // ±2kPa 對應 0.5V~4.5V
風速計算(使用伯努力定律):
airspeed_mps = sqrt(2 * abs(pressure_kPa) * 1000 / 1.225);
airspeed_kmh = airspeed_mps * 3.6;
🧰 STM32 程式碼片段
1️⃣ ADC 電壓讀取(以 12-bit 為例) 112~114行
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,100);
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC))
ADC_Value = HAL_ADC_GetValue(&hadc1);
2️⃣ 壓力/風速計算 118~121行
ADC_Volt = (float)ADC_Value/4096*3.3;
float pressure = (ADC_Volt - V_OFFSET) / SENSITIVITY; //kPa
float airspeed = sqrt(2 * fabs(pressure) * 1000.0f / AIR_DENSITY);
float airspeed_kmh = airspeed * 3.6f;
3️⃣ 格式化字串並透過 UART 傳送 123~126行
if(HAL_GetTick()%100 == 0){ //USRT Send
char buf[100];
sprintf(buf, "Volt:%.2lf V \t P:%.2lf kPa \t S:%.2lf Kmh\n", ADC_Volt,pressure,airspeed_kmh);
HAL_UART_Transmit(&huart1, (uint8_t*)buf, strlen(buf), HAL_MAX_DELAY);
}
🧰 STM32 程式碼


