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

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

BH1750 (GY-302): распиновка, I2C-адрес и пример кода для Arduino

Подключение модуля GY-302 к Arduino по I2C:

Вывод модуляОписаниеArduino Uno / Nano / Pro MiniArduino Mega
VCCПитание 3.3–5 В5V5V
GNDЗемляGNDGND
SCLЛиния тактирования I2CA521 (SCL)
SDAЛиния данных I2CA420 (SDA)
ADDRВыбор адресане подключён (0x23) или 3.3V (0x5C)не подключён (0x23) или 3.3V (0x5C)

I2C-адрес. Если вывод ADDR не подключён или соединён с землёй, адрес датчика 0x23 (на модуле стоит подтягивающий резистор на землю). Если ADDR подать на питание 3.3 В (или замкнуть перемычку J1), адрес станет 0x5C. На ADDR нельзя подавать больше 3.3 В. Так на одну шину I2C можно подключить два датчика BH1750.

Для скетча нужна библиотека BH1750. Минимальный пример выводит освещённость в люксах в монитор порта:

#include <Wire.h>
#include <BH1750.h>

BH1750 lightMeter;   // адрес 0x23 (ADDR не подключён или на GND)

void setup() {
  Serial.begin(9600);
  Wire.begin();
  lightMeter.begin();
  // Для адреса 0x5C: lightMeter.begin(BH1750::CONTINUOUS_HIGH_RES_MODE, 0x5C);
}

void loop() {
  float lux = lightMeter.readLightLevel();
  Serial.print("Light: ");
  Serial.print(lux);
  Serial.println(" lx");
  delay(1000);
}

Установка библиотеки, схема подключения и сравнение с TSL2561 — в статье Подключение цифрового люксметра BH1750 к Arduino.

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

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

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

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

Модуль GY-302 на датчике BH1750: подписи выводов VCC, GND, SCL, SDA, ADDR
ВыводОписание
1VCCПитание
2GNDЗемля
3SCLЛиния тактирования (Serial CLock)
4SDAЛиния данных (Serial Data)
5ADDRВыбор адреса

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

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

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

Принципиальная схема модуля GY-302: стабилизатор 3.3 В, подтягивающие резисторы SDA и SCL, выводы VCC, SCL, SDA, ADDR

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

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

Функциональная блок-схема BH1750: фотодиод PD, усилитель AMP, АЦП, логика с интерфейсом I2C и генератор OSC
  • 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.

Перемычка J1 на модуле GY-302 с датчиком BH1750: если её замкнуть, адрес I2C станет 0x5C

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

Материалы

Оставьте комментарий

Отправляя комментарий, вы соглашаетесь с обработкой ваших данных (имя, адрес электронной почты, текст комментария) в соответствии с политикой конфиденциальности.