# Методическое пособие: серия уроков «Радар присутствия HMMD»

Стенд: ESP32 + `HmmdRadar` (24 ГГц mmWave радар) + серийная диагностика и режим сырого HEX-дампа
в [`main.cpp`](src/main.cpp). Пособие связывает работу датчика с темами физики (электромагнитные
волны, эффект Доплера) 9–11 класса и с азами инженерной практики: как работать с датчиком, когда
документация производителя неполна — реальная, а не выдуманная задача, встречающаяся в проектах
постоянно.

Рассчитано на **2 урока по 40–45 минут**: физика радара и сравнение с PIR-датчиком → практикум
"инженерный детектив" (проверка реального протокола датчика по сырым байтам). Если в кабинете уже
есть [PIR_sensor_AM312](../AM312) — урок 1 выигрывает от прямого сравнения на живых
приборах.

## Кто чем пользуется

1. **Инженер** собирает схему по [WIRING.md](WIRING.md), прошивает `src/main.cpp`.
2. **Учитель** на уроке открывает Serial Monitor — весь функционал доступен без Python и
   дополнительных программ, только текстовый вывод.

## ⚠️ Важная методическая особенность этого урока

В отличие от других компонентов лаборатории, протокол HMMD **не полностью подтверждён
документацией производителя** на момент подготовки этого пособия (подробности —
[THEORY.md, раздел 3](THEORY.md#3-протокол--что-подтверждено-а-что-нет)). Это не недостаток
урока, а сознательно используемая особенность: реальные инженерные проекты регулярно
сталкиваются с неполной или противоречивой документацией, и умение проверить факт "вручную",
глядя на сырые данные, а не слепо доверять и не слепо изобретать — ценный навык сам по себе.

---

## Урок 1. Радар против PIR: как обнаружить неподвижного человека

**Тема:** электромагнитные волны, отражение, эффект Доплера, сравнение активных и пассивных
датчиков.

**Ход работы.**
1. Включить стенд, открыть Serial Monitor. Пройти перед датчиком — статус переключится в
   `[TARGET]`, дистанция обновится (если формат ASCII подтверждён — см. врезку про Урок 2).
   Встроенный LED тоже загорится.
2. Встать перед датчиком и **замереть** (не размахивать руками, дышать спокойно). Обсудить с
   классом прогноз: погаснет ли `[TARGET]` через `holdTimeMs` (2 секунды по умолчанию), как это
   было бы у PIR-датчика?
3. Если в кабинете есть PIR-датчик (см. [PIR_sensor_AM312](../AM312)) — повторить тот
   же эксперимент "замри" на нём параллельно. PIR потеряет цель почти сразу после прекращения
   движения, HMMD — заметно позже или не потеряет вовсе, пока человек продолжает дышать в
   пределах чувствительности датчика.

**Разбор.** PIR — пассивный датчик: он ничего не излучает, а лишь регистрирует изменение
инфракрасного излучения в поле зрения, поэтому видит только *движение*. HMMD — активный радар:
сам излучает электромагнитную волну ~24 ГГц и анализирует отражение
([THEORY.md, раздел 1](THEORY.md#1-принцип-работы-радар-а-не-тепловизор)). Определение цели
основано на **эффекте Доплера** — если отражающая поверхность (например, грудная клетка при
дыхании) хоть немного движется, частота отражённой волны сдвигается относительно излучённой, и
именно этот сдвиг радар засекает — даже когда человек кажется совершенно неподвижным. Это тот же
физический эффект, из-за которого сирена скорой помощи меняет тон при приближении и удалении, и
тот же принцип, которым автомобильные радары ГИБДД измеряют скорость.

**Практическое задание.** Заполнить сравнительную таблицу "PIR vs HMMD" по итогам собственного
наблюдения (не по теории): что каждый датчик заметил, а что пропустил, за одинаковое время
эксперимента "замри на месте". Обсудить, для какой задачи (охранная сигнализация, освещение в
переговорке, где люди подолгу сидят неподвижно) какой датчик подходит лучше, опираясь на разницу
в физическом принципе, а не только на маркетинговые преимущества.

---

## Урок 2. Инженерный детектив: какой протокол на самом деле шлёт датчик

**Тема:** протоколы передачи данных, работа с неполной документацией, шестнадцатеричная система
счисления, чтение "сырых" данных.

**Подготовка.** Учителю заранее стоит один раз проверить, какой формат выдаёт конкретный
физический экземпляр датчика в классе (ASCII или бинарный, см. ниже) — тогда на уроке можно
управлять ожиданиями, не тратя время урока на непредсказуемый результат. Сам эксперимент от этого
не становится менее настоящим: ученики результата заранее не знают.

**Ход работы.**
1. Рассказать контекст: у этого датчика найдено расхождение между разными источниками в
   интернете о том, в каком формате он присылает данные — текстом или байтами
   ([THEORY.md, раздел 3](THEORY.md#3-протокол--что-подтверждено-а-что-нет)). Задача класса —
   выяснить правду для конкретного датчика в руках, как это бы сделал инженер на реальном
   проекте.
2. Отправить `r` в Serial Monitor — включить сырой HEX-дамп. На экране побегут пары
   шестнадцатеричных символов.
3. Разобрать вместе с классом, что значит "шестнадцатеричный" (каждая пара символов — один байт,
   значения от `00` до `FF`, то есть от 0 до 255 в десятичной системе).
4. Искать закономерность: если в потоке видны читаемые ASCII-коды букв (например, `52 61 6E 67
   65` — это код слова "Range" в таблице ASCII) — протокол текстовый. Если видна повторяющаяся
   последовательность `FD FC FB FA` — это заголовок бинарного кадра.
5. Отправить `r` ещё раз, вернуться в обычный режим, проверить: строка `формат=ASCII` или
   `формат=BINARY` в выводе подтверждает то, что класс только что увидел вручную.

**Разбор.** Программный код умеет распознавать оба варианта одновременно
([`HmmdRadar::update()`](src/HmmdRadar.cpp#L22-L55) параллельно пробует
[`tryParseAsciiLine()`](src/HmmdRadar.cpp#L57-L77) и
[`tryParseBinaryFrame()`](src/HmmdRadar.cpp#L79-L105)) именно потому, что заранее не было
уверенности, какой из них верный — это осторожная, а не идеальная инженерная стратегия:
"попробовать оба варианта и посмотреть, какой сработает" вместо того, чтобы гадать один раз и
рисковать полностью нерабочим устройством.

**Если формат оказался бинарным.** Класс увидел, что кадр есть (заголовок `FD FC FB FA`
находится), но код пока не знает точное место дистанции внутри кадра — самая интересная
методическая развилка: предложить сильным ученикам сосчитать по дампу, на каком по счёту байте
после заголовка стоит число, похожее на реальное расстояние до датчика (в сантиметрах или
похожих единицах), пока они физически двигают рукой на известном расстоянии. Это реальная работа
реверс-инжиниринга протокола, а не учебное упражнение "понарошку".

**Практическое задание.** Написать короткий отчёт от лица "инженера, тестирующего новую партию
датчиков": какой протокол подтверждён у датчика в классе, какие данные это дало, что стоит
доработать в коде дальше (если формат бинарный и точное смещение дистанции не найдено).

---

## Приложение: тайминг и оборудование

| Урок | Длительность | Обязательное оборудование | Предмет |
|---|---|---|---|
| 1. Радар против PIR | 40–45 мин | Стенд; желательно — второй стенд с PIR-датчиком для сравнения | Физика |
| 2. Инженерный детектив | 40–45 мин | Стенд, Serial Monitor | Физика, информатика |

Урок 2 предполагает, что учитель заранее (не на самом уроке) один раз проверил, какой протокол
выдаёт датчик в классе — иначе результат непредсказуем и урок может затянуться на анализ.
