Страница 1 из 1

Большое отклонение температуры с датчика BME280

Добавлено: Вт мар 30, 2021 7:33 am
Forth
Помогите пожалуйста решить проблему с передачей не корректных данных с BME280.
Подключил 2 датчика BME280 по принципу описанному тут http://digitrode.ru/computing-devices/m ... s-i2c.html
В результате получаю периодические большие отклонения +150, -150 в разное время на обоих датчиках. Питание подаю 5В.
Скрины:
http://vfl.ru/fotos/895a32c433873945.html
http://vfl.ru/fotos/34c89f3d33873946.html

Re: Большое отклонение температуры с датчика BME280

Добавлено: Вт мар 30, 2021 8:52 am
Chainik
Программно вопрос можно решить отбрасыванием явно нереальных значений + повторный опрос (перед записью полученных значений в свойство). Т.е. смотрим на полученное значение, если оно выходит за диапазон "нормальных", делаем повторный опрос датчика (можно несколько раз). Если даже после этого нормальное значение получить не удалось, пишем куда-нибудь сообщение, что "датчик врет" и думаем, что с этим делать дальше.

Re: Большое отклонение температуры с датчика BME280

Добавлено: Вт мар 30, 2021 10:18 am
ZyaK
i2c шина предназначенная для использования внутри устройств и довольно критична к помехам и длине проводов.
резисторы подтягивающие есть? на сколько стоят? в идеале питание датчика должно быть таким же как питание процессора, иначе нужна схема согласования уровней. так же если это собрано на макетке "соплями" помех не избежать. еще можно попробовать понизить скорость

Re: Большое отклонение температуры с датчика BME280

Добавлено: Вт мар 30, 2021 11:27 am
Forth
ZyaK писал(а):
Вт мар 30, 2021 10:18 am
i2c шина предназначенная для использования внутри устройств и довольно критична к помехам и длине проводов.
резисторы подтягивающие есть? на сколько стоят? в идеале питание датчика должно быть таким же как питание процессора, иначе нужна схема согласования уровней. так же если это собрано на макетке "соплями" помех не избежать. еще можно попробовать понизить скорость
Подтягивающие подтягивающие не ставил, читал, что для EЫP32 они не требуются, могу поставить для эксперимента, какое значение рекомендуете?
Ранее подавал на датчик напряжение 3,3 В, тоже были помехи, добрые люди посоветовали питать от 5 В "помехи должны пропасть", но нет.
Все собрано и спаяно на "постаянку", на "верняка"
Что значит понизить скорость? Как? Есть ссылка на описание процесса?

Re: Большое отклонение температуры с датчика BME280

Добавлено: Вт мар 30, 2021 1:08 pm
TrDA
Forth писал(а):
Вт мар 30, 2021 11:27 am
Подтягивающие подтягивающие не ставил, читал, что для EЫP32 они не требуются, могу поставить для эксперимента, какое значение рекомендуете?
Ранее подавал на датчик напряжение 3,3 В, тоже были помехи, добрые люди посоветовали питать от 5 В "помехи должны пропасть", но нет.
Все собрано и спаяно на "постаянку", на "верняка"
Что значит понизить скорость? Как? Есть ссылка на описание процесса?
Всё очень просто:
1. Не слушайте псевдо специалистов по i2c шине (сразу см. п.5).
2. Подтягивающие резисторы:
- 10kOm (или реже 4.7kOm или ещё реже 12kOm), ничего не мешает поставить их на конечном устройстве (слейве) и/или на головном устройстве (мастере).
- и обычно они уже(!!!) установлены на конечном устройстве.
- и всегда они уже(!!!) установлены на головном, на специальных i2c пинах. Для esp32 это: GPIO 22 (SCL) and GPIO 21 (SDA).
- т.е. одновременно(!!!) они могут быть установлены и конечном устройстве и на головном.
- иными словами: их дополнительная установка в 95% случае не требуется.
3. Сенсор BME280 (как и большинство сенсоров i2c):
- всеяден, питание от 3.3V (на очень короткой линии) и до 5V (на длинной линии - до 2х метров по витой паре).
- требователен к чистоте(!) питания.
4. Броски значений до +/- 150С, это или:
- глюки используемой вам i2c библиотеки (чаще всего), используйте проверенные готовые прошивки, например Tasmota.
- скачки по питанию, поставьте электролитический алюминиевый конденсатор 10V 500mF (https://www.chipdip.ru/catalog/aluminum ... &x.359=2mK), или замените блок питания на заведомо более мощный и качественный.
- помехи в линии, уменьшите длину лини и/или используйте "компютерную" витую пару.
5. Для информации про i2c шину (обе ссылки написаны мной):
- кратко и на русском (https://4pda.ru/forum/index.php?showtop ... ry97913549).
- подробнее и английском (https://github.com/arendst/Tasmota/discussions/10827).

Re: Большое отклонение температуры с датчика BME280

Добавлено: Вт мар 30, 2021 2:23 pm
Forth
Chainik писал(а):
Вт мар 30, 2021 8:52 am
Программно вопрос можно решить отбрасыванием явно нереальных значений + повторный опрос (перед записью полученных значений в свойство). Т.е. смотрим на полученное значение, если оно выходит за диапазон "нормальных", делаем повторный опрос датчика (можно несколько раз). Если даже после этого нормальное значение получить не удалось, пишем куда-нибудь сообщение, что "датчик врет" и думаем, что с этим делать дальше.
Проверку на корректность данных лучше где сделать в МД или в ESP32 (скетч)?

Re: Большое отклонение температуры с датчика BME280

Добавлено: Сб апр 24, 2021 2:20 pm
noname_npc
У меня все сенсоры на ПУ заведены и что бы отфильтровать некорректные значения я сделал так.
В ПУ есть minValue и maxValue свойства. И так я не использую оповещения о выходе показаний сенсора за границы то я использовал значения этих свойств для фильтрации. На каждом сенсоре выставил в этих свойствах пределы и в классовом свойстве Value включил проверку значений - расширенный (кодом) и там добавил этот код.

if (($value < $this->getProperty('minValue')) || ($value > $this->getProperty('maxValue'))) {
$value=NULL;
}

Получилось что каждый сенсор можно настроить индивидуально.

P.s. У меня некорректные значения приходят только при работе частотного преобразователя скважинного насоса. И никакие фильтры , дорогие валютные БП и УПС не помогают.

Re: Большое отклонение температуры с датчика BME280

Добавлено: Сб май 29, 2021 3:47 pm
Qdesnikmak
noname_npc писал(а):
Сб апр 24, 2021 2:20 pm
У меня все сенсоры на ПУ заведены и что бы отфильтровать некорректные значения я сделал так.
В ПУ есть minValue и maxValue свойства. И так я не использую оповещения о выходе показаний сенсора за границы то я использовал значения этих свойств для фильтрации. На каждом сенсоре выставил в этих свойствах пределы и в классовом свойстве Value включил проверку значений - расширенный (кодом) и там добавил этот код.

if (($value < $this->getProperty('minValue')) || ($value > $this->getProperty('maxValue'))) {
$value=NULL;
}

Получилось что каждый сенсор можно настроить индивидуально.

P.s. У меня некорректные значения приходят только при работе частотного преобразователя скважинного насоса. И никакие фильтры , дорогие валютные БП и УПС не помогают.
Возможно на частотном преобразователе (на каждой фазе) нужно ставить L-фильтр. Почитайте на него инструкцию. В основном такие фильтры ставят со стороны двигателей, но возможно и на входе могут устанавливаться.