• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP8266 + BH1750 засыпают показания датчика

Доброго времени суток. Приходится по-быстрому и рывками осваивать работу с ESP. Сейчас одна из задач создать/настроить измеритель яркости, тоесть типа люксометр. По идее для этого используется BH1750. Но у меня с одной библиотекой (bh1750) вообще постоянно пишет, мол датчик не сконфигурирован. А если подключаю библиотеку BH1750-HD, то из примера начинает работать. Реагирует на изменение яркости. Но где-то через пол минуты - минуту типа засыпает и показывает одно и тоже значение, на котором в тот момент был. Не важно высокие показания люкс или низкие. И потом хоть как меняй освещение, он не реагирует никак. Нужно либо отрубать кабель, либо перезаливать скетч. Скетч самый простой из примера:

Код:
/*

  Example of BH1750 library usage.

  This example initalises the BH1750 object using the default
  high resolution mode and then makes a light level reading every second.

  Connection:

    VCC -> 5V (3V3 on Arduino Due, Zero, MKR1000, etc)
    GND -> GND
    SCL -> SCL (A5 on Arduino Uno, Leonardo, etc or 21 on Mega and Due)
    SDA -> SDA (A4 on Arduino Uno, Leonardo, etc or 20 on Mega and Due)
    ADD -> (not connected) or GND

  ADD pin uses to set sensor I2C address. If it has voltage greater or equal to
  0.7VCC voltage (as example, you've connected it to VCC) - sensor address will be
  0x5C. In other case (if ADD voltage less than 0.7 * VCC) - sensor address will
  be 0x23 (by default).

*/

#include <Wire.h>
#include <BH1750-HD.h>

BH1750 lightMeter;

void setup(){

  Serial.begin(9600);
  lightMeter.begin();
  Serial.println("BH1750 Test");

}


void loop() {

  uint16_t lux = lightMeter.readLightLevel();
  Serial.print("Light: ");
  Serial.print(lux);
  Serial.println(" lx");
  delay(1000);

}

Привел пример полностью, с родными пояснениями. Вроде по подключению все просто. Хотя пробовал менять 3,3в на 5в, ничего не меняется.
Это так и должно быть или я что-то делаю не так?
 
Попробуйте эту
Работает. Правда настроек/значений много. Нужно разбираться.
Нашел в ардуино.иде одну библиотеку BH1750, но уже большими буквами, не как на гитхабе маленькими во вчерашнем примере. И пример из неё тоже работает. Но тут уже с данными попроще. Нет всех этих плюс/минус и прочих настроек. Кстати, как вообще понять, какие показания нужны: более продвинутые, как в предложенной вами библиотеке, или достаточно стандартной? Профессиональные люксометры какие цифры дают? Или это лучше уточнять в отдельной теме?
 

pvvx

Активный участник сообщества
Работает. Правда настроек/значений много. Нужно разбираться.
Нашел в ардуино.иде одну библиотеку BH1750, но уже большими буквами, не как на гитхабе маленькими во вчерашнем примере. И пример из неё тоже работает. Но тут уже с данными попроще. Нет всех этих плюс/минус и прочих настроек. Кстати, как вообще понять, какие показания нужны: более продвинутые, как в предложенной вами библиотеке, или достаточно стандартной? Профессиональные люксометры какие цифры дают? Или это лучше уточнять в отдельной теме?
У данных датчиков низкая чувствительность.
Проверить можно так: вывести на экран 256 градаций серого и опустить яркость (контрастность) до различимого глазом градаций уровней и пробовать измерить этим датчиком :)
Можно и 4 градации - всё равно этот датчик не справится.

Типичный монитор выдает примерно 400 lux на макс яркости и имеет мульон цветов, что является градациями уровня...
 

enjoynering

Well-known member
Кривое описание:
  • Default range: 1 - 65'535 lux
Как из значения 16 битного регистра деленного на 1.2 получить число 65535?
Только у enjoynering такое бывает?
Вы опять не разобрались. Можно, но точность вас не порадует. Ставим матовый фильтр перед сенсором с известной пропускной способностью от 0.45 до 3.86. В библиотеке меняем значение sensitivit и вуааля.

На первой странице datasheet, пункт четыре - wide range (1 - 65535lx)
 

pvvx

Активный участник сообщества
На первой странице datasheet, пункт четыре - wide range (1 - 65535lx)
Кто-то ошибся, а вы повторяете с добавкой - Default , что не обеспечивает ваша либа.
Тогда исправляете в своем коде 1.2 на 1.0 :p
При 65535lx данный сенсор уходит в ограничение, т.е. ещё ранее.
 

pvvx

Активный участник сообщества
Если с внешними фильтрами, то можно написать на первой странице PDF что он работает до мульона lx. И расписать не данные по чипу, а о светофильтрах...
1-65535 дискретных уровней образовалось от единиц 16 битного ADC, а не от lx.
 

pvvx

Активный участник сообщества
Вы опять не разобрались. Можно, но точность вас не порадует. Ставим матовый фильтр перед сенсором с известной пропускной способностью от 0.45 до 3.86. В библиотеке меняем значение sensitivit и вуааля.

На первой странице datasheet, пункт четыре - wide range (1 - 65535lx)
Ещё походу вы не прочитали документацию.
Настройка выполняется путем изменения времени измерения в регистре MTreg.
А по умолчанию, по вашему "Default", там используется указанное в PDF значение, изменяющее "wide range" в lx.
Вам и задали вопрос примерно в эту тему, но не писать же за вас. Для этого и указал, чтобы исправили - детям надо знать сколько оно кажет в lx без калибровок и стеклышек :p
 
У данных датчиков низкая чувствительность
А какой датчик посоветуете?
Вам и задали вопрос примерно в эту тему, но не писать же за вас. Для этого и указал, чтобы исправили - детям надо знать сколько оно кажет в lx без калибровок и стеклышек :p
Заявляю как ребенок ))) Не все понял, что вы написали, но чувствую, что это то, что я хотел сказать ))))
 

pvvx

Активный участник сообщества
А какой датчик посоветуете?
У меня пока не было нужды в точном измерении светового потока.
Для домашней автоматизации включать или нет свет при входе дома и т.д. в зависимости от освещения солнышка, данные датчики вполне достаточны. Но не для каких-то измерений.
И всегда проще использовать какой готовый - на текущий момент уже более года на улице и загородном участке работают CGPR1. Но у некоторых из них обнаружилась беда - при большой влажности и больших перепадах температур, спустя год работы некоторые стали глючить. Причина в плохой промывке печатной платы производителем...
По этой причине решил заменить на что-то более надежное. А выбор невелик - впихать в дешевые китайские лампы c солнечной панелью, акб и датчиками чип BLE, или делать полностью свой.
Эти китайские фонарики не могут обеспечивать нормального освещения, но четко годятся как автономные датчики c автоподзарядкой от всторенной или внешней солнечной панели и у них в корпусе есть куча места, чтобы прилепить чип с BLE, который совершенно не скажется на потреблении встроенного акб. И там уже всё есть - датчик движения, датчик освещенности, солнечная панель и акб, с которых можно транслировать в систему все параметры необходимые для включения прожекторов и прочего внешнего освещения...

А для целей измерения и на самом начальном уровне нужно что-то получше...
 

pvvx

Активный участник сообщества
В любом смартфоне есть практически аналогичный датчик освещения. Достаточно поставить тупенькую программу Light Meter или подобную и "измерять", а не паять какие-то устаревшие чипы и копаться в либах любителей извращений...
 
В любом смартфоне есть практически аналогичный датчик освещения. Достаточно поставить тупенькую программу Light Meter или подобную и "измерять", а не паять какие-то устаревшие чипы и копаться в либах любителей извращений...
Показания сильно отличаются от проф люксометров. А они дорогие. Но в любом случае я точно не смогу к ним подключиться и списывать то, что мне нужно. Может и есть способ, но моих знаний не хватает. Вот и надеюсь на уже готовый датчик, чтобы на его основе реализовать то, что мне нужно.
А выбор невелик - впихать в дешевые китайские лампы c солнечной панелью, акб и датчиками чип BLE, или делать полностью свой.
Эти китайские фонарики не могут обеспечивать нормального освещения, но четко годятся как автономные датчики c автоподзарядкой от всторенной или внешней солнечной панели и у них в корпусе есть куча места, чтобы прилепить чип с BLE, который совершенно не скажется на потреблении встроенного акб. И там уже всё есть - датчик движения, датчик освещенности, солнечная панель и акб, с которых можно транслировать в систему все параметры необходимые для включения прожекторов и прочего внешнего освещения...
Есть подобная идея, но я совершенно не разбираюсь, что куда там подключить и как прошивать под свои задачи. Тот же датчик движения у них используется HR501. Но настроен как попало. Нужно постоянно дергаться, чтобы лампа светила. Для меня проще в их корпус впихнуть те же датчики, добавить и настроить под себя. Правда пока до полной реализаци такой лампы не дошло, хотя куплено все или почти все. Не могу пока решить вопрос с зарядкой. В тех, что я видел всего один акб, и его на долго не хватает. Хотелось бы два акб, но нужно ставить бмс для их зарядки. Пока не определился что и как покупать и соединять. Но это отдельная тема, которая измерения яркости света не касается.
 

pvvx

Активный участник сообщества
1673099670475.png
и данный датчик (установки по умолчанию), рядом в 10 мм и направленный примерно так-же, всё вдали от лампы, чтобы световой поток был одинаков
1673099780379.png
Измерено с помощью тупого теста по ссылке https://github.com/pvvx/UBIA/blob/master/WebBluetooth/testBH1750.html
 

pvvx

Активный участник сообщества
Из дешевых были проверены погодой на -25С такие варианты:
Имеют кривые АКБ, конкретно - как попадется. Одни пашут и заражаются отлично, другие - фиг вам. Меняете АКБ и делаете тест на потребление в режиме ожидания.
У нормальных ток там от АКБ в режиме ожидания менее 1 мкА!
 

pvvx

Активный участник сообщества
Добавление в них чипа BLE увеличит ток до 5..6 мкА. Для их АКБ это никак не скажется.
А такие светильники на дачах удобно использовать во внешнем туалете и нигде более :)
 

pvvx

Активный участник сообщества
Показания сильно отличаются от проф люксометров. А они дорогие. Но в любом случае я точно не смогу к ним подключиться и списывать то, что мне нужно. Может и есть способ, но моих знаний не хватает. Вот и надеюсь на уже готовый датчик, чтобы на его основе реализовать то, что мне нужно.
Для поиска дешевого - наверно сюда, но тестов ещё нет - только недавно заказаны.
А если с китай-светильниками что-то выйдет, то скину все исходники на github. Подразумевается работа с HomeAssistant как датчика движения и освещения.
 
Для поиска дешевого - наверно сюда, но тестов ещё нет - только недавно заказаны.
Так тут же речь идет не про датчик яркости, а про датчик определения цвета. Или вы имели ввиду продавца? Кстати, если продавца, то у них, именно у этого же продавца на таобао цена на тот же AS7343 цена на треть меньше. Он мне сам дал ссылку на их страницу на таобао с этими датчиками.
А такие светильники на дачах удобно использовать во внешнем туалете и нигде более :)
В их исполнении наверное да. Но есть желание сильно переделать. Главное, что от них нужно - корпус с дырками под датчик и солнечная панелька.
 

pvvx

Активный участник сообщества
Так тут же речь идет не про датчик яркости, а про датчик определения цвета. Или вы имели ввиду продавца? Кстати, если продавца, то у них, именно у этого же продавца на таобао цена на тот же AS7343 цена на треть меньше. Он мне сам дал ссылку на их страницу на таобао с этими датчиками.

В их исполнении наверное да. Но есть желание сильно переделать. Главное, что от них нужно - корпус с дырками под датчик и солнечная панелька.
У меня такая ныне интенсивность солнечного света:
1673105102028.png
Т.е. в некоторые дни менее чем светит монитор, а уже световой день сильно увеличился.
Такого для заряда от солнечной батареи не хватит ни на что, кроме запитки BLE или ZigBee чипа.

CGPR1 с графика показывает 132 lx при тесте в удалении от лампы, а смартфон в Light Meter - 125 lx.
По этому для измерений такие датчики не годятся, хотя показывают разницу освещенности у типовых лед-ламп от малых изменений напряжения в сети.
При этом каждый замер показания разнятся - нет идентичности - много зависимостей от температуры и т.д.
Т.е. какие-то дифференциальные измерения возможны, но не абсолютные.
 

pvvx

Активный участник сообщества
Так тут же речь идет не про датчик яркости, а про датчик определения цвета.
Это всё едино. Там такой-же по принципу датчик, но плюс цвета и возможность управлять усилением, что даст немного большее разрешение.
 
Сверху Снизу