SEN0623 C1001 mmWave Human Detection Sensor

C1001 mmWave Human Detection Sensor

Product Introduction

The C1001 mmWave Human Detection Sensor is a millimeter wave radar that operates at a frequency of 60GHz. Unlike the 24GHz millimeter wave, the C1001 mmWave Human Detection Sensor can achieve more detailed detection functions.

Fall Detection Function

The C1001 mmWave Human Detection Sensor can recognize human postures through point cloud imaging algorithms, accurately detect lying flat, and precisely detect life. It accurately reports the fallen state, stay time, and static body stay state.

Fall Detection Range

Sleep Detection Function

The C1001 mmWave Human Detection Sensor can realize the perception of human biological existence and human motion perception, continuously record the existence of the human body, and make real-time judgments on the target's sleep state and breathing heart rate according to the changes in body movement amplitude and breathing heart rate during sleep. After a sleep process, it outputs sleep scores and combines the output of related sleep parameters into health detection applications.

Sleep Detection Installation Method

Technical Specifications

Note: This product is not a professional medical instrument and cannot be used as an auxiliary accessory for diagnosis and treatment.

Dimension Diagram

Dimension Diagram

Interface Definition

Definition Explanation
VIN Power Supply
GND Ground
RX Sensor Serial Reception
TX Sensor Serial Transmission
IO2 Human Presence Level Output (3.3V)
IO1 Fall Status Level Output (3.3V)

Installation Method

Top Installation for Fall Mode

The radar module beam coverage range is as shown in the figure below. The radar covers a stereoscopic fan-shaped area with a horizontal angle of 100° and a pitch angle of 100°.

Fall Detection Range

To ensure accurate radar detection, please install it on the top! As shown in the figure below.

Top Installation Diagram

Note: Avoid easily swaying objects such as exhaust fans/metal blinds/blackout curtain coatings in the room

Sleep Mode

The radar beam coverage range is as shown in the figure below. The radar covers a stereoscopic fan-shaped area with a horizontal angle of 40° and a pitch angle of 40°.

Sleep Mode Detection Range

Within the radar detection range, in order to meet the stable detection of human presence and sleep breathing and heartbeat, there are certain installation requirements for radar installation.

  1. Radar installation direction: The radar direction is required as below;
Sensor Front
  1. Inclined installation (downward tilt angle 30~45°);
Sleep Installation Diagram

Demonstration Routine

Presence Information & Respiration Rate & Heart Rate Acquisition

Preparation

Wiring Diagram

Wiring Diagram
Millimeter Wave ESP32-S3
VIN 5V
GND GND
RX IO5
TX IO4

Installation Method

There are no special installation requirements for human presence detection, both top and side installations are possible. For respiration rate and heart rate, the sensor should be placed 1.5m in front of the human body and the sensor should be directly facing the chest of the detected person.

Sample Code

Copy the following code into your Arduino IDE and upload.

/**!
 * @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.gitHeartRate());
  Serial.println();
  delay(1000);
}

Result

Example 1 Result

Sleep Information Acquisition

Preparation

Wiring Diagram

Wiring Diagram
Millimeter Wave ESP32-S3
VIN 5V
GND GND
RX IO5
TX IO4

Installation Method

Sleep Installation Diagram

Sample Code

Copy the following code into your Arduino IDE and upload.

/**!
 * @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);
}

Result

Example 2 Result

Fall Information Acquisition

Preparation

Wiring Diagram

Wiring Diagram
Millimeter Wave ESP32-S3
VIN 5V
GND GND
RX IO5
TX IO4

Installation Method

There are no special installation requirements for human presence detection, both top and side installations are possible. For fall detection, the sensor should be installed directly above the test area, with the front of the sensor facing down. As shown below.

Fall Installation Diagram

Sample Code

Copy the following code into your Arduino IDE and upload.

/**!
 * @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);
}

Result

Example 3 Result

FAQ

For any questions, advice or cool ideas to share, please visit the DFRobot Forum.

DFshopping_car1.png Get C1001 mmWave Human Detection Sensor from DFRobot Store or DFRobot Distributor.