290浏览
楼主: 驴友花雕

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

[复制链接]

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕】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. }
复制代码


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

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

   实验串口返回情况

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

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕】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. }
复制代码


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

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

   实验串口返回情况

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

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕】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. }
复制代码


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

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

实验串口返回情况

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

实验场景图

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

回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail