Помогите пожалуйста решить проблему с передачей не корректных данных с 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
Большое отклонение температуры с датчика BME280
Модератор: immortal
-
- Сообщения: 1463
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 260 раз
- Поблагодарили: 454 раза
Re: Большое отклонение температуры с датчика BME280
Программно вопрос можно решить отбрасыванием явно нереальных значений + повторный опрос (перед записью полученных значений в свойство). Т.е. смотрим на полученное значение, если оно выходит за диапазон "нормальных", делаем повторный опрос датчика (можно несколько раз). Если даже после этого нормальное значение получить не удалось, пишем куда-нибудь сообщение, что "датчик врет" и думаем, что с этим делать дальше.
- Рейтинг: 1.16%
-
- Сообщения: 407
- Зарегистрирован: Вт окт 24, 2017 2:01 pm
- Откуда: Ижевск
- Благодарил (а): 45 раз
- Поблагодарили: 69 раз
Re: Большое отклонение температуры с датчика BME280
i2c шина предназначенная для использования внутри устройств и довольно критична к помехам и длине проводов.
резисторы подтягивающие есть? на сколько стоят? в идеале питание датчика должно быть таким же как питание процессора, иначе нужна схема согласования уровней. так же если это собрано на макетке "соплями" помех не избежать. еще можно попробовать понизить скорость
резисторы подтягивающие есть? на сколько стоят? в идеале питание датчика должно быть таким же как питание процессора, иначе нужна схема согласования уровней. так же если это собрано на макетке "соплями" помех не избежать. еще можно попробовать понизить скорость
- Рейтинг: 1.16%
PI2 + MQTT + 5 ESP8266 + Atmega16
-
- Сообщения: 48
- Зарегистрирован: Вс янв 13, 2019 4:37 pm
- Благодарил (а): 39 раз
- Поблагодарили: 0
Re: Большое отклонение температуры с датчика BME280
Подтягивающие подтягивающие не ставил, читал, что для EЫP32 они не требуются, могу поставить для эксперимента, какое значение рекомендуете?ZyaK писал(а): ↑Вт мар 30, 2021 10:18 ami2c шина предназначенная для использования внутри устройств и довольно критична к помехам и длине проводов.
резисторы подтягивающие есть? на сколько стоят? в идеале питание датчика должно быть таким же как питание процессора, иначе нужна схема согласования уровней. так же если это собрано на макетке "соплями" помех не избежать. еще можно попробовать понизить скорость
Ранее подавал на датчик напряжение 3,3 В, тоже были помехи, добрые люди посоветовали питать от 5 В "помехи должны пропасть", но нет.
Все собрано и спаяно на "постаянку", на "верняка"
Что значит понизить скорость? Как? Есть ссылка на описание процесса?
-
- Сообщения: 147
- Зарегистрирован: Ср сен 27, 2017 9:13 pm
- Откуда: MSK
- Благодарил (а): 235 раз
- Поблагодарили: 38 раз
Re: Большое отклонение температуры с датчика BME280
Всё очень просто: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).
- Рейтинг: 2.33%
Всем удачи.
Спрашивайте - не стесняйтесь.
Спрашивайте - не стесняйтесь.
-
- Сообщения: 48
- Зарегистрирован: Вс янв 13, 2019 4:37 pm
- Благодарил (а): 39 раз
- Поблагодарили: 0
Re: Большое отклонение температуры с датчика BME280
Проверку на корректность данных лучше где сделать в МД или в ESP32 (скетч)?Chainik писал(а): ↑Вт мар 30, 2021 8:52 amПрограммно вопрос можно решить отбрасыванием явно нереальных значений + повторный опрос (перед записью полученных значений в свойство). Т.е. смотрим на полученное значение, если оно выходит за диапазон "нормальных", делаем повторный опрос датчика (можно несколько раз). Если даже после этого нормальное значение получить не удалось, пишем куда-нибудь сообщение, что "датчик врет" и думаем, что с этим делать дальше.
-
- Сообщения: 48
- Зарегистрирован: Сб июл 21, 2018 9:08 pm
- Откуда: Калининград
- Благодарил (а): 10 раз
- Поблагодарили: 5 раз
Re: Большое отклонение температуры с датчика BME280
У меня все сенсоры на ПУ заведены и что бы отфильтровать некорректные значения я сделал так.
В ПУ есть minValue и maxValue свойства. И так я не использую оповещения о выходе показаний сенсора за границы то я использовал значения этих свойств для фильтрации. На каждом сенсоре выставил в этих свойствах пределы и в классовом свойстве Value включил проверку значений - расширенный (кодом) и там добавил этот код.
if (($value < $this->getProperty('minValue')) || ($value > $this->getProperty('maxValue'))) {
$value=NULL;
}
Получилось что каждый сенсор можно настроить индивидуально.
P.s. У меня некорректные значения приходят только при работе частотного преобразователя скважинного насоса. И никакие фильтры , дорогие валютные БП и УПС не помогают.
В ПУ есть minValue и maxValue свойства. И так я не использую оповещения о выходе показаний сенсора за границы то я использовал значения этих свойств для фильтрации. На каждом сенсоре выставил в этих свойствах пределы и в классовом свойстве Value включил проверку значений - расширенный (кодом) и там добавил этот код.
if (($value < $this->getProperty('minValue')) || ($value > $this->getProperty('maxValue'))) {
$value=NULL;
}
Получилось что каждый сенсор можно настроить индивидуально.
P.s. У меня некорректные значения приходят только при работе частотного преобразователя скважинного насоса. И никакие фильтры , дорогие валютные БП и УПС не помогают.
-
- Сообщения: 34
- Зарегистрирован: Ср июл 22, 2020 1:30 pm
- Благодарил (а): 6 раз
- Поблагодарили: 1 раз
Re: Большое отклонение температуры с датчика BME280
Возможно на частотном преобразователе (на каждой фазе) нужно ставить L-фильтр. Почитайте на него инструкцию. В основном такие фильтры ставят со стороны двигателей, но возможно и на входе могут устанавливаться.noname_npc писал(а): ↑Сб апр 24, 2021 2:20 pmУ меня все сенсоры на ПУ заведены и что бы отфильтровать некорректные значения я сделал так.
В ПУ есть minValue и maxValue свойства. И так я не использую оповещения о выходе показаний сенсора за границы то я использовал значения этих свойств для фильтрации. На каждом сенсоре выставил в этих свойствах пределы и в классовом свойстве Value включил проверку значений - расширенный (кодом) и там добавил этот код.
if (($value < $this->getProperty('minValue')) || ($value > $this->getProperty('maxValue'))) {
$value=NULL;
}
Получилось что каждый сенсор можно настроить индивидуально.
P.s. У меня некорректные значения приходят только при работе частотного преобразователя скважинного насоса. И никакие фильтры , дорогие валютные БП и УПС не помогают.
Orange Pi Lite + Armbian + MJD Majordomo пока на стадии изучения...