Как собрать простой спектрометр на ADS1115: от идеи до рабочего прототипа

Допустим, вы хотите измерять спектральный состав света — не для научной статьи, а для реальной задачи: проверить спектр светодиодов, откалибровать фитолампу или понять, почему один источник света кажется тёплым, а другой — холодным. Промышленные спектрометры стоят десятки тысяч рублей. Но базовый прибор, который даст вам реальные данные, можно собрать за выходные на базе микросхемы ADS1115 и доступных комплектующих.

ADS1115 — это 16-битный АЦП с интерфейсом I²C. Сам по себе он не видит спектр. Но если подать на его входы сигнал от фотодетекторов, каждый из которых пропускает только свою узкую полосу длин волн, вы получите дискретный спектр. Именно так работают простые спектрометры — не непрерывная радуга, а несколько точек в разных участках спектра. Для большинства практических задач этого достаточно.

Что вам понадобится

ADS1115 берёт на себя оцифровку. Всё остальное — оптика и фотоприёмники. Вот минимальный набор:

  • ADS1115 — модуль на базе этой микросхемы, например от Adafruit или совместимый китайский аналог. Четыре дифференциальных или четыре односторонних входа, 16 бит, программируемый усилитель.
  • Фотодиоды с фильтрами — либо готовые фотодиоды с узкополосными фильтрами, либо обычные фотодиоды + набор цветных светофильтров. Для начала хватит 4–6 каналов.
  • Микроконтроллер — Arduino, ESP32, Raspberry Pi Pico, что угодно с I²C.
  • Корпус и световод — чтобы свет попадал на детекторы без засветки извне. Подойдёт трубка, чёрный корпус, напечатанный на 3D-принтере, или даже картонная трубка изнутри чёрная.
  • Дифракционная решётка или призма — чтобы разложить свет на спектр. Можно использовать DVD-диск как готовую дифракционную решётку (1350 штрихов/мм).

Как это работает физически

Свет от источника попадает через узкую щель на дифракционную решётку. Решётка отклоняет разные длины волн на разные углы. В результате на линейке фотодиодов формируется растянутый спектр — красный с одного края, фиолетовый с другого. Каждый фотодиод стоит в точке, где падает определённая длина волны. ADS1115 оцифровывает ток каждого фотодиода, и вы получаете массив значений — это и есть ваш спектр.

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

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

ADS1115 подключается по I²C:

  • VCC → 3.3V или 5V (зависит от модуля)
  • GND → GND
  • SCL → SCL пин контроллера
  • SDA → SDA пин контроллера

Фотодиоды подключаются в фотодиодном режоде (обратное смещение) или в фотогальваническом режиме (без смещения). Для простоты — фотогальванический режим: анод на GND, катод на вход ADS1115. Параллельно фотодиоду ставится резистор 10–100 кОм — он преобразует фототок в напряжение. Чем больше сопротивление, тем выше чувствительность, но ниже скорость отклика. Для статичных измерений это не критично.

ADS1115 имеет четыре входа: A0, A1, A2, A3. Если каналов больше четырёх, используйте мультиплексор или второй ADS1115 на той же шине I²C (адрес меняется через пин ADDR).

Настройка ADS1115 под задачу

ADS1115 — гибкая микросхема. Вот параметры, которые имеет смысл настроить:

Параметр Рекомендация Почему
Диапазон измерений (PGA) ±4.096V или ±2.048V Фотодиоды дают малые напряжения. Узкий диапазон — выше разрешение по напряжению.
Частота выборок (DR) 8–64 SPS Вы измеряете статичный спектр. Низкая частота — меньше шума.
Режим работы Single-shot Экономия энергии, измерение по запросу.
Усилитель (gain) 1x или 4x Подбирается под ваш резистор и ожидаемый ток.

16-битный АЦП при диапазоне ±2.048V даёт шаг около 62.5 мкВ. Для фотодиода с резистором 47 кОм это соответствует разрешению по току около 1.3 нА — более чем достаточно для бытовых измерений.

Программная часть

Алгоритм простой:

  1. Инициализируйте I²C и ADS1115 с нужными настройками.
  2. Для каждого канала (A0–A3) запустите single-shot преобразование.
  3. Прочитайте результат (16-битное знаковое число).
  4. Повторите 10–50 раз и усредните — это уберёт шум.
  5. Запишите массив значений — это ваш спектр.

Для Arduino удобно использовать библиотеку Adafruit_ADS1X15. Она берёт на себя всю работу с регистрами. Пример чтения одного канала:

int16_t adc0;
adc0 = ads.readADC_SingleEnded(0);
float voltage = adc0 * 0.1875; // мВ при gain=1

Не забудьте настроить gain перед чтением — иначе результаты будут некорректными.

Калибровка: без неё прибор бесполезен

Сырые значения с ADS1115 — это не спектр, а просто числа. Чтобы превратить их в осмысленные данные, нужна калибровка по двум осям:

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

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

Если вам нужны абсолютные значения в Вт/м²/нм — это уже требует эталонного спектрометра и серьёзной радиометрической калибровки. Для большинства задач достаточно относительных единиц.

Какой оптический тракт выбрать

Здесь есть два основных варианта, и выбор зависит от вашей задачи:

С дифракционной решёткой (DVD-диск): компактно, даёт линейное разложение спектра. Подходит, если вам нужно покрыть широкий диапазон — от 400 до 700 нм и шире. Минус: решётка даёт несколько порядков, и нужно отфильтровать лишние. Обычно помогает длинноволоконный фильтр, отсекающий второй порядок в красной области.

С набором узкополосных светофильтров: каждый фотдиод накрывается своим фильтром с полосой пропускания 10–20 нм. Проще в настройке, не нужно пространственное разложение. Но вы получаете столько точек спектра, сколько фильтров поставили. Для грубой оценки — 4–6 фильтров достаточно.

Если вы только начинаете — берите второй вариант. Он проще в сборке и отладке, и вы быстрее получите результат.

Частые ошибки, которые убьют ваш результат

Засветка и паразитный свет. Если корпус не светонепроницаемый, рассеянный свет попадёт на фотодиоды и исказит спектр. Все внутренние поверхности должны быть чёрными. Щель на входе должна быть узкой — 0.2–0.5 мм. Слишком широкая щель снизит спектральное разрешение.

Перегрузка входа ADS1115. Если фотодиод даёт напряжение выше выбранного диапазона, АЦП просто покажет максимальное значение. Проверьте это до измерений — направьте прибор на яркий источник и убедитесь, что значения не упираются в потолок.

Игнорирование темнового тока. Фотодиод в темноте всё равно даёт небольшой ток. Перед каждой серией измерений закройте вход прибора и запишите темновые значения — потом вычитайте их из всех измерений.

Нестабильное питание. ADS1115 чувствителен к помехам по питанию. Если вы питаете всё от USB компьютера, шум может быть значительным. Добавьте керамический конденсатор 100 нФ между VCC и GND прямо на модуле.

Что реально можно измерить таким прибором

Давайте будем честны о возможностях. Самодельный спектрометр на 4–8 каналах не заменит лабораторный прибор. Но он справится с задачами, где нужна не высокая точность, а сравнительная оценка:

  • Определить доминирующую длину волны светодиода (с точностью ±5–10 нм).
  • Сравнить спектры двух источников — например, проверить, изменился ли спектр фитолампы после года работы.
  • Оценить цветовую температуру источника по соотношению синего и красного каналов.
  • Обнаружить характерные спектральные линии — например, линии ртути в люминесцентной лампе.
  • Откалибровать интенсивность освещения в относительных единицах для повторяемых экспериментов.

Как улучшить прибор, если базовая версия работает

Когда вы получили первые результаты и поняли, что инструмент нужен на постоянной основе, есть куда расти:

  • Больше каналов. Добавьте второй ADS1115 или используйте внешний мультиплексор CD4051. 8–16 каналов дадут гораздо более детальный спектр.
  • Линейный фотодиодный массив. Вместо отдельных фотодиодов возьмите линейку из 364 пикселей (например, TCD1304). Это уже совсем другой уровень — но и сложность сборки вырастает на порядок.
  • Термостабилизация. Темновой ток фотодиода удваивается каждые 8–10°C. Если вы работаете в нестабильных условиях, добавьте датчик температуры и корректируйте темновой ток программно.
  • Записывайте данные. Подключите SD-карту или отправляйте данные по Wi-Fi (ESP32) на компьютер. Так вы сможете строить графики и сравнивать спектры во времени.

Сценарии: что делать в зависимости от вашей задачи

Если вам нужно просто проверить светодиод — хватит трёх каналов. Поставьте красный, зелёный и синий фильтр на три входа ADS1115. Этого достаточно, чтобы отличить тёплый белый светодиод от холодного, или убедиться, что красный светодиод действительно красный, а не оранжевый.

Если вы работаете с фитолампами — нужен диапазон 400–700 нм с шагом 20–30 нм. Это 10–15 каналов. Используйте дифракционную решётку и линейку фотодиодов, либо набор узкополосных фильтров. Калибруйте по спектру солнечного света или лампы накаливания с известной цветовой температурой.

Если вы хотите учебный прибор для демонстрации спектров — сделайте разборную конструкцию. Пусть студенты или дети сами меняют источники света и видят, как меняется картина. Здесь важна не точность, а наглядность. Выводите спектр на экран в реальном времени через Processing или Python с matplotlib.

Итог: с чего начать прямо сейчас

ADS1115 — хороший выбор для самодельного спектрометра благодаря высокому разрешению, низкой цене и простоте подключения. Вот ваш план действий:

  1. Купите модуль ADS1115 и три фотодиода с цветными фильтрами (красный, зелёный, синий).
  2. Соберите схему на макетной плате, подключите к Arduino.
  3. Напишите скетч, который читает три канала и выводит значения в Serial.
  4. Измерьте спектр лампы накаливания, люминесцентной лампы и светодиода — вы сразу увидите разницу.
  5. Когда убедитесь, что данные осмысленные — добавляйте каналы, калибруйте, улучшайте оптику.

Не стремитесь сделать идеальный прибор с первого раза. Соберите минимально рабочую версию, получите первые данные, поймите, чего вам не хватает — и только потом улучшайте. Так вы сэкономите время и получите работающий инструмент, а не бесконечный проект, который так и останется на макетной плате.

Radio-Blog.ru