IoTLabs

Nghiên cứu, Sáng tạo và Thử nghiệm

Series ESP32 & Cảm biến: Bài 27 – Đọc cảm biến RCWL-0516: phát hiện chuyển động bằng radar & theo dõi realtime

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-SR501RCWL-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ờiTrung bìnhTốt hơn
Độ nhạyVừaCao

📌 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-0516ESP32-C3
VIN5V (hoặc 3.3V – tuỳ module)
GNDGND
OUTGPIO4

📌 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”.