876浏览
楼主: 驴友花雕

[项目] 168种传感器系列实验(217)--C4002 模块十二个小实验项目

[复制链接]

驴友花雕  高级技神
 楼主|

发表于 2026-5-24 16:17:06

【花雕】168种系列实验(217)---C4002 毫米波人体存在模块

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十七:C4002 毫米波运动与静态存在检测模块人体存在传感器
  案例九:C4002毫米波雷达 —— 通过 OUT 引脚获取检测结果(极简硬件触发)

通过 C4002 的 OUT 硬件引脚输出高低电平,判断是否有人,不需要解析复杂串口数据,最简单、最稳定。
Arduino Uno 完整接线
C4002 VCC → 5V
C4002 GND → GND
C4002 TX → D4
C4002 RX → D5
C4002 OUT → D6

三种 OUT 模式说明
Mode1 → 只有运动才输出高电平
Mode2 → 只有静态存在才输出高电平
Mode3 → 运动 + 静态 都输出高电平(默认,最常用)

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百一十七:C4002毫米波运动与静态存在检测模块人体存在传感器
  4.   案例九:C4002毫米波雷达 —— 通过 OUT 引脚获取检测结果(极简硬件触发)
  5. */
  6. // 包含C4002毫米波雷达驱动库
  7. #include "DFRobot_C4002.h"
  8. /* ---------------------------------------------------------------------------------------------------------------------
  9.   * 硬件接线对照表(模块 ↔ 开发板)
  10.   *    模块    |      功能          | Mega | UNO | ESP8266 |  ESP32   |
  11.   *     VCC    |     5V 供电        | 5V   | 5V  | 5V      | 5V       |
  12.   *     GND    |      地线          | GND  | GND | GND     | GND      |
  13.   *     RX     | 模块接收 → 开发板TX | TX1  | D5  | D5      | GPIO25/D2|
  14.   *     TX     | 模块发送 → 开发板RX | RX1  | D4  | D4      | GPIO26/D3|
  15.   * ----------------------------------------------------------------------------------------------------------------------
  16.   * 注意:
  17.   * 1. 模块RX 接 开发板TX
  18.   * 2. 模块TX 接 开发板RX
  19.   * 3. OUT 引脚是开关量输出:有人=高电平,无人=低电平
  20.   */
  21. /* 根据不同开发板自动选择串口方式 */
  22. // 如果是 UNO / ESP8266 → 使用软件串口
  23. #if defined(ESP8266) || defined(ARDUINO_AVR_UNO)
  24. SoftwareSerial mySerial(4, 5);                // UNO:软件串口 RX=4, TX=5
  25. DFRobot_C4002  c4002(&mySerial, 115200);      // 绑定串口,波特率115200
  26. // 如果是 ESP32 → 使用硬件串口1
  27. #elif defined(ESP32)
  28. DFRobot_C4002 c4002(&Serial1, 115200, D2, D3);
  29. // 其他开发板
  30. #else
  31. DFRobot_C4002 c4002(&Serial1, 115200);
  32. #endif
  33. // ======================== 重要配置 ========================
  34. // C4002 的 OUT 引脚 接 Arduino 的 D6
  35. uint8_t outPin = 6;
  36. /**
  37. * OUT 引脚输出模式(三选一)
  38. * eOutpinMode1:仅检测到【运动】时输出高电平
  39. * eOutpinMode2:仅检测到【静态存在】时输出高电平
  40. * eOutpinMode3:检测到【运动 或 静态存在】都输出高电平(最常用)
  41. */
  42. eOutpinMode_t outMode = eOutpinMode3;  // 默认使用模式3:有人就高电平
  43. // ============================================================
  44. void setup()
  45. {
  46.   // 开启串口监视器,波特率115200
  47.   Serial.begin(115200);
  48.   // ===================== 初始化C4002(传入OUT引脚) =====================
  49.   while (c4002.begin(outPin) != true) {
  50.     Serial.println("C4002 初始化失败!");
  51.     delay(1000);
  52.   }
  53.   Serial.println("C4002 初始化成功!");
  54.   delay(50);
  55.   // ===================== 设置运行指示灯(开) =====================
  56.   if (c4002.setRunLedState(eLedOn)) {
  57.     Serial.println("运行指示灯开启成功!");
  58.   } else {
  59.     Serial.println("运行指示灯开启失败!");
  60.   }
  61.   delay(50);
  62.   // ===================== 设置输出指示灯(开) =====================
  63.   // 蓝色LED,与OUT引脚电平同步
  64.   if (c4002.setOutLedState(eLedOn)) {
  65.     Serial.println("输出指示灯开启成功!");
  66.   } else {
  67.     Serial.println("输出指示灯开启失败!");
  68.   }
  69.   delay(50);
  70.   // ===================== 设置OUT引脚模式 =====================
  71.   if (c4002.setOutPinMode(outMode)) {
  72.     Serial.println("OUT引脚模式设置成功!");
  73.   } else {
  74.     Serial.println("OUT引脚模式设置失败!");
  75.   }
  76.   // ===================== 关键修复:人离开延时设为0秒(立刻判定无人) =====================
  77.   c4002.setTargetDisappearDelay(0);
  78.   // 雷达刷新速度
  79.   c4002.setReportPeriod(5);
  80. }
  81. void loop()
  82. {
  83.   // ===================== 通过OUT引脚获取目标状态 =====================
  84.   eTargetState_t targetState = c4002.getOutTargetState();
  85.   Serial.println("------- OUT 引脚检测结果 --------");
  86.   // 打印当前OUT模式
  87.   Serial.print("输出模式:");
  88.   if (outMode == eOutpinMode1) {
  89.     Serial.println("模式1(仅运动)");
  90.   } else if (outMode == eOutpinMode2) {
  91.     Serial.println("模式2(仅静态)");
  92.   } else if (outMode == eOutpinMode3) {
  93.     Serial.println("模式3(运动+静态)");
  94.   }
  95.   // 读取OUT引脚实际电平(HIGH=有人,LOW=无人)
  96.   uint8_t outPinStatus = digitalRead(outPin);
  97.   Serial.print("OUT引脚状态:");
  98.   if (outPinStatus == HIGH) {
  99.     Serial.println("高电平 (有人)");
  100.   } else {
  101.     Serial.println("低电平 (无人)");
  102.   }
  103.   // ===================== 打印目标状态(文字说明) =====================
  104.   Serial.print("目标状态:");
  105.   if (targetState == eNoTarget) {
  106.     Serial.println("无人");
  107.   } else if (targetState == ePresence) {
  108.     Serial.println("静态存在(静坐/睡觉)");
  109.   } else if (targetState == eMotion) {
  110.     Serial.println("运动(走动/挥手)");
  111.   } else if (targetState == eMotionOrNoTarget) {
  112.     Serial.println("运动 或 无人");
  113.   } else if (targetState == ePresenceOrNoTarget) {
  114.     Serial.println("静态存在 或 无人");
  115.   } else if (targetState == eMotionOrPresence) {
  116.     Serial.println("运动 或 静态存在");
  117.   } else {
  118.     Serial.println("引脚错误,请检查接线!");
  119.   }
  120.   Serial.println("-----------------------------------");
  121.   
  122.   // ===================== 放慢输出速度:1.5秒输出一次(不刷屏) =====================
  123.   delay(1500);
  124. }
复制代码


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 2026-5-24 16:18:49

【花雕】168种系列实验(217)---C4002 毫米波人体存在模块

   实验串口返回情况

168种传感器系列实验(217)--C4002 模块十二个小实验项目图1
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 2026-5-24 16:26:20

【花雕】168种系列实验(217)---C4002 毫米波人体存在模块

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十七:C4002毫米波运动与静态存在检测模块人体存在传感器
  案例十:C4002毫米波雷达 —— 设置串口波特率


  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百一十七:C4002毫米波运动与静态存在检测模块人体存在传感器
  4.   案例十:C4002毫米波雷达 —— 设置串口波特率
  5. */
  6. // 包含C4002毫米波雷达驱动库
  7. #include "DFRobot_C4002.h"
  8. /* ---------------------------------------------------------------------------------------------------------------------
  9.   * 硬件接线对照表(模块 ↔ 各种开发板)
  10.   *    模块    |      功能说明          | Mega2560  |   UNO   | ESP8266 |    ESP32     |
  11.   *     VCC    |        5V 供电          |    5V     |   5V    |   5V    |      5V      |
  12.   *     GND    |         地线            |   GND     |   GND   |   GND   |     GND      |
  13.   *     RX     |  模块接收 → 接开发板 TX  | Serial1 TX1 |   D5   |   D5    |  GPIO25/D2   |
  14.   *     TX     |  模块发送 → 接开发板 RX  | Serial1 RX1 |   D4   |   D4    |  GPIO26/D3   |
  15.   * ----------------------------------------------------------------------------------------------------------------------
  16.   * 重要说明:
  17.   * 1. 模块的 RX 必须接 开发板的 TX
  18.   * 2. 模块的 TX 必须接 开发板的 RX
  19.   * 3. 波特率修改后,下次通讯必须使用新波特率,否则无法通信
  20.   */
  21. // 当前使用的波特率(默认115200)
  22. unsigned long curBaudrate = 115200;
  23. // 根据不同开发板自动选择串口方式
  24. // 如果是 ESP8266 或 Arduino UNO —— 使用软件串口
  25. #if defined(ESP8266) || defined(ARDUINO_AVR_UNO)
  26. SoftwareSerial mySerial(4, 5);                // 定义软件串口:UNO RX=4,TX=5
  27. DFRobot_C4002  c4002(&mySerial, curBaudrate); // 创建雷达对象,绑定串口和波特率
  28. // 如果是 ESP32 —— 使用硬件串口1
  29. #elif defined(ESP32)
  30. DFRobot_C4002 c4002(&Serial1, curBaudrate, D2, D3);
  31. // 其他开发板(Mega、M0)—— 使用硬件串口1
  32. #else
  33. DFRobot_C4002 c4002(&Serial1, curBaudrate);
  34. #endif
  35. // 初始化函数,只运行一次
  36. void setup()
  37. {
  38.   // 开启电脑串口监视器,波特率115200
  39.   Serial.begin(115200);
  40.   // ===================== 初始化C4002雷达模块 =====================
  41.   // 如果初始化失败,每秒重试一次
  42.   while (c4002.begin() != true) {
  43.     Serial.println("C4002 初始化失败!");
  44.     delay(1000);
  45.   }
  46.   // 初始化成功
  47.   Serial.println("C4002 初始化成功!");
  48.   delay(50);  // 短暂延时,保证通信稳定
  49.   // ===================== 设置雷达串口波特率 =====================
  50.   /*
  51.     重要注意事项:
  52.     1. 模块默认波特率是 115200
  53.     2. 波特率设置过低可能导致数据丢包、通讯不流畅
  54.     3. 可选值:
  55.        eBaud9600    = 9600
  56.        eBaud19200   = 19200
  57.        eBaud38400   = 38400
  58.        eBaud57600   = 57600
  59.        eBaud115200  = 115200(默认)
  60.        eBaud230400  = 230400
  61.        eBaud460800  = 460800
  62.        eBaud921600  = 921600
  63.   */
  64.   eBaudrate_t setBaudrate = eBaud115200;  // 这里设置要修改的目标波特率
  65.   // 调用库函数,执行波特率设置
  66.   if (c4002.setBaudrate(setBaudrate)) {
  67.     // 设置成功
  68.     Serial.println("设置波特率成功!");
  69.     Serial.println("设置波特率后,需要重新上电重启模块才能生效!");
  70.   } else {
  71.     // 设置失败
  72.     Serial.println("设置波特率失败!");
  73.   }
  74. }
  75. // 主循环,波特率设置完成后这里什么都不做
  76. void loop()
  77. {
  78.   delay(100);  // 空延时
  79. }
复制代码


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 2026-5-24 16:27:49

【花雕】168种系列实验(217)---C4002 毫米波人体存在模块

   实验串口返回情况

168种传感器系列实验(217)--C4002 模块十二个小实验项目图1
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 2026-5-24 16:38:15

【花雕】168种系列实验(217)---C4002 毫米波人体存在模块

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十七:C4002毫米波运动与静态存在检测模块人体存在传感器
  案例十一:OUT 引脚检测 + D13 灯 + D12 蜂鸣器

接线
C4002 ↔ Arduino Uno
VCC → 5V
GND → GND
TX → D4
RX → D5
OUT → D6

外设
D13 → LED(有人亮)
D12 → 蜂鸣器(有人响)

  1. #include "DFRobot_C4002.h"
  2. #include <SoftwareSerial.h>
  3. // ==================== 串口与引脚定义 ====================
  4. // UNO 软件串口:模块TX→D4(RX),模块RX→D5(TX)
  5. SoftwareSerial mySerial(4, 5);
  6. DFRobot_C4002 c4002(&mySerial, 115200);
  7. // C4002 OUT 引脚接 D6
  8. uint8_t outPin = 6;
  9. // OUT模式3:运动 OR 静态存在 → 都输出高电平(最实用)
  10. eOutpinMode_t outMode = eOutpinMode3;
  11. // 灯与蜂鸣器引脚
  12. const int ledPin = 13;    // 板载LED
  13. const int buzzerPin = 12; // 蜂鸣器
  14. // ==================== 初始化 ====================
  15. void setup() {
  16.   Serial.begin(115200);
  17.   // 设置引脚模式
  18.   pinMode(outPin, INPUT);
  19.   pinMode(ledPin, OUTPUT);
  20.   pinMode(buzzerPin, OUTPUT);
  21.   // 初始状态:灯灭、蜂鸣不响
  22.   digitalWrite(ledPin, LOW);
  23.   digitalWrite(buzzerPin, HIGH);
  24.   // 初始化雷达
  25.   while (!c4002.begin(outPin)) {
  26.     Serial.println("C4002 初始化失败...");
  27.     delay(1000);
  28.   }
  29.   Serial.println("C4002 初始化成功!");
  30.   // 设置OUT输出模式
  31.   c4002.setOutPinMode(outMode);
  32.   Serial.println("OUT模式设置完成:运动+静态检测");
  33. }
  34. // ==================== 主循环 ====================
  35. void loop() {
  36.   // 读取 OUT 引脚电平
  37.   int outState = digitalRead(outPin);
  38.   // ==================== 核心逻辑 ====================
  39.   // OUT = HIGH → 有人
  40.   if (outState == HIGH) {
  41.     Serial.println("有人");
  42.     digitalWrite(ledPin, HIGH);    // 灯亮
  43.     digitalWrite(buzzerPin, LOW); // 蜂鸣响
  44.   }
  45.   // OUT = LOW → 无人
  46.   else {
  47.     Serial.println("无人");
  48.     digitalWrite(ledPin, LOW);     // 灯灭
  49.     digitalWrite(buzzerPin, HIGH);  // 蜂鸣停止
  50.   }
  51.   delay(1500); // 刷新间隔
  52. }
复制代码


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 2026-5-24 16:40:39

【花雕】168种系列实验(217)---C4002 毫米波人体存在模块

实验串口返回情况

168种传感器系列实验(217)--C4002 模块十二个小实验项目图1

实验场景图

168种传感器系列实验(217)--C4002 模块十二个小实验项目图2

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 4 天前

【花雕】168种系列实验(217)---C4002 毫米波人体存在模块

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十七:C4002 毫米波运动与静态存在检测模块人体存在传感器
案例十二:校准后自动检测人体,控制LED(智能灯光控制)

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百一十七:C4002毫米波运动与静态存在检测模块人体存在传感器
  4.   案例十二:校准后自动检测人体,控制LED(智能灯光控制)
  5. */
  6. #include <DFRobot_C4002.h>
  7. #include <SoftwareSerial.h>
  8. // ==================== 引脚定义 ====================
  9. #define LED_PIN 13          // 板载LED
  10. #define C4002_RX 4          // 模块TX → D4
  11. #define C4002_TX 5          // 模块RX → D5
  12. SoftwareSerial mySerial(C4002_RX, C4002_TX);
  13. DFRobot_C4002 c4002(&mySerial, 115200);
  14. // ==================== 全局变量 ====================
  15. bool calibDone = false;        // 校准完成标志
  16. String lastState = "无人";     // 上一次稳定状态
  17. unsigned long lastChange = 0;  // 上次状态变化时间
  18. const unsigned long DEBOUNCE = 1500; // 1.5秒去抖
  19. // ==================== Setup ====================
  20. void setup() {
  21.   Serial.begin(115200);
  22.   pinMode(LED_PIN, OUTPUT);
  23.   digitalWrite(LED_PIN, LOW);
  24.   
  25.   delay(500);
  26.   Serial.println("\n===== 智能灯光系统启动 =====");
  27.   // 初始化C4002
  28.   while (!c4002.begin()) {
  29.     Serial.println("模块初始化失败,重试...");
  30.     delay(1000);
  31.   }
  32.   Serial.println("模块初始化成功");
  33.   // 开指示灯
  34.   c4002.setRunLedState(eLedOn);
  35.   c4002.setOutLedState(eLedOn);
  36.   
  37.   // 上报周期:每秒1次
  38.   c4002.setReportPeriod(10);
  39.   // 快速校准(2秒准备 + 5秒校准)
  40.   Serial.println("校准中,请保持无人...");
  41.   c4002.startEnvCalibration(2, 5);
  42. }
  43. // ==================== Loop ====================
  44. void loop() {
  45.   sRetResult_t result = c4002.getNoteInfo();
  46.   // -------- 等待校准完成 --------
  47.   if (!calibDone) {
  48.     if (result.noteType == eCalibration) {
  49.       Serial.print("剩余: ");
  50.       Serial.print(result.calibCountdown);
  51.       Serial.println("秒");
  52.       
  53.       if (result.calibCountdown == 0) {
  54.         calibDone = true;
  55.         Serial.println("校准完成!进入检测模式\n");
  56.       }
  57.     }
  58.     delay(500);
  59.     return;
  60.   }
  61.   // -------- 检测人体状态 --------
  62.   if (result.noteType == eResult) {
  63.     eTargetState_t state = c4002.getTargetState();
  64.    
  65.     // 转换为字符串
  66.     String nowState = (state == eNoTarget) ? "无人" : "有人";
  67.    
  68.     // 状态变化检测(带防抖)
  69.     if (nowState != lastState) {
  70.       lastChange = millis();
  71.       lastState = nowState;
  72.     }
  73.    
  74.     // 状态稳定后执行动作
  75.     if (millis() - lastChange > DEBOUNCE) {
  76.       if (nowState == "有人") {
  77.         digitalWrite(LED_PIN, HIGH);
  78.         Serial.println("有人 → 开灯");
  79.       } else {
  80.         digitalWrite(LED_PIN, LOW);
  81.         Serial.println("无人 → 关灯");
  82.       }
  83.     }
  84.   }
  85.   
  86.   delay(300); // 轮询间隔
  87. }
复制代码


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 4 天前

【花雕】168种系列实验(217)---C4002 毫米波人体存在模块

实验串口返回情况

168种传感器系列实验(217)--C4002 模块十二个小实验项目图1
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 4 天前

【花雕】168种系列实验(217)---C4002 毫米波人体存在模..

实验场景图

168种传感器系列实验(217)--C4002 模块十二个小实验项目图1

168种传感器系列实验(217)--C4002 模块十二个小实验项目图2
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 3 天前

168种传感器系列实验(217)--C4002 模块十二个小实验项目

168种传感器系列实验(217)--C4002 模块十二个小实验项目图2

168种传感器系列实验(217)--C4002 模块十二个小实验项目图1
回复

使用道具 举报

12
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2026 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail