# Методическое пособие: серия уроков «Спектральная STEM-лаборатория на AS7341»

Стенд: ESP32 + `As7341Lab` (11-канальный спектрометр) + визуализация в `monitor.py` (Matplotlib, живой график, кнопки на экране). Пособие связывает показания реального датчика с программой физики, химии и биологии 8–11 класса, а не абстрактные примеры из учебника.

Курс рассчитан на **5 обязательных уроков по 40–45 минут** (по одному на режим датчика) + один **факультативный инженерный урок** для кружка/профильного класса + **итоговый межпредметный проект**. Уроки независимы — можно взять один под конкретную тему, а можно пройти всей серией за модуль.

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

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

---

## Пять режимов — пять уроков

| Режим | Serial-команда | Кнопка в monitor.py | Предмет | Урок | Код (расчёт) |
|---|---|---|---|---|---|
| Спектр | `S` | `Spektr` | Физика | Урок 1 | [`printSpectrum`, As7341Lab.cpp:107](src/As7341Lab.cpp#L107) |
| ИК-детектор | `I` | `IK` | Физика | Урок 2 | [`printIR`, As7341Lab.cpp:179](src/As7341Lab.cpp#L179) |
| Поглощение | `A` (+ `B` для reference) | `Poglosch.` / `Ref/B` | Химия | Урок 3 | [`absorbance`, As7341Lab.cpp:99](src/As7341Lab.cpp#L99) |
| PAR | `P` | `PAR` | Биология | Урок 4 | [`calcPAR`, As7341Lab.cpp:91](src/As7341Lab.cpp#L91) |
| CCT | `C` | `CCT` | Технологии/физиология | Урок 5 | [`calcCCT`, As7341Lab.cpp:73](src/As7341Lab.cpp#L73) |

Дополнительно на каждом уроке доступны:
- **Gain `+`/`-`** — кнопки в monitor.py (или клавиши в Serial Monitor) меняют чувствительность датчика в реальном времени, без перепрошивки. 11 ступеней 0.5x–512x, реализация: [`As7341Lab::gainUp/gainDown`, As7341Lab.cpp:52](src/As7341Lab.cpp#L52).
- **Индикатор связи** — если провод I2C отойдёт, статусная строка окна мигнёт красным (`As7341Lab::isAlive()`, [As7341Lab.h:80](include/As7341Lab.h#L80)). Полезно показать классу специально: выдерни провод SDA на 3 секунды и обратно — ученики увидят разницу между «датчик показывает 0» и «датчик не отвечает вовсе».

## Что уже открыто ученику мышкой, а что — только через код

Прежде чем планировать урок, важно понимать границу интерактивности этого стенда — она сделана осознанно, не по недосмотру:

| Параметр | Как менять на уроке | Почему так |
|---|---|---|
| Режим (S/A/P/C/I) | Кнопка в окне или клавиша в Serial Monitor | Меняется на лету, безопасно для новичка |
| Gain (усиление) | Кнопка `Gain +`/`Gain -` в окне | Меняется на лету — компенсирует освещённость без пересборки |
| Reference (I0) для поглощения | Кнопка `Ref/B` | Одно действие, не требует кода |
| **ATIME / ASTEP** (время интегрирования, см. THEORY.md п.3) | **Только правкой [`kDefaultAtime`/`kDefaultAstep`, As7341Lab.h:118](include/As7341Lab.h#L118) и переприв­ошивкой** | Сознательно не вынесено в runtime — это оставлено как отдельная инженерная задача, см. факультативный Урок 6 ниже |

Это не пробел, а специально оставленная «дверь в код» для более сильных учеников: пять уроков ниже проходятся вообще без единой строчки C++, а факультативный урок открывает под капот.

---

## Модуль 1. Физика: свет как электромагнитный спектр

### Урок 1. Анатомия видимого спектра

**Режим:** `S`. **Тема:** свет как суперпозиция волн разной длины, спектральный анализ, отличие RGB-датчика от спектрометра.

**Ход работы.** Направь датчик по очереди на пять источников: свеча/спичка, лампа накаливания, «холодный» LED-фонарик, «тёплый» LED, экран телефона на белом фоне. После каждого — стоп-кадр (сфотографируй столбчатую диаграмму или запиши значения).

**На графике** (данные из [README.md, раздел 4](README.md#4-режим-s--спектр-физика)):

```
Интенсивность
  │           ╭─╮                              Лампа накаливания:
  │         ╭─╯ ╰─╮                             плавный подъём к красному,
  │       ╭─╯     ╰──╮                          максимум за пределами F8
  │  ╭────╯           ╰───╮
  └──┴───┴───┴───┴───┴───┴───┴──► нм
    415 445 480 515 555 590 630 680

  │  ╭─╮                                        Холодный LED:
  │  │ │                    ╭╮                  острый пик 445 нм,
  │  │ │        ╭─╮        ╭╯╰╮                 слабый широкий "хвост"
  │──┴─┴────────┴─┴────────┴──┴──► нм
```

**Вопрос классу до эксперимента:** «Если человеческий глаз видит и свечу, и монитор ноутбука одинаково „белыми“, значит ли это, что их спектр одинаков?» — эксперимент даёт наглядное «нет»: глаз усредняет через 3 типа колбочек, датчик различает 8+2 узкие полосы.

**Разбор.** Видимый свет — участок электромагнитного спектра 380–750 нм. AS7341 не «видит цвет» как глаз (3 канала), а раскладывает свет на 8 узких полос — это и называется **спектральным анализом**. Форма кривой — «отпечаток» физического процесса излучения: непрерывный тепловой спектр лампы накаливания (закон Планка) принципиально отличается от дискретных пиков полупроводникового LED.

**Практическое задание.** Заполнить таблицу «источник → положение максимума → ширина пика на половине высоты» для всех пяти источников, обсудить: у какого источника пик самый узкий и почему (ответ: LED — квазимонохроматический полупроводниковый переход).

### Урок 2. Невидимый мир: инфракрасное излучение

**Режим:** `I`. **Тема:** границы видимого спектра, ИК-излучение, электромагнитная природа тепла.

**Ход работы.** Наведи пульт ДУ от телевизора на датчик и нажимай любую кнопку с интервалом в пару секунд. Затем поднеси к датчику разогретую (не обжигающую!) кружку с чаем.

**На графике:** канал `NIR` резко подскакивает при каждом нажатии кнопки пульта, `VIS` остаётся почти неизменным — прямое доказательство, что пульт излучает свет, невидимый глазом. У кружки `NIR` растёт медленно и плавно по мере нагрева.

**Разбор.** Формула отношения [`printIR`, As7341Lab.cpp:180](src/As7341Lab.cpp#L180):

$$\text{NIR/VIS} = \frac{I_{NIR}}{\sum_{i=F1}^{F8} I_i}$$

даёт количественную характеристику «сколько невидимого света» несёт источник. Таблица интерпретации — в [README.md, раздел 8](README.md#8-режим-i--ик-детектор-физика). Свяжи с темой теплового излучения: любое тело с температурой выше абсолютного нуля излучает в ИК-диапазоне (закон Стефана-Больцмана), поэтому кружка «светится» в NIR ещё до того, как это можно почувствовать рукой на расстоянии.

**Практическое задание.** Выйти на улицу в солнечный день, сравнить NIR/VIS уличного солнца и настольной LED-лампы. Обсудить, почему солнечные батареи и ИК-термометры используют именно этот диапазон.

---

## Модуль 2. Химия: закон Бугера–Ламберта–Бера

### Урок 3. Спектрофотометрия: измеряем концентрацию раствора

**Режим:** `A` (обязательно начать с `B` — сохранить reference). **Тема:** оптическая плотность, количественный химический анализ, калибровочная кривая.

**Ход работы** (протокол — [README.md, раздел 5](README.md#5-режим-a--поглощение-химия)):
1. Стакан с чистой водой перед датчиком, боковая LED-подсветка (не флуоресцентная лампа — она мерцает на 50 Гц и портит замер).
2. Нажать `Ref/B` — сохранён опорный уровень $I_0$.
3. Добавлять краситель (например, разведённую марганцовку) по 1 капле, после каждой — записывать значение $A$ на канале, ближнем к пику поглощения вещества.

**На графике:**

```
A (оптическая плотность)
 1.2 │                                    ●
 0.9 │                          ●
 0.6 │                 ●
 0.3 │        ●
 0.0 │●
     └──┴──┴──┴──┴──┴──┴──► капель красителя
      0  1  2  3  4  5  6
```

**Разбор.** Закон Бугера–Ламберта–Бера, реализация — [`As7341Lab::absorbance`, As7341Lab.cpp:99](src/As7341Lab.cpp#L99):

$$A_\lambda = \log_{10}\frac{I_0}{I} = \varepsilon \cdot c \cdot l$$

Раз $l$ (толщина стакана) постоянна, а $\varepsilon$ — константа вещества, то $A$ линейно растёт с концентрацией $c$ — это и есть **калибровочная кривая**, основа количественного химического анализа (например, в медицинских анализаторах крови). Ниже порогов `kAbsMinI0`/`kAbsMinI` ([As7341Lab.h:124](include/As7341Lab.h#L124)) метод возвращает 0 — обсудите с классом, почему: сигнал ниже шума АЦП нельзя логарифмировать осмысленно.

**Практическое задание.** По собранной таблице «капли → A» построить линию тренда (Google Таблицы/Excel), по её наклону оценить, сколько капель нужно добавить, чтобы получить $A = 1.0$ — экстраполяция калибровочной кривой, стандартный приём аналитической химии.

**Возможная ошибка учеников.** Если после `Ref/B` весь график остаётся на нуле — реперный кадр случайно снят уже с красителем в стакане. Решение: заново `Ref/B` при чистой воде.

---

## Модуль 3. Биология: свет и фотосинтез

### Урок 4. PAR-индекс: сколько света «видят» листья

**Режим:** `P`. **Тема:** фотосинтетически активная радиация, пигменты хлорофилла, световой режим растений.

**Ход работы.** Сравнить PAR под четырьмя источниками: у окна днём, под обычной лампой накаливания, под холодным офисным LED, под специальной фитолампой (если есть в кабинете биологии/на подоконнике).

**На графике:**

```
PAR-индекс
 0.8 │                                      ██  Фитолампа
 0.6 │
 0.4 │                        ██                Окно днём
 0.2 │            ██                            Офисный LED
 0.0 │  ██                                       Лампа накаливания
     └──┴──┴──┴──┴──┴──┴──► источник
```

**Разбор.** Формула — [`As7341Lab::calcPAR`, As7341Lab.cpp:91](src/As7341Lab.cpp#L91):

$$\text{PAR-индекс} = \frac{0.3\,F_1 + 1.0\,F_2 + 0.6\,F_3 \;+\; 0.2\,F_4 + 0.1\,F_5 + 0.05\,F_6 \;+\; 0.8\,F_7 + 1.0\,F_8}{3000}$$

Веса не случайны: максимальный вес (1.0) у каналов F2 (445 нм) и F8 (680 нм) — это ровно пики поглощения хлорофилла A и B. Зелёный (F5, 555 нм) имеет минимальный вес — хлорофилл его почти не поглощает, отражает, поэтому лист и выглядит зелёным. Это прямая связь физики спектра с биологией пигментов, объяснённая в [THEORY.md, раздел 2.2](THEORY.md#22-par-photosynthetically-active-radiation). Важно: это собственный нормированный индекс прошивки, а не физическая единица PPFD (мкмоль фотонов/м²·с) — обсудите с классом разницу между «относительным сравнением источников» и «абсолютным физическим измерением».

**Практическое задание.** Используя таблицу из [README.md, раздел 6](README.md#6-режим-p--par-биология--гидропоника) (PAR < 0.10 — глубокая тень / мхи, > 0.70 — полное освещение / томаты), классифицировать все четыре измеренных источника и дать рекомендацию: «под какой лампой из четырёх лучше держать рассаду помидоров?»

---

## Модуль 4. Технологии и физиология человека: цветовая температура

### Урок 5. Цветовая температура и циркадные ритмы

**Режим:** `C`. **Тема:** цветовая температура, метод McCamy, влияние синего света на сон (мелатонин).

**Ход работы.** Измерить CCT пяти источников (свеча, лампа накаливания, «тёплый» и «холодный» LED, экран смартфона на максимальной яркости). Затем — ключевой момент урока — посмотреть на панель **«Светофор здоровья»** справа в окне `monitor.py` и провести измерение реально в разное время урока (в начале и в конце занятия), обсуждая, изменился ли статус.

**На графике:** линия CCT с ориентирами 2700 K / 4000 K / 6500 K (см. [README.md, раздел 7](README.md#7-режим-c--цветовая-температура)); справа — цветной круг-индикатор с текстовым статусом.

**Разбор.** Метод McCamy — [`As7341Lab::calcCCT`, As7341Lab.cpp:73](src/As7341Lab.cpp#L73): из 8 спектральных каналов вычисляются координаты цветности CIE $x, y$, затем по эмпирической кубической аппроксимации — CCT в Кельвинах (полный вывод в [THEORY.md, раздел 2.3](THEORY.md#23-цветовая-температура-cct-по-методу-mccamy)).

Панель «Светофор здоровья» — не отдельная выдумка, а прямая программная реализация правила из README (раздел 7, «Применение для умного отеля/класса»): [`circadian_health()`, monitor.py:367](monitor.py#L367) сочетает CCT, долю синего в общем свете `(F2+F3)/Clear` и текущее время суток:

| Время | Условие | Статус |
|---|---|---|
| Ночь 22:00–6:00 | CCT > 3200 K или синего > 25% | 🔴 ОПАСНО — мелатонин подавлен |
| Вечер 20:00–22:00 | CCT > 4500 K или синего > 30% | 🔴 ОПАСНО |
| Вечер 20:00–22:00 | CCT > 3200 K | 🟡 ВНИМАНИЕ — переключить на тёплый свет |
| День 6:00–20:00 | CCT > 3000 K | 🟢 ХОРОШО/ОТЛИЧНО |

**Разбор физиологии.** Клетки сетчатки (ipRGC) наиболее чувствительны к синему свету ~480 нм и напрямую сигнализируют гипоталамусу о «дневном времени», подавляя выработку мелатонина. Отсюда практическая рекомендация: экраны и холодный белый свет вечером мешают засыпанию — и это то же самое измерение CCT/спектра, которое ученики только что провели датчиком.

**Практическое задание.** Измерить CCT собственного смартфона/планшета с включённым и выключенным «ночным режимом» (Night Shift / Eye Comfort) — числовое доказательство того, что эта функция физически меняет спектр экрана, а не «фильтр для галочки».

---

## Модуль 5 (факультативно, для кружка/профильного класса). Инженерный уровень

### Урок 6. Время интегрирования: шум против скорости отклика

**Требует:** редактирования кода и перепрошивки — PlatformIO должен быть установлен. **Тема:** АЦП, время интегрирования, компромисс «шум vs скорость» в цифровых измерительных приборах.

**Ход работы.** Открыть [`include/As7341Lab.h`](include/As7341Lab.h#L118), найти константы:

```cpp
static constexpr uint8_t  kDefaultAtime = 100;
static constexpr uint16_t kDefaultAstep = 999;
```

Изменить `kDefaultAstep` сначала на `99` (в 10 раз меньше), пересобрать и прошить (`pio run -t upload`), понаблюдать за режимом `S` при слабом освещении. Затем вернуть `999` и попробовать `4999`.

**Разбор.** Время одного замера, формула из [THEORY.md, раздел 3](THEORY.md#3-время-интегрирования-atime-и-astep):

$$T_{int} = (ATIME+1)\times(ASTEP+1)\times 2.78\,\text{мкс}$$

При `ASTEP=99` замер занимает ~28 мс вместо ~280 мс — датчик обновляется быстрее, но каждое отдельное измерение усредняет меньше фотонов, поэтому в слабом свете показания начинают «дрожать» от кадра к кадру. При `ASTEP=4999` замер занимает больше секунды — плавно, но на быстрое событие (мигание) датчик уже не среагирует. Это тот же компромисс, что встречается в любой цифровой системе сбора данных: выдержка у фотоаппарата, время усреднения у мультиметра, частота дискретизации у АЦП.

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

---

## Итоговый проект: «Паспорт источника света»

Межпредметная работа на 2–3 занятия, объединяющая все пять режимов. Ученик (или пара) выбирает один источник света (лампа из дома, фонарик, экран) и составляет его полный «паспорт»:

1. **Физика** — спектр (S) и ИК-компонента (I): форма кривой, положение пиков.
2. **Химия** — не применимо к источнику напрямую, но тот же прибор и метод используется, чтобы измерить, как этот источник подсвечивает раствор для колориметрии (A) — обсудить, почему для точной химии нужен стабильный источник.
3. **Биология** — PAR-индекс (P): подходит ли источник для досветки растений.
4. **Технологии/физиология** — CCT (C) и статус «светофора здоровья»: безопасен ли источник вечером.

**Оформление** — по шаблону [PREZ.md](PREZ.md) (4–5 тезисов): постановка задачи → метод измерения → ключевые цифры → вывод/рекомендация. Хорошая работа отвечает на прикладной вопрос: «Стоит ли покупать эту лампу для рассады/для вечернего чтения/для рабочего стола?», подкреплённый числами, а не только «на глаз».

---

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

| Урок | Длительность | Обязательное оборудование | Предмет |
|---|---|---|---|
| 1. Анатомия спектра | 40–45 мин | Стенд + 5 разных источников света | Физика |
| 2. ИК-детектор | 40–45 мин | Стенд + пульт ДУ + тёплый предмет | Физика |
| 3. Спектрофотометрия | 45 мин (2 части) | Стенд + стакан с водой + пищевой краситель/марганцовка | Химия |
| 4. PAR-индекс | 40–45 мин | Стенд + фитолампа (если есть) | Биология |
| 5. CCT и циркадные ритмы | 40–45 мин | Стенд + смартфон с ночным режимом | Технология/ОБЖ |
| 6. ATIME/ASTEP (факультатив) | 45–60 мин | Стенд + PlatformIO на компьютере ученика | Информатика/инженерия |
| Итоговый проект | 2–3 занятия | Всё вышеперечисленное | Межпредметно |

---

## Заключение

Каждый урок опирается на одну и ту же физическую величину — спектр света, — но раскрывает её с точки зрения своего предмета: для физика это волны и энергия, для химика — концентрация, для биолога — пигмент и фотосинтез, для технолога — гигиена освещения. Ученик не переключается между «пятью разными приборами», а на одном и том же графике видит, как один и тот же измеренный спектр по-разному интерпретируется в зависимости от заданного вопроса — это и есть суть междисциплинарного STEM-подхода.
