Skip to content

AS7341 — 11-канальный спектральный датчик

Спектральный датчик Adafruit AS7341: 11 каналов вместо привычных RGB-триплета, раскладывает падающий свет по спектру от фиолетового до инфракрасного.

AS7341 STEM-Лаборатория — Полное руководство

Платформа: ESP32 DEVKIT V1 + Adafruit AS7341
Прошивка: src/main.cpp (Ядро), src/As7341Lab.cpp (Драйвер)
Визуализация: monitor.py (Python 3 + Matplotlib)


Содержание

  1. Что такое AS7341
  2. Подключение и запуск
  3. Параметры датчика — как менять и трактовать
  4. Режим S — Спектр (Физика)
  5. Режим A — Поглощение (Химия)
  6. Режим P — PAR (Биология / Гидропоника)
  7. Режим C — Цветовая температура (Физика / Умный дом)
  8. Режим I — ИК-детектор (Физика)
  9. Лабораторные сценарии по предметам
  10. Гидропоника — практическое применение
  11. Глоссарий

1. Что такое AS7341

AS7341 — 11-канальный спектрофотометр на одном чипе размером 3×2 мм. Это не RGB-датчик. Он независимо измеряет интенсивность в каждом спектральном диапазоне.

КаналДлина волныЦветФизический смысл
F1415 нмФиолетовыйГраница видимого / UVA
F2445 нмСинийПик поглощения хлорофилла A
F3480 нмГолубойСиняя компонента неба, мониторы
F4515 нмЗелено-голубойПереход к зелёному
F5555 нмЗелёныйМаксимум чувствительности глаза
F6590 нмЖёлтыйНатриевые лампы, закат
F7630 нмОранжево-красныйФотосинтетически активный диапазон
F8680 нмКрасныйПик поглощения хлорофилла B
NIR~910 нмБлижний ИКНевидимый диапазон, пульты ДУ, нагрев
ClearширокополосныйБелыйСуммарная освещённость (аналог люксметра)

2. Подключение и запуск

Схема подключения (I2C)

AS7341          ESP32 DEVKIT V1
  VCC  ──────►  3.3V  (или 5V если модуль со стабилизатором)
  GND  ──────►  GND
  SDA  ──────►  GPIO 21
  SCL  ──────►  GPIO 22

Совет: Положи поверх датчика кусочек белого матового пластика (диффузор) — иначе датчик видит только узкую точку источника и даёт систематическую погрешность при рассеянном свете.

Сборка и загрузка прошивки

# В PlatformIO (VS Code) — нажми Upload
# или в терминале:
pio run --target upload

Установка зависимостей Python (один раз)

python3 -m pip install -r requirements.txt
# или вручную: python3 -m pip install pyserial matplotlib

Запуск визуализации (закрой Serial Monitor перед этим!)

python3 monitor.py /dev/ttyUSB0
# Порт определяется автоматически если не указать

Управление кнопками прямо в окне Python: режимы S/A/P/C/I, Ref/B (сохранить reference для поглощения) и Gain -/Gain + — это единственный способ менять усиление, пока открыт monitor.py (Serial Monitor PlatformIO в это время должен быть закрыт, оба не могут держать порт одновременно). Если физическая связь с датчиком по I2C оборвётся, строка статуса в окне мигнёт красным !! СВЯЗЬ С AS7341 ПОТЕРЯНА !! — это As7341Lab::isAlive() из прошивки, а не сбой самого скрипта.


3. Параметры датчика

Gain (Усиление)

Gain управляет чувствительностью сенсора. Все значения на выходе умножаются на коэффициент усиления.

GainКогда применять
0.5x–2xПрямой солнечный свет, яркие прожекторы
4x–32xСтандартное помещение, офис, класс
64xПо умолчанию. Нормальное искусственное освещение
128x–256xСлабое освещение, сумерки, тёмные растворы
512xПочти темнота, люминесценция, слабые источники

Всего доступно 11 ступеней (0.5x, 1x, 2x, 4x, 8x, 16x, 32x, 64x, 128x, 256x, 512x) — полный список из даташита AS7341, регистр AGAIN.

Признаки неверного Gain:

  • Канал показывает 65535перегруз, нажми - (уменьшить Gain)
  • Все значения < 100 — недостаточно, нажми + (увеличить Gain)

Команды в режиме прошивки: + / - (через Serial Monitor или кнопкой +/- если добавить в Python).

ATIME и ASTEP — время интегрирования

Общее время одного замера вычисляется по формуле:

T_int = (ATIME + 1) × (ASTEP + 1) × 2.78 мкс

При значениях по умолчанию (ATIME=100, ASTEP=999):

T_int = 101 × 1000 × 2.78 мкс ≈ 280 мс
ПараметрУвеличить →Уменьшить →
ATIMEточнее, медленнеебыстрее, шумнее
ASTEPточнее, медленнеебыстрее, шумнее

Для экспериментов с быстрыми событиями (мигающий пульт ДУ) уменьши ATIME до 10–20. Для точной спектрофотометрии растворов увеличь до 200+.


4. Режим S — Спектр (Физика)

Команда: S
График: столбчатая диаграмма, каждый столбик на своей длине волны, закрашен физическим цветом.

Что показывает

Спектральный «отпечаток» источника света — распределение энергии по длинам волн.

Как читать

Форма спектраИсточник
Плавная колоколообразная кривая, максимум ~600–700 нмЛампа накаливания / солнце
Острый пик на 445–480 нм + малый «хвост»Дешёвый белый LED (холодный)
Два пика: 445 нм и 590–630 нм, провал в серединеКачественный тёплый LED
Один высокий пик на 555 нмМонохроматический зелёный лазер
Равномерно высокие все каналыПрямой солнечный свет (ясный день)

Эксперименты

«Анатомия белого света»
Направь датчик на разные источники по очереди: свечу, лампу накаливания, холодный LED, тёплый LED, монитор ноутбука. Ученики видят, что «белый» у каждого разный.

«Сравнение ламп»
Купи в магазине 3 лампочки с надписями “2700K”, “4000K”, “6500K”. Сделай снимок спектра каждой. Видно как смещается баланс 445/680 нм.


5. Режим A — Поглощение (Химия)

Команда: A, затем B (сохранить reference)
График: столбчатая диаграмма оптической плотности по 8 каналам.

Физический закон

Закон Бугера–Ламберта–Бера:

Aλ=log10I0I=εclA_\lambda = \log_{10}\frac{I_0}{I} = \varepsilon \cdot c \cdot l
  • AλA_\lambda — оптическая плотность (безразмерная)
  • I0I_0 — интенсивность до вещества (reference, сохраняется кнопкой B)
  • II — интенсивность после прохождения через вещество
  • ε\varepsilon — молярный коэффициент поглощения (константа вещества)
  • cc — концентрация раствора
  • ll — длина оптического пути (толщина кюветы)

Практический вывод: чем больше AA, тем более концентрированный раствор или тем гуще окраска.

Протокол эксперимента

  1. Поставь пустой стакан с чистой водой перед датчиком
  2. Включи режим A, нажми B → reference сохранён
  3. Добавляй в воду краситель по каплям и наблюдай рост AA на нужных длинах волн
  4. Записывай количество капель и значение AA — получишь калибровочную кривую

Вещества и их спектры поглощения

ВеществоПик поглощенияКанал AS7341
Марганцовка (KMnO₄)525–550 нмF5 (555 нм)
Хлорофилл (листья)445 + 680 нмF2 + F8
Йод (I₂ в воде)450–490 нмF2–F3
Синие чернила590–630 нмF6–F7
Красный краситель480–515 нмF3–F4
Медный купорос CuSO₄600–700 нмF7–F8

Важно: Освещение во время опыта должно быть стабильным. Используй светодиодный фонарик сбоку от кюветы, направленный строго на датчик. Флуоресцентные лампы мерцают (50 Гц) и создают шум.


6. Режим P — PAR (Биология / Гидропоника)

Команда: P
График: линия PAR-индекса с историей, цветные зоны, крупное текущее значение по центру.

Что такое PAR

PAR (Photosynthetically Active Radiation) — фотосинтетически активная радиация. Диапазон 400–700 нм, который растения используют для фотосинтеза.

Хлорофилл A поглощает максимально на 445 нм (синий) и 680 нм (красный). Зелёный (~555 нм) в основном отражается — отсюда зелёный цвет листьев.

Формула (AS7341)

PAR = (F2×1.0 + F1×0.3 + F3×0.6) × Blue_weight
    + (F8×1.0 + F7×0.8) × Red_weight
    + (F4×0.2 + F5×0.1 + F6×0.05) × Green_weight
    / 3000   (нормировочный коэффициент)

Интерпретация значений

PAR-индексЗона (цвет)Что это значитДля каких растений
< 0.10КраснаяГлубокая теньМхи, папоротники
0.10–0.30ЖёлтаяСлабое освещениеМонстера, сансевиерия
0.30–0.70Светло-зелёнаяНормальный рассеянный светБольшинство комнатных
> 0.70Ярко-зелёнаяПолное освещениеТоматы, базилик, огурцы, гидропоника

Почему показывает низкий PAR в помещении

Обычная лампа накаливания 60W даёт слабый синий компонент (445 нм) — PAR будет занижен даже при высоком Clear. Специальная фитолампа имеет усиленные пики именно в синем и красном, и PAR резко вырастет.


7. Режим C — Цветовая температура

Команда: C
График: линия CCT в Кельвинах с историей, горизонтальные пунктиры-ориентиры.

Физика цветовой температуры

Цветовая температура — это температура «абсолютно чёрного тела», излучение которого на вид совпадает с данным источником света. Измеряется в Кельвинах (K).

CCTИсточникОщущение
1800–2200 KСвеча, огоньОчень тёплый, оранжевый
2700 KЛампа накаливанияТёплый, жёлтый
3000–3500 KГалоген, тёплый LEDУютный
4000–4500 KНейтральный белый LEDОфис, класс
5000–5500 KПрямой солнечный светДневной
6000–6500 KПасмурное небоХолодный белый
> 7000 KСинее ясное небо, HMIХолодный голубой

Метод расчёта (McCamy)

Сначала из 8 спектральных каналов вычисляются координаты CIE XYZ через веса функций согласования цвета, затем хроматические координаты x,yx, y, затем:

n=x0.33200.1858yn = \frac{x - 0.3320}{0.1858 - y}CCT=449n3+3525n26823.3n+5520.33CCT = -449n^3 + 3525n^2 - 6823.3n + 5520.33

Применение для умного отеля / класса

  • CCT > 5000 K после 20:00 → автоматически переключить лампы на 2700 K (подавление мелатонина)
  • CCT < 4000 K утром → включить холодный белый (бодрящий эффект)
  • Мониторинг деградации LED: со временем CCT смещается в синюю сторону

«Светофор здоровья» в monitor.py

Панель справа в окне визуализации — не отдельный график, а живая реализация правила выше: circadian_health(), monitor.py:367 сочетает CCT, отношение синего к общей яркости (F2+F3)/Clear и текущее время суток (datetime.now().hour) в один из четырёх статусов:

Время сутокУсловие (код)СтатусСмысл
Ночь 22:00–6:00CCT > 3200 K или синего > 25%🔴 ОПАСНОсиний свет ночью подавляет мелатонин
Ночь 22:00–6:00иначе🟢 ХОРОШОтёплый свет, мелатонину не мешает
Вечер 20:00–22:00CCT > 4500 K или синего > 30%🔴 ОПАСНОпора выключать холодный свет
Вечер 20:00–22:00CCT > 3200 K🟡 ВНИМАНИЕлучше переключить на тёплый (~2700 K)
День 6:00–20:00CCT > 3000 K🟢 ХОРОШО/ОТЛИЧНОнейтральный/холодный свет уместен днём
Любое времяClear < 150⚪ ТЕМНОсвета мало, оценка ненадёжна

Панель отвечает на вопрос «правильный ли сейчас свет для организма» — прямое практическое следствие теории цветовой температуры из раздела 7 THEORY.md, а не просто число в Кельвинах.


8. Режим I — ИК-детектор (Физика)

Команда: I
График: две линии (NIR и VIS) + пунктирная линия коэффициента NIR/VIS на второй оси.

Что измеряет

КаналЧто видит
NIR (~910 нм)Ближний инфракрасный: пульты ДУ, нагретые тела, солнечный ИК
VIS (сумма F1–F8)Весь видимый диапазон 415–680 нм
NIR/VISОтношение: «насколько ИК больше видимого»

Интерпретация коэффициента NIR/VIS

ЗначениеИнтерпретация
> 2.0Пульт ДУ направлен прямо (мощный ИК-импульс)
0.8–2.0Прямой солнечный свет (содержит ~50% ИК)
0.3–0.8Тёплый LED или галоген
< 0.3Холодный LED, монитор (почти нет ИК)

Эксперименты

«Невидимый мир» — направь пульт ДУ телевизора на датчик. NIR всплёскивает при каждом нажатии кнопки, VIS стоит неподвижно. Идеальная демонстрация существования ИК-излучения.

«Нагретые тела» — поднеси к датчику горячую кружку. NIR медленно растёт по мере нагрева поверхности.

«Солнце vs LED» — выйди на улицу, сравни NIR/VIS уличного солнца и комнатной лампы. Разница принципиальная.


9. Лабораторные сценарии

Физика

Тема урокаРежимОпытОжидаемый результат
Дисперсия светаSПризма перед датчикомПики смещаются в зависимости от угла
Электромагнитный спектрIПульт ДУNIR растёт, VIS = const
Излучение чёрного телаC + S3 лампы с разной CCTСдвиг спектра с температурой
Поглощение светаAСтакан с водой + красительРост A в определённых каналах
Закон КирхгофаSНатриевая лампаОстрый пик на 590 нм

Химия

Тема урокаРежимВеществоЧто измеряем
Концентрация раствораAМарганцовкаA пропорционально концентрации
Качественный анализAНеизвестный растворИдентификация по пику поглощения
ФотометрияAМедный купоросКалибровочная кривая A(c)
Окислительно-восстановительныеAKMnO₄ → MnO₂Пик 555 нм исчезает при реакции

Биология

Тема урокаРежимОпытЧто наблюдаем
ФотосинтезPФитолампа vs обычная лампаРазница PAR в разы
Пигменты хлорофиллаAВытяжка из листьевПики F2 (445) и F8 (680)
Влияние спектра на ростPРазные лампы над растениемPAR-индекс как критерий выбора лампы
ХроматографияAРазделённые пигментыКаждая фракция — свой пик

Гидропоника / Агро-STEM

ЗадачаРежимКритерий
Подобрать лампу для рассадыPPAR > 0.70
Контролировать световой деньC + PCCT + PAR каждые N часов
Детектировать деградацию лампыSСмещение пика 445/680 со временем
Сравнить натуральный и искусственный светS + PСнять спектр у окна и под лампой

10. Гидропоника

Что важно для растений по спектру

Вегетация (рост листьев):   Синий 415–480 нм  →  высокий F1, F2, F3
Цветение и плодоношение:    Красный 630–680 нм →  высокий F7, F8
Ингибирование вытягивания:  Синий > Красного   →  F2/F8 > 1.0
Максимальный фотосинтез:    PAR > 0.70

Практический регламент замеров

  1. Ежедневно в одно время (например, 12:00) фиксировать PAR и CCT над каждой грядкой
  2. Если PAR < 0.3 → добавить фитолампу или поднять (мощность)
  3. Если спектр сместился (445 нм растёт относительно 680 нм) → лампа выгорает, менять
  4. Для рассады томатов/перца: добавь синего (445 нм) — стебли будут короче и крепче
  5. За 2 недели до уборки: увеличь красный (680 нм) — ускорит созревание

Формула отношения Blue:Red (B/R)

BR=F2(445нм)F8(680нм)\frac{B}{R} = \frac{F_2 (445\,\text{нм})}{F_8 (680\,\text{нм})}
B/RЭффект на растение
> 2.0Компактный рост, тёмно-зелёные листья
1.0–2.0Сбалансированный рост
< 1.0Вытягивание, светло-зелёный цвет (нехватка синего)

11. Глоссарий

ATIME — параметр времени интегрирования (0–255). Вместе с ASTEP определяет длительность одного замера. Увеличить = точнее и медленнее.

ASTEP — шаг времени интегрирования (0–65534). Умножается на ATIME + 1. Смотри формулу в разделе 3.

Beer-Lambert / Бугер–Ламберт–Бер — закон, связывающий поглощение света с концентрацией вещества: A=log10(I0/I)A = \log_{10}(I_0/I). Основа количественного анализа в химии.

B/R ratio — отношение синего (445 нм) к красному (680 нм) в спектре лампы. Критерий для агрономии.

CCT (Correlated Color Temperature) — коррелированная цветовая температура. Кельвины. Тёплый = низкий, холодный = высокий.

Clear channel — широкополосный канал без спектрального фильтра. Аналог люксметра. Не заменяет специализированный люксметр, но пригоден для сравнительных измерений.

Counts — единица измерения AS7341. Целое число от 0 до 65535. Зависит от Gain и ATIME. Для сравнения источников нужно фиксировать одинаковые настройки.

Gain (усиление) — коэффициент усиления аналогового сигнала перед АЦП. Диапазон 0.5x–512x. Не влияет на физическую реальность — только на чувствительность схемы.

NIR (Near Infrared) — ближний инфракрасный диапазон. Канал AS7341 центрирован около 910 нм. Невидим для глаза. Присутствует в солнечном свете, пультах ДУ, нагретых телах.

PAR (Photosynthetically Active Radiation) — фотосинтетически активная радиация. Диапазон 400–700 нм, взвешенный по поглощению хлорофилла. Единица PPFD = мкмоль фотонов/(м²·с). Индекс в прошивке — безразмерное нормированное число.

PAR-индекс — собственная нормированная величина данной прошивки (не PPFD). Используется для сравнения источников между собой. Значение 1.0 соответствует примерно полному дневному освещению при Gain=64x.

Спектр поглощения — зависимость оптической плотности вещества от длины волны. Уникален для каждого вещества — «отпечаток пальца» молекулы.

Спектр излучения — распределение мощности источника по длинам волн. У лампы накаливания — непрерывный (тепловой), у LED — с пиками.

CIE XYZ — стандартное трёхстимульное цветовое пространство. Используется для расчёта CCT из спектральных данных.

Хроматические координаты x, y — нормированные проекции XYZ на плоскость. Определяют «цветность» без учёта яркости. На их основе работает формула McCamy для CCT.

I2C — двупроводной последовательный протокол связи. SDA = данные, SCL = тактирование. Адрес AS7341 по умолчанию 0x39.

Диффузор — рассеивающее стекло / матовый пластик перед датчиком. Усредняет освещение по площади датчика. Обязателен для точных абсолютных измерений.


Быстрая шпаргалка — что делать если…

СимптомДействие
Все каналы = 65535Нажми - несколько раз (уменьшить Gain)
Все каналы < 50Нажми + несколько раз (увеличить Gain)
PAR всегда 0Закрой PlatformIO Serial Monitor, запусти только monitor.py
Жёлтый график остаётся на всех режимахПерезапусти monitor.py
CCT = 0 или отрицательныйСлишком темно, увеличь Gain или добавь света
Режим A не показывает поглощениеНажми B сначала при пустой кювете
monitor.py не видит портПроверь ls /dev/ttyUSB* или /dev/ttyACM*

12. Программная архитектура

Код проекта переведен на модульную объектно-ориентированную структуру для удобства интеграции в Sensor Hub.

  • include/As7341Lab.h: Интерфейс класса лаборатории. Структура Data (10 каналов датчика), режимы, doxygen-описание каждого публичного метода.
  • src/As7341Lab.cpp: Реализация всей математической логики (PAR, CCT, Beer-Lambert) и методов визуализации. Все авторские расчеты и комментарии вынесены сюда.
  • src/main.cpp: Главный файл управления. Обрабатывает Serial-команды и дирижирует работой датчика через объект класса As7341Lab.

Такой подход позволяет использовать спектрометр в больших проектах одной строчкой кода: As7341Lab lab;.

Чтение данных и вотчдог связи

Драйвер хранит последний снимок внутри себя — снаружи данные не передаются напрямую:

if (lab.read()) {                       // As7341Lab.cpp:29 — обновляет внутренний буфер
    const As7341Lab::Data &d = lab.getData(); // As7341Lab.h — const-ссылка на снимок
    ...
}
if (!lab.isAlive()) {                    // As7341Lab.h — true, если было успешное read() за последние 2000 мс
    Serial.println("Связь потеряна");
}

isAlive() не про “датчик исправен”, а про “физический канал связи жив прямо сейчас” — обрыв провода I2C сразу виден в main.cpp, а не тихо застывает на последних показаниях.

13. Работа через CLI (PlatformIO)

Для управления проектом через терминал используйте следующие команды:

Сборка и прошивка

cd Components/AS734x
pio run -t upload

Мониторинг данных (Текст)

pio device monitor

Графическая визуализация (Python)

Убедитесь, что закрыт pio device monitor, затем:

python3 monitor.py

14. Дополнительная документация

  • THEORY.md — Глубокая физика и математика спектра.
  • WIRING.md — Схемы и советы по подключению.
  • PREZ.md — Краткая презентация возможностей проекта.
  • Lesson.md — Методический план серии уроков (физика, химия, биология, технологии) для учителя.