This project blends cutting-edge human sensing with modular IoT design and custom 3D fabrication. At its core is the DFRobot SEN0623 C1001 mmWave Human Detection Sensor, paired with the ultra-compact Xiao ESP32C3. The entire system is housed in a custom 3D-printed enclosure designed and fabricated by JustWay 3D Print Service, making it deployable, durable, and visually refined.
To build the 3D-Printed mmWave Human Detection System, you'll need the following components:
1.DFRobot SEN0623 C1001 mmWave Human Detection Sensor
- 60GHz radar sensor for presence, motion, respiration, and heart rate detection
- UART interface (3.3V logic)
2.Xiao ESP32C3
- RISC-V WiFi + BLE microcontroller
- USB-C for programming and power
- Compact 21mm x 17.5mm footprint
The C1001 mmWave sensor is a powerhouse of passive human detection. It uses 60GHz radar to detect:
This makes it ideal for:
- Sleep monitoring
- Fall detection
- Smart lighting
- Elderly care
The Xiao ESP32C3 is a tiny yet powerful board with:
- RISC-V core
- WiFi + BLe
- USB-C programming
- Low power modes
- Compact footprint (21 x 17.5 mm)
It’s perfect for embedding inside enclosures and supports both Arduino and PlatformIO workflows.
🖨️ JustWay 3D Print Service: Your Fabrication PartnerWhen it comes to turning digital designs into physical reality, JustWay 3D Print Service stands out as a reliable, maker-friendly solution. Whether you're prototyping enclosures, brackets, sensor mounts, or full IoT shells, JustWay delivers precision, speed, and support tailored for hobbyists and professionals alike.
🌟 Why Choose JustWay?- High-Quality Prints: Crisp resolution, tuned tolerances, and durable materials like PLA+, ABS, and PETG.
- Fast Turnaround: Most orders are printed and shipped within 2–4 business days.
- Affordable Pricing: Competitive rates for single prints and bulk batches.
- Maker-Friendly Support: They understand electronics, tolerances, and enclosure needs.
- Custom Finishing: Optional sanding, painting, or assembly services available.
To make this sensor deployable, I designed a custom enclosure and partnered with JustWay 3D Print Service for fabrication.
Here's what makes it special:
🧩 Features:- Snap-fit lid for easy access
- Ventilation slots for mmWave signal transparency
- Holes for USB installation
- Cable routing channels for clean wiring
- Sensor window aligned with radar beam
Ordering from JustWay is simple and secure:
- Prepare Your 3D Model Save your design in
.stl,.obj, or.stepformat (under 500MB). - Visit the JustWay Quote Page Go to the JustWay Instant Quote Portal and select “3D Printing.
- Upload Your Design Click “Upload Your Design” and submit your file. All uploads are encrypted and confidential.
- Customize & Confirm Choose your material, color, and finish. You’ll get an instant quote and estimate delivery time.
- Place Your Order Complete payment and receive your case within 3–7 days across India.
- You can see the finish and the quality
#include "DFRobot_HumanDetection.h"
#include <SoftwareSerial.h>
#include <WiFi.h>
#include <WebServer.h>
const char* ssid = "";
const char* password = "";
WebServer server(80);
DFRobot_HumanDetection hu(&Serial1);
// Web status variables
String presenceStatus = "Unknown";
String motionStatus = "Unknown";
int movementParam = 0;
String generateHTML() {
String html = "<!DOCTYPE html><html><head><meta charset='UTF-8'>";
html += "<meta name='viewport' content='width=device-width, initial-scale=1'>";
html += "<title>mmWave Human Detection Dashboard</title>";
html += "<style>";
html += "body{margin:0;font-family:'Segoe UI',sans-serif;background:#121212;color:#f0f0f0;}";
html += "header{text-align:center;padding:20px;background:#1f1f1f;}";
html += "h2{margin:0;font-size:24px;color:#00bcd4;}";
html += ".container{max-width:400px;margin:20px auto;padding:20px;background:#1e1e1e;border-radius:10px;box-shadow:0 0 10px rgba(0,0,0,0.5);}";
html += ".status{margin:15px 0;font-size:18px;display:flex;justify-content:space-between;align-items:center;}";
html += ".label{font-weight:bold;}";
html += ".badge{padding:5px 10px;border-radius:5px;font-weight:bold;}";
html += ".green{background:#2ecc71;color:#fff;}";
html += ".red{background:#e74c3c;color:#fff;}";
html += ".orange{background:#f39c12;color:#fff;}";
html += ".gray{background:#7f8c8d;color:#fff;}";
html += ".footer{text-align:center;font-size:12px;color:#aaa;margin-top:20px;}";
html += "</style></head><body>";
html += "<header><h2>🧠 mmWave Human Detection</h2></header>";
html += "<div class='container'>";
html += "<div class='status'><span class='label'>Presence:</span> <span class='badge " + String((presenceStatus.indexOf("Someone") >= 0 ? "green" : "gray")) + "'>" + presenceStatus + "</span></div>";
html += "<div class='status'><span class='label'>Motion:</span> <span class='badge " + String((motionStatus == "Active" ? "orange" : motionStatus == "Still" ? "green" : "gray")) + "'>" + motionStatus + "</span></div>";
html += "<div class='status'><span class='label'>Movement Parameter:</span> <span class='badge red'>" + String(movementParam) + "</span></div>";
html += "</div>";
html += "<div class='footer'>Auto-refreshing every 2 seconds</div>";
html += "<script>setTimeout(()=>{location.reload();},2000);</script>";
html += "</body></html>";
return html;
}
void handleRoot() {
server.send(200, "text/html", generateHTML());
}
void setup() {
Serial.begin(115200);
Serial1.begin(115200, SERIAL_8N1, /*rx =*/D7, /*tx =*/D6);
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();
// WiFi setup
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected. IP address: " + WiFi.localIP().toString());
// Web server setup
server.on("/", handleRoot);
server.begin();
Serial.println("Web server started.");
}
void loop() {
Serial.print("Existing information:");
int presence = hu.smHumanData(hu.eHumanPresence);
switch (presence) {
case 0:
Serial.println("No one is present");
presenceStatus = "No one is present";
break;
case 1:
Serial.println("Someone is present");
presenceStatus = "Someone is present";
break;
default:
Serial.println("Read error");
presenceStatus = "Read error";
}
Serial.print("Motion information:");
int motion = hu.smHumanData(hu.eHumanMovement);
switch (motion) {
case 0:
Serial.println("None");
motionStatus = "None";
break;
case 1:
Serial.println("Still");
motionStatus = "Still";
break;
case 2:
Serial.println("Active");
motionStatus = "Active";
break;
default:
Serial.println("Read error");
motionStatus = "Read error";
}
Serial.print("Body movement parameters: ");
movementParam = hu.smHumanData(hu.eHumanMovingRange);
Serial.println(movementParam);
Serial.println("-----------------------");
server.handleClient();
delay(1000);
}This prints the body movement parameter every second — ideal for logging, graphing, or triggering actions.
Finally fit the components inside the case
- OLED dashboard with live motion graph
- WiFi streaming to Blynk or MQTT
- SD card logging
- Battery-powered version with sleep mode
- Multi-sensor fusion (PIR + mmWave)
If you're in India and need affordable, precision 3D printing, JustWay delivers:
- ✅ Fast turnaround
- ✅ High-quality PLA/ABS prints
- ✅ Custom enclosures for electronics
- ✅ Friendly support for educators and makers
This project demonstrates how powerful and accessible human detection technology can be when paired with modular hardware and thoughtful design. By integrating the DFRobot C1001 mmWave sensor with the Xiao ESP32C3 and housing it in a custom 3D-printed enclosure from JustWay, we've created a deployable, real-time motion sensing system that’s perfect for smart environments, health monitoring, and interactive robotics.
The addition of a live web dashboard makes the data instantly visible and actionable — whether you're prototyping in a lab, teaching in a classroom, or deploying in a real-world setting.












Comments