Опрос


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


Результаты

Сбылась мечта идиота? Тестирование сенсоров TSL2591 и MAX44009

10/11/2016 16:17:45

О датчиках освещенности я писал много: тестирование TEMT6000, тестирование BH1750FVI и, наверное, уже изрядно надоел с этим. Все протестированные мною датчики вполне удовлетворительно справлялись со своей задачей, но одна проблема все же не давала мне покоя. Дело в том, что опробованные сенсоры практически не различали сумерки. При низкой освещенности, когда человеческий глаз может не просто ориентироваться в пространстве, но даже различать буквы напечатанные на листке бумаги, датчики рапортовали "0". Фактически это означало, что при использовании сенсоров в системах домашней автоматизации для управления, например, уличным освещением, свет включался раньше необходимого, а выключался позже. Эта разница была всего в несколько минут, но тем не менее... Нездоровый перфекционизм заставлял искать новые решения.


TSL2591

И вот однажды я натолкнулся на интересный сенсор TSL2591, разработанный компанией AMS (и продвигаемый магазином Adafruit). Главной особенностью датчика является комбинация двух фотодиодов, один из которых чувствителен к широкому спектру (видимый + ИК), а другой только к ИК. Такая конфигурация фотодиодов позволяет с использованием определенной эмпирической формулы вычислять уровень освещенности, приближенный к восприятию человеческого глаза, учитывая ИК составляющую. Кроме того, производитель заявил динамический диапазон 600М:1 и чувствительность от 188 uLux до 88000 Lux. Таким образом, по заверениям Adafruit, мы можем получать значение освещенности с точностью до 6 знака после запятой. Работает датчик по протоколу I2C.


Датчик TSL2591

Для подключения датчика можно использовать MegaD-328 + MegaD-14-IN или MegaD-2561. В качестве программного компонента - библиотека I2C-PHP.
В текущий момент я нашел две версии распаянных плат с датчиком: от Adafruit и от известной китайской фирмы Unknown. Обе платы позволяют задействовать питание +3,3В, но у чисто китайской разработки питание +3,3В и линии SCL/SDA разнесены на разные "гребенки", что слегка усложняет подключение.

Получение данных от датчика типичное для I2C-PHP

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

Формула, которая реализована в драйвере mod_i2c_tsl2591.php отдает значение уже в Люксах. Но у меня был еще один датчик, который также выдавал показания в Люксах. Это BH1750FVI, поэтому логичным было бы сравнить их работу в реальных условиях, что я и сделал.

Красный график - TSL2591 (настройки > Medium Gain, 100 ms Integration time)
Зеленый график - BH1750FVI


TSL2591 vs BH1750FVI

На примере облачного (облака не в Интернете, а в небе) ноябрьского утра мы видим практически идентичную работу двух датчиков. Значения в Люксах, полученные от TSL2591 в сравнении с BH1750FVI чуть ниже, что логично, ведь датчик отбрасывает ИК составляющую. Но в целом форма графиков почти совпадает на всем временном отрезке. Здесь я не ждал каких-либо сюрпризов. Однако больше всего меня интересовал отрезок времени, когда датчики показывали минимальное значение, когда ночь уступало место утру. И вот, посмотрите...


TSL2591 начинает фиксировать наличие света раньше!

На графике мы хорошо можем видеть, что TSL2591 (в режиме Medium Gain - это важно!) увидел свет на 15 минут раньше. Сенсор BH1750FVI не умеет выдавать дробные значения. За 0 Lux, у него сразу идет 1 Lux. Все то время, пока более простой и дешевый BH1750FVI сообщал о 0 Lux, сенсор TSL2591 сначала зафиксировал 0,04 Lux, затем 0,05 Lux, а следом 0.11 Lux. Примечательно, что 1 Lux сенсоры зафиксировали одновременно.

Gain, Integration time и половник дёгтя

Результаты, которые описаны выше, были получены при следующих настройках: Medium Gain, 100ms Integration time.
Разрешающая способность датчика может быть существенно выше при использовании High gain mode или Maximum gain mode и времени конвертации не 100мс, а 600мс. Теоретически при максимальных параметрах можно попробовать измерять свет от звездного неба. Настройки датчика можно менять налету. Но! При средних и высоких значениях Gain датчик выдает некорректные результаты при высокой освещенности. Так, например, при установке Medium Gain, фактически невозможно измерять освещенность выше 2000-2300 люкс. Если установить Low Gain, то датчик измеряет освещенность корректно во всем диапазоне, но при этом в условиях низкой освещенности 0-20 люкс его показания не отличаются точностью. Реальная точность при таких условиях +- 2-3 люкс, что весьма много. Для простоты можно всегда использовать Low Gain, но в этом режиме TSL2591 мало чем отличается от BH1750FVI. Чтобы получить действительно точные результаты во всем диапазоне, нужно программно переключать Gain в зависимости от уровня освещенности. А эта задача не такая простая, как может показаться. Самостоятельно в автоматическом режиме TSL2591 этого сделать не может.

 

MAX44009

Спустя некоторое время пользователи форума посоветовали протестировать еще один датчик, работающий по шине I2C - MAX44009. При схожих параметрах (0.045 - 188000 люкс) этот датчик от известной компании Maxim существенно дешевле.

MAX44009
Датчик MAX44009

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


Сравнительное тестирование MAX44009 и TSL2591

Красный график - TSL2591 (настройки > Low Gain, 100 ms Integration time)
Зеленый график - MAX44009


MAX44009 считает, что люксов больше

На изображении мы видим, что форма графиков практически полностью совпадает. И TSL2591 и MAX44009 реагируют на изменение освещенности аналогично. Но с MAX44009 люксов получается больше. К сожалению в отсутствии какого-то эталона трудно сказать, какие значения более правильные. Чисто субъективно доверя к компании Maxim больше, да и BH1750 также показывал люксов больше.

А на этом изображении мы можем наблюдать плавный график нарастания освещенности, полученный с помощью MAX44009 в режиме AUTO. А вот TSL2591, который работает с настройкой Low Gain, низкую освещенности прогнозируемо отображает ступенчато. Полагаю, что с настройками High Gain точность измерений TSL2591 при низкой освещенности будет даже выше, чем у MAX44009, но в силу относительной сложности реализации автопереключения в прошивке контроллера, данное изображение демонстрирует, какие данные будут получены от датчика TSL2591 с помощью MegaD-2561. Для того, чтобы дать пользователю корректные данные во всем диапазоне измерения, в прошивке реализована работа с TSL2591 только в режиме Low Gain.

А вот тот же график (MAX44009), фиксирующий ранний рассвет на временном промежутке в 20 минут. Считывание данных происходило раз в минуту. Видно, как плавно и ровно изменяются значения без намека на колебания.

Таким образом, MAX44009 можно предварительно считать оптимальным решением для измерения освещенности в домашней автоматизации. И если у TSL2591 имеется существенный недостаток в виде крайне высокой стоимости, то MAX44009 лишен этой проблемы. Эти датчики можно купить вполне по демократичным ценам (150-220 руб).

Библиотека I2C-PHP с поддержкой TSL2591


 

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



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



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

2016-11-11 17:21:42 | Владимир
датчик дороже, но обычно его требуется всего 1 шт.


2016-11-12 12:20:06 | Михаил
Андрей, сделайте пожалуйста чтобы I2C датчики, подключенные к MegaD можно было увидеть в openhab.


2016-11-12 14:12:37 | Andrey_B
Михаил, для работы с I2C-устройствами необходима дополнительная программная поддержка со стороны сервера. Например, библиотека I2C-PHP и "драйверы" к ней. Поэтому нужно адресовать вопрос разработчикам OpenHAB. Существует пока только один датчик, который полностью аппаратно поддерживается контроллером MegaD-2561 - это HTU21D. Этот датчик можно интегрировать в серверное ПО без специальной программной поддержки. В перспективе планируется увеличить перечень аппаратно поддерживаемых устройств контроллером MegaD-2561. Но для этого необходимо определиться какие датчики для этого подходят больше.


2016-11-14 10:13:05 | Виктор
Добрый день, а что скажете по поводу датчика TSL2561
Вроде дешевле, и тоже в двух диапазонах измеряет. А в чем разница между ними?


2016-11-14 12:08:26 | Andrey_B
Виктор, я не тестировал TLS2561, но вот, что пишет о TLS2591 adafruit:
"This sensor is much like the TSL2561 but with a wider range".