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.
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.
Technical Specifications
- Working voltage: 5V
- Working current: ≤100mA
- Working frequency: 61~61.5GHz
- Transmission power: 6dBm
- Farthest detection distance: 11m
- Radar detection angle: 100×100 degrees
- Sleep detection distance (chest): 0.4-2.5m
- Breathing heartbeat detection distance (chest): 0.4-1.5m
- Breathing measurement range: 10-25 times/minute
- Heartbeat measurement range: 60-100 times/minute
- Working temperature: -20~60℃
Note: This product is not a professional medical instrument and cannot be used as an auxiliary accessory for diagnosis and treatment.
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°.
To ensure accurate radar detection, please install it on the top! As shown in the figure below.
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°.
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.
- Radar installation direction: The radar direction is required as below;
- Inclined installation (downward tilt angle 30~45°);
Demonstration Routine
Presence Information & Respiration Rate & Heart Rate Acquisition
Preparation
Hardware
C1001 Millimeter Wave Human Detection Sensor
ESP32-S3-DevKitC-1 Development Board, or other ESP32-based development boards.
Software
Arduino IDE, Click to download Arduino IDE
DFRobot_HumanDetection library, Click to download DFRobot_HumanDetection library
How to install library files, Click the link
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
Sleep Information Acquisition
Preparation
Hardware
C1001 Millimeter Wave Human Detection Sensor
ESP32-S3-DevKitC-1 Development Board, or other ESP32-based development boards.
Software
Arduino IDE, Click to download Arduino IDE
DFRobot_HumanDetection library, Click to download DFRobot_HumanDetection library
How to install library files, Click the link
Wiring Diagram
Millimeter Wave | ESP32-S3 |
---|---|
VIN | 5V |
GND | GND |
RX | IO5 |
TX | IO4 |
Installation Method
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
Fall Information Acquisition
Preparation
Hardware
C1001 Millimeter Wave Human Detection Sensor
ESP32-S3-DevKitC-1 Development Board, or other ESP32-based development boards.
Software
Arduino IDE, Click to download Arduino IDE
DFRobot_HumanDetection library, Click to download DFRobot_HumanDetection library
How to install library files, Click the link
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.
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
FAQ
For any questions, advice or cool ideas to share, please visit the DFRobot Forum.
Get C1001 mmWave Human Detection Sensor from DFRobot Store or DFRobot Distributor.