Датчики атмосферного давления bmp180, bmp280, bme280 – частые гости в инженерных проектах. С их помощью можно предсказать погоду или измерить высоту над уровнем моря.
Сегодня именно эту линейку можно назвать самыми популярными и недорогими сенсорами для ардуино.
В этой статье мы расскажем принцип действия датчиков, схему подключения к различным платам Arduino и приведем примеры программирования скетчей.
Принцип действия барометра на BMP280, BMP180, BME280
Датчики давления работают на преобразовании давления в движение механической части. Состоит датчик давления из преобразователя с чувствительным элементом, корпуса, механических элементов (мембран, пружин) и электронной схемы.
Датчик BMP280 создан специально для приложений, где требуются малые размеры и пониженное потребление энергии. К таким приложениям относятся навигационные системы, прогноз погоды, индикация вертикальной скорости и другие. Датчик обладает высокой точностью, хорошей стабильностью и линейностью. Технические характеристики датчика BMP280:
- Габариты 2 х 2,5 х 0,95 мм.
- Давление 300-1100гПа;
- Температуры от 0С до 65 С;
- Поддержка интерфейсов I2C и SPI;
- Напряжение питания 1,7В – 3,6В;
- Средний ток 2,7мкА;
- 3 режима работы – режим сна, режим FORCED (проведение измерения, считывание значения, переход в спящий режим), режим NORMAL (перевод датчика в циклическую работу – то есть устройство самостоятельно через установленное время выходит из режима сна, проводит измерения, считывает показания, сохраняет измеренные значения и переходит снова в режим сна).
Датчик BMP180 – это дешевый и простой в применении сенсорный датчик, который измеряет атмосферное давление и температуру. Используется обычно для определения высоты и в метеостанциях. Состоит устройство из пьезо-резистивного датчика, термодатчика, АЦП, энергонезависимой памяти, ОЗУ и микроконтроллера.
Технические характеристики датчика BMP180:
- Пределы измеряемого давления 225-825 мм рт. ст.
- Напряжение питания 3,3 – 5В;
- Ток 0,5мА;
- Поддержка интерфейса I2C;
- Время срабатывания 4,5мс;
- Размеры 15 х 14 мм.
Датчик bme280 содержит в себе 3 устройства – для измерения давления, влажности и температуры. Разрабатывался для малого потребления тока, высокой надежности и долгосрочной стабильной работы.
Технические характеристики датчика bme280:
- Размеры 2,5 х 2,5 х 0,93 мм;
- Металлический LGA-корпус, оснащенный 8-ю выходами;
- Напряжение питания 1,7 – 3,6В;
- Наличие интерфейсов I2C и SPI;
- Потребляемый ток в режиме ожидания 0,1 мкА.
Если сравнивать все устройства между собой, то датчики очень похожи. По сравнению со своим предшественником, к которым относится BMP180, более новый датчик BMP280 заметно меньше по размерам.
Его восьмиконтактный миниатюрный корпус требует аккуратности во время монтажа. Также устройство поддерживает интерфейсы I2C и SPI, в отличие от предшественников, которые поддерживали только I2C.
По логике работы датчика изменений практически нет, была только усовершенствована температурная стабильность и увеличено разрешение АЦП. Датчик BME280, измеряющий температуру, влажность и давление, также похож на BMP280.
Отличие между ними заключается в размерах корпуса, так как BME280 имеет датчик влажности, который немного увеличивает габариты. Количество контактов и их расположение на корпусе совпадают.
Варианты подключения к Arduino
Подключение датчика BMP180 к Ардуино. Для подключения понадобятся сам датчик BMP180, плата Ардуино UNO, соединительные провода. Схема подключения показана на рисунке ниже.
Землю с Ардуино нужно соединить с землей на датчике, напряжение – на 3,3 В, SDA – к пину А4, SCL – к А5. Контакты А4 и А5 выбираются с учетом их поддержки интерфейса I2C. Сам датчик работает от напряжения 3,3 В, а Ардуино – от 5 В, поэтому на модуле с датчиком установлен стабилизатор напряжения.
Подключение BMP 280 к Ардуино. Распиновка и вид сверху платы изображены на рисунке.
- Сам модуль датчика давления выглядит следующим образом:
- Для соединения с Ардуино нужно подключить выходы следующим образом: соединить землю с Ардуино и на датчике, VCC – на 3,3В, SCL / SCK – к аналоговому контакту А5, SDA / SDI – к А4.
Подключение датчика BME280. Расположение контактов и распиновка у датчика BME280 такая же, как у BMP280.
- Так как датчик может работать по I2C и SPI, подключение можно реализовать двумя методами.
- При подключении по I2C нужно соединить контакты SDA и SCL.
При подключении по SPI нужно соединить SCL с модуля и SCK (13й контакт на Ардуино), SDO с модуля к 12 выводу Ардуино, SDA – к 11 контакту, CSB (CS) – к любому цифровому пину, в данном случае к 10 контакту на Ардуино. В обоих случаях напряжение подключается к 3,3В на Ардуино.
Описание библиотеки для работы с датчиком. Пример скетча
Для работы с датчиком BMP180 существуют различные библиотеки, упрощающие работу. К ним относятся SFE_BMP180, Adafruit_BMP085. Эти же библиотеки подходят для работы с датчиком BMP080. Для датчика bmp280 используется похожая библиотека Adafruit_BMP280.
Первый пробный скетч будет заставлять датчик считывать показания давления и температуры.
Код подойдет как для датчика BMP180 , так и для BMP280, нужно только подключить правильную библиотеку и указать верные контакты, к которым подключен модуль.
В первую очередь в коде нужно подключить все библиотеки и инициализировать работу датчика. Для определения давления нужно сначала узнать температуру. Для этого используется следующий элемент кода.
status = pressure.startTemperature();// Считываются данные с датчика о температуре
if(status!=0){
delay(status); // Ожидание
status = pressure.getTemperature(T); // Сохранение полученных данных о температуре
if(status!=0){
Serial.print(«Temperature: «); // Выведение на экран слова «Температура»
Serial.print(T,2); // Вывод на экран значения температуры.
Serial.println(«deg C, «); //Печать символа градуса Цельсия.
Затем нужно получить информацию об атмосферном давлении.
status = pressure.startPressure(3); // происходит считывание давления
if(status!=0){
delay(status); // Ожидание
status = pressure.getPressure(P,T); // получение давления, сохранение
if(status!=0){
Serial.print(«Absolute pressure: «); // Вывод на экран слов «Атмосферное давление»
Serial.print(P,2); // Вывод на экран значения переменной mBar
Serial.print(» mbar, «); // Вывод на экран текста «mBar»
Serial.print(P*0.7500637554192,2); // вывод на экран значения в mmHg (мм.рт.ст.)
Serial.println(» mmHg»);} // вывод на экран единицы измерения давления «mmHg» (мм. Рт.ст.).
После загрузки скетча в окне мониторинг порта появятся данные о температуре и атмосферном давлении.
Датчик BME280 также показывает давление и температуру, дополнительно он может считывать показания о влажности, который по умолчанию выключен. При необходимости можно произвести настройки датчика и начать считывать показания о влажности. Диапазон измерения от 0 до 100%. Библиотека, которая нужна для работы с датчиком, называется Adafruit_BME280.
Код похож на тот, что описан выше, только к нему еще добавляются строки для определения влажности.
void printValues() {
Serial.print(«Temperature = «);
Serial.print(bme.readTemperature());
Serial.println(» C»); //определение температуры, вывод ее на экран в градусах Цельсия.
Serial.print(«Pressure = «);
Serial.print(bme.readPressure() / 100.0F);
Serial.println(» hPa»); //определение давления, вывод его на экран
Serial.print(«Humidity = «);
Serial.print(bme.readHumidity());
Serial.println(» %»); //определение влажности в процентах, вывод измеренного значения на экран.
Serial.println();
}
Возможные ошибки при подключении и устранение их
Наиболее часто встречающаяся ошибка – неправильные данные о давлении и температуре, которые отличаются на несколько порядков от реального значения. Причиной этого чаще всего становится неправильное подключение – например, в библиотеке указано, что нужно подключать по I2C, а датчик подключен по SPI.
Также при использовании “китайских” датчиков можно столкнуться с нестандартными I2C или SPI адресами. В этом случае рекомендуется просканировать все присоединенные устройства с помощью одного из популярных скетчей и выяснить, по какому адресу откликается ваш датчик давления.
Еще одной проблемой может стать несоответствие рабочего напряжения питания модуля базовому напряжению используемого контроллера. Так, для работы с датчиком на 3,3 В вам потребуется создать делитель напряжения или использовать один из существующих готовых модулей согласования уровней. Кстати, такие модули достаточно дешевы и начинающим рекомендуется использовать их.
Небольшие отклонения от реальной величины могут быть связаны с калибровкой сенсора. Например, для датчика BMP180 все данные рассчитываются и задаются в скетче. Для получения более точного значения высоты нужно знать текущее значение давления над уровнем моря для данных координат.
Заключение
Датчики атмосферного давления bmp180, bmp280- не самые дешевые виды сенсоров, но во многих случаев альтернативы таким сенсорам практически нет.
В проекте метеостанции датчик фиксирует важный параметр – атмосферное давление, благодаря чему становится возможным предсказывать погоду.
В проектах, связанных с созданием летающих аппаратов барометр используется в качестве датчика реальной высоты над уровнем моря.
Подключение датчиков не представляет какой-либо сложности, т.к. используется стандартной i2C или SPI соединение. Для программирования можно использовать одну из готовых бесплатных библиотек.
Резистивный датчик давления: описание, подключение, схема, характеристики | ВИКИ
Резистивный датчик давления представляет из себя переменный резистор, сопротивление которого зависит от силы, приложенной к чувствительному элементу.
Содержание
- Обзор
- Технические характеристики
- Подключение к Arudino
- Пример использования
- FAQ
Обзор
Резистивный датчик давления представляет из себя переменный резистор, сопротивление которого зависит от силы, приложенной к чувствительному элементу. Таким образом можно косвенно оценить силу нажатия или вес воздействующего на датчик объекта.
Благодаря своей простоте, стойкости к износу и невысокой стоимости, резистивные датчики широко используются в различных проектах совместно с платформами Arduino. На сегодняшний день выпускается множество модификаций датчиков, работающих на подобном принципе.
Они могут отличаться размером, формой, иметь разный диапазон и кривую изменения сопротивления, но алгоритм работы у всех одинаковый. На рисунке №1 показан один из наиболее распространённых видов датчиков, выпускаемых фирмой Sparkfun.
Рисунок №1 — Резистивный датчик давления для Arduino от Sparkfun
В данном исполнении радиус чувствительного элемента составляет 15мм, а плоская эластичная форма даёт возможность фиксировать сенсор практически на любой поверхности, например: на стенах; под различными механизмами в квест-комнатах; внутри мягких игрушек и ковриков; под одеждой и т.п.
Конструктивно датчик состоит из двух слоёв, разделённых между собой изоляционной прокладкой специальной формы. Верхний слой представляет из себя плёнку со встречно напечатанными проводниками. Это и есть тот самый чувствительный элемент, на который необходимо воздействовать путём нажатия.
Нижний слой выполнен в виде подложки с печатным полупроводником. Следовательно, чем больше будет оказываться давление на чувствительный элемент, тем больший процент печатных проводников начнёт взаимодействовать с полупроводниковой подложкой. Всё это приведёт к последовательному уменьшению сопротивления резистивного датчика.
На рисунке №2 показана структура сенсора с разделением на слои.
Рисунок №2 – Структурная схема с разделением на слои
Основным недостатком резистивных датчиков давления является их невысокая точность и нелинейность смены сопротивления. Это говорит о том, что применять подобные устройства для измерения точных величин не имеет никакого смысла.
Однако, оценить сам факт нажатия или степень давления на сенсор вполне возможно. На рисунке №3 приведён график, взятый из технической документации.
Он наглядно позволяет оценить нелинейную зависимость изменения сопротивления от силы нажатия на чувствительный элемент датчика.
Рисунок №3 – график зависимости сопротивления от силы нажатия
Как следует из графика, с увеличением давления, сопротивление начинает резко уменьшаться, но это процесс в каждой фазе происходит по-разному.
Технические характеристики
- Диапазон фиксирования веса: 100г…10кг;
- Длинна: 61мм;
- Диаметр подложки с чувствительным элементом: 18мм;
- Толщина: 0,2мм;
- Вес: 20 грамм;
- Гарантированное сопротивление без оказания давления: >1 Мом;
- Диапазон сопротивлений: ∞…200 Ом;
- Износостойкость: до 10 миллионов нажатий;
- Диапазон рабочих температур: -30°С…+70°С;
- Максимальная скорость срабатывания: 1-2 мСек;
- Максимальный ток: Ima / cm2 приложенной силы;
- Расстояние между контактами: 2.54мм;
Подключение к Arduino
Как упоминалось ранее, резистивный датчик давления – это своего рода переменный резистор, средний вывод которого открыт для физического воздействия.
На практике это утверждение можно проверить с помощью обычного мультиметра, выставленного в режим измерения сопротивления.
При надавливании на чувствительный элемент показания прибора должны изменяться в меньшую сторону. Наглядно этот процесс демонстрирует рисунок №4.
Рисунок №4 – проверка работоспособности датчика
Исходя из вышеизложенного можно сделать вывод, что для подключения данного сенсора к плате Arduino, будет разумно воспользоваться схемой, построенной по принципу резистивного делителя напряжения.
Её суть сводиться к тому, что между плюсом и минусом питания включаются два последовательно соединённых резистора, а сигнал снимается со средней точки. При этом один резистор имеет постоянное сопротивление, а второй – может его изменять (как наш исследуемый датчик).
Подобрав нужные параметры на выходе средней точки можно получить диапазон напряжений от 0В до напряжения питания. Остаётся только измерить это напряжение, например с помощью аналогового входа платы Arduino, и путём анализа данных сделать выводы о степени нажатия.
На рисунке №5 показана схема делителя напряжения с формулой и примером расчёта выходного напряжения исходя из данных мультиметра.
Рисунок №5 – схема делителя напряжения
Как видно из схемы, сенсор давления включен в нижнее плечо делителя и обозначен как R2, в то время как R1 – это обычный постоянный резистор.
Разрешение АЦП микроконтроллеров AVR, входящих в стандартную линейку плат Arduino, составляет 10 бит. Это значит, что в диапазоне от 0В до 5В мы сможем получить 210 или 1023 дискретных уровня. Т.е.
Arduino способна фиксировать изменения напряжения на каждые 5/1023=0,0049В или 4,9мВ. Это вполне приемлемо для использования данной концепции.
На рисунке №6 показан пример подключения резистивного датчика давления к плате ArduinoNano по схеме делителя напряжения.
Рисунок №6 – схема подключения датчика к плате ArduinoNano
Ниже приведен код программы, позволяющий выводить значения АЦП и напряжения средней точки резистивного делителя в окно терминала. Эти цифры будут уменьшаться с ростом давления на датчик и увеличиваться по мере сбавления натиска.
На рисунке №7 показан результат работы программы.
Рисунок №7 — Результат опроса резистивного датчика давления
Вышеприведенный рисунок иллюстрирует поведение датчика при плавном нажатии на его чувствительный элемент и последующем плавном отпускании. Как видно из полученных значений, охватывается весь диапазон от 0В до 5В.
Пример использования
Сфера применения резистивных датчиков давления довольно широка. Они могут использоваться в качестве концевиков в различных механизмах; как подобие сенсорных кнопок; как регистратор присутствия груза на конвейере или в лифте, как датчики удара и т.п.
Чтобы закрепить материал статьи, создадим небольшой проект музыкального прибора под названием “терменвокс”. Суть этого устройства заключается в изменении тона звука от силы воздействия на чувствительный элемент.
И если в классическом терменвоксе чувствительным элементом является антенна, то в нашем случае эту роль выполнит датчик давления. Для усиления эффекта добавим светодиод, который будет менять свою яркость пропорционально частоте сигнала.
В качестве излучателя звука будет использован буззер без встроенного генератора. Схема проекта показана на рисунке №8.
Рисунок №8 — схема проекта “Терменвокс”
Ниже приведен код проекта с подробными ми:
Прототип готового устройства показан на рисунке №9
Рисунок №9 — проект “Терменвокс”
FAQ. Часто задаваемые вопросы
Вопрос:Возможно ли подключение данного датчика к цифровому пину Arduino вместо аналогового?
Ответ:Такое подключение вполне приемлемо. В этом случае требуется подобрать резистор в верхнем плече делителя напряжения таким образом, чтобы получить напряжение логического нуля при комфортной для вас степени нажатия на датчик.
- Вопрос:Какой разброс показаний может быть у двух одинаковых датчиков?
- Ответ:Разброс точности составляет около 10%.
- Вопрос:Следует ли соблюдать полярность подключения датчика давления и как её определить?
- Ответ:Датчик давления по своей структуре является обычным резистором, а это значит, что полярность подключения не имеет никакого значения.
- Вопрос:Где можно взять техническую документацию да данный сенсор?
- Ответ:Документацию можно скачать по этой ссылке.
Ардуино: датчик давления BMP180 (BMP085)
Барометр — это устройство, которое измеряет атмосферное давление. То есть давление воздуха, который давит на нас со всех сторон. Еще со школы мы знаем, что первый барометр представлял собой тарелку с ртутью, и перевернутой пробиркой в ней.
Автором этого устройства был Эванджели́ста Торриче́лли — итальянский физик и математик. Снять показания ртутного барометра можно так же просто, как и показания спиртового термометра: чем давление снаружи колбы больше, тем выше столбик ртути внутри неё.
Пары ртути, как известно, весьма ядовиты.
Позже, появился более безопасный прибор — барометр-анероид. В этом барометре ртуть была заменена на гофрированную коробку из тонкой жести, в которой создано разрежение. Под воздействием атмосферы, коробочка сжимается и через систему рычагов поворачивает стрелку на циферблате. Вот так выглядят эти два барометра. Слева — анероид, справа — барометр Торричелли.
Зачем нам может понадобиться барометр? Чаще всего, этот прибор используют на летательных аппаратах для определения высоты полета. Чем выше аппарат поднимается над уровнем моря, тем меньшее давление испытывает бортовой барометр. Зная эту зависимость, легко определить высоту.
Другой распространенный вариант использования — самодельная погодная станция. В этом случае мы можем использовать известные зависимости грядущей погоды от атмосферного давления. Помимо барометра, на такие станции ставят датчики влажности и температуры.
Электронный барометр
Такие громоздкие барометры мы не сможем использовать в робототехнике. Нам нужен миниатюрный и энергоэффективный прибор, который легко подключается к той же Ардуино Уно.
Большинство современных барометров делают по технологии МЭМС, так же как и гиротахометры с акселерометрами.
МЭМС барометры основаны на пьезорезистивном, либо на тензометрическом методе, в которых используется эффект изменения сопротивления материала под действием деформирующих сил.
Если открыть корпус МЭМС барометра, можно увидеть чувствительный элемент (справа), который находится прямо под отверстием в защитном корпусе прибора, и плату управления (слева), которая осуществляет первичную фильтрацию и преобразование измерений.
Датчики BMP085 и BMP180
К самым доступным датчикам давления, которые часто используются полетных контроллерах и в разного рода самодельных электронных устройствах, можно отнести датчики компании BOSH: BMP085 и BMP180. Второй барометр более новый, но полностью совместимый со старой версией.
Немного важных характеристик BMP180:
- диапазон измеряемых значений: от 300 гПа до 1100 гПа (от -500м от +9000м над уровнем моря);
- напряжение питания: от 3.3 до 5 Вольт;
сила тока: 5 мкА при скорости опроса — 1 Герц; - уровень шума: 0.06 гПа (0.5м) в грубом режиме (ultra low power mode) и 0.02 гПа (0.17м) а режиме максимального разрешения (advanced resolution mode).
Теперь подключим этот датчик к контроллеру, и попробуем оценить атмосферное давление.
Подключение BMP180
Оба датчика имеют I2C интерфейс, так что их без проблем можно подключить к любой платформе из семейства Ардуино. Вот как выглядит таблица подключения к Ардуино Уно.
BMP 180 | GND | VCC | SDA | SCL |
Ардуино Уно | GND | +5V | A4 | A5 |
Принципиальная схема
Внешний вид макета
Программа
Для работы с датчиком нам понадобится библиотека: BMP180_Breakout_Arduino_Library
Скачиваем её из репозитория, и устанавливаем в Arduino IDE. Теперь все готово для написания первой программы. Попробуем получить сырые данные из датчика, и вывести их в монитор COM порта.
#include
#include
SFE_BMP180 pressure;
void setup(){
Serial.begin(9600);
pressure.begin();
}
void loop(){
double P;
P = getPressure();
Serial.println(P, 4);
delay(100);
}
double getPressure(){
char status;
double T,P,p0,a;
status = pressure.startTemperature();
if (status != 0){
// ожидание замера температуры
delay(status);
status = pressure.getTemperature(T);
if (status != 0){
status = pressure.startPressure(3);
if (status != 0){
// ожидание замера давления
delay(status);
status = pressure.getPressure(P,T);
if (status != 0){
return(P);
}
}
}
}
}
Процедура получения заветного давления из датчика не такая тривиальная, и состоит из нескольких этапов. В упрощенном виде алгоритм выглядит так:
- запрашиваем у барометра показания встроенного датчика температуры;
- ждем время A, пока датчик оценивает температуру;
- получаем температуру;
- запрашиваем у барометра давление;
- ждем время B, пока датчик оценивает давление;
- получаем значение давления;
- возвращаем значение давления из функции.
Время B зависит от точности измерений, которая задается в функции startPressure. Единственный аргумент этой функции может принимать значения от 0 до 3, где 0 — самая грубая и самая быстрая оценка, 3 — самая точная оценка давления.
Загружаем программу на Ардуино Уно, и наблюдаем поток измерений атмосферного давления. Попробуем поднять датчик над головой, и опустить до уровня пола. Показания будут немного меняться. Осталось только разобраться, как нам преобразовать эти непонятные числа в высоту над уровнем моря.
Преобразование давления в высоту над уровнем моря
Датчик BMP180 возвращает величину давления в гектопаскалях (гПа). Именно в этих единицах принято измерять атмосферное давление. 1 гПа = 100 Паскалей. Известно, что на уровне моря давление в среднем составляет 1013 гПа, и каждый дополнительный метр над уровнем моря будет уменьшать это давление всего на 0.11 гПа (примерно).
Таким образом, если мы вычтем из результата функции getPressure число 1013, и разделим оставшуюся разность на 0.11, то мы получим значение высоты над уровнем моря в метрах. Вот так изменится наша программа:
void loop(){
double P, Alt;
P = getPressure();
Alt = (P — 1013)/0.11;
Serial.println(Alt, 2);
delay(100);
}
В действительности, давление зависит от высоты над уровнем моря нелинейно, и наша формула годится лишь для высот на которых мы с вами обычно живем. Благо, человечеству известная более точная зависимость давления от высоты, которую мы можем применить для получения более точных результатов.
Здесь p — измеренное в данной точке давление, p0 — давление относительно которого идет отсчет высоты.
В библиотеке SFE_BMP180 уже есть функция, которая использует указанную. формулу для получения точной высоты. Используем её в нашей программе.
#include
#include
SFE_BMP180 pressure;
double P0 = 0;
void setup(){
Serial.begin(9600);
pressure.begin();
P0 = pressure.getPressure();
}
void loop(){
double P, Alt;
P = getPressure();
Alt = pressure.altitude(P,P0)
Serial.println(Alt, 2);
delay(100);
}
double getPressure(){
…
}
Я не стал полностью копировать функцию getPressure, чтобы сохранить читабельность текста.
В программе появилась еще одна переменная P0 — это давление, которое мы измерим на старте программы. В случае летательного аппарата, P0 будет давлением на взлетной площадке, относительно которой мы начнем набор высоты.
Визуализация
Теперь попробуем отобразить показания давления в программе SFMonitor, и посмотрим как меняется давление при движении датчика на высоту 2 метра.
static const byte PACKET_SIZE = 1;
static const byte VALUE_SIZE = 2;
static const boolean SEPARATE_VALUES = true;
#include
#include
#include
SFE_BMP180 pressure;
SerialFlow rd(&Serial);
double P0 = 0;
void setup(){
rd.setPacketFormat(VALUE_SIZE, PACKET_SIZE, SEPARATE_VALUES);
rd.begin(9600);
pressure.begin();
P0 = getPressure();
}
void loop(){
double P;
P = getPressure();
rd.setPacketValue(100+int((P — P0)*100));
rd.sendPacket();
delay(100);
}
double getPressure(){
…
}
В результате работы программы получим график давления в Паскалях:
Заключение
Как мы уяснили из урока, определение высоты над уровнем моря не такая тривиальная задача. Мало того, что давление зависит от высоты нелинейно, так еще картину портят различные внешние факторы.
Например, давление у нас дома постоянно меняется с течением времени. Даже за несколько минут, высота измеренная нашим прибором может варьироваться в диапазоне 0.5 — 1 метра.
Температура так же сильно влияет на качество измерений, поэтому нам приходится учитывать её при расчете давления.
Для летательных аппаратов рекомендуется использовать датчики повышенной точности, такие как MS5611. У этого барометра точность измерений может достигать 0,012 гПа, что в 5 раз лучше, чем у BMP180. Также, для уточнения барометрической высоты полета применяют координаты GPS.
Успехов в наблюдении за атмосферой! ????
Все о датчике давления Ардуино
Одним из главных параметров оценки окружающей среды является атмосферное давление. Для его измерения используют датчики Ардуино, которые так же способны измерять высоту относительно уровня моря и даже предсказывать погоду. Самым популярным и доступным сенсором для платы Arduino, стал модуль bmp280.
Датчик давления Ардуино Источник arduino-diy.com
Особенности датчиков давления Ардуино
Датчик давления представляет собой небольшой устройство, созданное на основе кремния. Область его использования очень широкая. Их можно встретить как в промышленности, так и в быту.
Он способен работать при различных измерениях (относительных, абсолютных).
При этом следует учесть, что относительным называют показатель постоянного давления атмосферы, а абсолютным – показатели в вакууме.
Главным элементом датчика называют вакуумную камеру, сделанную из пластика. Именно относительно нее производятся все расчеты для измерения абсолютного давления.
Arduino-шилд для датчиков измерения атмосферного давления Источник electronshik.ru
Надежность работы датчика Arduino доказывает тот факт, что многие ведущие производители медицинской и бытовой техники используют именно их. Вместе с датчиком применяется LCD-дисплей, куда выводится вся информация. Чтобы подключить датчик, используют операционный усилитель.
Принцип работы барометра
Давление атмосферного столбика измеряют прибором, именуемым барометром. Раньше он был круглым и плоским, как тарелка, внутрь помещали ртуть и ставили пробирку. Если снаружи давление увеличивалось, то и ртуть поднималась внутри колбы выше.
Такой принцип действия сродни термометру спиртового типа. Барометр-анероид — более усовершенствованная и безопасная модель, ее создали позже.
Карманный барометр Baro 90B Источник bigl.ua
Сегодня барометры используют не только для оценки показателей атмосферного давления. Его так же устанавливают на различные летательные аппараты с целью определения высоты полета. Если летательный аппарат при подъеме оказывается выше уровня моря, показатель давления на приборе уменьшается. Таким образом, получается определить высоту полета.
Еще один вариант использования барометров – прогнозирование погоды в домашних условиях. Для этого так же используют знания и том, как погода зависит от давления атмосферы. На такие приборы дополнительно устанавливают датчики, определяющие температуру воздуха и уровень его влажности.
Обычные барометры достаточно громоздкие, поэтому их использование в робототехнике затруднительно. Для этого создали специальные приборы небольшой формы, который подсоединяется к датчику Ардуино.
Многие современные устройства создают по технологии МЭМС, аналогично таким приборам, как акселерометр или гиротахометр, где применяют эффект изменения показателей сопротивления материала, если на него воздействуют деформирующие силы.
Электронный измеритель давления воздуха для лабораторий Источник climatelogger.ru
Модуль ВМР 280
ВМР 250 – микро-чип, используемый для цифрового высокочастотного измерителя показателей атмосферного давления. Каждый датчик на этапе его создания проходит калибровку.
Благодаря минимальным размерам, отличной измерительной способности и незначительному энергопотреблению, они часто используются для датчиков давления Ардуино.
ВМР 280 имеет два последовательных интерфейса, используемых для обмена данными и 3 режима работы:
- FORCED. Этот режим дает возможность активировать модуль подачи сигнала извне. После того, как измерения произведены, он переходит в режим автоматического сниженного энергопотребления.
- SLEEP. Находясь в этом режиме потребление электроэнергии прибора минимальное.
- NORMAL. При переходе в этот режим, модуль начинает периодичные измерения. После этого он вновь переходит в спящий режим. Для задачи нужной частоты, с которой должны проводиться измерения, используется специальная программа. Результат может быть считан в любое время.
Кроме измерения показателей атмосферного давления, модуль ВМР 280 способен измерять температуру воздуха. Чтобы отфильтровать вычисления, которые осуществляет модуль, используется программный фильтр с подходящими настройками.
Датчик атмосферного давления и температуры BMP280 Источник 3d-diy.ru
Среди основных технических характеристик модуля ВМР 280, выделяют:
- показатели напряжения питания на уровне от 1,71 V до 3,6 V;
- атмосферное давление может измеряться в диапазоне от 300hPa до 1100hPa (такие показатели характерны для высоты от -500 до 9 000 м выше уровня моря);
- интерфейс обмена информацией SPI с максимально возможной частотой работы 10 МГц или I2C с показателем максимально возможной частотой работы 3,4 МГц;
- прибор способен работать при температуре не ниже -40 и не выше +85 градусов;
- размер модуля составляет 21*18 мм;
- в режиме работы величина тока потребления равна 2.7uA.
Как подключить модуль ВМР 280 к датчику давления Arduino
Чтобы подключить модуль к Ардуино, используют интерфейс. Это может быть SPI или I2C. Выбор конкретного зависит от проекта, над которым ведется работа и его специфики, а так же возможности самого микроконтроллера.
Аппаратный интерфейс у датчика Arduino размещен на двух пинах: A4 и A5. Поэтому при таком режиме, для подключения используют 4 провода. 2 необходимы для обеспечения питания модуля и еще 2 применяют в качестве информационной шины.
При работе интерфейса SPI потребуется использовать дополнительные 2 провода.
Подключение BMP280 к Ардуино Источник voltiq.ru
В интернете представлен огромный выбор всевозможных библиотек, используемых для упрощения работы с модулем. К примеру, существует возможность уменьшить до минимума время, необходимое для освоения модуля без урезания его функционала.
С помощью подобных библиотек, пользователь получает возможность выбирать на свое усмотрение способ подключения, настраивать такие параметры, как точность или периодичность проведения измерений, исходя из установленного предварительно режима.
Принцип и порядок использования библиотеки
После установки выбранной библиотеки, к ней подключаются Adafruit_BMP280.h или другое устройство, предоставляющее доступы к интерфейсам. Дальше процесс выглядит следующим образом:
- Создается экземпляр Adafruit_BMP280. Он необходим для получения полного доступа к различным функциям и возможностям датчика, измеряющего показатели атмосферного давления. Он может быть создан несколькими способами, которые зависят от вида подключения (по шине I2C, аппаратному или программному SPI).
- Используя объект bmp, можно начать работать с параметрами и возможностями библиотеки. Однако вначале инициализируется модуль. Лучше всего это делать при помощи функции setup(), которая используется перед основным циклом.
- При появлении информации об ошибке, проверяется корректность подключения. Помимо этого, рекомендуется проверить соответствие интерфейса, который используется. Если инициализация проведена успешно, совершается переход к микросхеме ВМР280. В библиотеке для этого существует функция setSampling(…). Используя ее, пользователь сможет задать необходимые параметры, среди которых (время активности датчика, параметры измерения показателей атмосферного давления, степень фильтрации, температура воздуха).
Подключение библиотеки к Adafruit_BMP280.h Источник voltiq.ru
Функция setSampling(…) имеет несколько параметров. Первый из них контролирует режим работы устройства, которых здесь четыре:
- MODE_NORMAL – цикличный выход из спящего режима по прошествии определенного времени, установленного пользователем. После этого снимаются показатели, которые остаются в памяти, а само устройство вновь уходит в режим сна.
- MODE_SLEEP – режим, при котором устройство находится в спящем режиме с минимальным потреблением электроэнергии.
- MODE_FORCED – после выставления этого режима, устройство будет начинать измерения, получив команду об этом от Ардуино с последующим переходом в спящий режим.
- MODE_SOFT_RESET_CODE – установка этого режима приводит к сбросу всех заводских настроек.
Два следующих параметра необходимы для точного измерения показателей давления атмосферы и температуры воздуха. Четвертый режим необходим для фильтрации проводимых измерений. Пятый отвечает за активизацию прибора для проведения измерений.
Варианты использования ВМР 280
Модуль может использоваться разными способами. Чаще всего, его применяют для определения высоты во время полета или глубины, к примеру, во время опущения в шахту.
Однако главным его предназначением остается получение данных на метеостанции.
Имея определенные знания и навыки, с его помощью можно создать домашнюю метеостанцию с последующим выводом полученных данных на ЖК-дисплей мобильного телефона.
Домашняя метеостанция на BMP280 Источник goodidey.ru
Измерение высоты точки
Еще одним из вариантов использования датчика давления Ардуино является измерение высоты точки или предмета над уровнем моря.
Если учесть, что усредненный показатель давления непосредственно на уровне моря равен 1013 гПа. С повышением высоты на 1 метр, это значение повышается на 0,11 гПа.
Поэтому, если из полученного в результате измерения показателя отнять 1013, а после результат разделить на 0,11, получится число, равное высоте.
Определение высоты над уровнем моря Источник pohod-lifehack.ru
Часто используемые датчики
Кроме ВМР 280 есть и другие датчики. Широкое распространение получили ВМР 180 и bme280.
Основные характеристики ВМР 180:
- время срабатывания устройства составляет 4,5 мс;
- способность измерять уровень атмосферного давления в пределах от 225 до 825 мм ртутного столбца;
- поддержка интерфейса I2C;
- значение напряжения питания составляет от 3,3 до 5 В.
Датчик ВМР 180 для Ардуино Источник aliexpress.ru
Этот датчик включает 3 разных устройства, способных помимо атмосферного давления, еще определять другие показатели, среди которых температура и влажность окружающего воздуха. Он отличается повышенной надежностью, незначительным потреблением тока (0,5 мА) и стабильной длительной работой.
ВМЕ280 отличается такими характеристиками:
- в режиме ожидания величина потребления тока составляет 0,1 мкА;
- уровень напряжения в пределах от 1,7 до 3,6В;
- устройство помещено в корпус из металла с восемью выходами;
- датчик поддерживает несколько интерфейсов, среди которых SPI и I2C.
Датчик bme280 для Ардуино Источник 3d-diy.ru
При сравнении трех перечисленных моделей, признанных самыми востребованными среди пользователей датчиков для Ардуино, можно отметить между ними много общих качеств. В основном эти отличия заключаются в дизайне и размерах устройств. В модели bme280 еще дополнительно присутствует датчик, способный измерять влажность воздуха.
Ошибки, которые могут возникнуть при подключении
Чаще всего, пользователи сталкиваются с проблемой неправильных показателей температуры воздуха и атмосферного давления. Причем от реальных они могут отличаться сразу на несколько пунктов. В большинстве случаев, причина этого заключается в неправильном подключении датчика давления Ардуино. К примеру, библиотека требует подключения модуля по I2C, а его произвели по SPI.
Пользователи, которые используют некачественные датчики непонятных производителей, могут столкнуться с проблемой, заключающейся в нестандартных адресах SPI или I2C. В таких ситуациях рекомендуют провести сканирование всех подсоединенных к датчику устройств, используя любой из популярных скетчей. Это позволит понять, на какой из адресов реагирует конкретный датчик измерения давления.
К проблемам, с которыми сталкиваются пользователи еще относят несоответствие режима рабочего напряжения модуля основному режиму контролера. Например, для датчика на 3,3 В необходимо создавать делитель напряжения. Также исправить проблему поможет готовый уровень для согласования уровней. Их стоимость доступная всем.
Использование датчика Ардуино в быту Источник habr.com
Незначительные отклонения иногда случаются из-за калибровки сенсора. К примеру, при использовании модуля ВМР180 значения рассчитываются и выводятся в скетче. Чтобы получить максимально точное показание, следует знать показатель давления для нужных координат в зависимости от высоты точки.
Заключение
Рассмотренные датчики давления Ардуино – популярное устройство, применяемое для измерения давления атмосферы. Сфера их использования достаточно обширная.
Кроме контроля за состоянием атмосферного давления, их применяют для определения координат выше уровня моря или показателей глубины, к примеру, во время спуска в шахту. Работа прибора зависит от подключенного к нему модулю.
Выбор таких приспособлений достаточно большой. Самыми популярными из них стали ВМР 180, ВМР 280 и bme 280.
Прочитать позже