Опрос


Что для Вас Умный Дом?


Результаты


Реклама


Про датчик освещенности BH1750. Что, опять? Да...

06/09/2016 10:36:22

Про аналоговые датчики освещенности, подключаемые к АЦП-портам, я уже писал: статья про P550, статья про TEMT6000. Для домашней автоматизации дешевый и простой датчик TEMT600 подходит весьма неплохо. Его достоинство - датчик умеет отличать пасмурную погоду от яркого солнца. Недостаток - датчик, несмотря на пометку "Adapted to human eye responsivity" практически не различает поздние сумерки от кромешной тьмы. Может быть, на рынке существуют более продвинутые решения? В этот раз попробуем датчик BH1750FVI.

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

Основное отличие датчика BH1750FVI заключается в том, что он не аналоговый (его бесполезно подключать к АЦП-портам), а цифровой и работает по шине I2C. Он также как TEMT6000 адаптирован под человеческое зрение: "Spectral responsibility is approximately human eye response". Кроме того, датчик отображает освещенность не в "попугаях" (как любые аналоговые датчики), а сразу в Люксах (Lux).
По правде сказать, для задач, которые решаются в системах домашней автоматизации, единицы измерения, "попугаи" это или Люксы, особого значения не имеют. Гораздо важнее иметь широкий динамический диапазон в области низкой освещенности, чтобы правильно определять момент включения или выключения света. Глаз человека - удивительный прибор. Когда иные датчики показывают "по нулям", глаза могут вполне различать буквы в книге. С этой точки зрения, а также учитывая текущие цены на электричество, плохо, когда свет включается слишком рано или выключается слишком поздно. Одним словом, пора протестировать датчик BH1750FVI в различных условиях.

Для подключения датчика BH1750FVI я в этот раз использовал новый контроллер MegaD-2561. Датчик можно подключить как непосредственно к контроллеру MegaD-2561 (блок зеленых клеммников), так и к любым портам исполнительного модуля MegaD-14-IN. Поскольку датчик BH1750FVI работает по шине I2C, то необходимо задействовать два порта (например): SCL - P30, SDA - P31.
Питание я взял от модуля контроллера. Датчик прекрасно работает от +3,3В. Важной особенностью BH1750FVI является то, что на одну шину можно повесить два датчика. Для этого у датчика выведен специальный провод. Если он болтается в воздухе (как на фото), то адрес один, а если подключен к питанию, то другой.

Чтобы получить данные от датчика я написал драйвер для библиотеки I2C-PHP. Программа, считывающая значения, выглядит следующим образом.

<?
define("SCL", "30");
define("SDA", "31");
define("MD", "http://192.168.0.14/sec/?");
require_once("mod_i2c_bh1750.php");
$lux = get_lux();
echo "Lux: $lux";
?>

Посмотрим, что же получилось... Прежде всего, стоит сказать, что если для аналоговых датчиков диапазон значений находится в области 0-1023, то для BH1750FVI этот диапазон намного шине: 0-65535. Поэтому привожу два графика отдельно. Итак, сентябрьский день. Переменная облачность.


BH1750FVI


TEMT6000

Очень интересная картина, правда? Прежде всего, поясню, что за исследуемый период солнце выходило из-за облаков два раза. Это отчетливо видно на графиках. Оба датчика зафиксировали эту ситуацию, но совершенно по-разному. Если аналоговый TEMT6000 зафиксировал облачно как "995", а ясно как "1015", одним словом, изменил свое значение всего на 2% (!), то цифровой BH1750FVI сработал принципиально иначе. Облачно в его понимании - это 3000-5000 lux, а ясно уже 17000-27000 lux! Разница чуть не на порядок. На графике BH1750FVI мы отчетливо видим, что второй выход солнца из-за тучек был не таким ярким. TEMT6000 действительно "видит" разницу в освещенности, но гораздо хуже.  В этом смысле BH1750FVI не только способен вполне определенно различить пасмурный и ясный день, но и показать отдельные нюансы (дымку, легкую облачность). А теперь, чтобы продемонстрировать вышесказанное приведу те же два графика, но уже за более длительный период измерений.


BH1750FVI. По-прежнему видим, когда прояснялась погода


TEMT6000. Пожалуй, мало что можем сказать об изменении освещенности днем

BH1750FVI прекрасно замеряет освещенность в широком диапазоне. График освещенности, который построен с использованием этого датчика, выглядит более правдоподобным. Посмотрите, как ведет себя TEMT6000. В определенный момент времени красный график резко идет вниз. Но в действительности солнце заходило плавно и никаких резких колебаний в освещенности в этот день больше не было. В этом смысле на зеленом графике, полученным от BH1750FVI, мы видим плавное и пологое снижение освещенности, как оно в действительности и было. Таким образом, чувствительность TEMT6000 не совсем линейная или во всяком случае не совпадает с восприятием человеческого глаза, тогда как показания BH1750FVI весьма точно совпадают с субъективным ощущением освещенности.

Это все замечательно. Используя BH1750FVI, можно строить достаточно правдоподобные графики изменения освещенности, даже судить по форме кривой о погоде. Но как этот датчик работает в условиях низкой освещенности. Отличается ли он в этом отношении от простого аналогового TEMT6000? А вот...


BH1750FVI


TEMT6000

Увы! В то время, как глаз еще отчетливо различал предметы, оба датчика показали 0... BH1750FVI сделал это всего лишь на пару минут позже. Одним словом, с точки зрения фиксации факта наступления темноты/рассвета оба датчика работают примерно одинаково. Отличие лишь в том, что цифровой BH1750FVI выдает более предсказуемые значения, по которым можно построить более плавный график, в то время как связка аналоговый TEMT6000 - АЦП порт atmega2561 во всем диапазоне имеет определенный "дрейф", "люфт", в результате которого график имеет множество зубчиков.
В целом датчик BH1750FVI с точки зрения определения уровня освещенности превосходит TEMT6000, особенно при ярком освещении, но требует 2 порта MegaD-328/2561 и программной поддержки (I2C) со стороны сервера.

Ну и напоследок архив с исходными кодами на PHP с библиотекой I2C-PHP для MegaD-328/2561 и драйвером для BH1750FVI.
Исходники I2C-PHP для BH1750FVI


 

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



Добавить комментарий:



Сортировка комментариев: Последние сверху | Первые сверху