Урок 3. EXTI против RTC: разбудить по делу или по расписанию
Урок 3. EXTI против RTC: разбудить по делу или по расписанию
Паспорт урока
| Параметр | Значение |
|---|---|
| Место в модуле | PowerSentry, модуль 2 «Событийная модель», урок 3 из 8 |
| Длительность | 45 мин |
| Возраст | 13–16 |
| Оборудование | Узел протечки (электроды), климат-узел, стакан воды |
| Предварительные знания | Уроки 1–2: бюджет, измеренный ток сна |
| Предмет | Информатика (события и прерывания), физика |
Образовательные цели
| № | Цель | Блум | Миллер | Чем доказывается |
|---|---|---|---|---|
| 3.1 | Различать событийную и периодическую архитектуры пробуждения | понимать | знает как | Расчёт разницы сроков жизни |
| 3.2 | Выбирать парадигму под характер физической величины | оценивать | показывает как | Обоснование для нового датчика |
| 3.3 | Объяснять send-on-change и роль heartbeat | понимать | знает как | Ответ: «молчит» ≠ «умер» |
| 3.4 | Обосновывать связь редкости передачи с автономностью | анализировать | знает как | Разбор двух парадигм по бюджету |
Сценарий занятия (45 минут)
| Время | Блок | Что делает педагог | Что делают ученики |
|---|---|---|---|
| 0–5 | Retrieval | Мини-квиз по урокам 1–2 | Пишут, разбор |
| 5–13 | Задача | «Как узел узнает о протечке?» | Предлагают варианты |
| 13–25 | Теория | Две парадигмы: EXTI и RTC | Разбирают, считают |
| 25–33 | Демонстрация | Мокрый палец будит узел мгновенно | Наблюдают, проверяют |
| 33–42 | Send-on-change | Молчание как информация | Разбирают heartbeat |
| 42–45 | Итог и ДЗ | Фиксация | Записывают |
Блок 1. Постановка задачи (5–13 мин)
Вопрос
«Датчик протечки лежит в подвале. Вода может появиться сегодня ночью, а может — через три года. Как узел узнает, что она появилась?»
Сбор вариантов
| Идея ученика | Комментарий педагога |
|---|---|
| «Пусть постоянно проверяет» | Тогда он не спит и живёт дни. Считали на уроке 1 |
| «Пусть просыпается раз в минуту и смотрит» | Уже лучше. Но посчитаем, сколько проживёт |
| «Пусть вода сама его разбудит» | Ключевая идея! А как это возможно? |
Постановка проблемы
«Мы уперлись в противоречие: чтобы заметить событие, надо следить. Чтобы жить долго, надо спать. Как совместить?»
Блок 2. Теория: две парадигмы (13–25 мин)
2.1. Базовый уровень (13–14 лет)
Через будильник и дверной звонок.
Есть два способа не пропустить гостя.
Способ 1 — будильник. Каждые пять минут просыпаться и выглядывать в окно: не пришёл ли кто. Работает, но спать почти не получится.
Способ 2 — дверной звонок. Спать спокойно, а гость сам нажмёт кнопку и разбудит. Спишь сколько угодно и всё равно не пропустишь.
Перенос:
Датчик протечки — это дверной звонок. Вода замыкает электроды, и сам этот факт будит процессор. Никакой проверки не нужно: событие само сообщает о себе.
2.2. Углублённый уровень (14–16 лет)
Шаг 1. Аппаратное прерывание (EXTI).
EXTI (External Interrupt) — аппаратный механизм: при изменении уровня на выводе микроконтроллера схема формирует прерывание, которое выводит процессор из сна даже из глубокого режима Stop2.
Важно: за отслеживание отвечает аппаратура, а не программа. Процессор при этом полностью спит и потребляет микроамперы.
Схема датчика протечки:
3,3 В ──[ 4,7 МОм ]──┬── вывод PA1 (вход с прерыванием)
│
электрод 1
⌇ вода замыкает
электрод 2 ── GNDСухо — вход подтянут к 3,3 В (высокий уровень). Появилась вода — сопротивление между электродами падает до килоом, вход притягивается к нулю, формируется фронт → прерывание → пробуждение.
Шаг 2. Периодическое пробуждение (RTC).
RTC (Real-Time Clock) — часы реального времени, работающие во время сна и будящие процессор по таймеру.
Применяется там, где нет «события» как такового: температуру никто не «включает», её надо периодически измерять.
Шаг 3. Сравнение по бюджету.
| Параметр | EXTI (событийный) | RTC (периодический) |
|---|---|---|
| Что будит | сам датчик | таймер |
| Средний ток | равен току сна | ток сна + активность |
| Пробуждений за год без событий | ноль | тысячи |
| Задержка реакции | мгновенно | до периода опроса |
| Для чего подходит | редкие события: вода, движение, дверь | непрерывные величины: температура, влажность |
Шаг 4. Расчёт разницы.
Сравним датчик протечки в двух реализациях (сухой подвал, событий нет):
| Реализация | Пробуждений/сут | Расход, мкА·ч/сут | Срок жизни |
|---|---|---|---|
| EXTI (2 уплинка heartbeat) | 2 | 58 | десятилетия* |
| RTC раз в минуту | 1440 | ≈ 7 328 | менее года |
*с учётом оговорки о саморазряде из урока 1
Разница более чем в 100 раз — и это при том, что за всё время не произошло ни одного события. Периодическая проверка платит за готовность, событийная — нет.
Блок 3. Демонстрация (25–33 мин)
Опыт «мокрый палец»
- Узел протечки работает, в мониторе видна строка
[СОН] Stop2 на N c..., дальше тишина. - Педагог: «Узел спит. Он ничего не проверяет, ничего не измеряет. Он просто спит.»
- Прикоснуться мокрым пальцем к электродам.
- Мгновенно появляется:
[ПРОБУЖДЕНИЕ #k] причина: EXTI ВОДА.
Что проговорить
«Обратите внимание: между сном и реакцией не было никакой проверки. Процессор не опрашивал датчик — датчик сам его разбудил. Это стоило нам ноль микроампер ожидания.»
Контрольный вопрос классу
«Сколько энергии узел потратил на ожидание этого события за последний час?»
Ответ: столько же, сколько на сон, — ожидание бесплатно.
Блок 4. Send-on-change и heartbeat (33–42 мин)
Проблема периодических узлов
«Климат-узел не может использовать EXTI: температура не “происходит”, её надо мерить. Он просыпается по таймеру. Но обязан ли он отправлять результат каждый раз?»
Принцип send-on-change
Узел измеряет регулярно, а передаёт только изменения:
проснулся по таймеру
→ включил питание датчика (power gating)
→ измерил
→ выключил питание датчика
→ изменение больше порога? (|ΔT| ≥ 0,3 °C или |ΔRH| ≥ 2%)
да → передать
нет → МОЛЧАТЬ
→ пришло время heartbeat? → передать в любом случае
→ превышен аварийный порог? → передать тревогу
→ спатьЭффект: в стабильных условиях узел молчит часами. Замеры дёшевы (миллиамперы доли секунды), передача дорога — экономится именно она.
Проблема молчания
«Узел молчит сутки. Что это значит: всё стабильно — или он умер?»
Класс должен осознать неоднозначность. Без её разрешения система бесполезна: диспетчер не может отличить норму от отказа.
Решение: heartbeat
Heartbeat («сердцебиение») — обязательная передача через фиксированный интервал, даже если ничего не изменилось.
| Что наблюдает диспетчер | Диагноз |
|---|---|
| Пакеты приходят, значения не меняются | всё стабильно, узел жив |
| Пакетов нет дольше 2× периода heartbeat | узел молчит — проблема |
Формулировка, которую надо закрепить: «молчит по расписанию» означает «всё стабильно», а не «умер». Различить их позволяет только heartbeat, и именно его возраст мониторит диспетчерский пульт.
Это прямое продолжение принципа из BeaconRadio: отсутствие данных — тоже данные, но только если предусмотрен способ его интерпретировать.
Двойная выгода редких передач
«Каждый несостоявшийся уплинк — это и заряд, оставшийся в батарее, и место, освобождённое в эфире для других узлов.»
Вторая половина этой фразы станет темой урока 5.
Блок 5. Практические задачи
Уровень A (13–14 лет)
A1. Чем событийное пробуждение (EXTI) отличается от периодического (RTC)?
Ответ
При EXTI узел будит сам датчик в момент события — процессор всё остальное время спит и ничего не проверяет. При RTC узел просыпается по таймеру независимо от того, произошло что-нибудь или нет.
A2. Почему для датчика протечки выбрали EXTI, а не проверку раз в минуту?
Ответ
Потому что протечки может не быть месяцами. Проверка раз в минуту означает 1440 пробуждений в сутки впустую и сокращает срок жизни с десятилетий до года. EXTI даёт то же самое обнаружение, но бесплатно по энергии.
A3. Узел молчит сутки. Как понять, что он жив?
Ответ
По heartbeat — обязательному сообщению, которое узел шлёт через определённый интервал даже при отсутствии изменений. Если heartbeat приходит, узел жив; если пропал дольше двух периодов — есть проблема.
Уровень B (14–15 лет)
B1. Посчитайте разницу сроков жизни между EXTI (2 уплинка/сут) и опросом раз в минуту.
Решение
EXTI: 48 (сон) + 10 (2 уплинка) = 58 мкА·ч/сут → T ≈ 118 лет по арифметике.
Опрос раз в минуту: 48 + 7200 (эфир) + 80 (замеры) = 7328 мкА·ч/сут → T ≈ 0,9 года.
Разница более чем в сто раз при одинаковом железе. Решает архитектура.
B2. Почему внешний резистор 4,7 МОм лучше внутренней подтяжки 40 кОм?
Решение
Пока электроды замкнуты водой, через подтяжку течёт ток:
- внутренняя 40 кОм: 3,3 / 40 000 ≈ 82 мкА;
- внешняя 4,7 МОм: 3,3 / 4 700 000 ≈ 0,7 мкА.
Разница более чем в сто раз. При затоплении подвала (а это может длиться сутками) внутренняя подтяжка одна съедала бы больше, чем весь остальной узел.
B3. Для каких из перечисленных величин подойдёт EXTI, а для каких — RTC: температура, открытие двери, движение, влажность, уровень воды в резервуаре?
Ответ
| Величина | Парадигма | Почему |
|---|---|---|
| Температура | RTC | непрерывная величина, «события» нет |
| Открытие двери | EXTI | дискретное редкое событие |
| Движение | EXTI | дискретное событие (но см. ловушку RCWL из урока 2) |
| Влажность | RTC | непрерывная величина |
| Уровень воды | зависит | если важен факт превышения порога — EXTI с компаратором; если нужна динамика — RTC |
Правило: EXTI — для дискретных редких событий, RTC — для непрерывных величин, которые надо наблюдать.
Уровень C (15–16 лет)
C1. Освещённость можно измерять обеими парадигмами. Опишите обе реализации и сравните.
Разбор
Вариант RTC: цифровой датчик (например, BH1750) по шине I2C, опрос раз в N минут с power gating. Даёт значение освещённости, годится для графиков и анализа.
Вариант EXTI: фоторезистор в делителе + компаратор с порогом; выход компаратора на вывод с прерыванием. Даёт событие «стало темно / стало светло», значения не даёт.
| Критерий | RTC + BH1750 | EXTI + компаратор |
|---|---|---|
| Что получаем | численное значение | факт пересечения порога |
| Энергия | пробуждения по расписанию | ноль до события |
| Гибкость порога | программная | аппаратная, менять сложнее |
| Применение | мониторинг, аналитика | «включился свет», охрана |
Вывод: выбор определяется не удобством, а тем, что именно нужно потребителю данных — значение или событие. Это красивое сравнение двух парадигм на одной физической величине.
C2. Предложите архитектуру узла, который должен и реагировать мгновенно на протечку, и раз в час сообщать температуру. Как совместить парадигмы?
Разбор
Гибридная архитектура — оба источника пробуждения одновременно:
deepSleep(Stop2)
источники пробуждения:
- EXTI на выводе электродов (протечка)
- RTC-таймер (1 час, для замера температуры)
при пробуждении определить причину:
EXTI → обработать протечку (подтверждение, тревога)
RTC → замерить температуру, send-on-change, heartbeatЭто ровно то, что реализовано в прошивке PowerSentry: у узла несколько источников пробуждения, и в коде первым делом определяется причина.
Важная деталь: бюджет складывается из обеих статей, но EXTI ничего не добавляет к току сна — платим только за RTC-пробуждения. То есть гибрид почти бесплатно получает мгновенную реакцию.
C3. Как выбрать период heartbeat? Сформулируйте компромисс и предложите значение для датчика протечки.
Разбор
Компромисс:
| Короткий период (например, 1 час) | Длинный период (например, сутки) |
|---|---|
| Отказ обнаруживается быстро | Отказ может остаться незамеченным до суток |
| Больше расход энергии | Экономия энергии |
| Больше нагрузка на эфир | Освобождение канала |
Расчёт для датчика протечки. Событие «узел умер» не требует мгновенной реакции: авария развивается медленнее, чем протечка. Приемлемо узнать об отказе в течение суток.
При периоде heartbeat 12 часов: 2 уплинка в сутки → срок жизни в порядке десятилетий (то, что считали на уроке 1). Диспетчер поднимает тревогу при отсутствии пакетов дольше 2× периода = 24 часа.
Рекомендация: период heartbeat выбирается из допустимого времени необнаружения отказа, делённого на два. Для критичных систем — часы, для инфраструктурного мониторинга — сутки.
Ответы на вопросы, которые прозвучат
| Вопрос ученика | Как отвечать |
|---|---|
| «Как датчик может будить процессор, если процессор спит?» | Прерывание обрабатывает аппаратура, а не программа. Специальная схема следит за выводом даже в глубоком сне и включает процессор при изменении уровня |
| «А если вода испарится, пока узел спит?» | Тогда события не будет. Но протечка в подвале — это не капля, она сохраняется. Для быстро исчезающих явлений EXTI не подойдёт |
| «Почему не слать данные всегда — вдруг пригодятся?» | Каждая передача стоит энергии и места в эфире. Данные, которые никто не читает, — чистая трата. Send-on-change передаёт информацию, а не шум |
| «Что если heartbeat потеряется в эфире?» | Поэтому тревогу поднимают при отсутствии двух heartbeat подряд, а не одного. Одиночная потеря — нормальное явление |
| «Можно ли будить по нескольким событиям сразу?» | Да, именно так и сделано: наш узел просыпается и по протечке, и по кнопке, и по таймеру. При пробуждении программа определяет причину |
Раздаточный лист (для печати)
Урок 3. Две парадигмы пробуждения
Сравните:
Параметр EXTI (событийный) RTC (периодический) Что будит Средний ток Пробуждений за год без событий Задержка реакции Для чего подходит Расчёт разницы (сухой подвал, событий нет):
Реализация Пробуждений/сут мкА·ч/сут Срок жизни EXTI (2 heartbeat) RTC раз в минуту Во сколько раз отличается? ________
Схема датчика протечки — подпишите:
3,3 В ──[ _______ ]──┬── вывод ____ (вход с прерыванием) │ электрод 1 ⌇ вода электрод 2 ── ____Почему резистор именно 4,7 МОм, а не внутренняя подтяжка 40 кОм?
Ток через 40 кОм: _____ мкА · Ток через 4,7 МОм: _____ мкА
Send-on-change и heartbeat:
«Молчит по расписанию» означает ___________________________
Как отличить «молчит» от «умер»? ___________________________
Выберите парадигму для каждой величины:
Величина EXTI или RTC Почему Температура Открытие двери Влажность Движение
Домашнее задание
Обязательная часть
Врайтап по рубрике А. Обязательный пункт: опишите опыт с мокрым пальцем и объясните, почему ожидание события не стоило энергии.
Уровень A
Найти дома три устройства, которые «просыпаются» от события (датчик движения, автоматический кран, ночник). Описать, что именно их будит.
Уровень B
Рассчитать срок жизни узла протечки при периоде heartbeat 1 час, 12 часов и 24 часа. Сравнить и выбрать оптимум с обоснованием.
Ответ для педагога
- 1 час (24 уплинка/сут): 48 + 120 = 168 мкА·ч/сут → ≈ 41 год;
- 12 часов (2 уплинка/сут): 58 мкА·ч/сут → ≈ 118 лет;
- 24 часа (1 уплинк/сут): 53 мкА·ч/сут → ≈ 129 лет.
Наблюдение: переход с 1 часа на 12 даёт трёхкратный выигрыш, а с 12 на 24 — уже незначительный. Оптимум около 12 часов: дальнейшее разрежение почти не экономит, но ухудшает обнаружение отказов. Классический закон убывающей отдачи.
Уровень C
Спроектировать узел контроля открытия двери в подъезде: выбрать парадигму, оценить бюджет, предложить период heartbeat, назвать ожидаемые проблемы (например, дверь открывают сотни раз в сутки).
Ориентир для педагога
Ключевая ловушка задачи: EXTI кажется очевидным выбором, но при сотнях событий в сутки узел будет просыпаться и передавать сотни раз — бюджет рухнет, как у «болтливого» узла.
Правильное решение: EXTI для пробуждения, но агрегация — не передавать каждое открытие, а накапливать счётчик и передавать сводку раз в час. То есть событийное пробуждение с периодической передачей.
Вывод ученика: парадигма пробуждения и парадигма передачи — разные решения, их выбирают независимо.
Итог урока: что записать в журнал
Вывод урока 3
- EXTI — аппаратное прерывание: сам датчик будит спящий процессор. Ожидание события ничего не стоит.
- RTC — пробуждение по таймеру: для непрерывных величин, где «события» нет.
- EXTI подходит для редких дискретных событий, RTC — для наблюдаемых непрерывных величин.
- Разница в сроке жизни между EXTI и опросом раз в минуту — более чем в 100 раз при одинаковом железе.
- Внешний резистор 4,7 МОм вместо внутренней подтяжки 40 кОм экономит около 80 мкА при затоплении.
- Send-on-change: передавать только изменения; замеры дёшевы, передача дорога.
- Heartbeat различает «молчит, потому что стабильно» и «молчит, потому что умер».
Связь с курсом
| Что родилось на этом уроке | Где станет инструментом |
|---|---|
| Событийная архитектура | Урок 5 (редкость передач = ёмкость сети) |
| Heartbeat, «молчит ≠ умер» | Урок 8 (защита), диспетчерский пульт |
| Прерывания | RFCurtain (приём по прерыванию) |
| Power gating датчика | Урок 2 (охота на микроамперы) |
Чек-лист педагога перед уроком
- Узел протечки собран: электроды, резистор 4,7 МОм, прошивка с EXTI
- Проверено накануне: мокрый палец действительно будит узел мгновенно
- Стакан воды и салфетки для опыта
- Климат-узел работает для демонстрации send-on-change
- Раздаточный лист распечатан