Перейти к содержанию

Датчики освещённости: от фоторезистора до BH1750, VEML7700 и OPT3001

Люксы — это не «сколько света вообще», а излучение, взвешенное по чувствительности глаза. Разбираем по даташитам Advanced Photonix, Vishay, ROHM, ams OSRAM и TI, чем фоторезистор и фототранзистор TEMT6000 отличаются от цифровых BH1750, TSL2561, VEML7700 и OPT3001, как пересчитать их коды в люксы и как поставить датчик за окно корпуса.

Обновлено Редакция GAW

Освещённость измеряют в люксах: 1 лк — это световой поток 1 лм на квадратный метр. Для микроконтроллера есть три пути: фоторезистор в делителе — годится для порога «светло — темно», но не для люксов; фототранзистор с нагрузочным резистором и АЦП — почти линейный, но с большим разбросом между экземплярами; цифровой датчик освещённости, который сам интегрирует фототок и отдаёт число по I²C. Для ориентира ams приводит 50 000–100 000 лк на прямом солнце и 20–50 лк при слабом освещении в помещении (DN21).

Глаз, кремний и инфракрасный свет

Люкс — фотометрическая единица: излучение в нём взвешено спектральной чувствительностью глаза при дневном зрении V(λ). Эту кривую CIE приняла в 1924 году; её максимум — на 555 нм, а к 380 и 780 нм она спадает практически до нуля (DN21). Освещённость получается из спектральной облучённости интегрированием с этим весом:

Ev=683 лмВт∫380 нм780 нмEe,λ(λ) V(λ) dλE_v = 683\ \frac{\text{лм}}{\text{Вт}} \int_{380\ \text{нм}}^{780\ \text{нм}} E_{e,\lambda}(\lambda)\,V(\lambda)\,d\lambda

Константа 683 лм/Вт — световая эффективность монохроматического излучения частотой 540 ТГц, через неё в СИ определена кандела (BIPM). Длина волны этого излучения — 299 792 458 м/с / 540 · 10¹² Гц ≈ 555 нм (555,2 нм в вакууме), тот самый максимум V(λ).

Кремниевый фотодиод чувствует от 300 до 1100 нм — заметно шире глаза. Инфракрасный светодиод на 880 нм даёт ноль люксов, но ненулевой фототок (DN21), а у ламп накаливания и солнца в спектре много ИК (DN26): голый кремний под такой лампой показывает освещённость выше, чем видит человек. Производители решают это двумя способами. Первый — подогнать спектр самого фотоприёмника под V(λ): у OPT3001 для этого стоит оптический фильтр с подавлением ИК более 99 %, у BH1750 и VEML7700 производители указывают чувствительность, близкую к глазу. Второй — поставить рядом второй фотодиод, который видит только ИК, и вычесть его сигнал по эмпирической формуле: так сделан TSL2561.

Вторая особенность реального света — мерцание. Лампа от сети 50 Гц мерцает с частотой 100 Гц, от 60 Гц — 120 Гц: яркость падает в каждом переходе сетевого напряжения через ноль. Интегрирующий датчик гасит мерцание, если время интегрирования кратно периодам пульсаций; для 100 и 120 Гц одновременно это 50 мс и кратные (DN26). Производители цифровых датчиков пишут о подавлении прямо: ROHM — что время измерения в режиме H-Resolution у BH1750 достаточно длинное, чтобы отсеять помехи, в том числе 50 и 60 Гц; TI — что интегрирование OPT3001 за 100 или 800 мс сводит влияние 50 и 60 Гц к минимуму; Vishay заявляет у VEML7700 подавление мерцания 100 и 120 Гц, ams у TSL2561 — пульсаций 50/60 Гц.

Фоторезистор в делителе

Фоторезистор — слой сульфида кадмия (CdS), сопротивление которого падает с ростом освещённости. Пример с полными данными производителя — Advanced Photonix PDV-P8001, рассчитанный на 400–700 нм:

ПараметрPDV-P8001
Сопротивление при 10 лк (лампа 2856 К)3–11 кОм
Темновое сопротивление через 10 с после 10 лкне меньше 0,2 МОм
Показатель γ между 10 и 100 лк0,6
Время нарастания / спада при 10 лк, типично50 / 20 мс
Напряжение / мощность, не более150 В / 90 мВт

Зависимость сопротивления от освещённости степенная, показатель γ — наклон прямой в логарифмических координатах:

R(E)=R10(E10 лк)−γR(E) = R_{10} \left(\frac{E}{10\ \text{лк}}\right)^{-\gamma}

При γ = 0,6 десятикратный рост освещённости уменьшает сопротивление в 100,6 ≈ 4 раза: от 3–11 кОм при 10 лк до 0,75–2,8 кОм при 100 лк. Фоторезистор включают в делитель — к питанию, а постоянный резистор R₀ — к земле, тогда напряжение растёт со светом:

Uвых=Uпит R0R0+R(E)U_\text{вых} = U_\text{пит}\,\frac{R_0}{R_0 + R(E)}

Наклон этой зависимости по логарифму освещённости максимален, когда R₀ равно сопротивлению фоторезистора в рабочей точке: для порога около 10 лк у PDV-P8001 это 3–11 кОм. Напряжение и токи делителя удобно проверить в калькуляторе делителя напряжения.

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

  • Разброс. Сопротивление при 10 лк у разных экземпляров различается в 3,7 раза. Если обратить формулу без калибровки и подставить среднее геометрическое R10=3⋅11≈5,7R_{10} = \sqrt{3 \cdot 11} \approx 5{,}7 кОм, у крайних экземпляров ошибка освещённости — до (11/5,7)1/0,6 ≈ 3 раз в обе стороны.
  • Нелинейность. Зависимость степенная, а сам показатель γ дан только типичным — его разброс добавляет ошибку сверх названной.
  • Медленность. Типичное время нарастания 50 мс и спада 20 мс при 10 лк; темновое сопротивление нормируют лишь через 10 с после выключения света.
  • Кадмий. Директива RoHS 2011/65/EU ограничивает кадмий 0,01 % по массе однородного материала, а светочувствительный слой PDV-P8001 — сульфид кадмия. Для изделий, которые должны соответствовать RoHS, это серьёзное ограничение.
  • Монтаж. Advanced Photonix запрещает паять фоторезисторы CdS оплавлением и в паровой фазе. Допустимая температура пайки выводов — 260 °C в течение 3 с на расстоянии 1/16 дюйма (1,6 мм) от корпуса; жало паяльника — не горячее 300 °C.

Итог: фоторезистор хорош для порога «день — ночь» с компаратором с гистерезисом, но не для измерения люксов.

Фототранзистор TEMT6000

Vishay TEMT6000X01 — кремниевый NPN-фототранзистор в прозрачном корпусе 1206 с максимумом чувствительности на 570 нм, полосой 440–800 нм по уровню 0,5 и углом половинной чувствительности ±60°. Его фототок почти пропорционален освещённости:

Параметр (источник A, VCE = 5 В)Значение
Фототок при 20 лк3,5–16 мкА, типично 10 мкА
Фототок при 100 лктипично 50 мкА
Темновой ток3 нА, не больше 50 нА
Температурный коэффициент фототока1,18 %/К (источник A), 0,9 %/К (белый светодиод)
VCEO, не более6 В
Напряжение насыщения при 20 лк и IPCE = 1,2 мкА0,1 В

Коллектор подключают к питанию, эмиттер — через нагрузочный резистор Rн к земле, а напряжение на резисторе подают на АЦП:

U=IPCE⋅Rн,Rн≤Uпит−UКЭ насSmax⋅EmaxU = I_{PCE} \cdot R_\text{н}, \qquad R_\text{н} \le \frac{U_\text{пит} - U_{КЭ\,\text{нас}}}{S_{max} \cdot E_{max}}

где S — чувствительность в микроамперах на люкс. Типичная — 50 мкА / 100 лк = 0,5 мкА/лк, наибольшая по разбросу — 16 мкА / 20 лк = 0,8 мкА/лк. С Rн = 10 кОм при питании 3,3 В типичный экземпляр упирается в насыщение около 640 лк: (3,3 − 0,1) В / 10 кОм = 320 мкА. Чтобы измерять до 1000 лк любым экземпляром, Rн должен быть не больше 3,2 В / 800 мкА = 4 кОм. Это оценка сверху: 0,1 В насыщения Vishay нормирует только при токе 1,2 мкА, а для сотен микроампер значения в даташите нет — Rн берут с запасом. Шаг 10-битного АЦП с опорой 3,3 В — 3,2 мВ, то есть при 10 кОм около 0,64 лк для типичного датчика; подробнее о шаге и опорном напряжении — в статье «АЦП».

Для люксов TEMT6000 подходит с оговорками: разброс фототока между экземплярами — в 4,6 раза, а температурный коэффициент 1,18 %/К даёт около 30 % на 25 К. В отличие от цифровых датчиков, он сам ничего не интегрирует, поэтому от мерцания ламп защищаются снаружи: DN26 для быстрых датчиков предлагает RC-цепочку, замедляющую отклик, а отсчёты АЦП можно усреднять за 50 мс или кратное время. Зато он обходится без I²C и, по даташиту Vishay, соответствует директиве RoHS 2002/95/EC.

Цифровые датчики I²C

Цифровой датчик освещённости объединяет фотодиод, интегрирующий АЦП и интерфейс I²C. По даташитам производителей:

ПараметрBH1750FVITSL2561VEML7700OPT3001
ПроизводительROHMams OSRAM (TAOS)VishayTexas Instruments
Диапазонкод 0–65 535, при MTreg 69 до ≈ 54 600 лк; с MTreg 0,11–100 000 лк16 бит на канал, динамический диапазон 1 000 000 : 10–140 000 лк0,01–83 865,6 лк
Наименьший шаг0,5 лк (0,11 лк с MTreg)—0,0042 лк0,01 лк
Время измерения120 мс (до 180), режим L — 16 мс (до 24)13,7, 101 или 402 мс25–800 мс100 или 800 мс
Питание2,4–3,6 В2,7–3,6 В2,5–3,6 В1,6–3,6 В
Уровни шины1,65 В…VCC (вывод DVI)VIH от 2,1 Вподтяжки к 1,7–3,6 Вподтяжки к 1,6–5,5 В
Адрес I²C0x23 или 0x5C0x29, 0x39 или 0x490x100x44–0x47
Ток при работе120 мкА при 100 лк0,24 мА45 мкА, 2–28 мкА в режимах PSM1,8 мкА в темноте, 3,7 мкА на полной шкале
Ток во сне0,01 мкА3,2 мкА0,5 мкА0,3 мкА
Спектрпик 560 нмканал 0 — видимый и ИК, канал 1 — ИКблизок к V(λ), отдельный канал Whiteпик 550 нм, ИК 0,2 % на 850 нм
Точность: что нормированоразброс между экземплярами: 0,96–1,44 отсчёта на люкс (белый светодиод, 1000 лк)показания / люксметр 0,65–1,35 (люминесцентная), 0,60–1,40 (накаливания) — оценка, не проверяется у каждого экземпляра±10 % между источниками света (замеры Vishay на 10 образцах)1800–2200 лк при 2000 лк (мин. / макс.)
Вывод прерываниянетINTнетINT
Идентификаторнет0x5X в регистре 0x0A0x81 в младшем байте регистра 0x070x5449 в 0x7E, 0x3001 в 0x7F

Все четыре работают только от низкого напряжения: с платой на 5 В нужны стабилизатор и согласование уровней, исключение — линии I²C у OPT3001, которые выдерживают 5,5 В. Подтягивающие резисторы считают как для любой шины — в статье «Интерфейс I²C».

BH1750FVI: отсчёт делить на 1,2

В текущем каталоге датчиков освещённости ROHM BH1750FVI нет: там BH1603FVC, BH1620FVC, BH1721FVC и BH1730FVC (проверено 18 октября 2026 года). Для новой разработки разумнее VEML7700 или OPT3001.

У BH1750 один фотодиод и три режима, каждый в непрерывном и однократном варианте; после однократного измерения датчик сам засыпает.

РежимШагВремя, типично / макс.Код непрерывного / однократного
H-Resolution1 лк120 / 180 мс0x10 / 0x20
H-Resolution20,5 лк120 / 180 мс0x11 / 0x21
L-Resolution4 лк16 / 24 мс0x13 / 0x23

Остальные команды: 0x00 — выключение, 0x01 — включение, 0x07 — сброс регистра данных (только во включённом состоянии). Каждую команду передают отдельной транзакцией со STOP: две команды подряд датчик не принимает. ROHM рекомендует режим H-Resolution: длинное интегрирование подавляет помехи 50 и 60 Гц.

Освещённость считается по 16-битному отсчёту N (старший байт первым) и содержимому регистра времени измерения MTreg:

Ev=N1,2⋅69MTE_v = \frac{N}{1{,}2} \cdot \frac{69}{MT}

В режиме H-Resolution2 результат делят ещё на 2. Число 1,2 — типичное отношение отсчёта к люксам; у отдельных экземпляров оно от 0,96 до 1,44, отсюда ±20 % в даташите. ROHM пишет о диапазоне 1–65 535 лк, но это диапазон кода: при MTreg по умолчанию (69) наибольший код 65 535 соответствует 65 535 / 1,2 ≈ 54 600 лк.

Регистр MTreg (от 31 до 254) меняет чувствительность в 0,45–3,68 раза вместе со временем измерения: при 254 оно вырастает до 120 · 254 / 69 ≈ 440 мс. Цена отсчёта — 1,85, 0,83 и 0,23 лк при MTreg 31, 69 и 254 в режиме H-Resolution и вдвое меньше в H-Resolution2, до 0,11 лк. Записывают MTreg двумя командами: 0x40 | MT[7:5] и 0x60 | MT[4:0].

Адрес — 0x23, если вывод ADDR ниже 0,3 · VCC, и 0x5C, если выше 0,7 · VCC. Питание 2,4–3,6 В, предельно 4,5 В. Вывод DVI задаёт уровни шины (от 1,65 В до VCC) и одновременно служит асинхронным сбросом: после подачи VCC на нём должен быть ноль не меньше 1 мкс. ROHM приводит четыре схемы: DVI от вывода микроконтроллера, от супервизора питания (двухтактного или с открытым стоком и резистором 1 кОм), от отдельного источника, который включается позже VCC, и RC-цепочку 1 кОм / 1 мкФ от VCC к DVI. О последней ROHM предупреждает, что сброс она может не обеспечить: в примере для VCC = 2,8 В питание должно нарастать от 0 до 2,4 В не дольше 100 мкс, а перед повторным включением VCC должно не меньше 25 мс оставаться ниже 0,05 В. Если сброс не обеспечен, ADDR подключают не напрямую, а через резистор около 100 кОм: этот вывод внутри — буфер с тремя состояниями для заводского теста.

TSL2561: два канала и формула по их отношению

В TSL2561 два фотодиода: канал 0 видит видимый свет и ИК, канал 1 — в основном ИК. По отношению каналов ams вычитает инфракрасную составляющую. Формула для корпуса T (TMB-6), где C₀ и C₁ — отсчёты каналов:

Ev={0,0304 C0−0,062 C0 (C1/C0)1,4,0<C1/C0≤0,500,0224 C0−0,031 C1,0,50<C1/C0≤0,610,0128 C0−0,0153 C1,0,61<C1/C0≤0,800,00146 C0−0,00112 C1,0,80<C1/C0≤1,300,C1/C0>1,30E_v = \begin{cases} 0{,}0304\,C_0 - 0{,}062\,C_0\,(C_1/C_0)^{1{,}4}, & 0 < C_1/C_0 \le 0{,}50 \\ 0{,}0224\,C_0 - 0{,}031\,C_1, & 0{,}50 < C_1/C_0 \le 0{,}61 \\ 0{,}0128\,C_0 - 0{,}0153\,C_1, & 0{,}61 < C_1/C_0 \le 0{,}80 \\ 0{,}00146\,C_0 - 0{,}00112\,C_1, & 0{,}80 < C_1/C_0 \le 1{,}30 \\ 0, & C_1/C_0 > 1{,}30 \end{cases}

Коэффициенты соответствуют времени интегрирования 402 мс и усилению 16×: если подставить в первую строку отклик из той же таблицы ams — 36 и 4 отсчёта на люкс для люминесцентной лампы, — получится 0,99 лк на каждый люкс. При другом времени отсчёты сначала делят на масштаб 0,034 (13,7 мс) или 0,252 (101 мс), а при усилении 1× ещё умножают на 16. При умножении обоих каналов на одно число k отношение C₁/C₀ не меняется, а результат по любой строке тоже умножается на k, поэтому то же самое можно сделать с готовым результатом. Если канал дошёл до полной шкалы — 5047 при 13,7 мс, 37 177 при 101 мс, 65 535 при 402 мс, — результат недостоверен, и время или усиление уменьшают. Формула выведена для датчика в открытом пространстве: окно или световод меняет свет на кристалле.

Адрес задаёт вывод ADDR SEL: 0x29 — на земле, 0x39 — свободен, 0x49 — на питании. Перед адресом регистра в командном байте ставят бит CMD (0x80), для чтения слова — ещё бит WORD (0x20). Датчик включают записью 0x03 в регистр 0x00; регистр 0x01 по умолчанию содержит 0x02 — 402 мс и усиление 1×. Каналы читают словами из регистров 0x0C и 0x0E (командные байты 0xAC и 0xAE), младший байт первым.

TSL2561T ams сняла с производства: по уведомлению от 20 мая 2021 года последние заказы принимались до 15 октября 2021 года, а последняя отгрузка была запланирована на конец июля 2022 года. Модули с ним ещё встречаются, но для новой разработки лучше взять VEML7700 или OPT3001.

VEML7700: усиление, время и поправка

VEML7700 питается от 2,5–3,6 В, его адрес фиксирован — 0x10, вывода прерывания нет. Подтягивающие резисторы шины можно подключить к своему питанию 1,7–3,6 В — к уровню микроконтроллера.

Схема включения VEML7700 по шине I²CПитание 2,5–3,6 В подаётся на вывод 2 (VDD) датчика через резистор R3 10 Ом; после него на общий провод стоят конденсаторы C1 10 мкФ и C2 100 нФ. R3 и C1 нужны только при сильно зашумлённом питании. Вывод 3 — общий провод. Линии SDA (вывод 4) и SCL (вывод 1) идут к микроконтроллеру и подтянуты резисторами R1 и R2 к питанию 1,7–3,6 В; их сопротивление — больше 1 кОм, например 2,2–4,7 кОм.VEML7700VDD2SDA4SCL1GND3МКSDASCL2,5–3,6 ВR310 Ом+C110 мкФC2100 нФR3 и C1 — только присильно зашумлённом питании1,7–3,6 ВR1R2R1, R2 — больше 1 кОм, например 2,2–4,7 кОм;адрес 0x10, вывода прерывания нет
Схема включения VEML7700 по рис. 8 даташита Vishay: C2 100 нФ по питанию, R3 10 Ом и C1 10 мкФ — только при сильно зашумлённом питании, подтяжки R1 и R2 от 2,2 до 4,7 кОм

Настройки — в 16-битном регистре 0x00:

ПолеБитыЗначения
ALS_GAIN12:1100 — ×1, 01 — ×2, 10 — ×1/8, 11 — ×1/4
ALS_IT9:61100 — 25 мс, 1000 — 50 мс, 0000 — 100 мс, 0001 — 200 мс, 0010 — 400 мс, 0011 — 800 мс
ALS_SD00 — работа, 1 — выключен (по умолчанию)

Результат читают из регистра 0x04, канал White с широким спектром — из 0x05; слово передаётся младшим байтом вперёд. После включения Vishay советует подождать 2,5 мс, а без режима энергосбережения читать результат не раньше, чем пройдёт время интегрирования. Цена отсчёта обратно пропорциональна усилению и времени интегрирования; таблицу Vishay целиком описывает формула

q=0,0042 лк⋅800 мсTинт⋅2Gq = 0{,}0042\ \text{лк} \cdot \frac{800\ \text{мс}}{T_\text{инт}} \cdot \frac{2}{G}

— от 0,0042 лк при G = 2 и 800 мс до 2,1504 лк при G = 1/8 и 25 мс; полная шкала 65 535 отсчётов — от 275 до 140 926 лк. Наименьшая обнаруживаемая освещённость — 0,008 лк: это 2 отсчёта при самом чувствительном режиме. Vishay советует начинать с усиления 1/8 или 1/4, чтобы не получить насыщение и переполнение, и повышать его, только если отсчётов не больше 100; к тому же при усилении 1 и 2 датчик выше 100 лк нелинеен. Для 1/4 и 1/8 выше примерно 1000 лк результат поправляют многочленом, где x — освещённость в люксах до поправки:

Ev=6,0135⋅10−13x4−9,3924⋅10−9x3+8,1488⋅10−5x2+1,0023 xE_v = 6{,}0135 \cdot 10^{-13} x^4 - 9{,}3924 \cdot 10^{-9} x^3 + 8{,}1488 \cdot 10^{-5} x^2 + 1{,}0023\,x

В примере Vishay 5581 отсчёт при G = 1/4 и 100 мс даёт 5581 · 0,2688 = 1500 лк до поправки и 1658 лк после. Ещё две оговорки из рекомендаций: допуск времени интегрирования — ±30 %, а разные источники — светодиоды, люминесцентные лампы, дневной свет — совпадают в пределах ±10 %; галогенная лампа с сильным ИК может показать больше.

OPT3001: экспонента и мантисса

OPT3001 сам выбирает диапазон (режим автоматической полной шкалы) и отдаёт результат в формате с плавающей точкой: в регистре 0x00 биты 15:12 — экспонента e, биты 11:0 — мантисса m. Байты регистров передаются старшим вперёд.

Ev=0,01 лк⋅2e⋅mE_v = 0{,}01\ \text{лк} \cdot 2^{e} \cdot m

При e = 0 цена отсчёта 0,01 лк и шкала 40,95 лк, при e = 11 — 20,48 лк и 83 865,6 лк. Например, слово 0x5ABC: e = 5, m = 0xABC = 2748, освещённость 0,32 · 2748 = 879,36 лк.

После подачи питания OPT3001 спит: регистр конфигурации 0x01 содержит 0xC810 — автоматический диапазон, 800 мс, режим M = 00. Для непрерывных измерений в него пишут 0xCC10, для однократного — 0xCA10. Преобразование длится на 3 мс дольше интегрирования; при 100 мс на диапазонах до e = 5 теряется до трёх младших разрядов. Адрес задаёт вывод ADDR: 0x44 — GND, 0x45 — VDD, 0x46 — SDA, 0x47 — SCL; первые два совпадают с адресами Sensirion SHT3x из статьи «Датчики влажности». Проверить, что на шине именно OPT3001, можно по регистрам 0x7E (0x5449 — «TI» в ASCII) и 0x7F (0x3001).

Ток при измерениях — 1,8 мкА в темноте и 3,7 мкА на полной шкале, в выключенном состоянии — 0,3 мкА; отклик на ИК 850 нм — 0,2 %, разброс по источникам света (накаливания, галогенная, люминесцентная) — 4 % без защитного стекла. Если SCL удерживают в нуле 28 мс, интерфейс датчика сбрасывается сам.

Пример: от кода к люксам

BH1750 за окном с пропусканием 50 %. ROHM предлагает компенсировать окно чувствительностью: удвоить MTreg с 69 до 138 (0b1000_1010). Команды: 0x44 (0x40 | 0b100), затем 0x6A (0x60 | 0b01010), затем 0x20 — однократное измерение. Время вырастает вдвое — до 240 мс, не больше 360 мс. Пусть прочитаны байты 0x13 и 0x88, то есть N = 5000. Освещённость снаружи окна — 5000 / 1,2 ≈ 4167 лк, на самом кристалле — вдвое меньше: 5000 / 1,2 · 69 / 138 ≈ 2083 лк. С учётом разброса 0,96–1,44 отсчёта на люкс у некалиброванного датчика тот же отсчёт означает от 3472 до 5208 лк снаружи.

VEML7700 на ярком свету. G = 1/8 (биты 12:11 = 10), 100 мс (биты 9:6 = 0000), ALS_SD = 0 — в регистр 0x00 записывают 0x1000. Цена отсчёта 0,5376 лк. Отсчёт 10 000 даёт 5376 лк до поправки, а многочлен Vishay — 6786 лк: на таком уровне поправка добавляет 26 %.

TSL2561 с настройками по умолчанию. После включения — 402 мс и усиление 1×. Пусть C₀ = 120, C₁ = 36, отношение 0,30. Формула для «сырых» отсчётов даёт 0,0304 · 120 − 0,062 · 120 · 0,301,4 ≈ 2,27 лк, а с поправкой на усиление (×16) — 36,3 лк. Забытый множитель 16 занижает освещённость в 16 раз.

Размещение за окном и рассеивателем

Датчик в корпусе видит мир через отверстие, и оно ограничивает поле зрения. ams в DN13B оценивает половинный угол по расстоянию от кристалла до наружной поверхности, а долю дошедшего света — как sin²θ для датчика с косинусной характеристикой:

tg⁡θ=da/2ddp+tpc+dapc\operatorname{tg}\theta = \frac{d_a/2}{d_{dp} + t_{pc} + d_{apc}}

где da — диаметр отверстия, ddp — расстояние от кристалла до верха корпуса датчика, tpc — толщина стенки, dapc — зазор между датчиком и стенкой. Отверстие 2 мм при 0,25 мм от кристалла до верха корпуса, стенке 1 мм и зазоре 0,25 мм даёт θ ≈ 34° и лишь 31 % света. По таблице ams при половинном угле 45° до датчика доходит 50 % света, при 30° — 25 %, при 15° — 6,7 %, поэтому ams рекомендует угол не меньше ±30°. Отверстие расширяют на допуски установки: в примере ams они дают ±0,5 мм в сумме и ±0,26 мм по корню из суммы квадратов, то есть отверстие шире на 0,52 мм. Для TSL2561 с вытянутой прямоугольной площадкой ams отдельно требует, чтобы край активной области был не ближе 0,5 мм к краю отверстия. Если угла не хватает, ставят световод. TI для OPT3001 советует поле зрения не меньше ±35°, лучше ±45°, и предупреждает, что световоды и решётчатые окна заметно искажают результат, если их оптику не просчитать.

У VEML7700 угол половинной чувствительности около ±55°, и Vishay считает ширину окна над чувствительной площадкой как w = 0,5 мм + 2 · d · tg 55°, где d — расстояние до наружной поверхности окна: при d = 1 мм выходит 3,36 мм. У BH1750 фотодиод размером 0,25 × 0,3 мм находится посередине ширины корпуса, в 1,3 мм от края с выводами 4–6, и по рисунку ROHM окно должно пропускать свет на круг радиусом не меньше 0,4 мм (диаметром 0,8 мм) с центром на фотодиоде.

Тёмное декоративное стекло пропускает обычно 5–30 % видимого света, иногда меньше 1 %, а некоторые чернила и красители почти прозрачны для ИК (TI). За таким стеклом отношение ИК к видимому растёт, и выигрывает датчик с сильным подавлением ИК. Любое окно, рассеиватель или светофильтр ослабляет свет по-разному на разных длинах волн (DN26), поэтому коэффициент пропускания измеряют люксметром на собранном изделии и учитывают при пересчёте: у BH1750 для этого есть MTreg, у VEML7700 и OPT3001 результат делят на измеренное пропускание. У TSL2561 этого мало: окно ослабляет видимый свет и ИК по-разному и меняет отношение C₁/C₀, а формула ams выведена для открытого датчика — с окном нужна собственная калибровка.

Типичные ошибки

  • Люксы по фоторезистору. Разброс R при 10 лк — в 3,7 раза; даже со средним сопротивлением в формуле ошибка у крайних экземпляров — до 3 раз в обе стороны, плюс разброс показателя γ.
  • Забыли нормировку. У TSL2561 формула написана для 402 мс и 16×, у VEML7700 цена отсчёта зависит и от усиления, и от времени.
  • Две команды BH1750 в одной транзакции. Датчик принимает одну команду до STOP; MTreg записывают двумя отдельными передачами.
  • Высокое усиление VEML7700 на ярком свету. При усилении 1 и 2 выше 100 лк показания нелинейны, а без поправочного многочлена выше примерно 1000 лк результат занижен.
  • Забыли разбудить. После подачи питания все четыре цифровых датчика спят: TSL2561 включают записью 0x03 в регистр 0x00, VEML7700 — сбросом бита ALS_SD, OPT3001 — записью режима в регистр 0x01, BH1750 — командой измерения. VEML7700 после включения нужно 2,5 мс и полное время интегрирования.
  • Конфликт адресов. OPT3001 на 0x44 или 0x45 не уживается на одной шине с SHT3x по тому же адресу.
  • Нет сброса BH1750. Если после подачи питания на DVI нет нуля хотя бы 1 мкс, ROHM предупреждает, что датчик может работать неправильно, а состояние выводов ADDR, SDA и SCL не определено.
  • Запаяли центральную площадку BH1750. ROHM требует её не паять и никуда не подключать: она на потенциале земли, и пайка грозит сбоями и большим током.
  • Мерцание у аналогового датчика. TEMT6000 ничего не интегрирует, поэтому одиночный отсчёт АЦП ловит мгновенную яркость лампы; нужны RC-цепочка или усреднение за 50 мс или кратное время (DN26).
  • Свет от своего изделия. Индикаторный светодиод или подсветка экрана рядом с окном датчика добавляют к измерению собственную засветку.

Пример кода: BH1750 на Arduino

Скетч делает однократные измерения в режиме H-Resolution и учитывает MTreg — коды команд и формула взяты из даташита ROHM.

#include <Wire.h>

// ROHM BH1750FVI, Technical Note Rev.D (2011.11)
const uint8_t BH1750_ADDR = 0x23;    // ADDR low; 0x5C with ADDR high
const uint8_t CMD_POWER_ON = 0x01;
const uint8_t CMD_ONE_TIME_H = 0x20; // one-shot, 1 lx steps, then power down
const uint8_t MTREG_DEFAULT = 69;

uint8_t mtreg = MTREG_DEFAULT;       // valid range 31..254

// The sensor takes one opcode per transaction: each needs its own STOP.
bool bh1750Command(uint8_t opcode) {
  Wire.beginTransmission(BH1750_ADDR);
  Wire.write(opcode);
  return Wire.endTransmission() == 0;
}

bool bh1750SetMtreg(uint8_t mt) {
  if (mt < 31 || mt > 254) return false;
  if (!bh1750Command(0x40 | (mt >> 5))) return false;    // 01000_MT[7:5]
  if (!bh1750Command(0x60 | (mt & 0x1F))) return false;  // 011_MT[4:0]
  mtreg = mt;
  return true;
}

// Illuminance in lux, or a negative value on a bus error.
float bh1750ReadLux() {
  if (!bh1750Command(CMD_ONE_TIME_H)) return -1.0f;
  // Max 180 ms at MTreg = 69; the measurement time scales with MTreg.
  delay((180UL * mtreg + 68) / 69);
  if (Wire.requestFrom(BH1750_ADDR, (uint8_t)2) != 2) return -2.0f;
  uint16_t raw = (uint16_t)Wire.read() << 8;  // high byte first
  raw |= Wire.read();
  return raw / 1.2f * MTREG_DEFAULT / mtreg;
}

void setup() {
  Serial.begin(115200);
  Wire.begin();
  bh1750Command(CMD_POWER_ON);
  bh1750SetMtreg(MTREG_DEFAULT);
}

void loop() {
  Serial.println(bh1750ReadLux(), 1);
  delay(1000);
}

С bh1750SetMtreg(138) функция bh1750ReadLux() вернёт освещённость на кристалле; если датчик стоит за окном с пропусканием 50 %, освещённость снаружи — это raw / 1.2f, без множителя 69 / MTreg. Другие датчики — в разделе «Датчики».

Частые вопросы

Какой датчик освещённости выбрать для Arduino?

Для готового модуля проще всего BH1750: одна формула (отсчёт / 1,2 = люксы), адрес 0x23 или 0x5C, шаг 1 лк. Но в текущем каталоге ROHM BH1750FVI нет (проверено 18 октября 2026 года), поэтому для новой разработки разумнее VEML7700 или OPT3001. OPT3001 лучше за тёмным стеклом и под лампами с сильным ИК: отклик на ИК 850 нм — 0,2 %, диапазон 0,01–83 865 лк, ток 1,8 мкА. У VEML7700 шаг 0,0042 лк, а наименьшая обнаруживаемая освещённость по Vishay — 0,008 лк. TSL2561 ams сняла с производства: последняя отгрузка была запланирована на конец июля 2022 года.

Как перевести показания BH1750 в люксы?

В режиме H-Resolution при регистре MTreg по умолчанию (69) освещённость равна 16-битному отсчёту, делённому на 1,2: например, байты 0x83 и 0x90 дают 33 680 отсчётов и 28 067 лк. В режиме H-Resolution2 результат делят ещё на 2, а при другом MTreg умножают на 69 / MTreg. Число 1,2 — типичное, у отдельных экземпляров от 0,96 до 1,44, то есть ±20 %.

Какие адреса I²C у BH1750, TSL2561, VEML7700 и OPT3001?

BH1750 — 0x23 при ADDR на земле и 0x5C при ADDR на питании; TSL2561 — 0x29, 0x39 или 0x49 (вывод ADDR SEL на землю, свободен или на питание); VEML7700 — всегда 0x10; OPT3001 — 0x44–0x47 в зависимости от того, соединён ADDR с GND, VDD, SDA или SCL. Адреса 0x44 и 0x45 совпадают с адресами датчиков влажности Sensirion SHT3x.

Можно ли измерять люксы фоторезистором?

Только грубо. У фоторезистора PDV-P8001 сопротивление при 10 лк — от 3 до 11 кОм у разных экземпляров, зависимость степенная с типичным показателем 0,6, время нарастания типично 50 мс. Если без калибровки считать по среднему сопротивлению 5,7 кОм, ошибка у крайних экземпляров — до 3 раз в обе стороны, и это без учёта разброса показателя. Фоторезистор хорош для порога «день — ночь»; кроме того, он содержит кадмий, а RoHS ограничивает кадмий 0,01 % по массе.

Можно ли питать BH1750 и VEML7700 от 5 В?

Нет. BH1750 рассчитан на 2,4–3,6 В при предельных 4,5 В, VEML7700 — на 2,5–3,6 В при предельных 4 В, TSL2561 — до 3,6 В при предельных 3,8 В. Нужен стабилизатор 3,3 В и согласование уровней; на готовых модулях они бывают — смотрите схему модуля. У OPT3001 питание тоже до 3,6 В, но его выводы I²C выдерживают 5,5 В.

Источники

  1. ROHM. BH1750FVI Digital 16bit Serial Output Type Ambient Light Sensor IC: Technical Note (No.11046EDT01, Rev.D, 2011.11); архивная копия официального файла ROHM с rohmfs.rohm.com в Wayback Machine, снимок 4 августа 2016 года — Features — 1–65 535 лк, 0,11–100 000 лк с регистром MTreg, разброс ±20 %, подавление помех 50/60 Гц; Absolute Maximum Ratings — 4,5 В; Operating Conditions — VCC 2,4–3,6 В, DVI 1,65 В…VCC; Electrical Characteristics — 120 мкА при 100 лк, 0,01 мкА в Power Down, пик 560 нм, отношение отсчёт/люкс 0,96–1,2–1,44 (белый светодиод, 1000 лк), разрешение 1 и 4 лк, время 120/180 и 16/24 мс, отношение лампа накаливания / люминесцентная 1; Instruction Set Architecture и Measurement mode explanation (с. 5) — коды команд, длинное время измерения режима H-Resolution подавляет помехи, в том числе 50/60 Гц; Measurement sequence example — пересчёт отсчёт/1,2 и пример 28 067 лк; Timing chart for VCC and DVI power supply sequence и Terminal Description — ноль на DVI не короче 1 мкс после подачи VCC, иначе ADDR через резистор около 100 кОм; Application circuit example of DVI terminal (с. 8–9) — сброс от вывода МК, от супервизора питания (двухтактного или с открытым стоком и резистором 1 кОм), от отдельного источника DVI, а в примере 4 — RC-цепочкой 1 кОм / 1 мкФ с оговоркой, что она может не обеспечить сброс: при VCC 2,8 В нарастание 0→2,4 В не дольше 100 мкс, перед повторным включением VCC не выше 0,05 В не меньше 25 мс; I2C Bus Access — адреса 0100011 и 1011100, одна команда на транзакцию; Adjust measurement result for influence of optical window — MTreg 31–69–254, формула лк на отсчёт, таблица 1,85/0,83/0,23 и 0,93/0,42/0,11 лк, удвоение времени; H-Resolution Mode2; About an optical design on the device (с. 14) — фотодиод 0,25 × 0,3 мм посередине ширины корпуса и в 1,3 мм от края с выводами 4–6, свет должен покрывать круг радиусом не меньше 0,4 мм с центром на фотодиоде; Cautions on use, п. 10 — центральную площадку не паять
  2. ROHM. Ambient Light Sensor ICs: каталог продукции (проверено 18 октября 2026 года) — в каталоге BH1603FVC, BH1620FVC, BH1721FVC и BH1730FVC; BH1750FVI в нём нет
  3. ams OSRAM. TSL2561 Light-to-Digital Converter: Datasheet (DS000110, v1-01, 2018-Apr-23) — General Description — канал 0 (видимый + ИК) и канал 1 (ИК), эффективный динамический диапазон 20 бит при разрешении 16 бит; Fig. 1 (Key Benefits & Features) — динамический диапазон 1 000 000 : 1, подавление пульсаций 50/60 Гц; Fig. 6–7 — питание 2,7–3,6 В, VIH от 2,1 В, ток 0,24 мА и 3,2 мкА; Fig. 8, примечания 4–7 — время 13,7/101/402 мс, полная шкала 5047/37 177/65 535, отклик 36 и 4 отсчёта на люкс при 402 мс и 16×, усиление 1× в 16 раз меньше, отношение показаний к люксметру 0,65–1,35 и 0,60–1,40 (оценка по разбросу параметров на 640 и 940 нм, с лампами не проверяется у каждого экземпляра); Fig. 13 — адреса 0101001, 0111001, 1001001; Fig. 15–18 — регистр команд (бит CMD), включение записью 03h, регистр Timing (по умолчанию 02h, GAIN, INTEG), масштабы 0,034/0,252/1; Fig. 23 — ID, PARTNO 0101; Calculating Lux — кусочная формула для корпуса T, только для открытого датчика
  4. ams AG. End of Life Notification Plano Test Site (TCS3xxx_TSL2xxx_EN001015, 1-00, May 20, 2021) — TSL2561T в списке снимаемых с производства: последний заказ до 15 октября 2021 года, последняя отгрузка до конца июля 2022 года
  5. Vishay Semiconductors. VEML7700 High Accuracy Ambient Light Sensor With I2C Interface (Document Number 84286, Rev. 1.8, 28-Nov-2024) — Features и Product Summary — 2,5–3,6 В, шина 1,7–3,6 В, 0–140 000 лк, 0,0042 лк, подавление мерцания 100 и 120 Гц; Basic Characteristics — 0,5 мкА, 2/8/45 мкА; Device Address — 0x10; нет вывода прерывания; Table 1 — поля ALS_GAIN, ALS_IT, ALS_SD, регистр 00h по умолчанию в выключенном состоянии; регистры 04h ALS, 05h WHITE; Table 8 — ID 0x81; таблица Refresh Time, IDD, and Resolution Relation; Fig. 8 — схема включения: R3 10 Ом и C1 10 мкФ только при сильно зашумлённом питании, C2 100 нФ, подтяжки R1 и R2 больше 1 кОм, например 2,2–4,7 кОм
  6. Vishay Semiconductors. Designing the VEML7700 Into an Application: Application Note (Document Number 84323, revision 06-Mar-2025) — Wake-up — ожидание 2,5 мс; Resolution and gain settings (с. 3) — начинать с усиления 1/8 или 1/4, чтобы избежать насыщения и переполнения; ALS_IT — допуск времени ±30 %; Calculating the lux level — таблица разрешения и максимума от 0,0042 до 2,1504 лк и от 275 до 140 926 лк, усиление 1 и 2 нелинейно выше 100 лк, пример 5581 × 0,2688 = 1500 лк → 1658 лк и коэффициенты поправочного многочлена от освещённости до поправки; наименьшая обнаруживаемая освещённость 0,008 лк (2 отсчёта); Application-dependent lux calculation — порог 100 отсчётов; Lux level matching — ±10 % между источниками на 10 образцах, галоген выше; White channel — отношение больше 2 у источников с сильным ИК; Power-saving modes — ожидание не меньше времени интегрирования; Mechanical considerations — угол половинной чувствительности ±55°, ширина окна w = 0,5 мм + 2 · d · tg 55°; Fig. 2 — та же схема, подтяжки к питанию 1,7–3,6 В на уровне микроконтроллера
  7. Texas Instruments. OPT3001 Ambient Light Sensor (ALS) (SBOS681C, July 2014, revised November 2017) — разд. 1 — 0,01–83 000 лк, более 99 % подавления ИК, 1,6–3,6 В, выводы до 5,5 В; разд. 6.5 — пик 550 нм, полная шкала 83 865,6 лк, 1800–2200 лк при 2000 лк, ИК 0,2 % на 850 нм, разброс по источникам 4 %, угол половинной мощности 47°, ток 1,8 мкА в темноте (3,7 мкА на полной шкале) и 0,3 мкА, время 800 и 100 мс, преобразование на 3 мс дольше интегрирования; разд. 7.1 — интегрирование 100 или 800 мс сводит влияние 50 и 60 Гц к минимуму; разд. 7.3.4 — таймаут 28 мс, табл. 1 — адреса 1000100–1000111; разд. 7.5 — байты регистра передаются старшим вперёд; табл. 7–9 — экспонента и мантисса, lux = 0,01 · 2^E · R; табл. 10 — регистр конфигурации C810h, поля RN, CT, M, потеря разрядов при 100 мс; табл. 14–15 — ID 5449h и 3001h; разд. 8.1.2 — поле зрения не меньше ±35°, лучше ±45°, пропускание тёмных окон 5–30 % и ниже 1 %, решётчатые окна и световоды
  8. Vishay Semiconductors. TEMT6000X01 Ambient Light Sensor (Document Number 81579, Rev. 1.9, 23-Aug-11) — Description — NPN-фототранзистор в корпусе 1206, пик 570 нм; Features — соответствие директиве RoHS 2002/95/EC; Absolute Maximum Ratings — VCEO 6 В, 20 мА, 100 мВт; Basic Characteristics — темновой ток 3 и 50 нА, фототок 3,5–10–16 мкА при 20 лк и 50 мкА при 100 лк (источник A, VCE 5 В), температурный коэффициент фототока 1,18 %/К (источник A) и 0,9 %/К (белый светодиод), ±60°, 440–800 нм, VCEsat 0,1 В при 20 лк и IPCE 1,2 мкА
  9. Advanced Photonix. PDV-P8001 Photocell (CdS) — Photoresistor (DS PDV-P8001 Rev. B) — фоторезистор на сульфиде кадмия, 400–700 нм; Absolute Maximum Ratings — 150 В, 90 мВт; Electro-Optical Specifications — темновое сопротивление не меньше 0,2 МОм через 10 с после 10 лк, 3–11 кОм при 10 лк и 2856 К, показатель наклона 0,6 между 10 и 100 лк, типичные нарастание 50 мс и спад 20 мс; Mechanical Specifications — температура пайки выводов 260 °C 3 с на расстоянии 1/16 дюйма от корпуса; Soldering Instructions — жало паяльника не горячее 300 °C; Special Considerations для CdS — не паять оплавлением и в паровой фазе
  10. TAOS / ams AG. DN21: Radiometric and Photometric Measurements with TAOS PhotoSensors (AN000167, March 12, 2007) — функция V(λ), принятая CIE в 1924 году, максимум на 555 нм, у 380 и 780 нм спадает практически до нуля; 683 лм/Вт на 555 нм; Equation 1 — интеграл с V(λ) от 380 до 780 нм; лк = лм/м²; 50 000–100 000 лк на прямом солнце и 20–50 лк при слабом освещении в помещении; кремний 300–1100 нм, ИК-светодиод 880 нм даёт ноль люксов
  11. TAOS / ams AG. DN26: Ambient Light Sensing (ALS) (AN000172, March 31, 2009) — Design Considerations — много ИК у ламп накаливания и солнца; мерцание 100 и 120 Гц и интегрирование за время, кратное 50 мс, а для быстрых датчиков — RC-цепочка, замедляющая отклик; скользящее среднее для медленной реакции; апертуры, линзы и фильтры в оптическом пути
  12. TAOS / ams AG. DN13B: Optical Window Design for ALS Devices (AN000104, February 2010) — формула половинного угла tg θ = (da/2) / (ddp + tpc + dapc), доля света sin²θ, пример (Figure 5): отверстие 2 мм, 0,25 + 1 + 0,25 мм → 34° и 31 %; Aperture Impact — при половинном угле 45°, 30°, 20° и 15° до датчика доходит 50, 25, 12 и 6,7 % света; для TSL2561 с прямоугольной площадкой край активной области не ближе 0,5 мм к краю отверстия; Mechanical Tolerances — допуски в сумме ±0,5 мм, по корню из суммы квадратов ±0,26 мм, отверстие расширить на 0,52 мм; Conclusions — угол не меньше ±30°, тогда до датчика доходит не меньше 25 % света; световод при недостаточном угле
  13. Directive 2011/65/EU of the European Parliament and of the Council on the restriction of the use of certain hazardous substances in electrical and electronic equipment (RoHS), Annex II, as adopted (OJ L 174, 1.7.2011); текст на legislation.gov.uk — приложение II — кадмий не больше 0,01 % по массе в однородном материале
  14. Sensirion. Datasheet SHT3x-DIS: Humidity and Temperature Sensor (Version 7, December 2022) — табл. 8 — адреса I²C 0x44 и 0x45 (вывод ADDR на низком или высоком уровне)
  15. BIPM. The International System of Units (SI), 9th edition 2019 (V4.01, June 2026) — разд. 2.2 — световая эффективность монохроматического излучения частотой 540 · 10¹² Гц, Kcd = 683 лм/Вт, скорость света 299 792 458 м/с; разд. 2.3.4, табл. 4 — люкс, единица освещённости, лм/м²

Нашли ошибку?