BH1750 — цифровой датчик освещённости с шиной I2C: он измеряет освещённость в люксах и отдаёт значение двумя байтами, и популярен он именно потому, что считает по кривой видимости глаза, то есть в тех же единицах, что и люксметр. Диапазон — от 1 до 65535 люкс, точность типично ±20 %, питание самой микросхемы 2,4…3,6 В, а на готовых модулях с преобразователем питания — 3,3…5 В. Два момента, на которых чаще всего спотыкаются. Первый — адрес: он не один, а выбирается выводом ADDR. Если этот вывод заземлён или оставлен в воздухе, прибор отвечает на 0x23, а если поднят к питанию — на 0x5C. Это удобно, потому что на одной шине можно повесить два датчика, но на модулях вывод бывает распаян по-разному, поэтому адрес проверяют сканированием шины. И тут же грабли: 0x23 — это семиразрядный адрес, а в байте на проводе он выглядит как 0x46 на запись и 0x47 на чтение, и посылка 0x23 напрямую — самая частая ошибка в драйвере, из-за которой датчик не отвечает вовсе. Второй — два режима измерения. Непрерывный датчик меряет сам, и последнее значение всегда доступно для чтения, а разовый делает одно измерение по команде и после него сам засыпает, и команду надо посылать заново перед каждым чтением. Для батарейных схем разовый экономнее, но после каждого включения питания прибор возвращается в режим по умолчанию, и его надо перенастроить. Третье, что стоит знать, — прибор насыщается на ярком свету: в прямом солнечном свете он упирается в верхнюю границу, и это не поломка датчика, а предел его диапазона.
Содержание руководства (10 разделов)
Как устроен обмен с прибором
Обмен предельно простой: сначала контроллер отправляет байт команды, затем прибор отдаёт два байта со значением, старшим байтом вперёд. Значение — это сырой отсчёт, и пересчитывается он в люксы делением на 1,2, а при изменённом времени интегрирования применяется дополнительный поправочный коэффициент.
Считывание прибора в один разовый замере идёт не мгновенно: команда запускает измерение, и данные становятся готовы через 16 мс в низком разрешении или через 120 мс в высоком. Если прочитать раньше, прибор отдаст не то значение, и контроллер должен либо ждать, либо читать повторно.
Отдельная команда переводит прибор в режим питания покоя, и в этом режиме потребление составляет единицы микроампер. Для батарейной схемы это и есть основная экономия: датчик спит между замерами, а просыпается только на время измерения.
Два адреса и подводный камень с байтом на проводе
Адрес прибора задаётся выводом ADDR: при низком уровне или в воздухе он равен 0x23, при высоком — 0x5C. На готовых модулях вывод обычно подтянут к земле, и тогда прибор отвечает на 0x23, но встречаются модули с другой распайкой, поэтому проверка сканированием шины надёжнее, чем догадка о маркировке.
И здесь же про то, из-за чего датчик чаще всего «не отвечает». 0x23 — это семиразрядный адрес в том виде, в котором его пишут в документации. В байте, который реально уходит по проводу, адрес сдвинут на один бит: 0x46 на запись и 0x47 на чтение. Если в драйвере отправить 0x23 как есть, прибор не ответит, и всё выглядит как поломка железа.
Наконец, 0x23 — это ещё и команда однократного замера в низком разрешении. Совпадение команды и адреса приводит к путанице в коде, и при написании драйвера с нуля это стоит держать в голове: команда 0x23 и адрес 0x23 — разные вещи, просто записанные одинаково.
Непрерывный и разовый режимы
В непрерывном режиме прибор меряет сам, и значение в любой момент доступно для чтения, причём оно всегда свежее. Это режим по умолчанию, и он удобен там, где нужна быстрая реакция: автоматическая яркость подсветки, включение света по датчику, реакция на засветку.
Разовый режим делает одно измерение по команде и после него сам переходит в режим питания покоя, поэтому перед каждым следующим чтением команду надо посылать заново. Экономия тут заметная, и для схем на батарейке это обычно правильный выбор: прибор спит почти всё время, а просыпается на 16 или 120 мс.
Оговорка, о которой стоит знать: после включения питания прибор возвращается в режим по умолчанию, то есть в непрерывный. Если схема рассчитана на разовые замеры, после каждого подачи питания датчик надо перенастроить, иначе он будет работать в непрерывном режиме и потреблять ток без нужды. В библиотеках этот порядок обычно уже прописан, но при работе напрямую по шине это легко упустить.
Разрешение и время интегрирования
У прибора есть три уровня разрешения: 1 люкс, 0,5 люкса и 4 люкса, и каждому соответствует своё время измерения — 120 мс, 120 мс и 16 мс. То есть чем мельче шаг, тем дольше прибор копит свет.
Помимо этого есть регистр времени интегрирования, который меняет чувствительность в широких пределах: по умолчанию его значение 69, и при его увеличении прибор дольше накапливает свет, а значит, видит и более слабое освещение, но уже не успевает за быстрыми изменениями. Всё это позволяет вывести прибор из перенасыщения на ярком свету или, наоборот, заставить его реагировать на слабый свет.
Тонкость в том, что при изменённом времени интегрирования пересчёт в люксы меняется, и если этого не учесть, значения будут завышены или занижены в несколько раз. Правильный порядок такой: сначала выставить время интегрирования, затем пересчитывать сырой отсчёт с поправкой.
Характеристики
- Диапазон измерения: от 1 до 65535 люкс.
- Точность типично ±20 %, кривая видимости близка к человеческой, пик около 560 нм.
- Питание микросхемы 2,4…3,6 В; на модулях с преобразователем 3,3…5 В.
- Потребление в активном режиме около 120 мкА, в режиме питания покоя — единицы микроампер.
- Шина I2C до 400 кГц, результат — два байта, старшим вперёд.
- Чувствительность около 1,2 отсчёта на люкс при времени интегрирования 69.
Частые вопросы
- Какой адрес у прибора — 0x23 при заземлённом выводе ADDR и 0x5C при поднятом к питанию; на проводе это 0x46 и 0x47.
- Почему датчик не отвечает — чаще всего в драйвер отправляют 0x23 вместо 0x46.
- Чем отличается разовый замер от непрерывного — разовый делает одно измерение и засыпает, непрерывный меряет сам и последнее значение всегда доступно.
- Что будет при отключении питания — прибор вернётся в режим по умолчанию, и в разовом режиме его надо перенастроить заново.
- Насыщается ли датчик — да, на прямом солнечном свете он упирается в верхнюю границу диапазона, и это не неисправность.
Детали, названные в этом руководстве
КаталогКаждая позиция — это деталь или семейство, о которых идёт речь в руководстве, со ссылкой на карточку в каталоге: параметры, корпус, стадия жизненного цикла и datasheet, если он у нас локализован. Там, где в тексте названо семейство, в таблице стоит конкретный заказной партномер со склада. Если позиции из руководства в списке нет — значит, её у нас сейчас нет: пришлите номер, и она уйдёт в подбор вместе с остальными.
| Партномер | Производитель | Описание |
|---|---|---|
| BH1750FVI-TR | Rohm Semiconductor | — |
Примените это к своей спецификации
Отправьте партномера или файл спецификации (Excel / CSV). По каждой строке проверим складские остатки в Шэньчжэне, наличие заводской упаковки и проверенные аналоги — с отгрузкой единой партией.
Запрос успешно отправлен!
Ваш запрос по позиции (ICBOMS) зарегистрирован. Номер заявки:
1. Служба закупок в Шэньчжэне проверяет реальные физические остатки на складах и Data Code.
2. Официальный расчет с ценами, сроками и условиями DDP будет отправлен на в течение 2-24 ч.
Как написано это руководство
Руководство написано службой поставок ICBOMS в Шэньчжэне и выверено по документам производителей и стандартам, на которые ссылается текст. Формулировки ограничены тем, что делает эта служба, и тем, как оценивают деталь — без ориентировочных цен, сроков поставки и остатков: всё это считается по каждой строке отдельно, по факту проверки. Дата последней вычитки стоит в начале страницы.