Arduino с датчиком освещенности BH1750
BH1750 — это 16-битный датчик освещенности. В этом руководстве вы узнаете, как использовать датчик освещенности BH1750 с платой Arduino. Датчик взаимодействует с микроконтроллером по протоколу I2C.
Вы узнаете, как подключить датчик к плате Arduino, установить необходимые библиотеки и использовать простой скетч для отображения показаний датчика в Serial Monitor.
В этом руководстве рассматриваются следующие темы:
Знакомство с датчиком освещенности BH1750
BH1750 — это 16-битный датчик освещенности, который взаимодействует по протоколу I2C. Он выдает результаты измерений освещенности в люксах (lux — единица измерения освещенности в системе СИ). Датчик может измерять минимум 1 люкс и максимум 65535 люкс.
Датчик может поставляться на различных платах расширения. Смотрите фотографии ниже. На обоих изображениях представлен датчик BH1750.
Характеристики BH1750
Вот список характеристик датчика BH1750. Для получения дополнительной информации ознакомьтесь с даташитом датчика BH1750.
Интерфейс шины I2C
Спектральная чувствительность приближена к восприятию человеческого глаза
Встроенный преобразователь освещенности в цифровой сигнал
Диапазон: 1 – 65535 люкс
Низкое потребление тока благодаря функции отключения питания
Функция подавления шума от освещения 50 Гц / 60 Гц
Возможность выбора двух различных I2C slave-адресов
Малая погрешность измерений (+/- 20%)
Очень малое влияние инфракрасного излучения
Поддержка режима непрерывных измерений
Поддержка режима однократного измерения
Режимы измерения
Датчик поддерживает два различных режима измерения: режим непрерывного измерения и режим однократного измерения. Каждый режим поддерживает три различных режима разрешения.
Режим низкого разрешения |
Точность 4 люкс |
Время измерения 16 мс |
Режим высокого разрешения |
Точность 1 люкс |
Время измерения 120 мс |
Режим высокого разрешения 2 |
Точность 0,5 люкс |
Время измерения 120 мс |
В режиме непрерывного измерения датчик постоянно измеряет значения освещенности. В режиме однократного измерения датчик измеряет значение освещенности один раз, после чего переходит в режим отключения питания.
Применение
BH1750 — это датчик освещенности, поэтому его можно использовать в самых разных проектах. Например:
для определения, день сейчас или ночь;
для регулировки или включения/выключения яркости светодиодов в зависимости от окружающего освещения;
для регулировки яркости ЖК-дисплеев и экранов;
для определения, горит ли светодиод;
…
Распиновка BH1750
Вот распиновка BH1750:
VCC |
Питание датчика (3,3 В или 5 В) |
GND |
Общий GND |
SCL |
Вывод SCL для I2C-связи |
SDA (Data) |
Вывод SDA для I2C-связи |
ADD* |
Выбор адреса |
Вывод ADD используется для установки I2C-адреса датчика. Если напряжение на этом выводе меньше 0,7VCC (вывод оставлен свободным или подключен к GND), I2C-адрес будет 0x23. Но если напряжение выше 0,7xVCC (вывод подключен к VCC), адрес будет 0x5C. Кратко:
Вывод ADD свободный или подключен к GND → адрес: 0x23
Вывод ADD подключен к VCC → адрес: 0x5C
Интерфейс I2C датчика BH1750
Датчик освещенности BH1750 поддерживает интерфейс I2C.
Вы можете подключить датчик BH1750 к Arduino, используя стандартные выводы I2C (это выводы для Arduino UNO, если вы используете другую модель, проверьте её выводы I2C):
BH1750 |
Arduino |
|---|---|
SCL |
A5 |
SDA |
A4 |
BH1750: чтение освещенности с Arduino
Теперь, когда вы лучше знакомы с датчиком BH1750, давайте его протестируем. В этом разделе мы создадим простой проект, который считывает освещенность и отображает её в Serial Monitor Arduino IDE.
Необходимые компоненты
Для выполнения этого руководства вам понадобятся следующие компоненты:
Arduino (читайте Лучшие стартовые наборы Arduino)
Макетная плата (опционально)
Соединительные провода (опционально)
Вы можете воспользоваться ссылками выше или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!
Схема подключения — Arduino с BH1750
Подключите датчик BH1750 к выводам I2C Arduino. Вы можете использовать следующую схему подключения.
Вы также можете воспользоваться следующей таблицей:
BH1750 |
Arduino |
|---|---|
VCC |
5V |
GND |
GND |
SCL |
A5 |
SDA (Data) |
A4 |
ADD* |
Не подключать |
Не подключая вывод ADD, мы выбираем I2C-адрес 0x23. Подключите его к 3,3 В, чтобы выбрать адрес 0x5C.
Установка библиотеки BH1750
Существует несколько библиотек для чтения данных с датчика BH1750. Мы будем использовать библиотеку BH1750 от Christopher Laws. Она совместима с ESP32, ESP8266 и Arduino.
Откройте Arduino IDE и перейдите в Sketch > Include Library > Manage Libraries. Должен открыться менеджер библиотек.
Найдите «BH1750» в поле поиска и установите библиотеку BH1750 от Christopher Laws.
Код — чтение датчика освещенности BH1750
Скопируйте следующий код в Arduino IDE. Этот код просто считывает освещенность в люксах и отображает значения в Serial Monitor. Это пример кода из библиотеки под названием BH1750test (вы можете найти его в File > Examples > BH1750 > BH1750test).
/*
Example of BH1750 library usage. This example initialises the BH1750 object using the default high resolution continuous mode and then makes a light level reading every second.
*/
#include <Wire.h>
#include <BH1750.h>
BH1750 lightMeter;
void setup(){
Serial.begin(9600);
// Initialize the I2C bus (BH1750 library doesn't do this automatically)
Wire.begin();
// On esp8266 you can select SCL and SDA pins using Wire.begin(D4, D3);
// For Wemos / Lolin D1 Mini Pro and the Ambient Light shield use Wire.begin(D2, D1);
lightMeter.begin();
Serial.println(F("BH1750 Test begin"));
}
void loop() {
float lux = lightMeter.readLightLevel();
Serial.print("Light: ");
Serial.print(lux);
Serial.println(" lx");
delay(1000);
}
Библиотека также предоставляет другие примеры, которые стоит изучить.
Как работает код
Мы начинаем с подключения необходимых библиотек. Библиотека Wire.h для использования протокола связи I2C и библиотека BH1750.h для чтения данных с датчика.
#include <Wire.h>
#include <BH1750.h>
Затем мы создаем объект BH1750 с именем lightMeter.
BH1750 lightMeter;
В функции setup() инициализируем Serial Monitor со скоростью 9600 бод.
Serial.begin(9600);
Инициализируем протокол связи I2C. Это запустит I2C-связь на стандартных выводах I2C микроконтроллера. Если вы хотите использовать другие выводы I2C, передайте их в метод begin() следующим образом: Wire.begin(SDA, SCL).
Wire.begin();
Инициализируем датчик с помощью метода begin() для объекта BH1750 (lightMeter).
lightMeter.begin();
В функции loop() мы создаем переменную с именем lux, которая сохраняет значения освещенности. Чтобы получить значение, достаточно вызвать функцию readLightLevel() для объекта BH1750 (lightMeter).
float lux = lightMeter.readLightLevel();
Наконец, отображаем результат измерения в Serial Monitor.
Serial.print("Light: ");
Serial.print(lux);
Serial.println(" lx");
Вы получаете и выводите новое показание каждую секунду.
delay(1000);
Демонстрация
Теперь вы можете загрузить код на свою плату. Сначала подключите плату к компьютеру. Затем перейдите в Tools > Board и выберите плату Arduino, которую вы используете. Перейдите в Tools > Port и выберите COM-порт, к которому подключена ваша плата. Наконец, нажмите кнопку загрузки.
После успешной загрузки кода откройте Serial Monitor на скорости 9600 бод.
Новые показания освещенности должны отображаться в Serial Monitor.
Другие полезные функции
Библиотека, которую мы используем с датчиком BH1750, предоставляет другие примеры, иллюстрирующие другие полезные функции и возможности. Вы можете посмотреть все примеры библиотеки BH1750 здесь.
Установка режима измерения
По умолчанию библиотека использует режим непрерывного измерения с высоким разрешением, но вы можете изменить его, передав желаемый режим измерения в метод begin() при инициализации датчика. Например:
lightMeter.begin(BH1750::CONTINUOUS_HIGH_RES_MODE)
Вот список всех доступных режимов:
BH1750_CONTINUOUS_LOW_RES_MODE
BH1750_CONTINUOUS_HIGH_RES_MODE (по умолчанию)
BH1750_CONTINUOUS_HIGH_RES_MODE_2
BH1750_ONE_TIME_LOW_RES_MODE
BH1750_ONE_TIME_HIGH_RES_MODE
BH1750_ONE_TIME_HIGH_RES_MODE_2
Свойства каждого режима описаны в разделе выше.
Заключение
В этом руководстве вы узнали, как использовать датчик освещенности BH1750 с Arduino Uno. Датчик очень прост в использовании. Он использует протокол связи I2C, что упрощает подключение, а библиотека предоставляет методы для легкого получения показаний.
Мы надеемся, что это руководство было полезным. Напишите в комментариях ниже, в каком проекте вы бы использовали датчик BH1750.
У нас есть руководства по другим датчикам для платы Arduino, которые могут вас заинтересовать: