C1001毫米波人体探测传感器

概 述

C1001毫米波人体检测传感器是一款采用60GHz工作频率的毫米波雷达,与普通24GHz毫米波只能检测存在、速度、距离不同C1001毫米波人体检测传感器可以实现更多精细的检测功能。

跌倒检测功能

C1001毫米波人体检测传感器达可以通过点云成像算法实现人体姿态识别,对平躺状态有准确探知;并进行精准生命探测,对跌倒状态、停留时间,身体静止驻留状态都有准确上报。

接口介绍

睡眠检测功能

C1001毫米波人体检测传感器可以实现对人体生物存在感知及人体运动感知,持续记录人体存在情况,根据睡眠过程中的身体运动幅度变化和呼吸心率变化,对目标的睡眠状态、呼吸心跳频率进行实时判断,在一段睡眠过程结束后输出睡眠评分,根据相关睡眠参数的输出结合到健康康养的应用上。

接口介绍

产品参数

  • 工作电压:5V
  • 工作电流:≤100mA
  • 工作频率:61~61.5GHz
  • 发射功率:6dBm
  • 最远探测距离:11m
  • 雷达探测角度:100×100度
  • 工作温度:-20~60℃
  • 睡眠探测距离(胸腔):0.4-2.5m
  • 呼吸心跳探测距离(胸腔):0.4-1.5m
  • 呼吸测量精度:90%
  • 呼吸测量范围:10-25次/分钟
  • 心跳测量精度:80%
  • 心跳测量范围:60-100次/分钟

警告: 本品并非专业医疗仪器,不能作为辅助配件参与诊断和治疗.

尺寸图

尺寸图

接口定义

定义 说明
VIN 电源
GND
RX 传感器串口接收
TX 传感器串口发送
IO2 人存在状态电平输出(3.3V)
IO1 跌倒状态电平输出(3.3V)

安装方式

跌倒模式顶装

雷达模块波束覆盖范围如下图所示。雷达覆盖范围为水平100°、俯仰100°的立体扇形区域。

接口介绍

确保雷达探测准确性,请置顶安装!如下图所示。

接口介绍

注意:需要避开房间内排风扇/金属百叶窗/遮光涂层窗帘等容易晃动的物体

睡眠模式

雷达波束覆盖范围如下图所示。雷达覆盖范围为水平40°、俯仰40°的立体扇形区域。

接口介绍

在雷达探测范围内,为了满足人体存在以及睡眠呼吸心跳稳定探测,在雷达安装上有一定的安装要求。

  1. 雷达安装朝向:要求雷达朝向如下;
接口介绍
  1. 倾斜安装(向下倾角30~45°);
接口介绍

演示例程

存在信息&呼吸频率&心跳频率获取

准备

  • 硬件

C1001毫米波人体检测传感器

ESP32-S3-DevKitC-1开发板,或其他基于ESP32的开发板。

  • 软件

Arduino IDE,点击下载Arduino IDE

DFRobot_HumanDetection库,点击下载DFRobot_HumanDetection库

如何安装库文件,点击链接

接线图

毫米波 ESP32-S3
VIN 5V
GND GND
RX IO5
TX IO4

安装方式

人员存在检测无特殊安装要求,顶装侧装都可以。呼吸频率心跳频率需将传感器放置于人体正前方1.5m处传感器正对检测人员胸部。

样例代码

复制以下代码到您的Arduino IDE中并上传。

/**!
 * @file sleep.ino
 * @brief This is an example of the C1001 mmWave Human Detection Sensor detecting the presence of people and their respiration and heart rates.
 * @copyright  Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @license     The MIT License (MIT)
 * @author [tangjie](jie.tang@dfrobot.com)
 * @version  V1.0
 * @date  2024-06-03
 * @url https://github.com/DFRobot/DFRobot_HumanDetection
 */
#include "DFRobot_HumanDetection.h"

DFRobot_HumanDetection hu(&Serial1);

void setup() {
  Serial.begin(115200);
  Serial1.begin(115200, SERIAL_8N1, 4, 5);

  Serial.println("Start initialization");
  while (hu.begin() != 0) {
    Serial.println("init error!!!");
    delay(1000);
  }
  Serial.println("Initialization successful");

  Serial.println("Start switching work mode");
  while (hu.configWorkMode(hu.eSleepMode) != 0) {
    Serial.println("error!!!");
    delay(1000);
  }
  Serial.println("Work mode switch successful");

  Serial.print("Current work mode:");
  switch (hu.getWorkMode()) {
    case 1:
      Serial.println("Fall detection mode");
      break;
    case 2:
      Serial.println("Sleep detection mode");
      break;
    default:
      Serial.println("Read error");
  }

  hu.configLEDLight(hu.eHPLed, 1);  // Set HP LED switch, it will not light up even if the sensor detects a person when set to 0.
  hu.sensorRet();                   // Module reset, must perform sensorRet after setting data, otherwise the sensor may not be usable

  Serial.print("HP LED status:");
  switch (hu.getLEDLightState(hu.eHPLed)) {
    case 0:
      Serial.println("Off");
      break;
    case 1:
      Serial.println("On");
      break;
    default:
      Serial.println("Read error");
  }

  Serial.println();
  Serial.println();
}

void loop() {
  Serial.print("Existing information:");
  switch (hu.smHumanData(hu.eHumanPresence)) {
    case 0:
      Serial.println("No one is present");
      break;
    case 1:
      Serial.println("Someone is present");
      break;
    default:
      Serial.println("Read error");
  }

  Serial.print("Motion information:");
  switch (hu.smHumanData(hu.eHumanMovement)) {
    case 0:
      Serial.println("None");
      break;
    case 1:
      Serial.println("Still");
      break;
    case 2:
      Serial.println("Active");
      break;
    default:
      Serial.println("Read error");
  }

  Serial.printf("Body movement parameters:%d\n", hu.smHumanData(hu.eHumanMovingRange));
  Serial.printf("Respiration rate:%d\n", hu.getBreatheValue());
  Serial.printf("Heart rate:%d\n", hu.getHeartRate());
  Serial.println();
  delay(1000);
}

结果

例程1结果

睡眠信息获取

准备

  • 硬件

C1001毫米波人体检测传感器

ESP32-S3-DevKitC-1开发板,或其他基于ESP32的开发板。

  • 软件

Arduino IDE,点击下载Arduino IDE

DFRobot_HumanDetection库,点击下载DFRobot_HumanDetection库

如何安装库文件,点击链接

接线图

毫米波 ESP32-S3
VIN 5V
GND GND
RX IO5
TX IO4

安装方式

接口介绍

样例代码

复制以下代码到您的Arduino IDE中并上传。

/**!
 * @file sleep.ino
 * @brief This is an example of sleep detection using human millimeter wave radar.
 * @copyright  Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @license     The MIT License (MIT)
 * @author [tangjie](jie.tang@dfrobot.com)
 * @version  V1.0
 * @date  2024-06-03
 * @url https://github.com/DFRobot/DFRobot_HumanDetection
 */
#include "DFRobot_HumanDetection.h"

DFRobot_HumanDetection hu(&Serial1);

void setup() {
  Serial.begin(115200);
  Serial1.begin(115200, SERIAL_8N1, 4, 5);

  Serial.println("Start initialization");
  while (hu.begin() != 0) {
    Serial.println("init error!!!");
    delay(1000);
  }
  Serial.println("Initialization successful");

  Serial.println("Start switching work mode");
  while (hu.configWorkMode(hu.eSleepMode) != 0) {
    Serial.println("error!!!");
    delay(1000);
  }
  Serial.println("Work mode switch successful");

  Serial.print("Current work mode:");
  switch (hu.getWorkMode()) {
    case 1:
      Serial.println("Fall detection mode");
      break;
    case 2:
      Serial.println("Sleep detection mode");
      break;
    default:
      Serial.println("Read error");
  }

  hu.configLEDLight(hu.eHPLed, 1);  // Set HP LED switch
  hu.sensorRet();                   // Module reset, must perform sensorRet after setting data, otherwise the sensor may not be usable

  Serial.print("HP LED status:");
  switch (hu.getLEDLightState(hu.eHPLed)) {
    case 0:
      Serial.println("Off");
      break;
    case 1:
      Serial.println("On");
      break;
    default:
      Serial.println("Read error");
  }

  Serial.println();
  Serial.println();
}

void loop() {
  Serial.print("Bed entry status:");
  switch (hu.smSleepData(hu.eInOrNotInBed)) {
    case 0:
      Serial.println("Out of bed");
      break;
    case 1:
      Serial.println("In bed");
      break;
    default:
      Serial.println("Read error");
  }

  Serial.print("Sleep status:");
  switch (hu.smSleepData(hu.eSleepState)) {
    case 0:
      Serial.println("Deep sleep");
      break;
    case 1:
      Serial.println("Light sleep");
      break;
    case 2:
      Serial.println("Awake");
      break;
    case 3:
      Serial.println("None");
      break;
    default:
      Serial.println("Read error");
  }
  Serial.printf("Awake duration: %d\n", hu.smSleepData(hu.eWakeDuration));
  Serial.printf("Deep sleep duration: %d\n", hu.smSleepData(hu.eDeepSleepDuration));
  Serial.printf("Sleep quality score: %d\n", hu.smSleepData(hu.eSleepQuality));

  sSleepComposite comprehensiveState = hu.getSleepComposite();
  Serial.println("Comprehensive sleep status:{");

  Serial.print("\tExistence status: ");
  switch (comprehensiveState.presence) {
    case 0:
      Serial.println("No one");
      break;
    case 1:
      Serial.println("Someone is present");
      break;
    default:
      Serial.println("Read error");
  }

  Serial.print("\tSleep status:");
  switch (comprehensiveState.sleepState) {
    case 0:
      Serial.println("Deep sleep");
      break;
    case 1:
      Serial.println("Light sleep");
      break;
    case 2:
      Serial.println("Awake");
      break;
    case 3:
      Serial.println("None");
      break;
    default:
      Serial.println("Read error");
  }

  Serial.printf("\tAverage respiration rate: %d\n", comprehensiveState.averageRespiration);
  Serial.printf("\tAverage heart rate: %d\n", comprehensiveState.averageHeartbeat);
  Serial.printf("\tNumber of turns: %d\n", comprehensiveState.turnoverNumber);
  Serial.printf("\tProportion of significant body movement: %d\n", comprehensiveState.largeBodyMove);
  Serial.printf("\tProportion of minor body movement: %d\n", comprehensiveState.minorBodyMove);
  Serial.printf("\tNumber of apneas: %d\n", comprehensiveState.apneaEvents);
  Serial.println("}");

  Serial.print("Sleep abnormalities:");
  switch (hu.smSleepData(hu.eSleepDisturbances)) {
    case 0:
      Serial.println("Sleep duration less than 4 hours");
      break;
    case 1:
      Serial.println("Sleep duration more than 12 hours");
      break;
    case 2:
      Serial.println("Long time abnormal absence of person");
      break;
    case 3:
      Serial.println("None");
      break;
    default:
      Serial.println("Read error");
  }

  sSleepStatistics statistics = hu.getSleepStatistics();  // Get sleep statistics, the sensor reports the whole night's sleep statistics data when it judges the sleep process to be over.
  Serial.println("Sleep statistics:{");
  Serial.printf("\tSleep quality score: %d\n", statistics.sleepQualityScore);
  Serial.printf("\tProportion of awake time: %d\n", statistics.sleepTime);
  Serial.printf("\tProportion of light sleep time: %d\n", statistics.wakeDuration);
  Serial.printf("\tProportion of light sleep time: %d\n", statistics.shallowSleepPercentage);
  Serial.printf("\tProportion of deep sleep time: %d\n", statistics.deepSleepPercentage);
  Serial.printf("\tOut of bed duration: %d\n", statistics.timeOutOfBed);
  Serial.printf("\tNumber of times out of bed: %d\n", statistics.exitCount);
  Serial.printf("\tNumber of turns: %d\n", statistics.turnOverCount);
  Serial.printf("\tAverage respiration: %d\n", statistics.averageRespiration);
  Serial.printf("\tAverage heartbeat: %d\n", statistics.averageHeartbeat);
  Serial.println("}");

  Serial.print("Sleep quality rating: ");
  switch (hu.smSleepData(hu.eSleepQualityRating)) {
    case 0:
      Serial.println("None");
      break;
    case 1:
      Serial.println("Good sleep quality");
      break;
    case 2:
      Serial.println("Average sleep quality");
      break;
    case 3:
      Serial.println("Poor sleep quality");
      break;
    default:
      Serial.println("Read error");
  }

  Serial.print("Abnormal struggle status: ");
  switch (hu.smSleepData(hu.eAbnormalStruggle)) {
    case 0:
      Serial.println("None");
      break;
    case 1:
      Serial.println("Normal status");
      break;
    case 2:
      Serial.println("Abnormal struggle status");
      break;
    default:
      Serial.println("Read error");
  }

  Serial.println();
  Serial.println();
  delay(1000);
}

结果

例程1结果

跌倒信息获取

准备

  • 硬件

C1001毫米波人体检测传感器

ESP32-S3-DevKitC-1开发板,或其他基于ESP32的开发板。

  • 软件

Arduino IDE,点击下载Arduino IDE

DFRobot_HumanDetection库,点击下载DFRobot_HumanDetection库

如何安装库文件,点击链接

接线图

毫米波 ESP32-S3
VIN 5V
GND GND
RX IO5
TX IO4

安装方式

人员存在检测无特殊安装要求,顶装侧装都可以。跌倒检测需将传感器安装于被测区域正上方,传感器正面朝下。如下图

接口介绍

样例代码

复制以下代码到您的Arduino IDE中并上传。

/**!
 * @file basics.ino
 * @brief This is the fall detection usage routine of the C1001 mmWave Human Detection Sensor.
 * @copyright  Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @license     The MIT License (MIT)
 * @author [tangjie](jie.tang@dfrobot.com)
 * @version  V1.0
 * @date  2024-06-03
 * @url https://github.com/DFRobot/DFRobot_HumanDetection
 */

#include "DFRobot_HumanDetection.h"

DFRobot_HumanDetection hu(&Serial1);

void setup() {
  Serial.begin(115200);
  Serial1.begin(115200, SERIAL_8N1, 4, 5);

  Serial.println("Start initialization");
  while (hu.begin() != 0) {
    Serial.println("init error!!!");
    delay(1000);
  }
  Serial.println("Initialization successful");

  Serial.println("Start switching work mode");
  while (hu.configWorkMode(hu.eFallingMode) != 0) {
    Serial.println("error!!!");
    delay(1000);
  }
  Serial.println("Work mode switch successful");

  hu.configLEDLight(hu.eFALLLed, 1);         // Set HP LED switch, it will not light up even if the sensor detects a person present when set to 0.
  hu.configLEDLight(hu.eHPLed, 1);           // Set FALL LED switch, it will not light up even if the sensor detects a person falling when set to 0.
  hu.dmInstallHeight(270);                   // Set installation height, it needs to be set according to the actual height of the surface from the sensor, unit: CM.
  hu.dmFallTime(5);                          // Set fall time, the sensor needs to delay the current set time after detecting a person falling before outputting the detected fall, this can avoid false triggering, unit: seconds.
  hu.dmUnmannedTime(1);                      // Set unattended time, when a person leaves the sensor detection range, the sensor delays a period of time before outputting a no person status, unit: seconds.
  hu.dmFallConfig(hu.eResidenceTime, 200);   // Set dwell time, when a person remains still within the sensor detection range for more than the set time, the sensor outputs a stationary dwell status. Unit: seconds.
  hu.dmFallConfig(hu.eFallSensitivityC, 3);  // Set fall sensitivity, range 0~3, the larger the value, the more sensitive.
  hu.sensorRet();                            // Module reset, must perform sensorRet after setting data, otherwise the sensor may not be usable.

  Serial.print("Current work mode:");
  switch (hu.getWorkMode()) {
    case 1:
      Serial.println("Fall detection mode");
      break;
    case 2:
      Serial.println("Sleep detection mode");
      break;
    default:
      Serial.println("Read error");
  }

  Serial.print("HP LED status:");
  switch (hu.getLEDLightState(hu.eHPLed)) {
    case 0:
      Serial.println("Off");
      break;
    case 1:
      Serial.println("On");
      break;
    default:
      Serial.println("Read error");
  }
  Serial.print("FALL status:");
  switch (hu.getLEDLightState(hu.eFALLLed)) {
    case 0:
      Serial.println("Off");
      break;
    case 1:
      Serial.println("On");
      break;
    default:
      Serial.println("Read error");
  }

  Serial.printf("Radar installation height: %d cm\n", hu.dmGetInstallHeight());
  Serial.printf("Fall duration: %d seconds\n", hu.getFallTime());
  Serial.printf("Unattended duration: %d seconds\n", hu.getUnmannedTime());
  Serial.printf("Dwell duration: %d seconds\n", hu.getStaticResidencyTime());
  Serial.printf("Fall sensitivity: %d \n", hu.getFallData(hu.eFallSensitivity));
  Serial.println();
  Serial.println();
}

void loop() {
  Serial.print("Existing information:");
  switch (hu.smHumanData(hu.eHumanPresence)) {
    case 0:
      Serial.println("No one is present");
      break;
    case 1:
      Serial.println("Someone is present");
      break;
    default:
      Serial.println("Read error");
  }

  Serial.print("Motion information:");
  switch (hu.smHumanData(hu.eHumanMovement)) {
    case 0:
      Serial.println("None");
      break;
    case 1:
      Serial.println("Still");
      break;
    case 2:
      Serial.println("Active");
      break;
    default:
      Serial.println("Read error");
  }

  Serial.printf("Body movement parameters:%d\n", hu.smHumanData(hu.eHumanMovingRange));
  Serial.print("Fall status:");
  switch (hu.getFallData(hu.eFallState)) {
    case 0:
      Serial.println("Not fallen");
      break;
    case 1:
      Serial.println("Fallen");
      break;
    default:
      Serial.println("Read error");
  }

  Serial.print("Stationary dwell status:");
  switch (hu.getFallData(hu.estaticResidencyState)) {
    case 0:
      Serial.println("No stationary dwell");
      break;
    case 1:
      Serial.println("Stationary dwell present");
      break;
    default:
      Serial.println("Read error");
  }
  Serial.println();
  delay(1000);
}

结果

例程1结果

常见问题

还没有客户对此产品有任何问题,欢迎通过 qq 或者论坛联系我们!
更多问题及有趣的应用,可以访问论坛进行查阅或发帖

DFRobot 商城购买链接