Skip to content

Радиозанавес (RF Curtain) — охрана периметра на просвет

Датчик пересечения периметра «на просвет»: передатчик E77-900MBL и приёмник стоят напротив друг друга, а человек, пересекающий линию, перекрывает первую зону Френеля — RSSI проседает на 3–10 дБ и начинает «кипеть» (растёт разброс из-за изменившейся многолучёвки). Устройство намеренно «глупое»: RX просто льёт замеры CSV-строками в консоль, а весь детектор и вся визуализация — в Python (rf_curtain.py): ученики крутят пороги и видят решение на графике. Провода между TX и RX нет — «чувствительный элемент» это сам объём пространства. Исходный код, теория и методика — в firmware/Projects/LORAWAN/RFCurtain.

Это модуль 3 сквозного курса «Радио своими руками» (маячок → охота на лис → PowerSentry → радиозанавес). Центральный методический стержень — лестница задача → классы → физика → атомарные данные → признаки → детектор → качество (ROC), универсальная для любой детекторной и ML-задачи. Кульминация — турнир «настрой детектор»: две команды подбирают пороги и честно считают попадания, пропуски и ложные тревоги по отметкам правды (кнопка судьи).

Два Python-стенда: симулятор rf_curtain_sim.py синтезирует поток RSSI из физики зоны Френеля и прогоняет тот же детектор — турнир порогов можно провести за партой без железа; боевой rf_curtain.py работает с живым линком или записанным логом (--replay).

«РАДИО СВОИМИ РУКАМИ» — сквозная программа курса

для ведущего, который знает не больше учеников (и это нормально)

Четыре модуля на одном железе (E77-900MBL / STM32WLE5), один учебный год в темпе «занятие в неделю» или полугодие в темпе «два». Возраст 10–16, команды по 2–4. Все материалы модулей уже написаны (врайтапы, методички, воркшиты, код) — этот документ связывает их в одну дорогу и объясняет, как по ней вести, не будучи экспертом.


0. Честный разговор про «учитель знает не больше учеников»

Курс спроектирован так, что вести его может человек, который сам проходит материал на один этап впереди детей — и это не компромисс, а метод. Три опоры, которые это позволяют:

Опора 1 — чекпоинты вместо экспертизы. Каждый этап каждого модуля имеет проверку с маркерными строками в логе и бип-кодами. Ведущему не нужно понимать, ПОЧЕМУ работает радио, чтобы установить, ЧТО оно работает: «три бипа и строка [РАДИО] OK» — этап принят. Экспертиза заменена процедурой приёмки — ровно так работает промышленность, и дети видят настоящую инженерную культуру, а не имитацию всезнания.

Опора 2 — диагностика по уровням вместо интуиции. Во всех модулях один и тот же скелет: 1) данные физически идут? 2) целые? 3) осмысленные? Когда что-то ломается, ведущий не «чинит по наитию», а спускается по лестнице — и первый уровень почти всегда находится без всякой теории (питание, пауза, не та прошивка).

Опора 3 — «не знаю» как инструмент. Самая сильная фраза курса: «Я не знаю. Как мы можем это ИЗМЕРИТЬ?» Ведущий, который отвечает так, учит детей единственному, что отличает инженера от пользователя. Ведущий, который делает вид, что знает, — учит противоположному. Твой незакрытый гештальт — не слабость программы, а её топливо: дети прекрасно чувствуют разницу между «сейчас я вам расскажу» и «сейчас мы узнаем», и второе работает сильнее.

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

1. Карта курса

МодульЗанятийГлавный вопрос модуляКульминация
0Маячок (фундамент)3–4«Как заставить железку сказать хоть слово в эфир?»пакет маячка виден на пульте
1Охота на лис4–5«Что сигнал знает о расстоянии?»полевая игра-охота
2PowerSentry5–6«Сколько стоит одно слово в эфире — в микроамперах?»диспетчерский пульт + охота на микроамперы
3Радиозанавес4–5«Как из шумного сигнала извлечь решение?»турнир «настрой детектор»
Выпускной проект3–4«А теперь сами»защита перед родителями

Порядок менять нельзя: каждый модуль стоит на понятиях предыдущего (см. матрицу ниже). Внутри модуля резать можно — бонус-этапы честно помечены во врайтапах.

2. Сквозная прогрессия понятий (главная таблица)

Каждое понятие проходит три состояния: РОЖДАЕТСЯ (первая встреча, на пальцах) → ЗАКРЕПЛЯЕТСЯ (используется руками) → СТАНОВИТСЯ ИНСТРУМЕНТОМ (применяется не задумываясь, для следующего понятия).

ПонятиеРождаетсяЗакрепляетсяИнструмент
дБм, логарифмическая шкалаЛисы: таблица «метры→RSSI»Лисы: график, «−6 дБ на удвоение»Занавес: «просадка 3 дБ» читается без перевода
Шум и статистика (медиана, тренд, окно)Лисы: «цифра прыгает — это не поломка»Лисы: медиана по 5, «смотри тренд»Занавес: два окна (быстрое/база) + std
Пакет: байты, seq, magic, CRCМаячок: payload с CRCЛисы: свой пакет, дыры в seqSentry и Занавес: пакет проектируется под задачу за 10 минут
Эфир как общий ресурс (duty cycle, частотный план)Маячок: «канал 868.1»Лисы: «уйти в 869.4–869.65, мощность минимальная»Занавес: расчёт SF5/BW500 под 15 Гц — дети САМИ считают duty
Диагностика 3 уровней (идут? целые? осмысленные?)Маячок: тишина vs мусорЛисы: судья с консольюSentry/Занавес: применяется без напоминания
Прерывания и событияЛисы: кнопка по IRQSentry: EXTI будит камень — событие как источник энергосбереженияЗанавес: RX по IRQ на 15 Гц
Энергия как бюджет(Лисы: «лиса живёт от пауэрбанка» — заметить вскользь)Sentry: Stop2, охота на микроамперы, арифметика лет от батарейкиВыпускной: расчёт питания — обязательный раздел защиты
Конвейер данных (устройство→канал→база→график)Маячок: пакет на пультеSentry: MQTT→Node-RED→БД→Grafana по частямЗанавес: конвейер пересобран в один питон-скрипт — видно, что звенья те же
Данные → признаки → решение (классификация)Лисы: «горячо-холодно» = решение по трендуSentry: send-on-change и пороги тревогЗанавес: полная лестница до ROC-турнира
Честность измерения (ground truth, ложные/пропуски)Лисы: «в помещении и на улице кривые РАЗНЫЕ»Sentry: heartbeat («молчит» ≠ «умер»)Занавес: отметки правды, счёт компромисса порогов

Как этим пользоваться: перед занятием ведущий смотрит колонку модуля и знает, какие слова МОЖНО говорить без объяснений (всё, что левее уже закреплено), а какие сегодня рождаются — им нужно время и руки.

3. Модули: цель, нить, гештальт

Модуль 0 — Маячок. Уже пройден (им и отлажена методика) — для новых детей повторяется в сжатом виде: плата, консоль, buzzer-чекпоинты, первый пакет, пульт. Цель — снять страх: «эфир — это не магия, это байты». Гештальт трудовика: та самая мигалка на микроконтроллере, которую когда-то не дали доделать, — только она разговаривает.

Модуль 1 — Охота на лис. Физика распространения через тело: игра. Дети уносят: логарифм, который видно ногами; статистику, которую слышно ушами (гейгер); дисциплину «тренд, а не цифра». Гештальт: настоящая ARDF-охота из детских журналов, но без паяния ВЧ-схем.

Модуль 2 — PowerSentry. Разворот от «сигнала» к «системе»: сон, события, стоимость данных, конвейер до Grafana. Ядро — охота на микроамперы: мультиметр становится главным героем, а находки детей («светодиод ест больше всего проекта!») — честными открытиями, которых нет в учебнике. Гештальт: датчик протечки, который «руки чесались сделать нормально, на годы от батарейки».

Модуль 3 — Радиозанавес. Синтез: физика (Френель) + статистика (два окна) + системность (три класса событий) = детектор, настраиваемый турниром. Дети уносят лестницу «задача→классы→атомы→признаки→решение→ качество» — это, без громких слов, введение в анализ данных и ML, сделанное ногами по школьному двору. Гештальт: «охранная сигнализация своими руками», но честная — с измеренными ложными тревогами.

Выпускной проект. Команда выбирает задачу из пула бонусов (вторая лиса с таймером, узел освещённости, ворота для эстафеты, направленная антенна, суточная запись дрейфа базы…) или свою. Обязательные разделы защиты — те же нити курса: формат пакета, бюджет эфира, бюджет энергии, план диагностики, чем меряли успех. Защита перед родителями: работающая железка на столе бьёт любую презентацию.

4. Правила выживания ведущего-неэксперта

  1. Один этап впереди, не больше. Прогон накануне вечером по чеклисту методички. Не прошёл дома — с детьми не идём, честно берём этап ещё на неделю (у врайтапов есть чем занять: опыты предыдущего этапа углубляются, а не «простаиваются»).
  2. Лог — это правда, мнение — нет. Любой спор («у нас не работает», «а я думаю, надо так») переводится в «что говорит консоль?» и лестницу трёх уровней.
  3. В поле не чинить. Сломалось на занятии — фиксируем лог, откатываемся на последний принятый этап (он всегда есть!), занятие продолжается. Починка — домашняя работа ведущего с чатом-наставником.
  4. «Не знаю — давай измерим» вслух, минимум раз за занятие. Работает лучше любой лекции.
  5. Маркерные строки священны. «Прошил старую сборку» — самый частый слом курса; номер сборки в первой строке лога сверяется ВСЕГДА.
  6. Дети пишут врайтапы тоже. Короткие, по шаблону: что делали, что ожидали, что увидели в логе, что не сошлось. Это и есть оценивание (см. ниже) и это же — страховка ведущего: детский врайтап часто содержит разгадку, которую ведущий проглядел.
  7. Чат — инженер-наставник курса. Формат отработан на всех модулях: лог этапа → разбор → точечная правка → снова лог. Ведущий не обязан отвечать на вопрос, на который не отвечает документация модуля, — он обязан уметь его грамотно задать (с логом и номером сборки).

5. Оценивание без оценок

Артефакты вместо контрольных: заполненный воркшит (Лисы), таблица «едок→мкА→как поймали» (Sentry), турнирная таблица порогов (Занавес), детские врайтапы, выпускная защита. Критерий один и тот же на всём курсе: не «правильный ответ», а воспроизводимость — может ли другая команда по твоему артефакту повторить результат. Это жёстче любой оценки и объективнее любого ведущего.

6. Железо-пул на курс (на 3 команды)

ПозицияКол-воЗачем
E77-900MBL6–82 занавеса/3 гончие + лиса + узлы Sentry + запас
Пауэрбанки4+лисы, полевые гончие
AHT20, OLED SSD1306по 2–3Sentry, прибор охотника
Мультиметр с диапазоном мкА2охота на микроамперы (герой модуля 2)
Батарейные боксы 2×AA, электролиты 100–470 мкФ, резисторы 4.7 МОмнаборSentry
Ноутбук с Arduino IDE + Python1–2судейская консоль, занавес
Инфраструктура (шлюз, ChirpStack, Node-RED, TimescaleDB, Grafana)естьмодули 0 и 2

Платы кочуют между модулями перепрошивкой — в этом отдельный урок: одно железо, четыре судьбы, различие только в коде.

7. Типовые сломы курса и что делать

«Прошили старую сборку» → маркер в первой строке лога (правило 5). «У одной команды всё, у другой ничего» → лестница уровней, начиная с питания и роли в #define. «Дети убежали вперёд программы» → бонус-этапы врайтапов существуют ровно для этого, плюс роль наставника младшей команды. «Ведущий утонул в вопросе про теорию» → «отличный вопрос, записываем в журнал вопросов, к следующему занятию найдём способ ИЗМЕРИТЬ» — журнал вопросов вообще стоит завести с первого дня, из него рождаются выпускные проекты. «Занятие сорвалось погодой» → у Лис и Занавеса есть коридорные варианты всех полевых опытов (кривые получатся другие — и это отдельный разговор про многолучёвку, а не потеря).

8. Чего в курсе сознательно НЕТ

Пайки ВЧ-цепей (всё на готовых модулях и гребёнках — курс про системы и данные, не про монтаж), LoRaWAN-теории глубже необходимого (OTAA, классы B/C — за бортом), интернет-сервисов и облаков (всё локально), и обещаний «готового продукта»: датчик протечки из модуля 2 — учебный стенд, а не замена сертифицированной сигнализации, и детям это говорится прямо. Честность про границы сделанного — тоже часть программы.