學習目標
- ✓理解熱式風速感測與風向箭頭的意義。
- ✓使用固定 I2C 位址 0x28 初始化 FS3000。
- ✓比較原始值、公尺/秒與英里/小時三種輸出。
SENSOR / FS3000
FS3000 是以 MEMS 熱電堆量測空氣流速的數位感測器,透過 I2C 回傳 12 位元資料。本篇以 FS3000-1005 為例,帶學生分辨原始值、m/s 與 mph。
先確認這一課要學會什麼,以及桌面上需要哪些材料。
FS3000 使用 MEMS 熱電堆感測空氣流速,資料以數位方式透過 I2C 輸出;它量的是流速,不是風向。
將電源、地線、SDA 與 SCL 接妥。
感測器回傳 12 位元的風速相關 count。
函式庫將資料轉成 m/s 或 mph,方便比較。
本篇以 FS3000-1005 的 0–7.23 m/s 範圍為例;FS3000-1015 的上限不同。
FS3000 是 3.3V I2C 模組,不要直接把裸晶片當成 5V 模組使用;請依所用轉接板的電平規格接線。
| 模組腳位 | 接到控制板 | 訊號方向 | 檢查重點 |
|---|---|---|---|
| 3.3V/VCC | 3.3V 或轉接板規格 | 電源 | 先確認 Qwiic 或轉接板是否含電平轉換。 |
| GND | GND | 地線 | I2C 裝置共地。 |
| SDA | A4 / SDA | I2C 資料 | UNO 的 SDA。 |
| SCL | A5 / SCL | I2C 時脈 | UNO 的 SCL。 |
已將 4 條線路依同一筆資料逐列對齊;電壓仍須依手上模組版本確認。
積木名稱與型別以桃園版 Blockly 現行程式為準,不以通用積木替代。
playrobot_fs3000_setup啟動固定 I2C 位址 0x28 的風速模組
位置:感測器 → 環境感測器 → FS3000 風速playrobot_fs3000_update讀取最新風速資料
位置:感測器 → 環境感測器 → FS3000 風速playrobot_fs3000_meters_per_second取得公尺/秒風速
位置:感測器 → 環境感測器 → FS3000 風速playrobot_fs3000_raw觀察 12 位元原始 count
位置:感測器 → 環境感測器 → FS3000 風速更新 FS3000 後,把風速以 m/s 列印到序列埠。
playrobot_fs3000_setuparduino_delayplayrobot_fs3000_updateplayrobot_fs3000_meters_per_secondarduino_serial_printplayrobot_fs3000_setuparduino_delayplayrobot_fs3000_updateplayrobot_fs3000_meters_per_secondarduino_serial_print沒有風時記錄原始值與 m/s。
為什麼:確認接線與感測器初始化成功。依模組箭頭從正面送風,再從側面送風。
為什麼:觀察安裝方向對量測的影響。同時列印 raw 與 m/s。
為什麼:理解原始資料與有單位資料的差別。playrobot_fs3000_setup:啟動固定 I2C 位址 0x28 的風速模組
下載桃園版 Blockly 專案或對應的文字程式。
| 測試情境 | 可能讀值 | 判讀 |
|---|---|---|
| 紙扇靠近且方向正確 | m/s 數值通常上升 | 氣流讓熱式感測元件的熱平衡改變。 |
| 模組方向轉 90 度 | 讀值可能改變 | 氣流方向與模組結構會影響結果。 |
這段程式把「FS3000 數位風速感測器」的實體接線、桃園版 Blockly 積木與 Arduino 執行流程接在一起。先對照腳位,再看初始化、讀值、輸出與等待的順序;每一步都可以回到本頁的積木範例實測。
#include <Wire.h>
#include <SparkFun_FS3000_Arduino_Library.h>
FS3000 fs3000;
void setup() {
Serial.begin(115200);
Wire.begin();
if (!fs3000.begin()) Serial.println("FS3000 init failed");
}
void loop() {
Serial.print(fs3000.readMetersPerSecond());
Serial.println(" m/s");
delay(200);
}#include <Wire.h>函式庫提供桃園版 Blockly 產生器所需的底層功能;若這裡的函式庫或物件名稱不對,後面的 playrobot_fs3000_setup 就算接線正確也無法使用。
// 3.3V/VCC → 3.3V 或轉接板規格、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL本頁接線是 3.3V/VCC → 3.3V 或轉接板規格、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL。程式常數、積木欄位與實體線材必須使用同一組設定;若改了其中一邊,另外兩邊也要一起改。
void setup() {啟動序列埠、I²C/UART 或感測器初始化通常只需要做一次,所以要放在「初始化」區,不要每一圈重複建立裝置。這也對應範例中的啟動積木。
void loop() {重複執行區先讓感測器更新,再讀取 FS3000 初始化。若元件有 data ready、可用性或逾時條件,先判斷狀態再使用數值,避免把無效資料當成真實測量。
if (!fs3000.begin()) Serial.println("FS3000 init failed");先把原始值、單位或狀態送到序列埠,才能和預期結果比較;等待時間則決定更新速度。若看到亂碼,先檢查鮑率;若數值跳動,先增加合理的取樣間隔或做校正。
先從「電源、接線、腳位、物體」四個方向檢查,再修改程式。
先檢查:確認 3.3V、共地、SDA/SCL 與 I2C 位址。
處理方式:檢查轉接板電平與 0x28 位址,必要時使用 I2C 掃描器。
先檢查:確認氣流方向是否對準箭頭。
處理方式:改變風扇距離與方向,先用紙扇做明顯氣流測試。
先檢查:觀察供電是否不足或誤接 5V。
處理方式:使用穩定 3.3V 供電,不要從不適合的腳位拉取大電流。
從顯示數值,逐步走向條件判斷、燈號回饋與雷達專題。
題目:比較無風、慢扇、快扇的 m/s。
這題要延伸「FS3000 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。
題目:風速超過門檻時點亮 LED。
這題要延伸「FS3000 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。把結果接到題目指定的輸出元件。
題目:比較直管、彎管與開放空間中的風速。
這題要延伸「FS3000 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。
確認 MEMS 熱電堆、I2C 位址 0x28、12 位元與量測範圍。
補充 FS3000-1005 與 1015 的規格差異。
對照 setup、update、raw、m/s 與 mph 積木。