Каталог библиотек

BH1750

Библиотека добавлена: 26 января 2020
Категория библиотеки:

Библиотека Arduino для цифровых коммутационных плат датчиков света, содержащих сенсор BH1750FVI IC.

Официальная страница библиотеки BH1750 на GitHub

Плата BH1750 использует I2C для связи, что требует два контакта для связи с устройствами. Настройка шины I2C должна выполняться в коде пользователя (а не в коде библиотеки).

Основной модуль, содержащий компонент BH1750, представляет собой GY-30, показанный ниже.

Обзор

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

  • непрерывные,
  • одноразовые измерения.

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

Каждый режим имеет три разные точности:

  • Режим низкого разрешения - (точность 4 лк, время измерения 16 мс)
  • Режим высокого разрешения - (точность 1 лк, время измерения 120 мс)
  • Режим высокого разрешения 2 - (точность 0,5 лк, время измерения 120 мс)

По умолчанию в этой библиотеке используется непрерывный режим высокого разрешения, но вы можете изменить его на другой режим, передав аргумент mode в BH1750.begin().

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

Обычно вы получите целочисленное значение, которое представляет эквивалент в люксах.

  • Режим низкого разрешения - (общий диапазон: от 0,0 до 54612,5 люкс)
  • Режим высокого разрешения - (общий диапазон: от 0,0 до 54612,5 люкс)
  • Режим высокого разрешения 2 - (общий диапазон: от 0,0 до 27306,25 люкс)

Сам датчик возвращает 16-битное целое число без знака. Поэтому максимальное значение ограничено в целом. Стандартное преобразование между так называемыми «отсчетами» в люкс составляет 1 / 1,2, что означает, что вы получаете меньшее значение. Поскольку используется float, в случае ошибки вы получите отрицательное значение.

  • -1 с датчика не поступило достоверных данных
  • -2 устройство не настроено. В противном случае измеренные значения преобразуются в люкс и возвращаются. Если никакие дополнительные параметры не изменены, максимальное значение люкс составляет 54612,5 лк.

Поскольку датчик учитывает воздействие света в определенный период времени, вы можете изменить этот период времени. Это необходимо, если вы используете накладываемые окна или компенсируете влияние окружающей среды, например, темнота. Этот период времени определяется регистром, который называется MTreg. Поэтому вы можете выбрать значение от 32 до 254. Значение по умолчанию - 69. Имейте в виду, что время измерения изменяется соответственно.

Техническое описание чипа BH1750 можно скачать здесь.

Установка

Нажмите кнопку «Клонировать или загрузить» -> «Загрузить ZIP» на странице библиотеки в GitHub (Clone or download -> Download ZIP).

  • (Для Arduino >= 1.5.x) Используйте Диспетчер библиотек. Откройте Arduino IDE, нажмите «Эскиз» -> «Включить библиотеку» -> «Добавить библиотеку .ZIP» и выберите загруженный архив (Sketch -> Include library -> Add .ZIP library).
  • (Для Arduino < 1.5.x) Извлеките архив в папку: <Ваша дирректория>/Мои документы/Arduino/ library/ (<Your User Directory>/My Documents/Arduino/libraries/). Переименуйте архив в BH1750. Перезапустите IDE.

Пример

Пример использования библиотеки BH1750 в сочетании с платой GY-30 (которая содержит компонент BH1750) представлен ниже. Пример кода использует библиотеку BH1750 в режиме непрерывной высокой точности по умолчанию при выполнении измерений освещенности.

Схема

Соединения:

  • VCC -> 3V3 или 5V
  • GND -> GND
  • SCL -> SCL (A5 на Arduino Nano, Uno, Leonardo и т.п., или 21 на Mega и Due, на esp8266 любой)
  • SDA -> SDA (A4 на Arduino Nano, Uno, Leonardo, и т.п. или 20 на Mega и Due, на esp8266 любой)
  • ADD -> NC/GND или VCC (см. ниже)

Вывод ADD используется для установки адреса I2C датчика. По умолчанию (если напряжение ADD меньше 0,7 * VCC), адрес датчика будет 0x23. Если его напряжение больше или равно напряжению 0,7 В (например, вы подключили его к VCC), адрес датчика будет 0x5C.

Подключение платы датчика GY-30 к Arduino показано на схеме выше.

Код

Загрузите код для BH1750 ниже на свою плату Arduino.

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

BH1750 lightMeter;

void setup(){

  Serial.begin(9600);

  // Initialize the I2C bus (BH1750 library doesn't do this automatically)
  // On esp8266 devices you can select SCL and SDA pins using Wire.begin(D4, D3);
  Wire.begin();

  lightMeter.begin();
  Serial.println(F("BH1750 Test"));

}

void loop() {

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

}

Вывод значений

Перемещение датчика к большему количеству света приводит к увеличению измерений в люксах.

BH1750 Test
Light: 70.0 lx
Light: 70.0 lx
Light: 59.0 lx
Light: 328.0 lx
Light: 333.0 lx
Light: 335.0 lx
Light: 332.0 lx

Официальная страница библиотеки BH1750 на GitHub