HMMD — радар присутствия (24 ГГц mmWave)
Миллиметровый радар: в отличие от PIR-датчиков обнаруживает цель по отражению собственного излучаемого сигнала (эффект Доплера) и различает почти неподвижного человека — например, по дыханию.
📡 Радар присутствия HMMD (24 ГГц mmWave)
HMMD — миллиметровый радар: в отличие от PIR-датчиков (см. PIR_sensor_AM312), которые видят только резкое изменение теплового излучения, радар обнаруживает цель по отражению собственного излучаемого сигнала (эффект Доплера) и различает не только движение, но и почти неподвижного человека (дыхание) — физика в THEORY.md.
⚠️ Протокол датчика не полностью подтверждён документацией (официальная wiki Waveshare недоступна из окружения разработки, независимые источники расходятся в формате) — драйвер поэтому не отправляет радару никаких команд настройки и распознаёт оба вероятных формата вывода (текстовый и бинарный). Подробности и как проверить свой экземпляр — THEORY.md, раздел 3.
📋 Навигация
| Файл | Что внутри |
|---|---|
| WIRING.md | Подключение по UART, таблица пинов |
| THEORY.md | Физика радара, эффект Доплера, честный разбор протокола |
| Lesson.md | Методический план урока для учителя |
| PREZ.md | Презентация модуля — тезисы для урока |
🛠 Состав компонента
include/HmmdRadar.h— интерфейс класса драйвера.src/HmmdRadar.cpp— приём UART, распознавание ASCII/бинарного формата.src/main.cpp— тестовый стенд: серийная диагностика, режим сырого HEX-дампа, встроенный LED-индикатор.tools/radar_view.py— визуализация радар-экрана в реальном времени (см. ниже).
🚀 Сборка и прошивка (PlatformIO)
cd Components/HMMD-mmWave
pio run -t upload && pio device monitorПо умолчанию UART2 на GPIO16 (RX)/GPIO17 (TX) — см. WIRING.md.
Первый запуск на новом экземпляре датчика
- Прошейте и откройте Serial Monitor (115200 бод).
- Отправьте
r— включится сырой HEX-дамп всех байт, приходящих от радара. Это подтверждает физическое подключение и позволяет увидеть реальный формат вывода вашего конкретного модуля. - Отправьте
rещё раз, чтобы вернуться в обычный режим — статус печатается каждые 0.5с:
[EMPTY] зона свободна формат=? isAlive=1
[TARGET] дистанция=1.35 м формат=ASCII isAlive=1формат=ASCII или формат=BINARY(FD FC FB FA) показывает, какой протокол реально распознан у
вашего датчика. isAlive=0 означает, что от радара давно не было ни одного валидного кадра —
обрыв UART или неподтверждённый формат вывода (см.
HmmdRadar::isAlive()).
⚙️ Настройки в коде
Зона контроля и удержание статуса задаются в конструкторе
(main.cpp: HmmdRadar radar(Serial2, kMaxDistanceM, kHoldTimeMs)):
kMaxDistanceM(по умолчанию 2.10 м) — показания дальше игнорируются.kHoldTimeMs(по умолчанию 2000 мс) — сколько ждать без валидных данных, прежде чем считать цель ушедшей из зоны (защита от дребезга на границе обнаружения, см. THEORY.md, раздел 4).
Настройка самой чувствительности/дальности радара HEX-командами в этой версии не выполняется — см. THEORY.md, раздел 3 о том, почему.
🖥️ Наглядная визуализация (для демонстрации детям)
tools/radar_view.py рисует живой “радар-экран” в реальном времени:
сектор обзора ±60°, кольца дальности до 2.1 м, красная дуга — где сейчас цель. Датчик отдаёт
только дистанцию, без угла, поэтому дуга рисуется через весь сектор, а не точкой в
конкретном направлении — это честное отображение того, что реально измеряется (см.
THEORY.md, раздел 3).
cd Components/HMMD-mmWave/tools
pip install -r requirements.txt
python3 radar_view.py /dev/ttyUSB0 # порт как в pio device monitorПрошивка должна быть в обычном режиме (не r/сырой дамп) и не занята другим Serial Monitor —
порт может слушать только одна программа одновременно.
🔧 Устранение неисправностей
- Постоянно
isAlive=0, дамп (r) пустой — проверьте, что TX радара идёт на RX2 ESP32 и наоборот (частая ошибка — перепутать местами), питание 3.3В (не 5В). - Дамп (
r) не пустой, но обычный режим не распознаёт[TARGET]/[EMPTY]осмысленно — скорее всего, ваш датчик выдаёт бинарный формат (формат=BINARY), для которого декодирование точной дистанции ещё не реализовано (только факт обнаружения кадра) — см. THEORY.md. isAlive=1,формат=ASCII, но всегда[EMPTY]— цель может быть дальшеkMaxDistanceM; попробуйте подойти ближе, в пределах 1 метра.