Освещенность — световая величина, равная отношению светового потока, падающего на малый участок поверхности, к его площади. Измеряется освещённость в люксах, а прибор, который измеряет освещенность называют люксметром.
Люксметр применяется в телевизорах, смартфонах, фотоаппаратах, везде, где имеет место цветокоррекция изображений или управление яркостью матрицы. Взять хотя бы тот же смартфон: если вокруг темно — яркость дисплея снижается практически до минимума, чтобы не слепить глаза.
В повседневной жизни люксметр, используется для проверки норм освещенности на рабочем месте или в помещении. Чтобы человек комфортно себя чувствовал и эффективно работал, уровень освещенности должен быть достаточным — мы ведь не кроты. А ещё, освещенность является важным фактором роста для растений, поэтому люксметр неотъемлемая часть любой автоматической теплицы.
На этом уроке мы будем экспериментировать с модулем датчика освещенности RobotClass BH1750. Из за своей низкой стоимости этот датчик очень распространён среди DIY-энтузиастов. Кроме самого датчика, на модуле расположены два разъёма шины QIIC, для совместимости с другими модулями и контроллерами от RobotClass.
Из важных характеристик BH1750 отметим:
- диапазон измерений: от 0,11 люкс до 100 000 люкс;
- поддержка шины I2C/QIIC;
- чувствителен к спектру, близкому к спектру человеческого глаза;
- 16-разрядный АЦП;
- напряжение питания: 3,3 В;
- низкое энергопотребление:
- фильтрация шума 50-60 Гц.
Список необходимых компонентов
Для выполнения всех экспериментов в данном уроке, кроме самого датчика BH1750 от RobotClass, потребуются: отладочная плата Графит-32S или аналогичная на основе ESP32, переходник и кабель для шины QIIC, а также немного проводов розетка-розетка. Необходимые компоненты можно добавить в корзину прямо здесь, и затем оформить заказ в нашем интернет-магазине.
Теперь подключим модуль к плате Графит-32S и попробуем получить из него данные.
Подключение
Датчик BH1750 работает с напряжением 3.3 Вольта, а значит мы должны подключать его к контроллеру с такими же уровнями, либо использовать преобразователь уровней. В этом уроке мы используем отладочную плату Графит-32S (подойдет также любой Node-MCU).
Подключаем датчик к плате Графит-32S по стандартной схеме для I2C интерфейса:
Графит-32S | Gnd | 3.3 | SDA/23 | SCL/22 |
BH1750 | G | VCC | SDA | SCL |
Адрес I2C
По умолчанию, датчик имеет адрес 0x23. Чтобы сменить его на альтернативный — 0x5C, необходимо соединить перемычку ADR на лицевой стороне платы.
Подтяжка I2C
Для правильной работы шины I2C необходимо, чтобы линии SDA и SCL были подтянуты к питанию с помощью резистора соответствующего номинала. Эту подтяжку нужно сделать всего один раз на всей линии I2C.
На лицевой стороне платы имеется тройная перемычка I2C-PU. Её необходимо полностью соединить для обеспечения подтяжки шины I2C.
Программа
Для работы с датчиком используем подходящую библиотеку, ссылка на которую есть в конце урока. Откроем готовый пример программы под названием BH1750test, которая выводит показания датчика в последовательный порт.
#include <BH1750.h>
#include <Wire.h>
BH1750 lightMeter;
void setup() {
Serial.begin(9600);
Wire.begin();
// инициализация шины I2C
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);
}
Загружаем программу на отладочную плату и открываем монитор COM-порта. Должен получиться примерно такой вывод:
Полезные ссылки
Библиотека для работы с BH1750:
https://github.com/claws/BH1750
Спецификация производителя: