Барометр BMP180 и BMP280 (датчик атмосферного давления, высотомер) (Trema-модуль v2.0)

Trema-модуль датчик давления BMP280 — это цифровой модуль на базе чипа BMP280, подключаемый по шине I2C (адрес 0x77), позволяющий получить текущие значения атмосферного давления и температуры окружающей среды. Еще одним применением данного модуля является определений высоты, которая зависит от давления и рассчитывается по международной барометрической формуле. Точность Trema барометра позволяет фиксировать изменение высоты от 20 см.
Видео:
Подключение:
Модуль подключается к аппаратной или программной шине I2C Arduino. Логические уровни шины I2C не должны превышать напряжение питания.
Модуль удобно подключать 3 способами, в зависимости от ситуации:
Способ — 1 : Используя проводной шлейф и Piranha UNO
Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO.

Способ — 2 : Используя Trema Set Shield
Модуль можно подключить к любому из I2C входов Trema Set Shield.

Способ — 3 : Используя проводной шлейф и Shield
Используя 4-х проводной шлейф, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.

При подключении датчика давления BMP280 к другим платам, например, WEMOS D1 mini или WEMOS D1 mini Pro на базе микроконтроллера ESP8266, и т.д. То перед подключением библиотеки iarduino_Pressure_BMP, нужно подключить библиотеку Wire, как это описано в разделе Wiki — расширенные возможности библиотек iarduino для шины I2C.
Питание:
Входное напряжение питания от 3,3 до 5,5 В постоянного тока, подаётся на выводы VIN и GND модуля.
Подробнее о модуле:
Trema-модуль датчик давления построен на базе чипа BMP280 (Bosch Module Pressure), оснащён преобразователем уровней на базе чипа PCA9306 и линейным стабилизатором на базе чипа RT9193. Чип BMP280 оснащён пьезорезистивным датчиком, термодатчиком, АЦП, памятью EEPROM и RAM, а так же микроконтроллером с поддержкой циклического вычисления измерений (при получении запроса, модуль сразу возвращает ответ, не тратя время на вычисления, как это делал чип BMP180). Чип PCA9306 позволяет передавать данные по шине I2C с уровнями от 3,3 до 5,5 В. Чип RT9193, позволяет подключать Trema-модуль к источнику питания от 3,3 до 5,5 В постоянного тока. Основной чип модуля, BMP280, имеет меньшие габариты и лучшие характеристики по сравнению со своими предшественниками BMP185 и BMP085.
Для работы с модулями на базе чипов BMP180 и BMP280, предлагаем воспользоваться разработанной нами библиотекой iarduino_Pressure_BMP, позволяющей получать температуру, давление и высоту.
У нашей библиотеки есть ряд преимуществ: она позволяет заменять датчики BMP180 / BMP280 без изменения скетча и схемы включения; она позволяет выбирать режим точности показаний (значение передискретизации) и единицы измерения выводимого давления (Па или мм.рт.ст.); для расчёта высоты, ей не нужно указывать давление над уровнем моря, а достаточно указать любую начальную высоту в качестве аргумента функции begin([высота]). Если вы указали 0 метров (значение по умолчанию), то подняв модуль на 10 метров — получите результат +10, а опустив на 10 метров — получите результат -10. Если в качестве аргумента функции brgin([высота]) указать высоту над уровнем моря, то все остальные значения высоты будут соответствовать действительной высоте над уровнем моря. Уменьшая точность измерений Вы ускорите процесс получения результата.
Подробнее про установку библиотеки читайте в нашей инструкции..
Примеры:
Вывод значений давления в мм.рт.ст. и в Па:
#include // Подключаем библиотеку для работы с датчиками BMP180 или BMP280 iarduino_Pressure_BMP sensor; // Создаём объект sensor для работы с датчиком адрес которого на шине I2C установлен по умолчанию. void setup() < Serial.begin(9600); delay(1000); sensor.begin(); // Инициируем работу с датчиком (начальная высота по умолчанию = 0 метров) >void loop () < // Читаем показания (давление возвращается в мм.рт.ст.) if(sensor.read(1))else // Читаем показания (давление возвращается в Па) if(sensor.read(2)) else delay(3000); // Ждём 3 секунды (не обязательно) >
Описание основных функций библиотеки:
Данная библиотека может использовать как аппаратную, так и программную реализацию шины I2C.
О том как выбрать тип шины I2C рассказано в статье Wiki — расширенные возможности библиотек iarduino для шины I2C.
Подключение библиотеки:
// Для работы с датчиком BMP180 или BMP280 у которого установлен адрес I2C по умолчанию (0x77) #include // Подключаем библиотеку для работы с датчиками BMP180 / BMP280 iarduino_Pressure_BMP sensor; // Создаём объект sensor // Для работы с датчиком BMP180 или BMP280 у которого установлен не стандартный адрес шины I2C #include // Подключаем библиотеку для работы с датчиками BMP180 / BMP280 iarduino_Pressure_BMP sensor(0x76); // Создаём объект sensor указывая адрес датчика на шине I2C
Функция begin();
- Назначение: Инициализация работы с датчиком.
- Синтаксис: begin( [ ВЫСОТА ] );
- Параметры:
- ВЫСОТА — начальная высота в метрах (например высота над уровнем моря).
- Если вызвать функцию без параметра, то начальная высота будет равна 0 м.
- Функцию можно вызвать однократно (в коде setup), а можно и многократно (для корректировки или изменения начальной высоты).
- После вызова функции в переменные type и version будет сохранён тип и версия датчика.
sensor.begin(); // Инициируем работу датчика с начальной высотой модуля 0 метров. // Если после этого поднять модуль на 5 метров и вызвать функцию read(), то в переменной altitude будет значение 5 // Если после этого опустить модуль на 25 метров и вызвать функцию read(), то в переменной altitude будет значение -25
Функция read();
- Назначение: Чтение показаний датчика в переменные temperature, pressure и altitude.
- Синтаксис: read( [ ЦИФРА ] );
- Параметры:
- ЦИФРА — 1 или 2 (по умолчанию 1). Если 1 то давление рассчитывается в мм.рт.ст., если 2 то давление рассчитывается в Па
- Если вызвать функцию без параметра, то атмосферное давление будет рассчитано в мм.рт.ст.
- После вызова данной функции в переменные temperature, pressure и altitude будут сохранены новые значения.
sensor.read(); // Читаем показания датчика и сохраняем их в переменные temperature, pressure и altitude.
Функция measurement();
- Назначение: Выбор точности измерений.
- Синтаксис: measurement( ЦИФРА );
- Параметры:
- ЦИФРА — положительное целочисленное значение от 0 (минимальная) до 3 (для bmp180) или 4 (для bmp280) включительно.
- Увеличение точности показаний достигается снижением уровня шумов благодаря увеличению передискретизации при считывании показаний.
- Данная функция является необязательной, т.к. по умолчанию установлена максимальная точность.
- Если значение параметра будет выше допустимого, то установится максимальная точность.
- Уменьшение точности приведёт к уменьшению энергопотребления, а при работе с датчиком bmp180 еще и к ускорению чтения данных.
sensor.measurement(0); // Устанавливаем самый низкий уровень точности (передискретизации) при считывании данных.
Переменная temperature
- Значение: Содержит температуру окружающей среды в °С.
- Тип данных: float.
Переменная pressure
- Значение: Содержит атмосферное давление в мм.рт.ст. или Па.
- Тип данных: float.
Переменная altitude
- Значение: Содержит высоту относительно начальной в м.
- Тип данных: float.
Переменная type
- Значение: Содержит тип датчика (число 180 или 280)
- Тип данных: int.
Переменная version
- Значение: Содержит версию датчика
- Тип данных: int.
Применение:
- Получение данных для метеостанций
- Получение высоты для летательных аппаратов
- Получение глубины для подводных аппаратов (требуется поместить модуль в dодонепроницаемый пакет и пересчитывать глубину исходя из показаний давления, а не по данным высоты из библиотеки)
Ссылки:
- Датчик давления BMP280 (Trema-модуль).
- Датчик давления BMP180 (Trema-модуль)
- Библиотека iarduino_Pressure_BMP.
- Расширенные возможности библиотек iarduino для шины I2C.
- Wiki — Установка библиотек в Arduino IDE.
Барометр, гигрометр и термометр BME280
Датчик BME280 фирмы BOSCH совмещает в себе сразу три устройства:
- барометр, измеряющий атмосферное давление;
- гигрометр — он же датчик влажности;
- термометр — датчик температуры.
Барометры мы уже разбирали ранее на примере BMP180 и BMP280. Они тоже были с термометром, так как температура в этих датчиках используется для корректировки значений давления.
В робототехнике барометр часто используется для определения высоты полёта беспилотных летательных аппаратов, тех же квадрокоптеров и планеров. А совмещенный с датчиком влажности, BME280 идеально подходит для создания экспериментальной погодной станции или системы контроля климата в помещении. С помощью него можно наблюдать за изменением атмосферного давления и влажности в течение длительного времени.
На этом уроке мы будем работать с модулем BMP280 ROC, разработанной в лаборатории RobotClass.

Характеристики модуля:
- напряжение питания: от 3,3 до 5 В;
- диапазон измерения давления: от 300 гПа до 1100 гПа (от 9000 м до -500 м);
- точность измерения давления: 1 гПа;
- диапазон измерения влажности: от 0 до 100%;
- точность измерения влажности: 3%;
- частота измерения влажности: 1 Гц;
- диапазон измерения температуры: от 0 до 65;
- точность измерения температуры: 0,5.
Новое поколение датчиков BOSCH обладают низким энергопотреблением. Например, для сбора показаний влажности и температуры раз в секунду потребуется всего 1,8 мкА. Если нужно анализировать еще и давление, суммарный ток составит 3,6 мкА. В режиме сна датчик потребляет и вовсе 0,1 мкА.
Такая энергоэффективность позволяет использовать датчик в мобильных устройствах умного дома, которые годами питаются от одного литиевого элемента питания, например, CR2450.
На плате есть семь контактов для подключения:
- VIN — питание, от 4,5 до 5,5 В;
- 3V3 — питание 3,3 В;
- G — земля GND;
- MO/SDA — контакт MOSI для SPI, либо контакт SDA для шины I2C;
- SCK/SCL — контакт SCK для SPI, либо контакт SCL для шины I2C;
- MI/AD — контакт MISO для SPI, либо контакт для выбора адреса шины I2C;
- CS — контакт Chip Select для шины SPI.
Список необходимых компонентов
Для выполнения всех экспериментов в данном уроке, кроме самого датчика BME280 от RobotClass, потребуются: Ардуино-совместимый контроллер и немного проводов вилка-розетка. Необходимые компоненты можно добавить в корзину прямо здесь, и затем оформить заказ в нашем интернет-магазине.
Bme280 высота относительно чего


Теги статьи: МетеостанцияДобавить тег Метеодатчик с возможностью передачи показаний Автор: GoldenAndy
Опубликовано 28.08.2019
Создано при помощи КотоРед.
Участник Конкурса «Поздравь Кота по-человечески 2019!» В рамках реализации часов с TFT-дисплеем потребовался внешний метеодатчик. Сначала хотелось обойтись DS18B20 на трех проводках. Но в результате бурных обсуждений метеодатчик получил Bosch-евский модуль измерения температуры-влажности-давления, радиоканал передачи данных и перерос в самостоятельное устройство, о котором и хочется промяукать. Метеодатчик поддерживает один термометр DS18B20 и один модуль BME280 (температура, влажность, давление) / BMP280 (температура, давление). Измеренные показания (2 температуры, влажность и давление), а так же напряжение питания батарейки могут выводиться на ЖК-дисплей «от Nokia5110» и каждую минуту могут отправляться по последовательному каналу (UART 9600 8,n,1). Последовательный канал может быть как проводной, так и с использованием UART-радиомодуля JDY-40. Данный датчик — попытка сделать нечто универсальное. Т.е. датчик может работать автономно, только отображая показания на дисплее, может работать без дисплея, только отправляя данные по радио- или проводному каналу. Ну или быть «всё-в-одном». Внешний вид Авторское исполнение. Данный вариант исполнения предусматривает размещение датчика под навесом, с защитой от прямых солнечных лучей и где невозможно попадание брызг дождя. (Увы, пока без декоративной наклейки)
Что датчик умеет: - Поддержка датчика DS18B20 (температура)
- Поддержка датчика ВМЕ280 (температура/влажность/давление) или BMР280 (температура/давление)
- Отображение напряжения питания и информации с датчиков на ЖК-дисплее 84*48 пикселей (NOKIA 3310/5110) — для возможности использования модуля в автономном режиме
- регулировка контрастности дисплея (кнопки «+» и «-«)
- Отправка информации с датчиков и напряжения питания по последовательному порту (9600,8,N,1), выход Тх — открытый сток (открытый коллектор)
- Отправка информации с датчиков и напряжения питания по радиоканалу с применением модулей JDY-40 (UART-удлиннитель).
- Посадочное место под JDY-40
- Диапазон питания 2..5 вольт (в случае применения DS18B20 — 3..5 вольт)
- Встроенный LDO-стабилизатор (для возможности питания 3.6 вольтовых ВМЕ/ВМР и JDY-40) при питании выше 3.6 вольт.
- Программная калибровка измерителя напряжения батарейки, выполняется при питании от стабилизированных 3.30 вольт.
- Подсветка дисплея
Схема электрическая принципиальная.
Метеодатчик построен на базе «народного» контроллера ATMega8A. Контроллер тактируется от 4 МГц кварцевого резонатора. Применение кварца обусловлено необходимостью стабильной частоты для передачи данных по UART. Для остальных компонентов, по большому счету, стабильная частота не нужна. Обмен по i 2 c с BME/BMP280 абсолютно не зависит от стабильности тактовой частоты контроллера. Обмен с DS18B20 по 1Wire более критичен к стабильности частоты, но с гораздо большими допусками, нежели нестабильность внутреннего RC-генератора микроконтроллера. Соответственно, если датчик предусматривается автономным, без передачи данных — кварц можно не ставить, а сконфигурировать контроллер на тактирование от внутреннего генератора 4 МГц и время ожидания после старта — 4мс.
Микроконтроллер опрашивает датчики раз в минуту. Все остальное время МК находится в режиме сна. В качестве таймера, периодически пробуждающего МК ото сна использован «собачий таймер» — WatchDog. Поскольку максимальная выдержка этого таймера — около 2 секунд, контроллер подсчитывает число пробуждений. Каждое тридцатое пробуждение запускается цикл опроса датчиков, вывод информации на дисплей и отправка данных по последовательному каналу, после чего контроллер опять уходит в глубокий сон. При промежуточных пробуждениях контроллер сразу уходит в сон. Промежуточное пробуждение длится около 7 мс, ток потребления при этом в районе 5 мА. В режиме сна потребление без дисплея — около 15 мкА, с дисплеем — 150-250 мкА (потребление дисплея зависит от настроенной контрастности и числа включеных пикселей).
Питание датчика — через клеммы Х1, Х2.
Конденсаторы С6, С7 и С8. Для работы передатчика на уже подсевшей батарейке — ее нужно зашунтировать хорошей емкостью. Тут можно поставить или трухольный С6 — тут уже какой есть. от 47 до 1000 мкФ и выше (насколько хватит места в корпусе датчика — см. практический опыт в конце статьи). Либо можно поставить один или два тантала С7 и С8. С6 ставится на обратную сторону платы и кладется на бок. Место под 2 тантала предусмотрено, если нет одного тантала достаточной емкости.Программирование МК осуществляется через контактные площадки JP1.
К данным площадкам необходимо припаяться на время программирования (поскольку операция эта одноразовая).
При использовании передачи данных Тх по проводам (выход типа Открытый сток) или через JDY-40 необходимо установить элементы R1,R3,R4,Q1,Q2.
Выход ТХ — клемма Х3.
Если датчик будет работать автономно, без передачи данных — R1,R3,R4,Q1,Q2 можно не устанавливать.Встроенный LDO IC2 управляется по входу EN, в дежурном режиме он выключен.
LDO и его обвязка устанавливаются только в случае, если нужно понизить питание для трансивера и/или ВМЕ.Применимы датчики ВМЕ280 (или ВМР280 — тогда влажность не будет отображаться) в виде китайских модулей как в 4-контактном (со встроенным LDO), так и в 6-контактном исполнении (без встроенного LDO).
В случае применения 6-контактного датчика и питания модуля от напряжения выше 3.5 вольт датчик необходимо питать через LDO IC2:
необходимо установить R5,IC2,C9,C10 и перемычку SJ3 — замкнуть в положение 1-2
При питании ВМЕ напрямую от шины питания — R5,IC2,C9,C10 не устанавливаются (см. дополнительно питание трансивера), перемычка SJ3 — в положении 2-3В случае применения ВМЕ со встроенным LDO, что бы этот LDO не жрал батарею, земля ВМЕшки заводится на транзистор Q3 — для этого перемычку SJ4 необходимо поставить в положение 1-2.
В положении 2-3 перемычки SJ4 земля постоянно будет подключена к ВМЕ.Подключение датчика температуры выполнено по классической трехпроводной схеме. Единственное ограничение — согласно даташиту, DS18B20 работоспособен при питании от 3 до 5 вольт.
Подключение трансивера JDY-40
Трансивер JDY-40 — несложный удлинитель uart, его можно конфигурировать на разные каналы, разную скорость передачи данных, разные режимы работы. Можно из пары таких модулей, соответствующим образом их сконфигурировав, получить «Пульт ДУ» на 8 команд без применения других контроллеров и т.д. Для применения в нашем датчике используется конфигурация модуля по умолчанию, режим удлинителя UART, 9600 8N1.
Ну и, соответственно, на приемной стороне должен быть такой же модуль с аналогичной конфигурацией.При использовании трансивера, в дополнение к R1,R3,R4,Q1,Q2 необходимо так же установить элементы R8,R14,Q4,C11. Если использование трансивера не предполагается — данные элементы не устанавливаются.
В случае питания модуля от 4.5-5 вольт и использования трансивера JDY-40 (у него питание не выше 3.6 вольта) необходимо установить LDO IC2, R5,C9,C10 и установить перемычку SJ2 в положение 1-2.
Если предполагается питание трансивера напрямую от батареи (или трансивер не будет использоваться) — IC2, R5,C9,C10 можно не устанавливать, а перемычку SJ2 установить в положение 2-3.При питании трансивера JDY-40 через LDO (при питании модуля напряжением выше 3.6 вольта) следует учесть, что JDE-40 «просыпается» после включения питания где то через 320 мс после подачи питания. Соответственно, в случае использования питания выше 3.6вольт (и, соответственно, использовании набортного LDO, который отключается и включается по сигналу от МК) для использования JDE-40 необходима прошивка с увеличенным временем питания трансивера перед началом отправки данных.
Установка JDY-40. Он ставится на обратной стороне, антенная часть выходит за пределы платы и дисплея.
Трансивер можно зафиксировать изолированной перемычкой, для этого предусмотрены соответствующие отверстия на плате.Светодиод LED1 светится в моменты, когда производятся измерения температуры, давления , влажности и идет отправка данных.
Кнопки SW1, SW2 регулируют контрастность дисплея*, так же при помощи этих кнопок производится первоначальная калибровка внутреннего источника опорного напряжения.
*Зависит от дисплея, см.ниже
Кнопки применены вот такие.

Кнопки регулировки контрастности продублированы контактными площадками на обратной стороне платы.
Применен «народный» дисплей от Nokia 3310/5110. Такие дисплеи китайцы массово продают уже установленные на переходные платы.
Удобнее применять дисплей на «красной» плате — у него контактные отверстия сверху и снизу. Подключение дисплея к плате модуля осуществляется через нижний ряд отверстий. Так же на плате модуля предусмотрены три пары отверстий для крепления дисплея за два крайних контактных отверстия верхнего ряда. Почему три пары ? У меня было три разных китайских дисплея «от Нокии» — и у каждого был свой размер печатной платы.
Подсветка дисплея.
Подсветка по умолчанию не используется. Однако при проводном питании от электростанции можно установить резистор R10, перемычку SJ6 и тогда подсветка будет гореть все время.
Можно не устанавливать резистор R10 и LED1, а замкнуть перемычку SJ5 — тогда подсветка дисплея будет подмигивать при отправке данных вместо LED1.
Дополнительно — можно установить кнопку SW3 — и включать подсветку вручную, что бы посмотреть показания.
Следует учесть, что китайцы продают разные версии дисплеев, в т.ч. и с контроллерами, у которых контрастность жестко задана и не регулируется стандартными командами. В таком случае кнопки можно не устанавливать, а калибровку внутреннего ИОН провести с использованием контактных площадок на обратной стороне платы модуля.В авторском варианте кнопки контраста и кнопка подсветки выведены через толкатели на боковые стенки корпуса.

Пример работы подсветки
Измерение напряжения питания, калибровка измерителя.
Напряжение питания проверяется раз в минуту, после включения питания передатчика, но до начала передачи данных, т.е. батарея нагружается передатчиком в режиме ожидания.
Измерение напряжения питания реализовано с использованием внутреннего ИОН контроллера. Поскольку напряжение данного ИОН может меняться от экземпляра к экземпляру МК, то реализована программная калибровка.
Для этого нужен внешний стабилизированный БП с напряжением 3.3 вольт.
Необходимо зажать обе кнопки регулировки контрастности и после этого, не отпуская кнопок, подать стабилизированное питание на модуль.
Процесс калибровки длится около 300 мс. По окончанию калибровки загорится светодиод LED1. Дисплей не инициализируется, информация на нем не появляется. Кнопки после этого можно отпустить.
Выход из режима калибровки — только отключение питания (или сигнал сброс на МК).Подбор элементов и перемычек
С учетом того, что датчик можно собрать в нескольких конфигурациях, в табличку сведены типовые примеры конфигураций и перечни устанавливаемых элементов для этих конфигураций.
Эскизы печатной платы

Печатная плата разработана в двух версиях — с оптимизацией под ЛУТ и с оптимизацией под заказ на производстве.
Для использования МК с кварцем 4 МГц конфигурация фьюзов следующая

Для использования внутреннего RC-генератора на 4 МГц:

Отправка данных по UART
Данные об измеренных величинах отправляются в текстовом виде.
Каждая величина — в отдельной строке.
Строка начинается на $, далее идет код передаваемой величины, символ «равно» и значение величины. Десятичный разделитель — точка.
Каждая строка оканчивается парой символов CR/LF.Температуры от датчиков 1 и 2, значение — два знака до и два после десятичного разделителя, возможны отрицательные значения
$T1=-10.00
$T2=16.25Давление — целое число миллиметров ртутного столба, три знака
$P=768Влажность — целое значение процентов, от одного до трех знаков
$H=66Напряжение питания датчика, вольты, один знак до и один знак после десятичного разделителя.
$B=3.3Если установлено 2 датчика — DS18B20 и ВМЕ280 — Т1 — температура с DS-ки, Т2 — с ВМЕ.
Если установлен только ВМЕ280 — Т1 — температура с этого датчика.
Если установлен ВМР280 — данные о влажности не отправляются.
Если нет ни одного датчика — отправляется только напряжение питания модуля.Пример тестовой отправки данных, напряжение питания 3.3 В, температуры -19.75°С и — 66.25°С, давление 432 мм.рт.с., влажность 146%. Почти погода на Марсе.

Подключение радиомодуля JDY-40 через USB-UART переходник
Для контроля отправки данных по радиоканалу можно второй трансивер JDY-40 подключить через преобразователь USB-UART к ПК.
Прошивка для контроллера.
В приложенных к статье файлах архив с прошивками.
Прошивок четыре:
DebugTouch_Clock_v2_sensor.hex — тестовая прошивка, меряет и отправляет показания каждые 6 секунд, при нажании кнопок включает LED1 (для проверки работы кнопок)
ReleaseTouch_Clock_v2_sensor.hex — выполняет измерение показаний один раз в минуту, основная рабочая прошивка
Release_longWakeUpTouch_Clock_v2_sensor.hex — основная рабочая прошивка с увеличенным временем пробуждения модема — для случаев, когда есть JDY-40 и питание выше 3.6в.
Release_NoTXTouch_Clock_v2_sensor.hex — рабочая прошивка без поддержки отправки данных по последовательному каналу, измерение показаний раз в минуту, вывод на дисплей.Транзисторы Q2,Q3,Q4 — в принципе, подойдут любые N-канальные мосфеты в корпусе SOT23. BSS123, BSS138, IRML2502 и т.д.. Тысячи их. Побдирать замену лучше по минимальному напряжению затвор-исток.
Q1 — тоже почти любой PNP в SOT23LDO IC2 — Применен LDO LP2985-3.3. Можно применить аналогичный по расположению выводов и с напряжением стабилизации 3.0-3.3 вольта. Например, NCP551SN33 (для него, кстати, С9 не нужен).
Вместо JDY-40 можно, теоретически, применить модули HC-11 или HC-12 — uart удлинители на 433 МГц. Первый обещает дальность до 200 метров, второй до 1500. Но подключать к датчику их придется уже на проводах.
Отладочная версия датчика выглядела вот так:
Из опыта эксплуатации датчика с радиомодулем и дисплеем — размышления о питании модуля.
Датчик с дисплеем и радиомодулем прожил на дешевых солевых ААА батарейках 29 суток. После этого радиомодуль перестал отправлять данные, хотя сам датчик продолжает работать и отображать информацию.
Анализ питания показал, что в режиме сна датчика напряжение на батарейках держится на уровне 4 вольт. При включении питания передатчика (до начала передачи) напряжение проседает до 2.4 вольта, что и отображается на дисплее. Но при начале передачи напряжение проседает до 1.8-1.9 вольт, что и приводит к сбою передачи данных.
Подключение параллельно батарейкам конденсатора 3300мкФ 6.3 вольт данную проблему решило.
На момент написания статьи модуль работает на том же комплекте солевых батарееек 41 сутки, отображаемое напряжение питания 2.7 вольт, передача данных проходит стабильно.С учетом того, что АА-батарейки имеют до 2.5 раз большую емкость относительно ААА-батареек, а щелочные элементы ёмче солевых в 1.5-2 раза, целесообразно применение в качестве питания датчика (в конфигурации с дисплеем и радиомодулем) трех щелочных (алкалиновых) батареек АА-типоразмера.
Так же возможно питание от литиевых аккумуляторов с двумя «но»:
- Литиевые аккумуляторы не любят температуру ниже 0°С
- Датчик никак не контролирует напряжение питания и может «высадить» аккумулятор ниже допустимого порога. (В принципе, можно сделать вариант прошивки, которая при достижении напряжения питания 2.7 вольта отправит датчик в «вечный сон». Но выход из вечного сна — только отключение питания или сигнал сброса на МК)
DPS368 — датчик атмосферного давления индустриального класса повышенной точности
Контроллер MegaD-2561 поддерживает несколько альтернативных вариантов для измерения температуры и влажности воздуха. А перечень поддерживаемых прошивкой датчиков данного типа разных производителей периодически расширяется. Но вот атмосферное давление можно было получить исключительно с помощью изделий от Bosch Sensortec: BMP180, BMP280/BME280, BME680.
Сенсор BMP180 и так не отличался высокой точностью, а ныне совсем устарел и снят с производства. BME680 не дешев, снабжен сомнительной с точки зрения реализации функцией оценки качества воздуха, а потому не снискал признания пользователей. И только BME280 с момента своего появления и по сей день остается популярным и активно применяется, став, по-моему, чем-то вроде «золотой середины». При относительно невысокой цене этот датчик предлагает сразу 3 функции: измерение температуры, влажности и атмосферного давления, обеспечивая вполне удовлетворительную точность для бытовых нужд рядового любителя домашней автоматизации. Но доступно ли на рынке сегодня какое-то более современное и продвинутое решение для измерения атмосферного давления? Конечно да. Предлагаю в данном материале рассмотреть датчик DPS368 от конкурирующей немецкой компании Infineon Technologies AG, расположенной в Баварии.

Высокоточный датчик атмосферного давления и температуры DPS368
DPS368 не измеряет влажность. Сенсор предназначен только для измерения атмосферного давления и температуры, но у него есть ряд существенных преимуществ. Прежде всего, относительная и абсолютная точность примерно в два раза выше, чем у BME280. К примеру, относительная погрешность DPS368 составляет всего 0,045 мм.рт.ст., а шаг измерения всего 0,0015 мм.рт.ст. (я буду приводить все измерения в этих единицах, так как они более привычны), в то время как у BME280 относительная погрешность заявлена 0,09 мм.рт.ст. Такая точность сенсора позволяет по мнению производителя использовать DPS368 в фитнес-браслетах и смартфонах в качестве датчика падения. Ведь атмосферное давление зависит от высоты расположения датчика. DPS368 способен «распознать» изменение высоты/давления всего на 20 см.
В прошивке MegaD-2561 датчик DPS368 переводится в режим High precision (высокая точность) background mode. В этом режиме датчик производит 64 измерения в секунду и самостоятельно усредняет значения. Контроллеру остается только считать уже подготовленные данные, что занимает минимальное количество микропроцессорного времени. Считывание данных с датчика BME280 происходит ощутимо дольше. Это связано и с особенностью работы самого датчика и с необходимостью производить очень сложные вычисления. DPS368, как и BME280, также требует загрузки калибровочных коэффициентов для расчета реальной величины атмосферного давления. Но самих калибровочных коэффициентов меньше, а алгоритм расчета значительно проще. Замечу, что MegaD-2561 запрашивает калибровочные коэффициенты в момент запуска и инициализации, сохраняя их в энергонезависимую память и не тратит на это ресурсы во время работы.

Интересной особенностью DPS368 является то, что он способен функционировать в сложных условиях. Датчик сертифицирован для индустриального применения и устойчив к воздействию воды и пыли. И это мягко сказано. Датчик имеет уровень защиты IPX8. Это означает возможность полного и длительного погружения в воду на глубину более 5 м. Производитель декларирует способность датчика выдержать час на глубине 50 метров. Не знаю, насколько это актуально именно для датчика атмосферного давления, который совершенно не обязательно размещать на улице, но фича любопытная.
С измерением температуры дела обстоят скромнее. Все те же традиционные плюс-минус 0,5C с шагом 0,1C. Это понятно. Температура необходима датчику, главным образом, для расчета компенсационного коэффициента и последующей корректировки значения атмосферного давления.
Таким образом, если подвести предварительный «бумажный» итог, DPS368 быстрее, точнее и потенциально надежнее. И что также важно, его не предлагают на Aliexpress, а следовательно нет и подделок. Но что же все это означает на практике? Я решил провести краткий сравнительный тест DPS368 vs BME280. И получил следующие результаты.
Прежде всего, следует отметить, что из нескольких протестированных выборочно датчиков DPS368, разброс значений температуры и атмосферного давления был минимальным. Так, например, разница в показаниях атмосферного давления у разных экземпляров не превышала 0,02 мм.рт.ст. Очень неплохой результат. Разброс значений атмосферного давления у BME280, которые есть у меня в наличии, тоже не слишком велик — в пределах 0,2-0,25 мм.рт.ст. Но, если говорить формально, это в 10 раз больше! То же касается и температуры.

Атмосферное давление. Красный график — DPS368; cиний график BME280
Графики атмосферного давления BME280 и DPS368 в целом совпадают по форме, но очевидно одно принципиальное отличие. График DPS368 более плавный, так как мы получаем уже усредненные датчиком значения, в то время как график BME280 местами несколько «дрожит». В этом смысле DPS368 скорее всего ближе к реальности, так как при отсутствии резких изменений погоды, атмосферное давление не может бесконечно прыгать в пределах 0,01 мм.рт.ст. Ну а на разницу в показаниях двух датчиков примерно на 0,15 мм.рт.ст. я бы обращать внимание не стал. Во-первых, она достаточно мала, а во-вторых, напомню, у BME280 даже из одной партии разброс показаний выше. Другой экземпляр BME280 вполне может выдать идентичные с DPS368 значения или наоборот, чуть ниже. В отсутствии сертифицированного эталонного прибора сложно сказать, какое значение атмосферного давления на момент тестирования лучше отражает реальность, но чисто интуитивно хочется верить, что точнее более современные DPS368 с небольшим разбросом показаний у разных экземпляров. Другого критерия пока нет.

Температура. Красный график — DPS368; синий график BME280
Формы температурных графиков BME280 и DPS368 полностью совпадают и даже колебания (дрожание) почти идентичны. В остальном ситуация аналогичная. Разница в показаниях совсем не существенная, но один экземпляр BME280 может отображать температуру чуть выше, другой — чуть ниже. DPS368 и здесь стабильнее. Я, кстати, решил сравнить показания температуры DPS368 с высокоточным TMP117. Выяснилось, что они практически не отличаются. Разница не превысила 0,05С! Данный факт подтверждает, что с точностью у DPS368, похоже, все в порядке.
Сделаю краткие выводы. Как BME280, так и DPS368 достаточно хорошо справляются с задачей измерения атмосферного давления и температуры. Различия в показаниях объективно не слишком принципиальные. Однако если вы перфекционист, то DPS368 кажется более удачным выбором, так как у этих датчиков ниже погрешность, меньше разброс и выше точность. Но самое главное, MegaD-2561 считывает и обрабатывает данные с DPS368 существенно, пожалуй, на порядки быстрее, а значит этот датчик лучше подходит для нашего контроллера.
Небольшая ремарка. На плате датчика не смонтированы подтягивающие резисторы, так как они есть на цифровых портах контроллера MegaD-2561. Если планируется подключать датчик к какому-либо другому оборудованию, следует предусмотреть внешнюю подтяжку или смонтировать резисторы на плате датчика.
Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.Добавить комментарий:
Сортировка комментариев: Последние сверху | Первые сверху
2021-10-25 02:45:53 | Михаил
Андрей, спасибо за интересную статью! Заказал у вас пару наряду с другими аппаратами, все работает. Четко и надёжно. Отзывы только положительные.2021-04-09 17:21:51 | Andrey_B
Ruslan, в алгоритмах предсказания погоды используется атмосферное давление и его изменение. Но часто не требуется подглядывать ни в какой прогноз. Если, к примеру, давление в течение дня упорно стремится вниз, жди ухудшения погоды. Интересные кульбиты выписывает график в летний шторм. Это просто любопытно. Ну когда вдруг заболит голова, смотришь на давление, и понимаешь, что это не из-за того, что ты вчера принял лишнего на грудь, а просто вот давление что-то слишком низкое сегодня.
Идея использовать два датчика для определения уровня воды в емкости интересная. Пожалуй, вполне имеет право на существование.2021-04-09 15:17:00 | Ruslan
Спасибо за очередную статью! Как всегда все интересно, наглядно и познавательно.
Правда, лично для себя пока не придумал, как можно «в быту» использовать показания атмосферного давления. Может быть для предсказания погоды.Но меня, как водится, посетила мысль о нестандартном использовании. А что, если попробовать с помощью датчика измерять уровень жидкости в емкости. Взять 2 таких датчика. Один будет располагаться где-нибудь неподвижно, а другой — на поплавке в емкости. Раз можно уловить перепад высот около 20 см, думаю, будет вполне реальным приблизительно определить уровень жидкости в емкости, исходя из разности показаний датчиков.
Ну это так. мысли вслух.