# Методическое пособие: серия уроков «Физика звуковой волны на ICS-43434»

Стенд: ESP32 + `Ics43434` (цифровой MEMS-микрофон) + метр громкости в Serial Monitor + четыре
Python-инструмента в [`tools/`](tools/) (осциллограмма/метр, спектр/спектрограмма, камертон —
частота и биения, мел-спектрограмма слуха). Пособие связывает показания реального микрофона с
темами физики (механические волны, резонанс, интерференция) и биологии (восприятие звука) 8–11
класса — камертон здесь не абстракция из учебника, а реальный источник чистого тона, который
можно измерить прибором и сверить с числом, выбитым на его вилке.

Рассчитано на **3 урока по 40–45 минут**: физика волны и цифровой звук → камертон, резонанс и
преобразование Фурье → биения, интерференция и как звук слышит ухо (мел-шкала). Уроки логически
идут по нарастанию сложности, но 1 и 3 можно проводить отдельно под конкретную тему.

**Понадобится оборудование помимо стенда:** минимум один камертон (лучше два разного строя,
например 440 Гц и 442/444 Гц, для Урока 3).

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

1. **Инженер** собирает схему по [WIRING.md](WIRING.md) (главное — не перепутать пин L/R/SEL),
   прошивает `src/main.cpp`, один раз ставит зависимости Python
   (`pip install -r tools/requirements.txt`, см. README.md). Учтите: `librosa` — тяжёлая
   библиотека, первую установку лучше сделать заранее, не на самом уроке.
2. **Учитель** на уроке открывает Serial Monitor (метр громкости) и/или запускает нужный скрипт
   из `tools/` — заходить в код не обязательно.

## Инструменты и когда они нужны

| Скрипт | Урок | Что показывает |
|---|---|---|
| Serial Monitor (метр громкости) | 1 | Работает сразу после прошивки, Python не нужен |
| `tools/01_noise_meter.py` | 1 | Осциллограмма + метр громкости |
| `tools/02_spectrum_fft.py` | 2 | Спектр и спектрограмма |
| `tools/03_tuning_fork.py --mode pitch` | 2 | Точная частота камертона в реальном времени |
| `tools/03_tuning_fork.py --mode beats` | 3 | Запись и анализ биений двух источников |
| `tools/04_mel_hearing.py` | 3 | Линейный спектр vs модель слуха (мел-шкала) |

---

## Урок 1. Звук — это волна, а микрофон — цифровой измеритель давления

**Тема:** механическая волна, звуковое давление, аналого-цифровое преобразование, частота
дискретизации, теорема Найквиста.

**Ход работы.**
1. Включить стенд, открыть Serial Monitor — метр громкости бежит в реальном времени
   ([README.md, "Тестовый стенд"](README.md#тестовый-стенд-serial-monitor-921600-бод)). Постучать
   по микрофону — `peak` подскочит. Помолчать классом 10 секунд — обсудить, почему `rms` не
   ровно 0 (собственный шум электроники + фоновый шум помещения — абсолютной тишины не бывает).
2. Запустить `python3 tools/01_noise_meter.py` — та же информация, но с осциллограммой: видно
   саму форму волны, а не только число.
3. Сказать по очереди несколько слов разной громкости — обсудить форму волны на графике.

**Разбор.** Звук — продольная волна давления воздуха ([THEORY.md, раздел 1](THEORY.md#1-звук-как-механическая-волна)).
Мембрана ICS-43434 физически прогибается под этим давлением, встроенный 24-битный АЦП
оцифровывает прогиб 44100 раз в секунду — частота дискретизации
([THEORY.md, раздел 4](THEORY.md#4-частота-дискретизации-и-теорема-найквиста)). По теореме
Найквиста корректно различимы частоты вплоть до 22050 Гц — с большим запасом выше всего
слышимого диапазона человека. `dBFS` в метре — не абсолютная громкость в децибелах с коробки от
колонок, а относительная шкала "насколько близко к максимуму АЦП"
([THEORY.md, раздел 8](THEORY.md#8-почему-нет-абсолютных-дб-spl)) — важно проговорить эту разницу
с классом сразу, чтобы не закрепилось неверное представление.

**Практическое задание.** Записать `peak`/`dBFS` для трёх источников разной громкости (шёпот,
обычная речь, хлопок на расстоянии 1 м), обсудить, почему числа отличаются не пропорционально
тому, "во сколько раз громче на слух" — повод для разговора о нелинейности восприятия громкости
(и, соответственно, о логарифмической природе шкалы дБ в технике).

---

## Урок 2. Камертон под микроскопом: резонанс и преобразование Фурье

**Тема:** резонанс, собственная частота, спектральный анализ, преобразование Фурье.

**Ход работы.**
1. Запустить `python3 tools/02_spectrum_fft.py`. Кто-то из класса свистит одной ровной нотой —
   осциллограмма превращается в почти идеальную синусоиду, на спектре — один острый узкий пик.
2. Ударить камертон резиновым молотком (не по самому микрофону — см.
   [WIRING.md, "Для уроков с камертоном"](WIRING.md#для-уроков-с-камертоном)) и поднести к
   микрофону на 5–15 см. На спектре должен появиться пик, ещё уже и чище, чем от свиста.
3. Запустить `python3 tools/03_tuning_fork.py --mode pitch` — программа определяет частоту
   алгоритмом pYIN и подсказывает ближайшую ноту. Сверить показанное число с частотой, выбитой
   на самом камертоне (обычно 440 Гц).

**Разбор.** Камертон после удара звучит практически одной чистой синусоидой — это не случайность:
масса и упругость его вилки специально подобраны так, чтобы у него была одна ярко выраженная
**собственная частота** (резонанс), на которой он колеблется намного охотнее, чем на любой
другой — все остальные моды колебаний быстро гаснут ([THEORY.md, раздел 5](THEORY.md#5-преобразование-фурье-из-чего-состоит-сложный-звук)).
Именно поэтому камертон — образцовый физический "генератор чистого тона" для проверки методов
анализа звука. Алгоритм pYIN ищет период повторения сигнала, а не просто самый громкий бин БПФ —
это делает его устойчивее к шуму, чем наивный поиск пика спектра
([THEORY.md, раздел 5](THEORY.md#5-преобразование-фурье-из-чего-состоит-сложный-звук) и docstring
[`tools/03_tuning_fork.py`](tools/03_tuning_fork.py)).

**Практическое задание.** Сравнить спектр камертона, свиста и хлопка (все три — на одном
запущенном `02_spectrum_fft.py`, по очереди): у камертона и свиста — один узкий пик, у хлопка —
широкий "размазанный" спектр. Обсудить связь: чем короче сигнал во времени (хлопок), тем шире
его спектр по частоте — и наоборот, камертон долго звенит одной и той же нотой именно потому,
что его спектр предельно узок.

---

## Урок 3. Биения двух камертонов и то, как звук слышит ухо

**Тема:** суперпозиция волн, интерференция, биения, комбинационные тона, психоакустика (мел-шкала).

**Ход работы.**
1. Если есть два камертона разного строя (например, 440 Гц и 442/444 Гц) — ударить оба почти
   одновременно и дать им звучать вместе рядом с микрофоном. Запустить
   `python3 tools/03_tuning_fork.py --mode beats`, нажать Enter и дать камертонам прозвучать все
   3 секунды записи. Если второго камертона нет — можно заменить его нотой с телефона/колонки
   близкой, но не совпадающей частоты (например, генератор тона в интернете на 442 Гц).
2. Рассмотреть график: верхний — записанный сигнал с наложенной огибающей (линия, соединяющая
   пики амплитуды). Посчитать вместе с классом, сколько раз огибающая "проваливается" к нулю за
   3 секунды записи — это и есть число биений в секунду.
3. Программа также печатает в консоли два найденных пика спектра $f_1, f_2$ и ожидаемую частоту
   биений $|f_1-f_2|$ — сравнить с посчитанным вручную числом провалов.

**Разбор.** Когда два источника звучат одновременно, их волны в воздухе складываются
(суперпозиция), и результат — колебание на средней частоте, амплитуда которого периодически
растёт и падает с частотой $f_{\text{биений}} = |f_1-f_2|$
([THEORY.md, раздел 6](THEORY.md#6-биения-что-происходит-когда-звучат-два-источника-почти-в-унисон)).
Это тот самый принцип, которым настройщики музыкальных инструментов пользуются столетиями:
крутят колок, пока биения между струной и эталоном не пропадут совсем — значит, инструмент
настроен. Если разница частот становится большой (десятки Гц), биения превращаются в отдельный
низкий тон — эффект Тартини (1714 г.), уже не физика волны в воздухе, а особенность обработки
сигнала во внутреннем ухе.

**Переход ко второй части урока.** Запустить `python3 tools/04_mel_hearing.py`, записать 4
секунды голоса (лучше произнести несколько разных гласных и присвистнуть). Сравнить два
спектрограммных графика: линейный (как считает БПФ) и мел-шкала (как приближённо воспринимает
ухо). Обсудить: почему на мел-шкале низкочастотная часть голоса растянута сильнее, чем
высокочастотная — это отражает то, что ухо различает мельчайшие детали именно в низких и средних
частотах речи ([THEORY.md, раздел 7](THEORY.md#7-мел-шкала-почему-ухо--не-бпф)).

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

---

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

| Урок | Длительность | Обязательное оборудование | Предмет |
|---|---|---|---|
| 1. Звук — это волна | 40–45 мин | Стенд, Serial Monitor или `01_noise_meter.py` | Физика |
| 2. Камертон и Фурье | 40–45 мин | Стенд + `02_spectrum_fft.py` + `03_tuning_fork.py --mode pitch` + камертон | Физика |
| 3. Биения и слух | 40–45 мин | Стенд + `03_tuning_fork.py --mode beats` + `04_mel_hearing.py` + 2 камертона (или камертон + телефон с тоном) | Физика, биология |

Уроки 1 и 3 требуют тихого помещения хотя бы на пару минут (шум тишины, чистая запись биений) —
по возможности проводите в кабинете, где можно ненадолго попросить класс замолчать.
