Датчик освещенности bh1750

Датчик освещенности BH1750

Иногда возникает необходимость получить данные об уровне освещенности конкретного места, объекта. Для таких целей используются специальные приборы – люксметры. Но это не такое уж и распространенное оборудование. Освещенность можно попробовать измерять фоторезистором GL5516, например. Но в таком случае необходимо делать измерительную схему и калибровать полученные данные с такого датчика. Упростить задачу нам поможет датчик, который посредством цифрового интерфейса будет выдавать готовые данные в определенных единицах измерения – BH1750.

Датчик этот заключен в корпусе для поверхностного монтажа WSOF6I. Внутри непосредственно сам фотодатчик в виде фотодиода, усилитель сигнала фотодиода, АЦП (аналого цифровой преобразователь) и некая логика, которая обрабатывает данные, переводит все в единицы измерения Люкс и передает по I 2 C к управляющему устройству (микроконтроллеру в нашем случае):

Вообще же вы можете с первого взгляда сказать, что это какая-то лапша – ведь датчик в корпусе от обычных микросхем примерно, как это все может измерять освещенность? Вот здесь как раз и стоит обратить внимание на корпус датчика и присмотреться внимательнее.

Корпус оказывается полупрозрачный! А внутри просматривается какая-то схема или чувствительный слой, скорее всего. Честно говоря, именно этот вопрос стал решающим в покупке этого датчика – интерес — как освещенность то определяется. На самом деле внутри фотодиод, а корпус выполняет роль так же светофильтра, видимо, с заведомо известным коэффициентом пропускания света, чтобы точно измерять освещенность.

Что это за датчик интерес удовлетворили, теперь можно продолжить.

Итак, датчик BH1750 обладает следующими характеристиками:

  • Цифровой интерфейс – I 2 C
  • Высокое разрешение – до 0,5 Лк
  • Малый потребляемый ток и функция спящего режима
  • Фильтрация световых шумов 50/60 Гц
  • Малая зависимость от источника света (лампа накаливания, светодиод и так далее)
  • Малое влияние инфракрасного излучения
  • Возможно выбрать 2 адреса микросхемы для I2C интерфейса (можно подключить одновременно два таких датчика к одной шине)
  • Не требует калибровки, что максимально удобно для применения в любых проектах
  • Очень малые габариты датчика
  • Напряжение питания – 2,4 – 3,6 В
  • Ток потребления – 120 мкА
  • Ток потребления в спящем режиме – 0,01 мкА
  • Измеряемая длина волны – 560 нм
  • Точность в режиме высокого разрешения – 1 Лк
  • Точность в режиме низкого разрешения – 4 Лк
  • Период измерения в режиме высокого разрешения – 120 мс
  • Период измерения в режиме низкого разрешения – 16 мс
  • АЦП – 16 бит

Чтобы протестировать датчик освещенности собираем схему:

Здесь уже все привычно для нас. В качестве микроконтроллера используется ATmega8a как наиболее универсальный и популярный микроконтроллер. Использовать микроконтроллер можно в любом корпусе – разницы нет, кроме порядка расположения выводов на корпусах. Индикация осуществляется на ЖК экранчике на базе HD44780. В моем случае используется экран на 4 строки по 20 символов на каждую, однако можно использовать и размер 1602 – информации на экранчик выводится не много, поэтому все помещается. Переменный резистор R2 необходим для регулировки контраста символов на дисплее. Вращением движка этого резистора добиваемся наиболее четких для нас показаний на экране. Подсветка ЖК дисплея организована через вывод «А» и «К» на плате дисплея. Подсветка включается через резистор, ограничивающий ток — R1. Чем больше номинал, тем более тускло будет подсвечиваться дисплей. Однако пренебрегать этим резистором не стоит во избежание порчи подсветки. Сам дисплей подключается к микроконтроллеру по 4х битной схеме. Резистор R3 необходим для предотвращения самопроизвольного перезапускания микроконтроллера в случае появления случайных помех на выводе PC6. Резистор R4 подтягивает плюс питания к этому выводу, надежно создавая потенциал на нем. В данной схеме светодиод лишь моргнет при успешном запуске схемы, никакой другой функции не предусмотрено, хотя по желанию можно добавить еще много чего – памяти остается целый вагон. Резистор R5 ограничивает ток через светодиод, чтобы тот не вышел из строя. Резистор R4 подтягивает ножку датчика к земле, отвечающую за адрес микросхемы для I 2 C интерфейса, посмотреть все эти цифры можно в исходном коде, который расположен в конце статьи. Для правильной работы I2C интерфейса необходимы резисторы R7 и R8. С их помощью на линиях образуется логическая единица из-за того, что они подтянуты к плюсу питания. При формировании логического нуля линии прижимаются к земле посредством ведущего или ведомого (микроконтроллера или датчика).

Основное питание схемы составляет 3,3 вольта, что обусловлено электрическими параметрами датчика освещенности BH1750. 5 вольт необходимы лишь для питания дисплея, если применить, например экранчик от nokia 5110, для питания которого необходимо также 3,3 вольта, то можно опустить из схемы стабилизатор напряжения на 5 вольт. Стабилизаторы напряжения на 5 вольт и 3,3 вольта можно применить абсолютно любые на аналогичные напряжения, можно использовать как линейные стабилизаторы, так и импульсные.

Схема была собрана на модулях на отладочной плате:

Основа – отладочная плата для микроконтроллеров Atmega8 и других контроллеров, совместимых с ней по выводам.

Используется модуль с датчиком BH1750. По большому счету кроме датчика тут больше ничего особенного нет – подтягивающие резисторы для работы датчика, стабилизатор напряжения на 3,3 вольта и несколько конденсаторов. Основной плюс модуля – удобство соединения с микроконтроллером посредством штырьков.

Датчик выдает информацию об освещенности в единицах измерения Люкс. Люкс равен освещённости поверхности площадью 1 м² при световом потоке падающего на неё излучения, равном 1 лм (Люмен). Для сравнения освещенность в рабочем кабинете составляет порядка 300 – 500 Люкс, при полнолунии – 1 Люкс, в ясный солнечный день в тени – 10 тыс. – 25 тыс. Люкс, а под солнцем порядка 32 тыс. – 130 тыс. Люкс. Разбежка понятна большая из-за состояния воздушного покрова – разреженность воздуха, облака, дым, смог и так далее.

Для программирования микроконтроллера необходимо знать конфигурацию фьюз битов:

Такие датчики могут применяться в ЖК дисплеях, мобильных телефонах, цифровых камерах, планшетах и так далее. Основная польза от таких датчиков в подобных устройствах автоматическая регулировка подсветки дисплея, например или какие либо настройки в цифровых камерах, связанных с качеством фото и освещенностью экспозиции. Цена датчика BH1750 порядка 2 – 3 уе в виде модуля на aliexpress и ebay. Модули вполне высокого качества, пайка без дефектов, все компоненты стоят ровненько и на своих местах.

К статье также прилагается прошивка для микроконтроллера Atmega8, исходный код в AVR studio 4, даташит на датчик освещенности, а также небольшое видео, демонстрирующее работу датчика.

Как подключить датчик освещённости BH1750 к Arduino

Подключим цифровой 16-битный датчик освещённости BH1750 (люксометр), реализованный на модуле GY-302 или аналогичном, к Arduino.

  • Arduino UNO или иная совместимая плата;
  • модуль GY-302 с цифровым датчиком освещённости BH1750;
  • соединительные провода (вот хороший набор);
  • персональный компьютер со средой разработки Arduino IDE.

1 Схема подключения датчика BH1750 к Arduino

Рассмотрим модуль GY-302 с сенсором BH1750. Сенсор BH1750 представляет собой цифровой 16-битный цифровой датчик освещённости, что задаёт диапазон его измерений: от 1 до 65535 люкс. Согласно техническому описанию, датчик BH1750 чувствителен к видимому свету и практически не подвержен влиянию инфракрасного излучения, т.е. реагирует примерно на тот же спектральный диапазон, что и человеческий глаз. Вследствие этого такие сенсоры получили широкое распространение в современной электронной аппаратуре – мобильных устройствах, фото- и видеокамерах, в системах «умный дом» и многих других.

Читайте также  Светодиод в фонарик маркировка

Подключение модуля производится по двухпроводному интерфейсу I 2 C, а питание осуществляется от +5 В. Интерфейс I 2 C в платах Arduino реализован на аналоговых пинах A4 и A5, которые отвечают за SDA (шина данных) и SCL (шина тактирования), соответственно. Вывод ADDR модуля GY-302 можно оставить не подключённым или соединить с землёй.

Схема подключения модуля GY-302 с датчиком BH1750 к Arduino

2 Библиотека и скетчдля датчика BH1750

Для начала не будем углубляться в тонкости реализации интерфейса взаимодействия датчика BH1750 с Arduino, а воспользуемся готовой библиотекой для BH1750. Скачанный архив распакуем в директорию со средой разработки Arduino IDE/libraries/.

Напишем вот такой скетч и загрузим его в Arduino.

В скетче мы каждые 100 мсек считываем с датчика BH1750 показания освещённости в люксах и выводим эти данные в последовательный порт.

3 Сенсор BH1750 и Arduino в работе

Подключим датчик освещённости BH1750 к Arduino по приведённой выше схеме. Подключим Ардуино к компьютеру. Запустим среду разработки Arduino IDE и откроем монитор последовательного порта сочетанием клавиш Ctrl+Shift+M или через меню Инструменты. В мониторе последовательного порта побегут значения освещённости с нашего датчика BH1750.

Модуль GY-302 с датчиком BH1750 подключён к Arduino

Направьте датчик на источник света, потом закройте его от света, и вы увидите, как меняются показания.

4 Взаимодействие с сенсором BH1750 в деталях

Давайте попробуем взаимодействовать с датчиком BH1750 без использования специальных библиотек. Для этого нам понадобится техническое описание на него, которое можно скачать по ссылке под статьёй.

Для управления датчиком мы должны по его I2C адресу записать код команды. Под управлением понимается изменение режима работы, изменение чувствительности, сброс и т.д. Команды можно передавать только по одной. Для чтения мы должны запросить из датчика 2 байта. Датчик хранит всегда значение в виде 16-битного числа, но его интерпретация зависит от текущей чувствительности.

Последовательность обмена с датчиком BH1750

На следующем рисунке представлен список команд, необходимых для работы с датчиком BH1750:

Команды управления датчиком BH1750

Как мы знаем, управление и обмен данными с датчиком BH1750 происходит по протоколу I2C. Мне нравится использовать для быстрых тестов общения с устройствами I2C и SPI отладочную плату с микросхемой FT2232H. Подключим SCL датчика к SCL микросхемы FT2232H, SDA датчика – к SDA и SDO микросхемы. Питание 5В возьмём с Arduino Nano, а все земли объединим.

Модуль с датчиком BH1750 управляется микросхемой FTDI

Теперь запустим программу SPI via FTDI и попробуем прочитать значения, хранящиеся в регистрах сенсора.

Чтение единичного показания датчика BH1750 с помощью FT2232H Непрерывное считывание показаний датчика BH1750 с помощью FT2232H

Датчик интенсивности света GY-302 (BH1750)

Измерение освещенности является важным параметром при создании приложений домашней автоматики и Интернета вещей. Освещенность измеряют в люксах (lx). Люкс равен освещённости поверхности площадью 1 м2 при световом потоке падающего на неё излучения, равном 1 лм. Самым распространенным датчиком измерения освещенности у любителей Arduino является фоторезистор аналоговый датчик, меняющий свое сопротивление в зависимости от интенсивности света, однако точность его невысока и значение от выдает не в люксах. В отличие от него, модуль GY302 на базе чипа BH1750 (рисунок 1), представляет собой высокоточный цифровой датчик интенсивности света, выдающий значение как раз в люксах.

Рисунок 1. Модуль GY-302 на базе чипа BH1750

Технические характеристики GY-302 (BH1750)

  • Напряжение питания — 5 В
  • Интерфейс: I2C
  • Чип: BH1750FVI
  • АЦП: 16 бит
  • Точность: 1 люкс
  • Чувствительность: 65536 градаций
  • Калибровка: не требуется
  • Размеры: 19 х 13 х 2 мм
  • Вес: 5 г

Подключение к Arduino

Модуль имеет 5 выводов (рис. 2):

  • VCC — питание 5 В
  • GND — земля
  • SDA — данные I2C
  • SCL— синхронизация I2C
  • ADDR — выбор адреса для протокола I2C

Рисунок 2. Выводы модуля GY-302

Разберемся с возможными адресами датчика BH1750. Есть два варианта подключения датчика BH1750 к шине I2C (рис. 3).

Рисунок 3. Подключение датчика BH1750 к Arduino

Для получения адресов загрузим на Arduino скетч из листинга 1 (сканирование устройств, которые подключены к плате Arduino по шине I2C).

Скетч сканирует шину I2C и выводит в последовательный порт Arduino таблицу с адресами подключенных устройств (рисунок 4).

Рисунок 4. Сканер I2C устройств

Как видим, модуль BH1750 может иметь, в зависимости от уровня сигнала на входе ADDR два адреса (0x23 и 0x5C). Это значит, что к одной плате Arduino можно подсоединить одновременно два датчика BH1750.

Пример использования

Рассмотрим пример подключения датчика BH1750 к плате Arduino и вывода показаний на экран дисплея Nokia 5110. Нам понадобятся следующие детали:

  • плата Arduino Uno
  • датчик BH1750
  • дисплей Nokia 5110
  • макетная плата
  • провода

Соберем схему соединений согласно рис. 5.

Рисунок 5. Схема подсоединения к Arduino датчика BH1750 и дисплея Nokia 5110

Для работы с Arduino написано несколько библиотек. Будем использовать одну из них – BH1750FVI (https://github.com/enjoyneering/BH1750FVI). Данная библиотека поддерживает все режимы датчика BH1750, позволяет производить измерения освещенности с несколькими параметрами чувствительности (0.45 – 3.68) и разрешающей способности (0.5 – 4 lx), а также в режиме энергосбережения. К библиотеке прилагается пример (BH1750FVI_Demo) вывода в последовательный порт Arduino данных с датчика BH1750 при различных режимах измерения (см. рис. 6).

Рисунок 6. Пример вывода данных с датчика BH1750 в последовательный порт Arduino при различных режимах измерения

Текущие значения освещенности будем выводить на дисплей Nokia 5110. Нам понадобятся Arduino библиотеки Adafruit_GFX и Adafruit_PCD8544. Данные с датчика BH1750 будем получать со следующими настройками:

  • чувствительность
  • точность 0.5 lx

Периодичность измерения 5 секунд. Создадим в Arduino IDE новый скетч, занесем в него код из листинга 2 и загрузим скетч на на плату Arduino.

Вывод данных в монитор последовательного порта Arduino (рис. 7).

Рисунок 7. Вывод данных с датчика BH1750 в монитор последовательного порта.

Часто задаваемые вопросы

Сканер I2C устройств не находит датчика BH1750 или нет данных с датчика

Проверьте правильность подключения датчика BH1750 к плате Arduino.

Данные не выводятся на экран дисплея Nokia 5110

Проверьте правильность подключения дисплея Nokia 5110 к плате Arduino.

BH1750 — Цифровой датчик освещенности/люксметр (модуль GY-302)

Цифровой датчик освещенности GY-302 на чипе BH1750 предназначен для измерения фонового освещения. BH1750 16-битный датчик освещённости (люксметр) с интерфейсом I2C. Эта микросхема хорошо подходит для получения данных об окружающем освещении. Фотодиод на BH1750 определяет интенсивность света, которая преобразуется в выходное напряжение с помощью операционного усилителя. Встроенный АЦП выдает 16-битные цифровые данные. Внутренняя логика BH1750 избавляет от необходимости каких-либо сложных вычислений, поскольку он напрямую выводит значимые цифровые данные в люксах (лк).

Согласно документации, датчик BH1750 чувствителен к видимому свету и практически не подвержен влиянию инфракрасного излучения, т.е. реагирует примерно на тот же спектральный диапазон, что и человеческий глаз.

Читайте также  Автомат подкачки воды для бака полива

Измерение освещенности является важным параметром при создании приложений домашней автоматики и Интернета вещей. Самым распространенным датчиком измерения освещенности у любителей Arduino является фоторезистор аналоговый датчик, меняющий свое сопротивление в зависимости от интенсивности света, однако точность его невысока и значение от выдает не в люксах. В отличие от него, модуль GY302 на базе чипа BH1750, представляет собой высокоточный цифровой датчик интенсивности света, выдающий значение как раз в люксах. В проектах Arduino лучше использовать уже готовый модуль GY-302 со стабилизатором напряжения и удобными выводами подключения.

Люкс — (от лат. lux — свет; русское обозначение: лк, международное обозначение: lx) — единица измерения освещённости в Международной системе единиц (СИ). Люкс равен освещённости поверхности площадью 1 м² при световом потоке падающего на неё излучения, равном 1 лм. Соответственно, выполнятся: 1 лк = 1 лм/м2. С другой стороны, люкс равен освещённости поверхности сферы радиусом 1 м, создаваемой точечным источником света, находящимся в её центре, сила света которого составляет 1 кд. Таким образом, с основными единицами СИ люкс связан соотношением: 1 лк = 1 кд/м2.

  • 1 Распиновка модуля GY-302 на BH1750
  • 2 Технические характеристики BH1750
  • 3 Схема модуля GY-302 / схема включения BH1750
  • 4 Функциональная блок-схема
  • 5 Система установки I2C адреса
  • 6 Материалы
  • 7 Купить BH1750 на AliExpress
  • 8 Похожие записи

Распиновка модуля GY-302 на BH1750

Вывод Описание
1 VCC Питание
2 GND Земля
3 SCL Линия тактирования (Serial CLock)
4 SDA Линия данных (Serial Data)
5 ADDR Выбор адреса

Технические характеристики BH1750

  • Спектральная характеристика: близка к визуальной чувствительности;
  • Малое влияние инфракрасного излучения;
  • Функция спящего режима: есть;
  • Фильтрация световых шумов: 50/60 Гц;
  • Рабочее напряжение питания: 3.3-5 В;
  • Ток потребления: 120 мкА;
  • Ток потребления в спящем режиме: 0.01 мкА;
  • Чувствительность: 65536 градаций;
  • Точность в режиме высокого разрешения: 1 Лк;
  • Точность в режиме низкого разрешения: 4 Лк;
  • Период измерения в режиме высокого разрешения: 120 мс;
  • Период измерения в режиме низкого разрешения: 16 мс;
  • Встроенный АЦП;
  • Шина данных: I2C;
  • Калибровка: не требуется;
  • Размеры: 18.5 х 13.9 х 2 мм;
  • Вес: 5 г.

Схема модуля GY-302 / схема включения BH1750

Входное напряжение 5В понижается линейным стабилизатором с маркировкой 662К (datasheet) до 3.3В для питания датчика. Линии данных SDA и SCL подтянуты резисторами 4.7К к 3.3В. Преобразователь уровня отсутствует.

Функциональная блок-схема

  • PD — Фотодиод, спектральная характеристика которого близка к визуальной чувствительности.
  • AMP — Операционный усилитель для преобразования тока фотодиода в напряжение.
  • ADC — АЦП для получения 16-битных цифровых данных.
  • Logic + I2C Interface — Расчет внешнего освещения, интерфейс шины I2C и регистры:
    • Data Register (Регистр данных) — Этот регистр предназначен для регистрации данных об окружающем освещении. Начальное значение: «0000_0000_0000_0000».
    • Measurement Time Register (Регистр времени измерения) — Этот регистр предназначен для регистрации времени измерения. Начальное значение «01_0010_1100».
  • OSC — Внутренний тактовый генератор. Это CLK для внутренней логики.

Система установки I2C адреса

BH1750 может иметь, в зависимости от уровня сигнала на входе ADDR, два адреса: 0x23 (ADDR=LOW) и 0x5C (ADDR=HIGH). Это значит, что на одну I2C линию можно подсоединить одновременно два датчика BH1750. Вывод ADDR модуля GY-302 можно оставить не подключённым, соединить с землёй или с питанием. Следует учесть, что нельзя подавать больше 3.3 В. На модуле распаян стягивающий (pull-down) резистор на 1к, поэтому при отсутствии соединения по умолчанию используется адрес (0x23).

Перемычка J1 на печатной плате (см. изображение ниже) позволяет легко настроить адрес; если J1 замкнута (можно соединить с питанием припаяв контакты капелькой припоя), ADDR будет в состояние лог. «1», в таком случае I2C адрес датчика будет 0x5C.

Внимание: Адреса модуля можно контролировать по входному сигналу на выводе ADDR, если перемычка (J1) отсутствует. Если перемычка присутствует, то подавать логический ноль на ADDR нельзя — можно спровоцировать КЗ и «убить» порт ведущего устройства.

Digitrode

цифровая электроника вычислительная техника встраиваемые системы

  • Вычислительная техника
    • Микроконтроллеры микропроцессоры
    • ПЛИС
    • Мини-ПК
  • Силовая электроника
  • Датчики
  • Интерфейсы
  • Теория
    • Программирование
    • ТАУ и ЦОС
  • Перспективные технологии
    • 3D печать
    • Робототехника
    • Искусственный интеллект
    • Криптовалюты

Чтение RSS

Arduino и датчик света BH1750

Датчик внешнего освещения на Arduino и BH1750

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

Самым простым датчиком света является LDR (светозависимый резистор). Использование LDR хорошо, если ваше приложение очень простое, например, включение лампы, когда становится темно. Но для сложных приложений, таких как мобильные телефоны, вам необходимо точное измерение интенсивности окружающего света. Поэтому в данном проекте Arduino мы будем связывать простой датчик внешней освещенности с платой Arduino и регистрировать интенсивность освещения в люксах (лк).

Датчик внешней освещенности BH1750

Модуль датчика внешнего освещения BH1750 основан на цифровой интегральной схеме (ИС) датчика внешнего освещения BH1750FVI, разработанной ROHM Semiconductor. Это цифровая ИС со встроенным 16-битным преобразователем освещенности в цифровой код. Для связи с внешними устройствами, такими как микроконтроллеры, ИС датчика внешнего освещения BH1750 использует интерфейс шины I2C. Диапазон измерения составляет от 1 до 65535 лк. Ниже приведено изображение стандартного модуля датчика внешней освещенности BH1750, доступного сегодня.

Подключение BH1750 к Arduino

Подключив датчик внешней освещенности BH1750 к Arduino, вы можете измерять данные внешней освещенности и использовать их в любых приложениях, таких как включение уличного освещения или ночника. Поскольку датчик внешней освещенности BH1750 взаимодействует по шине I2C, мы должны использовать выводы I2C Arduino.

В случае Arduino UNO аналоговые выводы A4 и A5 – это выводы шины I2C, где A4 – это SDA, а A5 – SCL. Выходной сигнал датчика внешней освещенности BH1750 в нашем проекте отображается на ЖК-дисплее 16 × 2, который связан с Arduino.

Схема подключения Arduino и датчика света BH1750

На следующем рисунке показана принципиальная схема подключения датчика внешней освещенности BH1750 к Arduino UNO.

Вывод ADD можно оставить «висящим», но вы можете подключить его к GND. Это переведет вывод ADD в низкий логический уровень, и адрес ведомого I2C датчика внешней освещенности BH1750 станет 0x23. Это важно в программировании. Если вывод ADD переведен в высокое логическое состояние путем подключения к питанию, адрес ведомого устройства I2C датчика внешней освещенности BH1750 будет 0x5C. Таким образом, два датчика внешней освещенности BH1750 могут быть подключены к одной шине I2C, где один вывод ADD имеет низкое логическое состояние, а другой вывод ADD высокое.

Код программы взаимодействия датчика света BH1750 с Arduino

Выполните подключения согласно электрической схеме и загрузите приведенный выше код. Arduino попытается извлечь данные об окружающем освещении из датчика по шине I2C, и после простых вычислений результат отобразится на ЖК-дисплее.

Читайте также  Осветительные приборы для производственных помещений

Подключение датчика освещенности BH1750 к Arduino

Практически все современные смартфоны обладают функцией автоматического изменения яркости экрана в зависимости от условий освещенности окружающей среды. Аналогичная функция есть и во многих современных мониторах и телевизорах. Поэтому в данной статье мы рассмотрим подключение датчика освещенности BH1750 к Arduino. Значение освещенности мы будем показывать на экране ЖК дисплея 16×2.

Самым распространенным датчиком измерения освещенности у любителей платформы Arduino является фоторезистор – это аналоговый датчик, меняющий свое сопротивление в зависимости от интенсивности света (на нашем сайте вы можете посмотреть все проекты на основе фоторезисторов), однако точность его невысока и значение освещенности он выдает не в люксах. В отличие от него датчик BH1750 выдает значение освещенности как раз в люксах.

Люкс – (от лат. lux – свет; русское обозначение: лк, международное обозначение: lx) – единица измерения освещённости в Международной системе единиц (СИ). Люкс равен освещённости поверхности площадью 1 м² при световом потоке падающего на неё излучения, равном 1 лм (люмен). Соответственно, справедливо равенство: 1 лк = 1 лм/м2. С другой стороны, люкс равен освещённости поверхности сферы радиусом 1 м, создаваемой точечным источником света, находящимся в её центре, сила света которого составляет 1 кд (Кандела). Таким образом, с основными единицами СИ люкс связан соотношением: 1 лк = 1 кд/м2 (википедия).

Принципы работы датчика освещенности BH1750

BH1750 представляет собой цифровой датчик освещенности/люксметр, который можно использовать для автоматической регулировки яркости экранов смартфонов, мониторов, телевизоров и т.п. Также его можно применить для регулировки яркости свечения фар автомобиля. Внешний вид датчика BH1750 показан на следующем рисунке.

Датчик BH1750 работает по протоколу I2C, поэтому его легко подключить практически ко всем современным микроконтроллерам. Распиновка (назначение контактов) датчика освещенности BH1750 приведена в следующей таблице.

Контакт Описание
VCC питание
GND земля (общий провод)
SCL линия тактирования (Serial CLock)
SDA линия данных (Serial Data)
ADDR выбор адреса

В нашем проекте мы для подключения датчика по интерфейсу I2C будем использовать его контакты SDI и SDA.

Датчик BH1750 способен работать при величине питающего напряжения от 2.4V до 3.6V (обычно используется напряжение 3.0V) и во время своей работы потребляет ток 0.12mA. Датчик отличается широким диапазоном и высоким разрешением (65536 градаций освещенности — от 1 до 65536)

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Датчик освещенности BH1750 (купить на AliExpress).
  3. ЖК дисплей 16х2 (купить на AliExpress).
  4. Потенциометр 10 кОм (купить на AliExpress).

Схема проекта

Схема подключения датчика освещенности BH1750 к плате Arduino представлена на следующем рисунке.

Контакты SDA и SCL (интерфейс I2C) датчика BH1750 подключены к контактам A4 и A5 платы Arduino соответственно (они являются контактами интерфейса I2C в Arduino). Датчик запитывается от контакта 3.3V платы Arduino. Контакты данных ЖК дисплея D4-D7 подключены к контактам D2-D5 платы Arduino, а контакты RS и EN подключены к контактам D6 и D7 платы Arduino. Контакт V0 ЖК дисплея подключен к потенциометру, с помощью которого будет регулироваться яркость ЖК дисплея.

Внешний вид собранной конструкции проекта показан на следующем рисунке.

Объяснение программы для Arduino

Программа для взаимодействия платы Arduino с датчиком освещенности BH1750 достаточно проста. В этом проекте мы для взаимодействия с датчиком BH1750 использовали специальную библиотеку, но можно было бы обойтись и без нее. Полный текст программы приведен в конце статьи, здесь же мы кратко рассмотрим ее основные фрагменты.

Первым делом в программе мы подключим библиотеки для работы с протоколом I2C и ЖК дисплеем.