學習目標
- ✓理解毫米波對靜止與移動人體的偵測概念。
- ✓以 UART 腳位與回報週期設定 C4002。
- ✓讀取存在狀態、距離與移動速度,設計教室情境應用。
SENSOR / MMWAVEPRESENCE
C4002 使用 24 GHz FMCW 毫米波偵測人體存在與移動,並透過 UART 回傳資料。本篇將『存在』、『移動』與距離資料拆開教學,避免把毫米波誤解成單純的紅外線開關。
先確認這一課要學會什麼,以及桌面上需要哪些材料。
毫米波模組分析反射訊號的變化,除了移動目標,也能在條件適合時判斷有人停留。偵測結果會受安裝高度、背景、金屬與環境校正影響。
Arduino 以 SoftwareSerial 或 Serial1 與 C4002 溝通。
在迴圈中取得模組最新回報。
分別讀取無目標、有人存在與有人移動。
狀態是模組分析後的結果,不代表所有環境都能保證偵測正確;正式安全用途需要專用認證設備。
UNO 的 RX/TX 要交叉接到模組 TX/RX;使用 5V 或 3.3V 時請依 C4002 模組版本與電平規格確認。
| 模組腳位 | 接到控制板 | 訊號方向 | 檢查重點 |
|---|---|---|---|
| VCC | 依模組規格供電 | 電源 | 不要只依接頭外觀猜電壓。 |
| GND | GND | 地線 | UART 通訊一定要共地。 |
| TX | D4(UNO RX) | UART 資料 | 模組 TX 接 Arduino 軟體序列埠 RX。 |
| RX | D5(UNO TX) | UART 資料 | 模組 RX 接 Arduino 軟體序列埠 TX。 |
已將 4 條線路依同一筆資料逐列對齊;電壓仍須依手上模組版本確認。
積木名稱與型別以桃園版 Blockly 現行程式為準,不以通用積木替代。
playrobot_c4002_setup設定 UART 腳位與回報週期
位置:感測器 → 距離感測器 → 毫米波人體存在playrobot_c4002_update讀取最新 UART 資料
位置:感測器 → 距離感測器 → 毫米波人體存在playrobot_c4002_presence判斷目前是否有目標
位置:感測器 → 距離感測器 → 毫米波人體存在playrobot_c4002_target_state選擇無目標、有人存在或有人移動
位置:感測器 → 距離感測器 → 毫米波人體存在playrobot_c4002_presence_distance取得存在目標距離
位置:感測器 → 距離感測器 → 毫米波人體存在playrobot_c4002_motion_speed取得移動目標速度
位置:感測器 → 距離感測器 → 毫米波人體存在更新 C4002 後,當模組判斷有人存在時控制 LED。
playrobot_c4002_setuparduino_delayplayrobot_c4002_updateplayrobot_c4002_target_statearduino_serial_printplayrobot_c4002_setuparduino_delayplayrobot_c4002_updateplayrobot_c4002_target_statearduino_serial_print依模組教學在無人環境執行校正。
為什麼:背景反射會影響存在判斷。把更新積木放入迴圈,再讀取狀態或數值。
為什麼:狀態值必須來自最新 UART 回報。分別測試人站著與走動時的狀態。
為什麼:這兩種狀態適合不同的互動設計。playrobot_c4002_setup:設定 UART 腳位與回報週期
下載桃園版 Blockly 專案或對應的文字程式。
| 測試情境 | 可能讀值 | 判讀 |
|---|---|---|
| 偵測區無人 | 狀態接近無目標 | 模組未判斷到可追蹤目標。 |
| 人站在偵測區 | 可能回報有人存在 | 毫米波能觀察到停留目標的反射變化。 |
| 人走過偵測區 | 可能回報有人移動並提供速度 | 移動造成更明顯的頻率變化。 |
這段程式把「毫米波人體存在感測器(C4002)」的實體接線、桃園版 Blockly 積木與 Arduino 執行流程接在一起。先對照腳位,再看初始化、讀值、輸出與等待的順序;每一步都可以回到本頁的積木範例實測。
#include <SoftwareSerial.h>
#include <DFRobot_C4002.h>
SoftwareSerial c4002Serial(4, 5); // Arduino RX, TX
DFRobot_C4002 c4002(&c4002Serial, 115200);
void setup() {
Serial.begin(115200);
while (c4002.begin() != true) delay(1000);
c4002.setReportPeriod(10);
}
void loop() {
c4002.getNoteInfo();
Serial.println(c4002.getTargetState() != eNoTarget);
delay(100);
}#include <SoftwareSerial.h>函式庫提供桃園版 Blockly 產生器所需的底層功能;若這裡的函式庫或物件名稱不對,後面的 playrobot_c4002_setup 就算接線正確也無法使用。
// VCC → 依模組規格供電、GND → GND、TX → D4(UNO RX)、RX → D5(UNO TX)本頁接線是 VCC → 依模組規格供電、GND → GND、TX → D4(UNO RX)、RX → D5(UNO TX)。程式常數、積木欄位與實體線材必須使用同一組設定;若改了其中一邊,另外兩邊也要一起改。
void setup() {啟動序列埠、I²C/UART 或感測器初始化通常只需要做一次,所以要放在「初始化」區,不要每一圈重複建立裝置。這也對應範例中的啟動積木。
void loop() {重複執行區先讓感測器更新,再讀取 C4002 初始化。若元件有 data ready、可用性或逾時條件,先判斷狀態再使用數值,避免把無效資料當成真實測量。
while (c4002.begin() != true) delay(1000);先把原始值、單位或狀態送到序列埠,才能和預期結果比較;等待時間則決定更新速度。若看到亂碼,先檢查鮑率;若數值跳動,先增加合理的取樣間隔或做校正。
先從「電源、接線、腳位、物體」四個方向檢查,再修改程式。
先檢查:確認 RX/TX 是否交叉、共地與供電。
處理方式:模組 TX 接 Arduino RX、模組 RX 接 Arduino TX,並依規格供電。
先檢查:檢查安裝角度、金屬反射與校正流程。
處理方式:清空偵測區後重新做環境校正,並縮小教學範圍。
先檢查:確認回報週期、序列埠速度與線材長度。
處理方式:降低回報頻率、固定接線,避免在同一序列埠混用除錯訊息。
從顯示數值,逐步走向條件判斷、燈號回饋與雷達專題。
題目:有人存在時點亮 LED,無人時熄滅。
這題要延伸「C4002 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。把結果接到題目指定的輸出元件。
題目:為 ePresence 與 eMotion 設計不同顏色的 LED。
這題要延伸「C4002 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。把結果接到題目指定的輸出元件。
題目:偵測到有人且光照不足時才啟動燈光提示。
這題要延伸「C4002 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。把結果接到題目指定的輸出元件。
確認 24 GHz FMCW、人體存在/移動與量測範圍等產品特性。
對照 Arduino、115200 UART、SoftwareSerial 與初始設定流程。
對照 setup、update、presence、target state、距離與速度積木。