Меню

Bme280 не работает влажность

Arduino.ru

Датчик BME280 — не отобржается влажность и выстоа отрицательная.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Изначально не выводилось ничего. В библиотеке сменил адрес датчика по I2C на 0х76. И еще закоментировал //return false; в библиотеке как паказанно вот тут http://davidstein.cz/2017/09/30/arduino-bme280-could-not-find-a-valid-bme280-sensor-solved/

После этого стала отображаться температура и атмосферное давление. Но высота некорректно отображается и влажность 0%. В чем мoжет быть проблема?

Temperature = 23.21 *C
Pressure = 1026.81 hPa
Approx. Altitude = -112.28 m
Humidity = 0.00 %

Помогите пожалуйста разобрться уже 3 день ищу, думаю что нетак.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Этот модуль еще нужно правильно подключить.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Доброго дня. Модуль вроде бы подключен правильно. Так как I2C scaner выводит адрес 0х76 да и температура с атм. давлением отображается корректно.

GND —>земля
VCC —> +3.3V
SCL —> контакт 22 (ESP32 Devkit V1 SCL)
SDA —> контакт 21 (ESP32 Devkit V1 SDA)

Скорее всего что то в библиотеке не так. Но что?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А высоту над уровнем моря вы правильно считаете? — уверены, что в параметр SEALEVELPRESSURE_HPA нужно заносить 760 мм рт ст?

По смыслу этот датчик показывает ИЛИ давление ИЛИ высоту над уровнем моря, но не оба параметра разом. Чтобы вычислить высоту надо знать текушее давление на уровне моря — и именно это текущее давление нужно занести в параметр SEALEVELPRESSURE_HPA, а вовсе не «идеальную» цифру в 760 мм ртст.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

По смыслу этот датчик показывает ИЛИ давление ИЛИ высоту над уровнем моря, но не оба параметра разом.

А как же BMP180 кажет и то и то.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А как же BMP180 кажет и то и то.

неверно выразился — дачик может показывать изменение давления при неизменной высоте или изменение высоты при неизменном давлении. Вычислять и то и другое разом — не выйдет, так по сути измеряется только одна величина и потом пересчитывается либо в то. либо в другое

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Вот мой чо кажет в протеусе. В реале в железе то-же что и на смартфоне и гисметео.

Библиотека естественно самописная, нет такой в инете.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Вот мой чо кажет в протеусе.

вы физику учили в школе? 🙂

ответьте, каким образом этот датчик измеряет высоту над уровнем моря. и сами все поймете

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

#define SEALEVELPRESSURE_HPA (1013.25)

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Живу над уровнем моря) И показатель атм. давления меня пока не смущают. Этот вопрос легче, я решу его позже. Меня больше интересует влажность почему всегда 0.

Тут мои библиотеки. Так как на форуме я не нашел как вложить файлы.

Посмотрите пожалуйста что я не так делаю или что упустил?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

#define SEALEVELPRESSURE_HPA (1013.25)

1013,25 ГПа — это и есть 760 мм. рт. ст — нормальное атмосферное давление на уровне моря

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А, простите. Я на метеостанциях только КПа вижу, что-то мне в голову даже не пришло пересчитывать.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Вроде почти всё сходится.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Живу над уровнем моря)

это не имеет значения, все равно в этот параметр нужно заносить не идеальное давление 760 мм. а текущее на уровне моря. То есть для вас — ту самую цифру, что СЕЙЧАС! показывает барометр. И тогда датчик совершенно точно покажет высоту 0 м 🙂

Поймите. это кажется бредом — но для определения этим датчиком высоты надо сначала узнать эту высоту каким-то иным способом, пересчитать по ней текущее давление на высоту 0м и вставить полученную цифру в скетч. Зато после этого, если вы например взберетесь с датчиком на 12 этаж или на соседнюю сопку — он вам покажет разницу высоты. на которую вы поднялись от первой точки.

Читайте также:  Как настроить эфирные каналы через ресивер

Источник

Работа с датчиком давления BME280. Обсуждение, обмен опытом

Помощь в написании контрольных, курсовых и дипломных работ здесь.

BME280 сенсор давления температуры и влажности
Всем привет. Имею такую проблему с BME280 Все делаю по даташит. Температуру измеряет, а давление.

Герметизация корпуса с датчиком давления
Приветствую всех! Вопрос: как изготавливают корпуса по IP65-IP67 с датчиками давления воздуха.

Обмен опытом об iptables
Поделитесь своим опытом создания правил iptables. Например в каком порядке создавать правила и т д

Обмен опытом и сотрудничество
Здравствуйте, программисты, веб-мастера, дизайнеры. Рад буду пообщаться, обменяться опытом, и.

stend, За ссылку спасибо. Буду смотреть, изучать. Но вот закавыка-то какая. Не настолько я опытен в реверсном инжиниринге в области С Тяжеловато пока понимается чужой код, поэтому помощи и прошу у более опытных людей. Вот взял бы кто да помог «выдрать» эти злосчастные формулы. Была б и мне польза и может кому ещё
А по поводу «посмотреть у других», так инет копан-перекопан, всё что найдено крайне непонятно..
ХеХ..
Сорри за тупость. Стаж в С «с нуля» год с небольшим..

Добавлено через 22 минуты
«Увидел» я в этом коде тот кусок, который отвечает за компенсационные вычисления. Понятнее, чем в даташите, но всё равно пока что крайне тяжковато. Уж очень там все вычисления «заворачиваются» друг за друга. Никто ж комментарии в коде не пишет, к сожалению (понятно что никто никому ничего не должен) Но с комментами было бы намного попроще..
Нужно брать бумагу, карандаш и разбирать «по кирпичикам». Ооох, тяжко мне
Да и Bosch Sensortec чё-то пока молчит как рыба об лёд

Юххуу. Пошла «жара».. Считаны калибровочные параметры. Выведены на LCD. Радостно, однако!
Процесс прошёл безо всяких «косяков». «Пилим» дальше!
Достойный «противник»..

Добавлено через 18 часов 0 минут
Может кому-то, кто будет осваивать BME280 пригодится информация для оценки правильности считывания калибровочных параметров:

Пришлось немного поднапрячь мозжечок и написать процедуру извлечения сих калибровок из BME280. Сложновато всё это как-то организовано. Но судя по сложности, датчик должен быть достойный..
Работа продолжается, как будет что новое, буду писать.
P.S.
До чего ж дошёл прогресс, уму непостижимо. В какого-то «клопа», размером с торец спички, впихнули стоко всякой всячины..

Добавлено через 5 часов 4 минуты
Итак.. Все калибровочные параметры считаны, неоднократно проверены. Всё работает правильно. Все исходные регистры калибровок и результирующие их значения, скомпонованные из исходных регистров отображаются на LCD. Следующим этапом был запуск измерения P; RH; T и считывание его результатов с выводом на LCD. Всё считалось, но результаты измерений получены как значения по сбросу датчика (0x80). После уточнения информации в даташите было выяснено, что измерение P; RH; T выполняется только при включенном оверсэмплинге для каждого параметра. Без включения сей опции величины P; RH; T имеют значения 0x80, т.е. измерение их фактически отключено.
Такая вот информация. Может кому пригодится.
Завтра буду допиливать. Результат будет сообщён.

Добавлено через 23 часа 23 минуты
Считаны и выведены на LCD некомпенсированные «Raw» значения P; RH; T.
ВНИМАНИЕ! Оверсэмплинг влажности нужно конфигурировать ДО записи данных в регистр ctrl_meas, иначе данные оверсэмплинга влажности не будут восприняты датчиком и как следствие некомпенсированное значение влажности будет оставаться 0x80.
Между записью данных в различные регистры конфигурации временные задержки не требуются.
Порядок записи в регистры, при которых датчик гарантированно конфигурируется следующий:
1. Запись в регистр config.
2. Запись в регистр ctrl_hum
3. Запись в регистр ctrl_meas
Ну теперь осталось «пропустить» некомпенсированные «Raw» значения P; RH; T через компенсационные формулы.
Пилим..

Добавлено через 22 часа 51 минуту
stend, Ещё раз благодарю за полезную ссылку там компенсационные формулы приведены в адекватном виде, конечно при более вдумчивом изучении.
Температура уже вычислена и выведена на LCD! Надеюсь, что с давлением и влажностью проблем не возникнет.
Хотелось бы заметить, что принцип «Спасение утопающих-дело рук самих утопающих» самый верный. И ещё очень верны высказывания «Глаза боятся, а руки делают» и «Не святые горшки лепят».. Покумекал башкой немного и вот результат налицо.
Итак можно подвести итог.. BME280 побеждён!
Пилю дальше, «обновки» выложу. Как закончу все параметры, выложу код функции компенсационных вычислений. На пользу народу.

Читайте также:  Что будет если сломалась передняя стойка стабилизаторов

Источник

STM Урок 121. Датчик температуры, давления и влажности BME280. Часть 1

На данном занятии мы по многочисленным просьбам рассмотрим датчик от компании Bosch SensortecBME280.

Данный датчик измеряет несколько очень важных величин окружающей среды – это температура, влажность воздуха, а также атмосферное давление.

Есть ещё подобный датчик – BMP280, который также измеряет данные величины, но только кроме влажности. Но зато стоит он гораздо дешевле.

Но так как просьбы были именно рассмотреть датчик BME280, то им мы и займёмся.

Помимо того, что датчик измеряет все эти вышеперечисленные величины, он также умеет фильтровать шумы, в него встроена очень тонкая калибровка показаний, в то же время все эти работы он проделывает блестяще и очень быстро. Также в отличие от предыдущих подобных рассмотренных нами датчиков, данный датчик проделывает все эти измерения не только быстро, но и в более широких диапазонах. Например, многие датчики не умеют измерять влажность воздуха менее 20 процентов.

Выглядит датчик следующим образом (нажмите на картинку для увеличения изображения)

И, прежде чем приступить к программированию и подключению данного датчика, мы кратко познакомимся с его основными характеристиками. Если кому-то интересно узнать подробно, то вся информация присутствует на официальном сайте компании Bosch Sensortec.

Пока начнём с того, как данный датчик подключить к контроллеру. Он может подключаться как с помощью шины SPI, так и с помощью шины I2C. Мы же будем подключать его именно по шине I2C, так как мне в руки попал модуль с данным датчиком, который подключается только посредством I2C и интерфейс SPI в нём от датчика на внешние контакты не выведен. Выглядит данный модуль следующим образом

По шине SPI датчик можно тактировать частотой до 10 мегагерц, а по шине I2C – до 3,4 мегагерц

Питать данный модуль можно от 1,71 вольт до 3,6 вольт.

Порт ввода-вывода датчика питается в диапазоне 1,2 – 3,6 В (существует для этого отдельная ножка питания).

Ток потребления датчика:

при измерении влажности и температуры при частоте дискретизации 1 герц – 1,8 мкА,

при измерении давления и температуры при частоте дискретизации 1 герц – 2,8 мкА,

при измерении давления, влажности и температуры при частоте дискретизации 1 герц – 3,6 мкА,

в спящем режиме – 0,1 мкА.

Мы видим, что такие токи у нас будут иметь место только при семплировании 1 герц, без оверсемплинга (передискретизации). А если мы применим какие-нибудь фильтры, то на выходе уже будет совершенно другая частота, в силу вступят коэффициенты фильтрации. Поэтому в таком случае данные токи потребления будут наблюдаться уже при меньшей частоте измерений.

Диапазоны измерения: температуры – -40 … +85 °C, влажности – 0 … 100 %, давления – 300 … 1100 hPa.

Конечно в различных диапазонах точность измерения будет разная.

Например, точность измерения влажности ±3 %RH обеспечивается только в диапазоне 20…80 %RH, а точность измерения давления ±1.0 hPa – в диапазоне 300 … 1100 hPa (то есть во всём диапазоне). Точность измерения температуры ±0.5 °C (при 25 °C),

Шумит датчик следующим образом:

Влажность: 0,07% – без применения оверсемплинга, при максимальном оверсемплинге шумы снижаются до 0,02%.

Давление: 1,3 Pa – без применения оверсемплинга и фильтров, при максимальных оверсемплинге и фильтрации снижаются до 0,2 Pa.

Температура: 0,005 °C – без применения оверсемплинга и фильтров, при максимальных оверсемплинге и фильтрации снижаютя до 0,002 °C.

Читайте также:  Не работает регулировка сиденья w203

Теперь посмотрим назначение контактов датчика

Vdd – аналоговое питание;

GND – общий провод;

Vddio – питание цифрового тракта;

SDO – выход цифрового сигнала при использовании 4-проводного режима SPI, при использовании режима I2C – шина адреса (если соединен с общим проводом, то логический ноль в нулевом бите адреса, если с питанием – то логическая 1);

GND – общий провод;

CSB – контакт CS (chip select) при использовании режима SPI;

SDI – вход цифрового сигнала при использовании 4-проводного режима SPI, вход и выход цифрового сигнала при использовании 3-проводного режима SPI и режима I2C;

SCK – шина тактирования цифрового сигнала.

Также у датчика существует масса различных регистров, с которыми подробно мы будем знакомиться при написании кода.

Вот так организована память в датчике (нажмите на картинку для увеличения изображения)

Также следует отметить, что датчик может находиться в трёх режимах: в нормальном (NORMAL MODE), в спящем (SLEEP MODE) и в принудительном (FORCE MODE).

Ну со спящим режимом всё ясно. А чем же отличается нормальный от принудительного?

В нормальном режиме после считывания значений с датчика последний остаётся в этом режиме и дальше, а вот в принудительном, когда мы считаем значения, датчик автоматически переходит в спящий режим. И, чтобы нам опять считывать показатели, нам надо заново инициализировать либо нормальный либо принудительный режимы.

Данная диаграмма как нельзя лучше показывает нам это

Теперь схема подключения.

Модуль с датчиком мы подключим к плате Nucleo STM32F401RE. также к информационным контактам I2C мы подключим логический анализатор, чтобы смотреть, как наш датчик будет откликаться на команды. Затем, как только приём наладится, мы к плате также по I2C подключим символьный дисплей LCD2004.

Вот так выглядит наша схема без дисплея (нажмите на картинку для увеличения изображения)

Создадим новый проект в Cube MX и выберем контроллер

Включим тактирование контроллера

Затем включим отладчик

Включим шину I2C для подключения датчика

Переопределим ножки для удобства подключения датчика

Давайте заодно сразу включим и шину для подключения дисплея

Для данной шины ничего не переопределяем, ножки остаются по умолчанию.

Включим также шину USART для просмотра отладочной информации, нам же все равно никаких проводов и переходников не надо, USART работает через отладочный порт

Включим также на выход ножку светодиода

Перейдём в System Configuration и настроим следующие частоты (нажмите на картинку для увеличения изображения)

Перейдём в Configuration и настроим I2C для датчика

На всякий случай включим прерывания, вдруг пригодятся

Зайдём в настройки другой шины I2C и убедимся, что там всё правильно

Зайдём в настройки проекта, выберем среду программирования, папку проекта и назовём наш проект

Сохраним настройки проекта, сгенерируем проект для Keil, откроем его в нём, затем настроим программатор на автоперезагрузку, установим уровень оптимизации в 1 и попробуем собрать проект.

Если всё нормально собралось, то продолжим.

Откроем файл main.c и подключим библиотеку для работу со строками

/* USER CODE BEGIN Includes */

#include

/* USER CODE END Includes */

Добавим глобальный строковый массив

char str1[ 100 ];

/* USER CODE END PV */

Создадим модуль для нашей новой библиотеке работы с датчиком в виде двух файлов BME280.h и BME280.c следующего содержимого

BME280.h:

#ifndef BME280_H_

#define BME280_H_

#include «stm32f4xx_hal.h»

#include

#include

#endif /* BME280_H_ */

BME280.c:

#include «BME280.h»

extern I2C_HandleTypeDef hi2c1;

extern UART_HandleTypeDef huart2;

extern char str1[ 100 ];

Подключим модуль в файле main.c

#include «BME280.h»

В следующей части урока мы начнём писать инициализацию датчика, в которой считаем идентификатор, калибровочные данные из датчика, также настроим тайминг режима Standby.

Отладочную плату можно приобрести здесь Nucleo STM32F401RE

Логический анализатор 16 каналов можно приобрести здесь

Датчик температуры, давления и влажности BME280 можно приобрести здесь BME280

Дисплей LCD 20×4 можно приобрести тут: LCD 20×4

Переходник I2C to LCD1602 2004 можно приобрести здесь: I2C to LCD1602 2004

Смотреть ВИДЕОУРОК (нажмите на картинку)

Источник

Adblock
detector