168种传感器系列实验(217)--C4002 模块十二个小实验项目
2026-05-232453
AI 快速预览详细
C4002 毫米波运动与静态存在检测模块是Arduino 168种传感器执行器模块系列实验的一部分。通过十二个小实验项目,该模块展示了其功能。这些实验涵盖了毫米波运动与静态存在检测,适合初学者和教育场景。动手实践这些实验可以帮助用户深入了解传感器的应用。
|
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器执行器模块系列实验(资料代码+仿真编程+图形编程) 实验二百一十七:C4002 毫米波运动与静态存在检测模块人体存在传感器 ![]() ![]() |






实验二百一十七:C4002 毫米波运动与静态存在检测模块人体存在传感器
案例十二:校准后自动检测人体,控制LED(智能灯光控制)
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百一十七:C4002毫米波运动与静态存在检测模块人体存在传感器
案例十二:校准后自动检测人体,控制LED(智能灯光控制)
*/
#include
#include
// ==================== 引脚定义 ====================
#define LED_PIN 13 // 板载LED
#define C4002_RX 4 // 模块TX → D4
#define C4002_TX 5 // 模块RX → D5
SoftwareSerial mySerial(C4002_RX, C4002_TX);
DFRobot_C4002 c4002(&mySerial, 115200);
// ==================== 全局变量 ====================
bool calibDone = false; // 校准完成标志
String lastState = "无人"; // 上一次稳定状态
unsigned long lastChange = 0; // 上次状态变化时间
const unsigned long DEBOUNCE = 1500; // 1.5秒去抖
// ==================== Setup ====================
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
delay(500);
Serial.println("\n===== 智能灯光系统启动 =====");
// 初始化C4002
while (!c4002.begin()) {
Serial.println("模块初始化失败,重试...");
delay(1000);
}
Serial.println("模块初始化成功");
// 开指示灯
c4002.setRunLedState(eLedOn);
c4002.setOutLedState(eLedOn);
// 上报周期:每秒1次
c4002.setReportPeriod(10);
// 快速校准(2秒准备 + 5秒校准)
Serial.println("校准中,请保持无人...");
c4002.startEnvCalibration(2, 5);
}
// ==================== Loop ====================
void loop() {
sRetResult_t result = c4002.getNoteInfo();
// -------- 等待校准完成 --------
if (!calibDone) {
if (result.noteType == eCalibration) {
Serial.print("剩余: ");
Serial.print(result.calibCountdown);
Serial.println("秒");
if (result.calibCountdown == 0) {
calibDone = true;
Serial.println("校准完成!进入检测模式\n");
}
}
delay(500);
return;
}
// -------- 检测人体状态 --------
if (result.noteType == eResult) {
eTargetState_t state = c4002.getTargetState();
// 转换为字符串
String nowState = (state == eNoTarget) ? "无人" : "有人";
// 状态变化检测(带防抖)
if (nowState != lastState) {
lastChange = millis();
lastState = nowState;
}
// 状态稳定后执行动作
if (millis() - lastChange > DEBOUNCE) {
if (nowState == "有人") {
digitalWrite(LED_PIN, HIGH);
Serial.println("有人 → 开灯");
} else {
digitalWrite(LED_PIN, LOW);
Serial.println("无人 → 关灯");
}
}
}
delay(300); // 轮询间隔
}[/code]
实验场景图
实验二百一十七:C4002毫米波运动与静态存在检测模块人体存在传感器
案例十一:OUT 引脚检测 + D13 灯 + D12 蜂鸣器
接线
C4002 ↔ Arduino Uno
VCC → 5V
GND → GND
TX → D4
RX → D5
OUT → D6
外设
D13 → LED(有人亮)
D12 → 蜂鸣器(有人响)
[code]#include "DFRobot_C4002.h"
#include
// ==================== 串口与引脚定义 ====================
// UNO 软件串口:模块TX→D4(RX),模块RX→D5(TX)
SoftwareSerial mySerial(4, 5);
DFRobot_C4002 c4002(&mySerial, 115200);
// C4002 OUT 引脚接 D6
uint8_t outPin = 6;
// OUT模式3:运动 OR 静态存在 → 都输出高电平(最实用)
eOutpinMode_t outMode = eOutpinMode3;
// 灯与蜂鸣器引脚
const int ledPin = 13; // 板载LED
const int buzzerPin = 12; // 蜂鸣器
// ==================== 初始化 ====================
void setup() {
Serial.begin(115200);
// 设置引脚模式
pinMode(outPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
// 初始状态:灯灭、蜂鸣不响
digitalWrite(ledPin, LOW);
digitalWrite(buzzerPin, HIGH);
// 初始化雷达
while (!c4002.begin(outPin)) {
Serial.println("C4002 初始化失败...");
delay(1000);
}
Serial.println("C4002 初始化成功!");
// 设置OUT输出模式
c4002.setOutPinMode(outMode);
Serial.println("OUT模式设置完成:运动+静态检测");
}
// ==================== 主循环 ====================
void loop() {
// 读取 OUT 引脚电平
int outState = digitalRead(outPin);
// ==================== 核心逻辑 ====================
// OUT = HIGH → 有人
if (outState == HIGH) {
Serial.println("有人");
digitalWrite(ledPin, HIGH); // 灯亮
digitalWrite(buzzerPin, LOW); // 蜂鸣响
}
// OUT = LOW → 无人
else {
Serial.println("无人");
digitalWrite(ledPin, LOW); // 灯灭
digitalWrite(buzzerPin, HIGH); // 蜂鸣停止
}
delay(1500); // 刷新间隔
}[/code]
实验二百一十七:C4002毫米波运动与静态存在检测模块人体存在传感器
案例十:C4002毫米波雷达 —— 设置串口波特率
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百一十七:C4002毫米波运动与静态存在检测模块人体存在传感器
案例十:C4002毫米波雷达 —— 设置串口波特率
*/
// 包含C4002毫米波雷达驱动库
#include "DFRobot_C4002.h"
/* ---------------------------------------------------------------------------------------------------------------------
* 硬件接线对照表(模块 ↔ 各种开发板)
* 模块 | 功能说明 | Mega2560 | UNO | ESP8266 | ESP32 |
* VCC | 5V 供电 | 5V | 5V | 5V | 5V |
* GND | 地线 | GND | GND | GND | GND |
* RX | 模块接收 → 接开发板 TX | Serial1 TX1 | D5 | D5 | GPIO25/D2 |
* TX | 模块发送 → 接开发板 RX | Serial1 RX1 | D4 | D4 | GPIO26/D3 |
* ----------------------------------------------------------------------------------------------------------------------
* 重要说明:
* 1. 模块的 RX 必须接 开发板的 TX
* 2. 模块的 TX 必须接 开发板的 RX
* 3. 波特率修改后,下次通讯必须使用新波特率,否则无法通信
*/
// 当前使用的波特率(默认115200)
unsigned long curBaudrate = 115200;
// 根据不同开发板自动选择串口方式
// 如果是 ESP8266 或 Arduino UNO —— 使用软件串口
#if defined(ESP8266) || defined(ARDUINO_AVR_UNO)
SoftwareSerial mySerial(4, 5); // 定义软件串口:UNO RX=4,TX=5
DFRobot_C4002 c4002(&mySerial, curBaudrate); // 创建雷达对象,绑定串口和波特率
// 如果是 ESP32 —— 使用硬件串口1
#elif defined(ESP32)
DFRobot_C4002 c4002(&Serial1, curBaudrate, D2, D3);
// 其他开发板(Mega、M0)—— 使用硬件串口1
#else
DFRobot_C4002 c4002(&Serial1, curBaudrate);
#endif
// 初始化函数,只运行一次
void setup()
{
// 开启电脑串口监视器,波特率115200
Serial.begin(115200);
// ===================== 初始化C4002雷达模块 =====================
// 如果初始化失败,每秒重试一次
while (c4002.begin() != true) {
Serial.println("C4002 初始化失败!");
delay(1000);
}
// 初始化成功
Serial.println("C4002 初始化成功!");
delay(50); // 短暂延时,保证通信稳定
// ===================== 设置雷达串口波特率 =====================
/*
重要注意事项:
1. 模块默认波特率是 115200
2. 波特率设置过低可能导致数据丢包、通讯不流畅
3. 可选值:
eBaud9600 = 9600
eBaud19200 = 19200
eBaud38400 = 38400
eBaud57600 = 57600
eBaud115200 = 115200(默认)
eBaud230400 = 230400
eBaud460800 = 460800
eBaud921600 = 921600
*/
eBaudrate_t setBaudrate = eBaud115200; // 这里设置要修改的目标波特率
// 调用库函数,执行波特率设置
if (c4002.setBaudrate(setBaudrate)) {
// 设置成功
Serial.println("设置波特率成功!");
Serial.println("设置波特率后,需要重新上电重启模块才能生效!");
} else {
// 设置失败
Serial.println("设置波特率失败!");
}
}
// 主循环,波特率设置完成后这里什么都不做
void loop()
{
delay(100); // 空延时
}
[/code]
实验二百一十七: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 → 运动 + 静态 都输出高电平(默认,最常用)
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百一十七:C4002毫米波运动与静态存在检测模块人体存在传感器
案例九:C4002毫米波雷达 —— 通过 OUT 引脚获取检测结果(极简硬件触发)
*/
// 包含C4002毫米波雷达驱动库
#include "DFRobot_C4002.h"
/* ---------------------------------------------------------------------------------------------------------------------
* 硬件接线对照表(模块 ↔ 开发板)
* 模块 | 功能 | Mega | UNO | ESP8266 | ESP32 |
* VCC | 5V 供电 | 5V | 5V | 5V | 5V |
* GND | 地线 | GND | GND | GND | GND |
* RX | 模块接收 → 开发板TX | TX1 | D5 | D5 | GPIO25/D2|
* TX | 模块发送 → 开发板RX | RX1 | D4 | D4 | GPIO26/D3|
* ----------------------------------------------------------------------------------------------------------------------
* 注意:
* 1. 模块RX 接 开发板TX
* 2. 模块TX 接 开发板RX
* 3. OUT 引脚是开关量输出:有人=高电平,无人=低电平
*/
/* 根据不同开发板自动选择串口方式 */
// 如果是 UNO / ESP8266 → 使用软件串口
#if defined(ESP8266) || defined(ARDUINO_AVR_UNO)
SoftwareSerial mySerial(4, 5); // UNO:软件串口 RX=4, TX=5
DFRobot_C4002 c4002(&mySerial, 115200); // 绑定串口,波特率115200
// 如果是 ESP32 → 使用硬件串口1
#elif defined(ESP32)
DFRobot_C4002 c4002(&Serial1, 115200, D2, D3);
// 其他开发板
#else
DFRobot_C4002 c4002(&Serial1, 115200);
#endif
// ======================== 重要配置 ========================
// C4002 的 OUT 引脚 接 Arduino 的 D6
uint8_t outPin = 6;
/**
* OUT 引脚输出模式(三选一)
* eOutpinMode1:仅检测到【运动】时输出高电平
* eOutpinMode2:仅检测到【静态存在】时输出高电平
* eOutpinMode3:检测到【运动 或 静态存在】都输出高电平(最常用)
*/
eOutpinMode_t outMode = eOutpinMode3; // 默认使用模式3:有人就高电平
// ============================================================
void setup()
{
// 开启串口监视器,波特率115200
Serial.begin(115200);
// ===================== 初始化C4002(传入OUT引脚) =====================
while (c4002.begin(outPin) != true) {
Serial.println("C4002 初始化失败!");
delay(1000);
}
Serial.println("C4002 初始化成功!");
delay(50);
// ===================== 设置运行指示灯(开) =====================
if (c4002.setRunLedState(eLedOn)) {
Serial.println("运行指示灯开启成功!");
} else {
Serial.println("运行指示灯开启失败!");
}
delay(50);
// ===================== 设置输出指示灯(开) =====================
// 蓝色LED,与OUT引脚电平同步
if (c4002.setOutLedState(eLedOn)) {
Serial.println("输出指示灯开启成功!");
} else {
Serial.println("输出指示灯开启失败!");
}
delay(50);
// ===================== 设置OUT引脚模式 =====================
if (c4002.setOutPinMode(outMode)) {
Serial.println("OUT引脚模式设置成功!");
} else {
Serial.println("OUT引脚模式设置失败!");
}
// ===================== 关键修复:人离开延时设为0秒(立刻判定无人) =====================
c4002.setTargetDisappearDelay(0);
// 雷达刷新速度
c4002.setReportPeriod(5);
}
void loop()
{
// ===================== 通过OUT引脚获取目标状态 =====================
eTargetState_t targetState = c4002.getOutTargetState();
Serial.println("------- OUT 引脚检测结果 --------");
// 打印当前OUT模式
Serial.print("输出模式:");
if (outMode == eOutpinMode1) {
Serial.println("模式1(仅运动)");
} else if (outMode == eOutpinMode2) {
Serial.println("模式2(仅静态)");
} else if (outMode == eOutpinMode3) {
Serial.println("模式3(运动+静态)");
}
// 读取OUT引脚实际电平(HIGH=有人,LOW=无人)
uint8_t outPinStatus = digitalRead(outPin);
Serial.print("OUT引脚状态:");
if (outPinStatus == HIGH) {
Serial.println("高电平 (有人)");
} else {
Serial.println("低电平 (无人)");
}
// ===================== 打印目标状态(文字说明) =====================
Serial.print("目标状态:");
if (targetState == eNoTarget) {
Serial.println("无人");
} else if (targetState == ePresence) {
Serial.println("静态存在(静坐/睡觉)");
} else if (targetState == eMotion) {
Serial.println("运动(走动/挥手)");
} else if (targetState == eMotionOrNoTarget) {
Serial.println("运动 或 无人");
} else if (targetState == ePresenceOrNoTarget) {
Serial.println("静态存在 或 无人");
} else if (targetState == eMotionOrPresence) {
Serial.println("运动 或 静态存在");
} else {
Serial.println("引脚错误,请检查接线!");
}
Serial.println("-----------------------------------");
// ===================== 放慢输出速度:1.5秒输出一次(不刷屏) =====================
delay(1500);
}[/code]
实验二百一十七:C4002 毫米波运动与静态存在检测模块人体存在传感器
案例八:C4002毫米波雷达 —— 读取并打印传感器的全部当前配置参数
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百一十七:C4002 毫米波运动与静态存在检测模块人体存在传感器
案例八:C4002毫米波雷达 —— 读取并打印传感器的全部当前配置参数
*/
// 包含C4002毫米波雷达驱动库
#include "DFRobot_C4002.h"
/* ---------------------------------------------------------------------------------------------------------------------
* 硬件接线对照表(模块 ↔ 各类开发板)
* 模块 | 功能说明 | Mega2560 | UNO | ESP8266 | ESP32 |
* VCC | 5V 供电 | 5V | 5V | 5V | 5V |
* GND | 地线 | GND | GND | GND | GND |
* RX | 模块接收 → 板载 TX | Serial1 TX1 | D5 | D5 | GPIO25/D2 |
* TX | 模块发送 → 板载 RX | Serial1 RX1 | D4 | D4 | GPIO26/D3 |
* ----------------------------------------------------------------------------------------------------------------------
* 注意:
* 1. 模块RX 必须接 开发板TX
* 2. 模块TX 必须接 开发板RX
* 3. 串口波特率可修改
*/
/* 根据不同开发板自动选择串口方式 */
// 如果是 ESP8266 或 Arduino UNO,使用软件串口
#if defined(ESP8266) || defined(ARDUINO_AVR_UNO)
SoftwareSerial mySerial(4, 5); // 定义软件串口:UNO的RX=4,TX=5
DFRobot_C4002 c4002(&mySerial, 115200); // 创建C4002对象,绑定软件串口
// 如果是 ESP32,使用硬件串口1
#elif defined(ESP32)
DFRobot_C4002 c4002(&Serial1, 115200, D2, D3); // ESP32 硬件串口1,指定RX=D2,TX=D3
// 其他板子(Mega2560、M0)直接使用硬件串口1
#else
DFRobot_C4002 c4002(&Serial1, 115200);
#endif
// 初始化函数,只执行一次
void setup()
{
// 开启USB串口,用于电脑串口监视器输出信息
Serial.begin(115200);
// ===================== 初始化C4002传感器 =====================
// 如果初始化失败,每秒重试一次
while (c4002.begin() != true) {
Serial.println("C4002 初始化失败!");
delay(1000);
}
// 初始化成功提示
Serial.println("C4002 初始化成功!");
// ===================== 读取C4002全部配置参数 =====================
// 调用库函数,获取雷达所有当前配置,存入 configParams 结构体
sConfigParams_t configParams = c4002.getAllConfigParams();
// ===================== 开始打印所有配置 =====================
// 1. 运行指示灯状态
Serial.print("运行指示灯(Run LED): ");
if (configParams.curLedStatus.runLed == eLedOn) {
Serial.println("开启");
} else if (configParams.curLedStatus.runLed == eLedOff) {
Serial.println("关闭");
}
// 2. 输出指示灯状态
Serial.print("输出指示灯(Out LED): ");
if (configParams.curLedStatus.outLed == eLedOn) {
Serial.println("开启");
} else if (configParams.curLedStatus.outLed == eLedOff) {
Serial.println("关闭");
}
// 3. 当前光照阈值
Serial.print("当前光照阈值: ");
Serial.print(configParams.curLightThreshold);
Serial.println(" lux");
// 4. 当前检测距离范围(最近 ~ 最远)
Serial.print("当前检测距离范围: ( ");
Serial.print(configParams.curDetectRange.closest); // 最近距离
Serial.print(" ~ ");
Serial.print(configParams.curDetectRange.farthest); // 最远距离
Serial.println(" ) 厘米");
// 5. 当前输出模式
Serial.print("当前输出模式: 输出模式 ");
Serial.println(configParams.curOutMode);
// 6. 当前距离分辨率模式(80cm 或 20cm)
Serial.print("当前距离分辨率: ");
if (configParams.curResolutionMode == eResolution80Cm) {
Serial.println("80 厘米");
Serial.println("此模式下共有 15 个距离门,每个区间 80cm");
} else if (configParams.curResolutionMode == eResolution20Cm) {
Serial.println("20 厘米");
Serial.println("此模式下共有 25 个距离门,每个区间 20cm");
}
// 7. 当前运动检测灵敏度(低/中/高/自定义)
Serial.print("当前运动检测灵敏度: ");
if (eLowThreshGroup == configParams.curMotionSensitivity) {
Serial.println("低灵敏度");
} else if (eMidThreshGroup == configParams.curMotionSensitivity) {
Serial.println("中灵敏度");
} else if (eHighThreshGroup == configParams.curMotionSensitivity) {
Serial.println("高灵敏度");
} else {
Serial.println("自定义灵敏度");
}
// 8. 当前存在检测灵敏度(低/中/高/自定义)
Serial.print("当前存在检测灵敏度: ");
if (eLowThreshGroup == configParams.curPresenceSensitivity) {
Serial.println("低灵敏度");
} else if (eMidThreshGroup == configParams.curPresenceSensitivity) {
Serial.println("中灵敏度");
} else if (eHighThreshGroup == configParams.curPresenceSensitivity) {
Serial.println("高灵敏度");
} else {
Serial.println("自定义灵敏度");
}
// 9. 当前人体消失延时(人离开后多久判定无人)
Serial.print("当前人体消失延时: ");
Serial.print(configParams.curTargetDisappearDelayTime);
Serial.println(" 秒");
}
// 主循环,这里不需要执行任何操作
void loop()
{
delay(10);
}[/code]
实验二百一十七:C4002 毫米波运动与静态存在检测模块人体存在传感器
案例七:把 C4002 毫米波雷达的所有配置(灵敏度、距离、阈值、模式等)全部恢复成出厂默认值
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百一十七:C4002 毫米波运动与静态存在检测模块人体存在传感器
案例七:把 C4002 毫米波雷达的所有配置(灵敏度、距离、阈值、模式等)全部恢复成出厂默认值
*/
// 包含C4002雷达驱动库
#include "DFRobot_C4002.h"
/* ---------------------------------------------------------------------------------------------------------------------
* 硬件接线对照表(模块 ↔ 各种开发板)
* 模块 | 功能 | Leonardo/Mega2560 | UNO | ESP8266 | ESP32 |
* VCC | 5V 供电 | 5V | 5V | 5V | 5V |
* GND | 地线 | GND | GND | GND | GND |
* RX | 模块接收端 → 接开发板 TX | Serial1 TX1 | 5 | 5 | GPIO25/D2 |
* TX | 模块发送端 → 接开发板 RX | Serial1 RX1 | 4 | 4 | GPIO26/D3 |
* ----------------------------------------------------------------------------------------------------------------------
* 说明:
* 1. 模块RX 必须接 开发板TX
* 2. 模块TX 必须接 开发板RX
* 3. 串口波特率可以自己修改
*/
/* 根据不同开发板自动选择串口方式 */
// 如果是 ESP8266 或 Arduino UNO —— 使用软件串口
#if defined(ESP8266) || defined(ARDUINO_AVR_UNO)
SoftwareSerial mySerial(4, 5); // 定义软件串口:Uno RX=4, TX=5
DFRobot_C4002 c4002(&mySerial, 115200); // 创建雷达对象,绑定软件串口
// 如果是 ESP32 —— 使用硬件串口1
#elif defined(ESP32)
DFRobot_C4002 c4002(&Serial1, 115200, D2, D3); // ESP32串口1,RX=D2, TX=D3
// 其他开发板(Mega、M0)—— 使用硬件串口1
#else
DFRobot_C4002 c4002(&Serial1, 115200);
#endif
// 初始化函数,只运行一次
void setup()
{
// 开启电脑串口监视器,波特率115200
Serial.begin(115200);
// ===================== 初始化C4002雷达模块 =====================
// 如果初始化失败,每秒重试一次
while (c4002.begin() != true) {
Serial.println("C4002 初始化失败!");
delay(1000);
}
// 初始化成功
Serial.println("C4002 初始化成功!");
delay(50); // 短暂延时,保证通信稳定
// ===================== 执行:恢复出厂设置 =====================
Serial.println("正在恢复出厂设置...");
// 调用库函数 factoryReset() 恢复出厂默认参数
if (c4002.factoryReset()) {
// 恢复成功
Serial.println("恢复出厂设置成功!");
Serial.println("恢复出厂设置后,需要重新上电重启模块!");
} else {
// 恢复失败
Serial.println("恢复出厂设置失败!");
}
}
// 主循环,恢复完成后这里什么都不做
void loop()
{
delay(100); // 空延时
}[/code]
实验场景图
实验二百一十七:C4002 毫米波运动与静态存在检测模块人体存在传感器
案例六:带 2+5 秒快速校准 + 严格判有人无人 + 彻底不误响 稳定版
硬件接线
C4002 雷达
VCC → 5V
GND → GND
TX → D4
RX → D5
外设
LED → D13
蜂鸣器 → D12
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百一十七:C4002 毫米波运动与静态存在检测模块人体存在传感器
案例六:带 2+5 秒快速校准 + 严格判有人无人 + 彻底不误响 稳定版
*/
#include "DFRobot_C4002.h"
#include
SoftwareSerial mySerial(4, 5);
DFRobot_C4002 c4002(&mySerial, 115200);
const int ledPin = 13;
const int buzzerPin = 12;
bool calibDone = false;
void setup()
{
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
digitalWrite(ledPin, LOW);
digitalWrite(buzzerPin, HIGH);
// 传感器初始化
while (!c4002.begin())
{
Serial.println("雷达初始化失败,重试中");
delay(1000);
}
Serial.println("雷达初始化成功");
c4002.setReportPeriod(10);
Serial.println("即将启动快速校准,前方请勿有人");
// 2秒预备 + 5秒正式校准
c4002.startEnvCalibration(2, 5);
}
void loop()
{
sRetResult_t res = c4002.getNoteInfo();
// 校准阶段提示
if (!calibDone && res.noteType == eCalibration)
{
Serial.print("校准剩余时间:");
Serial.print(res.calibCountdown);
Serial.println(" s");
if (res.calibCountdown == 0)
{
calibDone = true;
Serial.println("校准完成,进入正常检测");
}
}
// 校准完成后正式检测
if (calibDone && res.noteType == eResult)
{
eTargetState_t state = c4002.getTargetState();
// 严格判定无人状态
if (state == eNoTarget)
{
Serial.println("无人");
digitalWrite(ledPin, LOW);
digitalWrite(buzzerPin, HIGH);
}
// 仅静态/运动人体触发声光
else if (state == ePresence || state == eMotion)
{
Serial.println("有人");
digitalWrite(ledPin, HIGH);
digitalWrite(buzzerPin, LOW);
}
}
delay(100);
}[/code]
实验场景图
实验二百一十七:C4002 毫米波运动与静态存在检测模块人体存在传感器
案例五:上电直接检测 + 有人 D13 亮 + 有人蜂鸣器响 + 无人灯灭蜂鸣停
接线
C4002:TX→D4,RX→D5
板载 LED:D13
蜂鸣器:D12 → GND
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百一十七:C4002 毫米波运动与静态存在检测模块人体存在传感器
案例五:上电直接检测 + 有人 D13 亮 + 有人蜂鸣器响 + 无人灯灭蜂鸣停
*/
#include "DFRobot_C4002.h"
#include
SoftwareSerial mySerial(4, 5);
DFRobot_C4002 c4002(&mySerial, 115200);
const int ledPin = 13;
const int buzzerPin = 12;
void setup()
{
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
// 初始状态 灯灭、蜂鸣不响
digitalWrite(ledPin, LOW);
digitalWrite(buzzerPin, HIGH);
// 初始化雷达
while (!c4002.begin())
{
Serial.println("C4002 连接失败,重试...");
delay(1000);
}
Serial.println("C4002 就绪,开始检测");
// 上报周期1秒
c4002.setReportPeriod(10);
}
void loop()
{
sRetResult_t res = c4002.getNoteInfo();
if (res.noteType == eResult)
{
eTargetState_t sta = c4002.getTargetState();
// 真正无人:立刻关灯、关蜂鸣
if (sta == eNoTarget)
{
Serial.println("无人");
digitalWrite(ledPin, LOW);
digitalWrite(buzzerPin, HIGH);
}
// 真有人 运动/静态 才触发
else if (sta == eMotion || sta == ePresence)
{
Serial.println("有人");
digitalWrite(ledPin, HIGH);
digitalWrite(buzzerPin, LOW);
}
}
delay(100);
}[/code]
实验场景图
实验二百一十七:C4002 毫米波运动与静态存在检测模块人体存在传感器
案例四:简单校准完成只判有人 / 无人 + D13 板载 LED 有人亮、无人灭
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百一十七:C4002 毫米波运动与静态存在检测模块人体存在传感器
案例四:简单校准完成只判有人 / 无人 + D13 板载 LED 有人亮、无人灭
*/
#include "DFRobot_C4002.h"
#include
SoftwareSerial mySerial(4, 5);
DFRobot_C4002 c4002(&mySerial, 115200);
bool calibOK = false;
const int ledPin = 13;
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
// 初始化传感器
while (!c4002.begin()) {
Serial.println("初始化失败...");
delay(1000);
}
Serial.println("初始化成功");
c4002.setReportPeriod(10);
// 超快校准:2秒准备 + 5秒校准
c4002.startEnvCalibration(2, 5);
Serial.println("开始快速校准,请保持无人");
}
void loop() {
sRetResult_t res = c4002.getNoteInfo();
// 校准流程
if (!calibOK && res.noteType == eCalibration) {
Serial.print("校准倒计时:");
Serial.println(res.calibCountdown);
if (res.calibCountdown == 0) {
calibOK = true;
Serial.println("校准完成 → 开始检测");
}
}
// 检测人体 + LED控制
if (calibOK && res.noteType == eResult) {
eTargetState_t sta = c4002.getTargetState();
if (sta == eNoTarget) {
Serial.println("无人");
digitalWrite(ledPin, LOW);
} else {
Serial.println("有人");
digitalWrite(ledPin, HIGH);
}
}
delay(300);
}[/code]