Комментарии 8
У них еще есть датчик выдающий не просто освещенность, а цвет. Пытался на таких сделать упрощенный аналог Амбилайта. Подсветки за монитором в тон изображению на экране. Учитывая что сам Амбилайт хорошо работает в основном только на демо, с датчиками вообще не взлетело...
Мне кажется, что монитор и так уже знает, какой у него там цвет. Для аналога Амбилайта, наверное, эффективнее цвет читать со стороны софта - из фреймбуфера кадра, или с HDMI снимать.
Есть такое адалайт+призматик, но учитывая что изначально берется цвет с края изображения, работает это не на всех изображениях. Чтоб оно работало идеально нужна нейросетка которая будет фантазировать изображение за пределами экрана и с него уже брать цвет. Да и то не факт что фантазии нейросетки и зрительные ожидания всегда совпадут. Технология на уровне побаловаться.
Недавно решал подобную задачу. По инету и по измерению реальной освещенности в моей комнате получается примерно 400 люкс. Например как сегодня с утра, когда Солнце напрямую светит в мои окна, измеренная освещенность в комнате составила 397 люкс. Т.е. достаточно выбрать усиление 1 и время интеграции 100 мС и получится максимум на порядок больше нужного - около 4000 люкс.
Для решения задачи регулировки яркости экрана применять адаптивный алгоритм откровенно избыточно :))
Тем не менее я понимаю, что играть с такими вещами приятно и спасибо, что поделились результатами с нами :)
Подтяжка для шины делается 10 к из соображений, что одна плата будет работать, а несколько не перегрузят выходной каскад ни самой микросхемы, ни процессора.
Я играл с ESP8266 и ESP32 при тестировании 4-х датчиков и отладке своего девайса, в любой комбинации всё работало беспроблемно. У меня 4 датчика на шине I2C, все с резисторами подтяжки 10 к и всё работает отлично в любом сочетании подключенных датчиков.
Конкретно с VEML7700 я пробовал и прямую запитку на контакт 3.3 и подачу 3.3 на контакт Vin - в обоих случаях система работала нормально. Это я искал глюк нестабильной работы BME280 :) Причина глюка была в попадании жидкого флюса в разъем. Промыл спиртом и проблемы исчезли.
Очевидно, что история с подтяжками зависит от емкостных характеристик полевых транзисторов на стороне I²C-контроллера. Видать, реализация в NanoPi не блещет, пока не поставил 1 кОм, сыпало в dmesg таймаутами и перевыборами, а на экранчике всякие чудеса начинались.
Играть с такими вещами не только приятно, но и полезно для мозгов :) А так-то я написал дисклэймер про фоторезистор.
А можно проще.
Известна конструкция в виде делителя напряжения: сверху обычный резистор, снизу фоторезистор, с середины снимаем сигнал на аналоговый вход. Схема хороша всем, кроме непрерывного потребления.
Переносим верх делителя с плюса питания на любую ногу, сконфигурированную в качестве цифрового выхода - и можно питать датчик освещённости не непрерывно, а на несколько десятков миллисекунд каждые несколько секунд.
И поскольку у большинства дисплеев 1602 вход регулировки яркости аналоговый и рассчитан на подключение переменного резистора, можно вспомнить классический способ комбинированной ручно-автоматической регулировки яркости с включением фоторезистора последовательно с переменным резистором. И не задействовать для этого ресурсы вычислительной системы вообще.
http://archive.radio.ru/web/1966/11/034/
Правый верхний угол
Я ни секунды не сомневаюсь, что возможно не задействовать ресурсы вычислительной системы вообще. Даже специально написал дисклэймер про фоторезистор.
Но тогда не было бы ни I²C с питонами, ни разбора адаптивной подстройки, ни статьи в целом. Очевидно же, что регулирование подсветки - демонстрационный сценарий. А статья - базовый кирпичик, который можно положить в фундамент системы любой сложности. Решение с фоторезистором же жестко ограничено единственной функцией и лишено гибкости от слова совсем.
Просто приведу пару примеров:
Насколько просто, в случае фоторезистора, сделать сильно нелинейную зависимость освещения-подсветки, с каким-нибудь выстраданным LUT?
Как нужно модифицировать схему с фоторезистором, чтобы подсветка начинала мигать, когда на датчике CO₂, подключенном по USB, показания превышают 800 ppm? Но делать это только с 8:00 утра до 23:00 вечера? ;)

Свет, тьма, VEML7700 и Python