Radar mmWave: Phát hiện chuyển động, cử chỉ và sự hiện diện
Ghi chú thực tế để phân biệt motion, gesture và presence detection, chọn đúng module radar mmWave và làm một prototype ESP32 dễ hiệu chỉnh.
Chia sẻ

Lần đầu cắm một module radar mmWave, mình hơi bất ngờ vì nó vẫn báo có người dù mình đang ngồi gần như không nhúc nhích. PIR thường cần một thay đổi nhiệt đủ rõ, còn radar có thể nhìn thấy những chuyển động rất nhỏ như nhịp thở hoặc bàn tay vừa dịch nhẹ.
Nhưng chữ “mmWave” trên hộp chưa nói hết khả năng của cảm biến. Phát hiện chuyển động, nhận cử chỉ và xác định có người là ba bài toán khác nhau. Chọn nhầm module thì code hay đến đâu cũng không biến một cảm biến presence đơn giản thành bộ nhận dạng swipe.

Hai module cùng dùng mmWave vẫn có thể cho đầu ra rất khác nhau; hãy xem API và example code trước khi so thông số tần số.
Radar mmWave đang đo điều gì?
Module phát một chuỗi sóng vô tuyến và nghe tín hiệu phản xạ từ đồ vật trong vùng quan sát. Từ sự thay đổi tần số và pha, phần xử lý có thể ước lượng khoảng cách, vận tốc tương đối và đôi khi cả góc của mục tiêu.
Với người làm prototype, mình thấy nên quan tâm đầu ra của module hơn là cố xử lý tín hiệu radar thô ngay từ đầu. Nhiều module presence đã chạy thuật toán bên trong và trả về qua UART các giá trị như moving target, still target, khoảng cách hoặc mức năng lượng theo từng vùng. ESP32 chỉ cần đọc, lọc trạng thái và điều khiển thiết bị.
Một kit radar thô qua SPI lại phù hợp khi bạn muốn tự làm gesture recognition hoặc thay đổi sâu cấu hình chirp, tốc độ khung và thuật toán DSP. Đổi lại, phần firmware và hiệu chỉnh sẽ nặng hơn khá nhiều.
Motion, gesture và presence khác nhau ra sao?
| Bài toán | Đầu ra mình thực sự cần | Ví dụ phù hợp |
|---|---|---|
| Motion detection | Có chuyển động, hướng hoặc tốc độ tương đối | Bật đèn khi có người bước vào, mở nắp không chạm |
| Presence detection | Có người kể cả khi đang ngồi yên | Giữ đèn phòng làm việc, màn hình hoặc điều hòa hoạt động |
| Gesture detection | Nhãn cử chỉ theo một chuỗi chuyển động ngắn | Swipe trái/phải, push để điều khiển thiết bị |
Presence cần nhạy với micro-motion nhưng không nhất thiết phải biết bàn tay đang vuốt sang trái. Gesture thì ngược lại: thuật toán phải nhìn một chuỗi mẫu theo thời gian, thường ở khoảng cách gần và tốc độ khung hình cao hơn. Ví dụ, XENSIV 60 GHz của Infineon nhận các cử chỉ swipe lên, xuống, trái, phải và push trong khoảng 0,2-1 m, nhưng đó là một pipeline gesture riêng chứ không phải output mặc định của mọi radar 60 GHz.
24 GHz hay 60 GHz cũng không tự quyết định module nào “tốt hơn”. Antenna, số kênh thu, firmware bên trong, vùng nhìn và chứng nhận vô tuyến đều quan trọng. Mình chọn theo use case và API có sẵn trước, rồi mới so sánh tần số.
Một prototype presence với ESP32
Nếu mục tiêu là giữ đèn sáng khi có người ngồi làm việc, LD2410 là điểm thử khá dễ vì ESPHome đã có component chính thức. Module phân biệt mục tiêu đang di chuyển và đứng yên, đồng thời cung cấp khoảng cách, mức năng lượng và threshold theo từng distance gate.

Vị trí lắp quyết định vùng radar quan sát được. Một lần thử trên bàn chưa thay thế được việc hiệu chỉnh trong căn phòng thật.
Cấu hình tối thiểu có thể bắt đầu như sau:
uart:
id: radar_uart
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 256000
parity: NONE
stop_bits: 1
ld2410:
uart_id: radar_uart
binary_sensor:
- platform: ld2410
has_target:
name: "Desk Presence"
has_moving_target:
name: "Desk Moving Target"
has_still_target:
name: "Desk Still Target"
Hai chân GPIO trên chỉ là ví dụ; hãy đổi theo board của bạn và dùng hardware UART nếu có. Với tốc độ mặc định 256000 baud, software UART không phải là lựa chọn mình muốn dùng lâu dài.
Đừng nối trạng thái raw thẳng vào relay rồi dừng ở đó. Mình thường dùng logic nhỏ như sau:
- Bật thiết bị ngay khi thấy
movinghoặcstill. - Khi radar báo trống, giữ trạng thái thêm 20-60 giây.
- Chỉ tắt nếu toàn bộ khoảng giữ đó vẫn không có mục tiêu.
- Nếu có cảm biến cửa hoặc công tắc tay, cho chúng quyền ưu tiên rõ ràng.
Khoảng giữ này xử lý những lần radar mất dấu ngắn khi người đổi tư thế. Nó cũng làm hệ thống bớt cảm giác “giật” hơn nhiều.
Nếu mục tiêu là nhận cử chỉ
Với gesture, mình sẽ chọn kit có ví dụ nhận dạng đúng cử chỉ cần dùng, không chỉ có chữ radar trong datasheet. Pipeline thường là: lấy frame radar, chuẩn hóa dữ liệu, chạy DSP hoặc model phân loại, rồi chỉ phát sự kiện khi confidence và thời gian khóa đều hợp lệ.

Gesture detection cần chuỗi dữ liệu theo thời gian và profile phù hợp, không chỉ một tín hiệu có hoặc không có người.
Một prototype điều khiển không chạm nên bắt đầu với hai hoặc ba lệnh khác biệt rõ, chẳng hạn swipe left, swipe right và push. Thêm quá nhiều cử chỉ giống nhau từ đầu sẽ làm việc thu dữ liệu và việc chỉnh threshold khó hơn.
Mình cũng tránh kích hoạt gesture liên tục khi không có ai gần thiết bị. Có thể để radar chạy profile presence tiết kiệm hơn; khi mục tiêu vào vùng gần, chuyển sang profile gesture có frame rate cao. Ví dụ, sự hiện diện của Infineon minh họa chính cơ chế đổi cấu hình radar khi đang chạy này.
Hiệu chỉnh trong phòng thật
Trên bàn, radar thường chạy đẹp. Gắn lên tường mới lộ ra phản xạ từ quạt, rèm, cửa, thú cưng hoặc người đi ngoài vùng mình quan tâm. Checklist ngắn của mình là:
- Gắn module chắc chắn, không để PCB rung theo quạt hoặc loa.
- Đặt đúng hướng ăng-ten; không suy từ hướng cổng USB.
- Ghi dữ liệu khi phòng trống trước khi chỉnh threshold.
- Giới hạn distance gate gần và xa thay vì mở toàn bộ tầm đo.
- Thử đủ ba trạng thái: đi lại, ngồi yên và rời khỏi phòng.
- Kiểm tra lại sau khi lắp vỏ. Nhựa mỏng thường dễ xử lý hơn kim loại, nhưng vẫn phải theo khuyến nghị của module.
- Lưu threshold cùng phiên bản firmware để lần sau còn biết cấu hình nào đã chạy ổn.
Radar không phải là camera nên riêng tư tốt hơn ở nhiều use case, nhưng dữ liệu presence vẫn cho biết thói quen sử dụng phòng. Nếu đưa lên Home Assistant hoặc cloud, mình vẫn chỉ lưu những gì thật sự cần.
Điều mình sẽ chọn
Để làm automation phòng, mình sẽ chọn module presence đã xử lý sẵn qua UART, thử bằng ESPHome và dành thời gian cho vị trí lắp cùng threshold. Để làm HMI không chạm, mình sẽ chuyển sang kit 60 GHz có pipeline gesture và example code phù hợp ngay từ đầu.
Điểm quan trọng nhất là mô tả đúng đầu ra mình cần trước khi mua phần cứng: motion event, occupied state hay gesture label. Ba dòng đó rõ ràng thì phần còn lại của prototype dễ đi hơn hẳn.
Tài liệu tham khảo
Chia sẻ
Tiếp tục khám phá
Đọc tiếp
Bài viết liên quan
Smart thermostat tự học cách căn phòng ấm lên
Ghi chú làm smart thermostat bằng ESP32, ESPHome và Home Assistant, có lớp tốc độ làm ấm để bật đúng lúc mà vẫn giữ giới hạn an toàn.
Smart Garden: Theo dõi đất, ánh sáng và tưới nước
Cách mình làm hệ thống vườn thông minh bằng ESP32 để theo dõi độ ẩm đất, ánh sáng, mực nước và tưới cây vừa đủ mà không biến ban công thành một mớ dây.
Deep Dive: Giao tiếp BLE cho thiết bị IoT
Hướng dẫn thực tế để thiết kế giao tiếp BLE ổn định cho thiết bị IoT: GATT, packet, MTU, notify, reconnect, bảo mật và tối ưu pin với ESP32 NimBLE.