Khi làm các dự án phát hiện chuyển động, đa số mọi người bắt đầu với PIR HC-SR501. Tuy nhiên trong nhiều tình huống thực tế (ngoài trời, xuyên vật cản mỏng, môi trường nhiệt độ thay đổi), PIR không còn tối ưu.
Đây là lúc RCWL-0516 – cảm biến radar vi sóng phát huy thế mạnh.
1. RCWL-0516 là gì?
RCWL-0516 là cảm biến:
- Phát hiện chuyển động bằng radar vi sóng (Doppler)
- Không phụ thuộc vào nhiệt độ cơ thể
- Có thể xuyên qua nhựa mỏng, gỗ, tường mỏng
👉 Hoạt động rất khác PIR (hồng ngoại thụ động).
2. So sánh RCWL-0516 và PIR HC-SR501
| Tiêu chí | PIR HC-SR501 | RCWL-0516 |
|---|---|---|
| Nguyên lý | Hồng ngoại (nhiệt) | Radar vi sóng |
| Phát hiện vật tĩnh | ❌ | ❌ |
| Phát hiện người | ✅ | ✅ |
| Phát hiện vật không phát nhiệt | ❌ | ✅ |
| Xuyên vật mỏng | ❌ | ✅ |
| Ngoài trời | Trung bình | Tốt hơn |
| Độ nhạy | Vừa | Cao |
📌 RCWL-0516 không thay PIR, mà dùng cho bài toán khác.
3. Khi nào nên dùng RCWL-0516?
RCWL-0516 rất phù hợp cho:
- Phát hiện chuyển động ngoài trời
- Bãi xe, cổng, hành lang
- Thiết bị giấu sau vỏ nhựa
- An ninh cơ bản (motion trigger)
❌ Không phù hợp để:
- Phân biệt người/ngồi yên
- Đếm chính xác số người
4. Chuẩn bị phần cứng
Thiết bị
- ESP32-C3 SuperMini
- RCWL-0516 radar module
Đặc điểm tín hiệu
- RCWL-0516 xuất digital HIGH/LOW
- HIGH khi phát hiện chuyển động
- LOW khi không có chuyển động
5. Kết nối RCWL-0516 với ESP32
| RCWL-0516 | ESP32-C3 |
|---|---|
| VIN | 5V (hoặc 3.3V – tuỳ module) |
| GND | GND |
| OUT | GPIO4 |
📌 RCWL-0516 thường hoạt động tốt ở 3.3V, rất phù hợp ESP32.
6. Ví dụ 1: Đọc trạng thái chuyển động (local)
#define RADAR_PIN 4
void setup() {
Serial.begin(115200);
pinMode(RADAR_PIN, INPUT);
}
void loop() {
int motion = digitalRead(RADAR_PIN);
if (motion == HIGH) {
Serial.println("Motion detected!");
} else {
Serial.println("No motion");
}
delay(300);
}
📌 RCWL-0516 có độ trễ vài giây sau mỗi lần phát hiện – đây là đặc điểm bình thường.
7. Dữ liệu radar trong tư duy IoT
RCWL-0516 không sinh dữ liệu liên tục, mà là event-based sensor.
👉 Ta cần:
- Trạng thái:
motion = 0/1 - Timestamp khi phát hiện
Payload gợi ý:
{
"ts": 1760000000,
"metrics": {
"motion": 1
}
}
8. Ví dụ 2: Gửi trạng thái radar realtime lên IoTLabs Cloud MQTT
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
#define RADAR_PIN 4
const char* WIFI_SSID = "YOUR_WIFI";
const char* WIFI_PASS = "YOUR_PASS";
const char* MQTT_HOST = "mqtt.iotlabs.vn";
const int MQTT_PORT = 8883;
const char* MQTT_USER = "YOUR_MQTT_USER";
const char* MQTT_PASS = "YOUR_MQTT_PASS";
const char* MQTT_TOPIC =
"iotlabs/<orgId>/devices/<deviceId>/telemetry";
WiFiClientSecure net;
PubSubClient mqtt(net);
int lastState = LOW;
void connectWiFi() {
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) delay(500);
}
void connectMQTT() {
net.setInsecure();
mqtt.setServer(MQTT_HOST, MQTT_PORT);
while (!mqtt.connected()) {
mqtt.connect("esp32c3-radar", MQTT_USER, MQTT_PASS);
delay(1000);
}
}
void setup() {
Serial.begin(115200);
pinMode(RADAR_PIN, INPUT);
connectWiFi();
connectMQTT();
}
void loop() {
if (!mqtt.connected()) connectMQTT();
mqtt.loop();
int state = digitalRead(RADAR_PIN);
if (state != lastState) {
lastState = state;
long ts = millis() / 1000;
String payload = "{";
payload += "\"ts\":" + String(ts) + ",";
payload += "\"metrics\":{";
payload += "\"motion\":" + String(state);
payload += "}}";
mqtt.publish(MQTT_TOPIC, payload.c_str());
Serial.println(payload);
}
delay(100);
}
📌 Chỉ gửi khi trạng thái thay đổi → tiết kiệm băng thông.
9. Kinh nghiệm thực tế với RCWL-0516
- Độ nhạy rất cao → dễ báo giả
- Tránh đặt gần quạt, rèm, vật rung
- Không dùng trong phòng nhỏ kín nếu cần chính xác
- Có thể chỉnh linh kiện SMD để giảm độ nhạy (nâng cao)
10. Ứng dụng thực tế
Sau bài này, bạn có thể làm:
- Cảnh báo xâm nhập
- Kích hoạt camera khi có chuyển động
- Bật đèn thông minh
- Ghi log event an ninh
Kết hợp tốt với:
- PIR (lọc false positive)
- ToF (xác nhận khoảng cách)
- Rule Engine trên IoTLabs Cloud
11. Tổng kết Bài 27
Bạn đã:
- Hiểu cảm biến radar vi sóng
- Phân biệt PIR vs Radar
- Xử lý dữ liệu event-based
- Gửi trạng thái realtime lên IoTLabs Cloud
👉 Đây là bước rất quan trọng để làm hệ IoT đúng bản chất, không chỉ “đọc cảm biến”.


