elchupanibrei (elchupanibrei) wrote,
elchupanibrei
elchupanibrei

Category:

Arduino библиотека для BH1750FVI Ambient Light Sensor

Приобрел себе BH1750FVI сенсор для умного дома и просто поиграться. Ну там знать когда свет зажигать\гасить, световой поток ламп и фонариков измерить.



Существуют две версии платы. Первая маленькая без согласования уровней, что не совсем хорошо. Вторая большая, но с согласованием на полевике для линии SDA и на резисторе с диодом для линии SCL. Купил маленькую, была дешевле. Полевые испытания показали 100% терпимость BH1750FVI к 5в на I2C шине.

BH1750_GY302_shield_pinout
BH1750_GY302_shield_schematic
первая версия

BH1750_shield_piout

BH1750_shield_schematic
вторая версия


Открыл Github и приуныл. Первый ардунщик, написал правильный алгоритм только для максимального разрешения. Второй, скопипастил у первого и выдал за свое. Немец из третьего репозитория так наговнокодил, что даже у меня, агронома, волосы зашевелились.

В общем покурил недельку мануал и написал свою. Поддерживает все плюшки сенсора:
- изменение чувствительности/усиления в диапазоне 0.45 - 3.68
- изменение разрешающей способности
- режим энергосбережения
- калибровка в диапазоне 0.96 - 1.44
- сброс предыдущего измерения

В библиотеке, по умолчанию, установлены следующие параметры:
- режим измерения с уходом в сон
- максимальная разрешающая способностью 0.5lx
- усиление 1.0, что соответствует рабочему диапазону измерения 1 - 65 535lx
- стандартный калибровочный коэффициент 1.2

Все параметры можно менять в начале инициализации или на лету в основном цикле. В примерах есть полное описание команд.

Основное применение коэффициента усиления - компенсация полупрозрачного фильтра/линзы Френеля, как на картинке ниже. Зная коэффициент пропускания можно на эту величину увеличить чувствительность сенсора и получить правильные значения яркости. Например коэффициент пропускания фильтра составляет 50%. Без компенсации результат измерения будет в 0.5 раза ниже реальной освещенности. Изменив коэффициента усиления с 1.0 до 2.0 мы получим правильное значение освещенности.


белый фильтр-линза Френеля


Еще одна особенность - это время измерения. Чем выше разрешающая способность и чувствительность, тем задумчивее сенсор. На максимальных настройках время измерения достигает 670 миллисекунд. Это ставит крест на регистрации пульсаций светового потока с частотой выше 38Гц.

Внимание!!! На плате установлен китайский стабилизатор XC6206 с максимальным входным напряжением 7 вольт. Будьте внимательны, не спалите сенсор.

Забирать как всегда тут.

UPD: У китайцев появился модуль на чипе MAX44009 с 12bit ЦАПом. Обещают чувствительность аж 0.045lx - 188 000lx.

UDP2: Похоже многие свалились с луны и не знают, что для нормальной работы i2c шины линии SDA и SCL должны быть подтянуты к питанию. Почему, читаем тут и тут.
Tags: #arduino, arduino
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 1 comment