Датчик атмосферного давления bmp085 и arduino

Как подключить датчик давления к Ардуино

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

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

Существует не так много моделей микроконтроллеров, служащих базой «умной» техники. Среди них определенной популярностью пользуется Arduino, в качестве достаточно универсальной основы создания интеллектуального оборудования. Своей известности микроконтроллер обязан не только быстродействием или удобством подключения внешних компонентов, но и широтой их моделей, представленной на рынке. Среди последних, богатый выбор сенсоров, устройств индикации, средств интерфейса и получения команд, сетевых и коммуникационных плат, а также управляющих внешней аппаратурой узлов.

Собственно, чувствительные элементы платформы и будут рассмотрены в теле статьи, а конкретно один из них — датчик давления Ардуино.

Описание библиотеки для работы с датчиком. Пример скетча

Для работы с датчиком 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();

}

Что измеряет сенсор

Давление — некая физическая величина численно равная перпендикулярно направленной силе действующей на единицу площади поверхности. Сам датчик можно представить своеобразными очень чувствительными весами. Последнее замечание сделано по причине того, что и вода, и газы тоже имеют свою массу, которая влияет на поверхность под ними. На практике, за счет указанного фактора, можно определить глубину погружения (чем ниже, тем больше вес слоя воды) или высоту подъема в атмосферу (чем выше — тем меньше плотность, а значит и слабее воздействие). Кроме того, в отношении давления воздуха не стоит забывать о погодных колебаниях. Резкое падение названой характеристики атмосферы — к дождю или буре.

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

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

Загрузка, компиляция и запуск программы на языке C

После проверки подключения загрузите и разархивируйте в корневой каталог программу на языке C:

cd ~
wget  https://masterkit.ru/zip/bmp180-c.tar.gz
sudo  tar  zxvf   bmp180-c.tar.gz

В результате в корневом каталоге появится папка bmp180-c с двумя файлами: bmp180.h и bmp180test.c. Теперь изменим рабочий каталог на bmp180-c и воспользуемся встроенным в OC Raspbian компилятором gcc для получения исполняемого файла:

cd   bmp180-c
sudo gcc -Wall -o bmp180 bmp180test.c -lwiringPi -lm

В папке bmp180-c появится исполняемый файл bmp180. Запустим его на выполнение:

sudo  ./bmp180

Символы указывают на то, что файл должен быть запущен именно из текущего каталога.

Запустить файл можно также из Файлового Менеджера (File Manager) операционной системы. Файл запускается на выполнение двойным кликом мыши по его иконке; при появлении диалогового окна следует выбрать Execute in Terminal.

В окно терминала каждую секунду выводятся температура, давление и высота.

Рис. 5.

Принципы расчета высоты и текущего давления на уровне моря основаны на следующих формулах:

при измеренном давлении p и давлении на уровне моря p0, например, 1013.25 гПа, высота в метрах может быть рассчитана при помощи так называемой международной барометрической формулы:

 

Согласно этой формуле, изменение давления Δp = 1 гПа соответствует 8.43 м на уровне моря.

при измеренном давлении p и абсолютной высоте altitude можно рассчитать давление на уровне моря:

 

Разница в высоте Δaltitude = 10 м соответствует изменению давления 1.2 гПа на уровне моря.

Листинги заголовочного файла bmp180.h и файла программы bmp180test.c можно посмотреть здесь:

Загрузка и запуск программы на языке Python

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

В первую очередь, убедитесь, что библиотека Python RPi.GPIO, обеспечивающая взаимодействие программ на Python с контактами GPIO Raspberry установлена. Запустите в терминале интерпретатор python и в ответ на приглашение >>> выполните одну за другой следующие команды:

import RPi.GPIO
RPi.GPIO.VERSION

Рис. 6.

Выход из интерпретатора – Ctrl-D.

Если ошибок не возникло и выведен номер версии библиотеки, то можно продолжать.

Выполните в терминале команду sudo apt-get install python-smbus для установки пакета для связи по шине I2C из программ на Python, если он еще не установлен.

После проверки подключения загрузите и разархивируйте в корневой каталог программу на языке Python:

cd ~
wget  https://masterkit.ru/zip/bmp180-python.tar.gz
sudo  tar  zxvf   bmp180-python.tar.gz

В корневом каталоге появится папка bmp180-python с тремя файлами: bmp180.py, bmp180.pyc и bmp180test.py. Файл bmp180.pyc является скомпилированным вариантом исходного файла bmp180.py и будет использован при работе основного файла программы bmp180test.py.

Перейдите в каталог bmp180-python и запустите программу:

cd bmp180-python
sudo python ./BMP180test.py

Рис. 7.
 
Рис. 8. Подсоединенный к Raspberry Pi датчик давления.
 
Рис .9. Результат работы программы на экране планшета. Raspberry и планшет
находятся в локальной сети посредством подключения по WiFi, на Raspberry
работает VNC-server, на планшете – VNC-viewer.

Листинги программ BMP180.py и BMP180test.py можно посмотреть здесь:

Технические характеристики датчика BMP180:

  • напряжение питания: 1.62 В … 3.6 В.
  • интерфейс подключения: I2C.
  • точность: до 0.02 гПа (17 см).
  • диапазон: 300 … 1100 гПа (от –500 м до 9000 м высоты).
  • выходные данные: 16 бит, давление и температура
  • разрешение по давлению: 0.01 гПа
  • разрешение по температуре: 0.1 °С
  • размер платы без разъема: 12 × 14 мм

Интерфейс барометра BMP180 – I2C, что делает работу с ним простой и удобной. На модуле кроме самого датчика установлен линейный стабилизатор на микросхеме XC6206P332MR в корпусе SOT-23 (падение напряжения на стабилизаторе составляет всего 250 мВ, собственное потребление — 1 мкА).

Рис. 1.

При эксплуатации барометра следует учитывать некоторые особенности.

  1. Помните, что BMP180 необходим доступ окружающего воздуха для измерения его давления, так что не стоит его укладывать в герметичный корпус. С другой стороны, воздействие быстро движущихся воздушных потоков или ветра могут вызвать кратковременные колебания давления, которые будут влиять на ваши показания. Защитите устройство от сильных воздушных потоков.
     
  2. Точное значение температуры необходимо для измерения давления, поэтому старайтесь не подвергать устройство резким изменениям температуры, держите его подальше от нагревающихся деталей и других источников тепла.
     
  3. BMP180 чувствителен к влаге и не должен контактировать с водой.
     
  4. BMP180 чувствителен к свету, который может войти в устройство через маленькое отверстие в металлической крышке корпуса чипа. Для достижения максимальной точности следует оградить датчик от окружающего света.

Подключается датчик BMP180 с помощью всего четырех проводов: питание +3.3 В (или +5 В — VCC), земля (GND), SDA (data) и SCL (clock).

Соответственно, подключение к разъему GPIO Raspberry будет выглядеть следующим образом:

Рис. 2.

Теперь нужно убедиться, разрешен ли в Raspberry обмен по шине I2С (по умолчанию он запрещен), и, если нет, то разрешить. Предполагается, что в системе Raspbian установлены пакеты i2c-tools. Кстати, проверить, установлен ли конкретный пакет, можно набрав команду: aptitude show имя_пакета.

Рис. 3.

Если пакет не установлен (в третьей строке Рис. 3 – State: not installed), установите его командой: sudo apt-get install i2c-tools.

Наберите в терминале команду: i2cdetect –y 1. Если в результате выполнения команды при подключенном датчике будет найдено подключение с адресом 77, значит, обмен разрешен, и датчик давления BMP180 подключен правильно.

Рис. 4.

Если ни одного адреса не отображается, то, скорее всего датчик не подключен, или подключен неправильно, или запрещен обмен по шине I2C.

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

sudo nano /etc/modprobe.d/raspi-blacklist.conf

В данном файле (raspi-blacklist.conf) закомментируйте строчку (если она есть) blacklist i2c-bcm2708, добавив знак решетки # в начале строки. Сохраните изменения.

Добавьте модуль I2C в автозапуск системы. Команда редактирования:

sudo nano /etc/modules

В самый конец этого файла добавьте строчки i2c-dev и i2c-bcm2708. Сохраните файл.

Перезагрузите систему:

sudo reboot

Для проверки работоспособности выполните команду:

i2cdetect -y 1

Представленные на рынке модели

Датчики Arduino, относящиеся к давлению, делятся согласно средам применения и конструктивным особенностям, непосредственно связанным с получением конечного результата. Есть модели, защищенные от влаги и предназначенные для применения в жидкостях, другие работают только в качестве анероидов атмосферы, иные устанавливаются в разрыв движения потока, четвертые в качестве определителей внутреннего давления наполняющего емкость газа. Их всех объединяет наличие общих интерфейсов подключения к микроконтроллеру и низкое, не более нескольких милливатт (реже Ватт), потребление энергии.

Наименование Питание (V) Точность Разрешение (hPa) Диапазон (hPa) Рабочая температура (°C) Интерфейсы Примечание
SPI I2C UEXT
Атмосферные
MOD-BMP085 1.8–3.6 0.03 hPa 0.01 300–1100 (от 500 м ниже уровня моря до 9 км. высоты –40..+85 + + Измерение температуры
GY-BMP280 3.3 0.12 hPa 0.0016 300–1100 –40..+85 + + Измерение температуры до +65, с точностью 0.01
MD-PS002 5V ±0.2% –100–+150 –40..+125 + Только не агрессивные среды
Жидкостные
MS5803-02BA 1.8–3.6 20 см жидкости 30–1100 (10–2000) –40..+85 + +
MS5803-07BA 1.8–3.6 0–7 мбар (70 м погружения) –20..+85 + +
Open-Smart 5V G1/4 0-1.2 MPa Hydraulic Pressure Sensor for Non-Corrosive Water 5 1.5 % 1–2.4 мбар (max 3) 0..+85 Собственный коннектор, соединяемый к I2C через резистор, датчик оснащен термометром

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

Телеграфный ключ – радиомаяк

Всем читателям привет! По-прежнему пишу в блоге, как только
выпадает свободное время. А тут как говориться середина мая, дел должно быть
невпроворот, но погода как всегда внесла свои коррективы. Одним словом
благодаря тому, что у нас зарядили частые дожди, на даче дел не так много. Вот
и время появилось. Ну и конечно же приступил к работе с ардуино.  В эфире просто пока не рискую работать:
погода меняется так, что в течении дня то пасмурно, то дожди, то грозы. Но вот
с ардуино можно и поработать…

Решил продолжить работу над 
новым проектом:  автоматический
телеграфный ключ – радиомаяк. Как раз для такого расширенного проекта не жаль
будет использовать микроконтроллер ардуино. А то как то два МК  один для ключа, другой для нового маяка
использовать – это будет нерационально. А вот два проекта в одном – это самое
то! Так что с задачами определился и приступил к работе. Первым делом нужно  начертить схему. В проекте будут
задействованы: два переменных резистора, несколько кнопок (которые работают как
тумблеры), LCD дисплей.
Так что первым делом разрабатываю схему. За основу взял прошлые схемы, и
объединил их в одну. Так же не забыл добавить кнопку переключения режимов…

Собираю  схему на
большой макетной плате. На средней было бы сложно и даже очень разместить
большое количество проводов. А так благодаря начерченной в программе «Эсплан»
схеме процесс сборки прототипа идет быстро и без ошибок. Да не зря тратим время
на чертеж схемы

Собираю и проверяю на всякий случай правильность установленных
компонентов: кнопки управления, кнопок имитирующих работу манипулятора,
переменный резистор и ЖК дисплей.  На
дисплей  решил пока выводить  режимы работы: «CWKEYMODE» или  «Радиомаяк». 
Но сейчас важно проверить как работает первый режим:  электронный телеграфный ключ.

Все схема готова! Подключаю ардуино к ноутбуку, и записываю
скетч в МК (микроконтроллер).  Все
готово. ЖК экран приветливо написал соответствующий режим работы : «CWKEYMODE»

Пробую переключить
режим кнопкой выбора режима. Все работает: дисплей послушно отображает надписи
каждого режима. В режиме маяка пока только тестовый писк. Зато ключ работает.
Но пришлось немного поиграться с настройкой «отбивания» скорости и в итоге
добился изменения скорости от минимума к максимуму.

На этом настройку первого режима работы  «CWKEYMODE» можно считать завершенной. Далее остается немного изменить
скетч, добавив в него блок радиомаяка. 
Опять выловить ошибки компиляции и можно будет сделать первую оценку
всей большой работы. И если все будет работать как планировалось, то можно
приступать к разработке шилда для этого проекта. Шилд  поможет правильно подключить  (благодаря шлефам) все нужные
компоненты:  кнопки, ЖКИ, переменные
резисторы. А еще параллельно буду решать еще задачу: поиском подходящего
корпуса.

Ардуино: телеграфный ключ – радиомаякАрдуино: телеграфный ключ – радиомаяк

Скетч для Ардуино

Скопируйте прилагаемый ниже скетч в Arduino IDE и найдите строку «int d = 18;» и измените «18» на глубину вашего резервуара в сантиметрах.


// Обратите внимание, что нумерация контактов arduino
// отличается от выводов микроконтроллера

int d = 18; // Введите глубину вашего резервуара в сантиметрах

int trig = 11; // Прикрепите триггер ультразвукового датчика к пину 11
int echo = 10; // Прикрепите эхо ультразвукового датчика к контакту 10
int pin1 = 2; // Высший уровень
int pin2 = 3;
int pin3 = 4;
int pin4 = 5;
int pin5 = 6;
int pin6 = 7; // Самый низкий уровень

void setup() {
pinMode (pin1, OUTPUT); // Установка контактов для управления вводом / выводом
pinMode (pin2, OUTPUT);
pinMode (pin3, OUTPUT);
pinMode (pin4, OUTPUT);
pinMode (pin5, OUTPUT);
pinMode (pin6, OUTPUT);
}

void loop()
{ digitalWrite(pin1, LOW); // Сброс светодиодов
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
digitalWrite(pin5, LOW);
digitalWrite(pin5, LOW);

// Установите переменные для продолжительности пинга,
// и расстояние в дюймах и сантиметрах:

long duration, in, cm; // ‘in’ — дюймы и ‘cm’ — сантиметры

// PING запускается HIGH-импульсом в 2 или более микросекундах.
// Дайте короткий LOW импульс заранее, чтобы обеспечить чистый HIGH-импульс:

pinMode(trig, OUTPUT);
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(5);
digitalWrite(trig, LOW);

// Этот же вывод используется для считывания сигнала от PING:
// HIGH-импульс, продолжительность которого — это время (в микросекундах)
// от отправки пинга до приема его эха от объекта

pinMode(echo, INPUT);
duration = pulseIn(echo, HIGH);

// Преобразовать время в расстояние

in = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);

delay(100);
if (in

// Это дает расстояние, пройденное пингом, исходящим и возвратным,
// поэтому мы делимся на 2, чтобы получить расстояние от препятствия.

return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
// Скорость звука составляет 340 м/с или 29 микросекунд на сантиметр.
// Пинг выходит и обратно, поэтому, чтобы найти расстояние от объекта,
// мы берем половину пройденного расстояния.

return microseconds / 29 / 2;
}

Загрузите код для индикатора уровня воды Arduino непосредственно на плату Arduino или в микроконтроллер ATMega328P.

Часто используемые датчики

Кроме ВМР 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 еще дополнительно присутствует датчик, способный измерять влажность воздуха.

Разбор кода для BME680

Библиотеки

Код начинается с подключения необходимых библиотек: для использования I2C, SPI, Adafruit_Sensor. а также Adafruit_BME680.

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"

Соединение по SPI

Обычно мы предпочитаем использовать протокол связи I2C. Однако код адаптирован и для использования SPI. Вам просто нужно раскомментировать следующие строки кода, которые определяют контакты SPI:

/*#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10*/

Давление над уровнем моря

Создаем переменную SEALEVELPRESSURE_HPA:

#define SEALEVELPRESSURE_HPA (1013.25)

Эта переменная сохраняет давление над уровне моря в гектопаскале (эквивалент милибару). Эта переменная используется для оценки высоты для данного давления путем сравнения его с давлением на уровне моря.

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

Соединение по I2C

В этом примере по умолчанию используется шина I2C.

Следующая строка создает объект Adafruit_BME680 с именем bme на выводах Ардуино I2C: D5 (SCL), D4 (SDA):

Adafruit_BME680 bme; // I2C

Чтобы использовать SPI, вам нужно прокомментировать эту строку и раскомментировать следующую строку:

//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

Функция setup()

В функции setup() мы запускаем последовательный порт:

Serial.begin(115200);

Инициализируем датчик BME680:

if (!bme.begin()) {
Serial.println(F("Could not find a valid BME680 sensor, check wiring!"));
while (1);
}

Устанавливаем параметры датчика BME680:

// Set up oversampling and filter initialization
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150); // 320*C for 150 ms

Эти методы могут принимать один из следующих параметров (разрешение):

  • BME680_OS_NONE: выключить чтение;
  • BME680_OS_1X
  • BME680_OS_2X
  • BME680_OS_4X
  • BME680_OS_8X
  • BME680_OS_16X

Датчик BME680 имеет встроенный IIR фильтр для уменьшения кратковременных изменений выходных значений датчика, вызванных внешними помехами. ВsetIIRFilterSize() устанавливает IIR фильтр. Он принимает размер фильтра в качестве параметра:

  • BME680_FILTER_SIZE_0 (no filtering)
  • BME680_FILTER_SIZE_1
  • BME680_FILTER_SIZE_3
  • BME680_FILTER_SIZE_7
  • BME680_FILTER_SIZE_15
  • BME680_FILTER_SIZE_31
  • BME680_FILTER_SIZE_63
  • BME680_FILTER_SIZE_127

В датчик газа имеет нагреватель. Установите параметр нагревателя с помощью метода setGasHeater(), который принимает в качестве аргументов:

  • температура нагревателя (в градусах Цельсия)
  • время работы нагревателя (в миллисекундах)

Мы будем использовать настройки по умолчанию: 320 ºC в течение 150 мс.

Функция loop()

В функции  loop() мы получаем данные от датчика BME680.

Сначала укажем датчику, чтобы он начать асинхронное считывание с помощью bme.beginReading(). Это возвращает время, когда будет готово чтение.

// Tell BME680 to begin measurement.
unsigned long endTime = bme.beginReading();
if (endTime == 0) {
Serial.println(F("Failed to begin reading :("));
return;
}
Serial.print(F("Reading started at "));
Serial.print(millis());
Serial.print(F(" and will finish at "));
Serial.println(endTime);

Затем вызываем метод endReading() для завершения асинхронного чтения.

if (!bme.endReading()) {
Serial.println(F("Failed to complete reading :("));
return;
}

После этого мы получим следующие показания:

  • bme.temperature: возвращает показания температуры
  • bme.pressure: возвращает показания давления
  • bme.humidity: возвращает показания влажности
  • bme.gas_resistance: возвращает сопротивление по газу
Serial.print(F("Temperature = "));
Serial.print(bme.temperature);
Serial.println(F(" *C"));

Serial.print(F("Pressure = "));
Serial.print(bme.pressure / 100.0);
Serial.println(F(" hPa"));

Serial.print(F("Humidity = "));
Serial.print(bme.humidity);
Serial.println(F(" %"));

Serial.print(F("Gas = "));
Serial.print(bme.gas_resistance / 1000.0);
Serial.println(F(" KOhms"));

Serial.print(F("Approx. Altitude = "));
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(F(" m"));

Как подключить датчик воды к Ардуино

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • датчик воды;
  • 1 светодиод и резистор 220 Ом;
  • провода «папа-папа» и «папа-мама».

Перед тем как, подключить датчик протечки воды к плате Ардуино, следует написать скетч. Откройте программу Arduino IDE и вы увидите скетч, где уже прописаны процедуры void setup() и void loop() . Для начала зададим переменную water с помощью оператора int . Переменную мы будем использовать для хранения данных в памяти и присваивания ей значения, получаемого с датчика воды.

В процедуре void setup() мы прописываем режим работы аналогового порта, как вход — команда pinMode(AO,INPUT) и подключаем монитор порта с помощью Serial.begin(9600) . Далее в процедуре void loop() получаем значение с аналогового порта с помощью команды water = analogRead(A0); и передаем значение на монитор порта Arduino IDE Serial.println(water); и ставим паузу для нашего удобства.

Пояснения к коду:

  1. в первой строчке мы присвоили переменной int имя water для хранения значений c входа A0, значения water могут принимать только целое число.

После загрузки скетча вы сможете получить данные с датчика на мониторе порта. Для этого перейдите в Arduino IDE в Панель меню — Инструменты — Монитор порта. Или используйте для открытия сочетание клавиш Ctrl + Shift + M. После того, как мы узнали показания датчика при его увлажнении, мы можем добавить в скетч функцию автоматического включения светодиода при превышении какого-либо значения.

Источник

Обзор датчика давления BMP180 (BMP080)

Датчик BMP180 (3.3В, GY-68) — является недорогим и простым в использовании сенсорным датчиком, позволяющий измерить атмосферное давления и температуру окружающей среды. Используют данный датчик для определения высоты (чем выше, тем меньше давление), а так же в самодельных метеостанциях.

Технические параметры

► Напряжение питания: 3.3 В – 5 В► Рабочий ток: 0.5 мA► Диапазон измеряемого давления: 300 гПа – 1100 гПа► Интерфейс: I2C► Время срабатывания: 4.5 мс.► Точность измерения давления: 0,1 гектопаскаль;► Точность измерения температуры: 0,1°С;► Габариты: 15 мм х 14 мм

Общие сведения

Рассмотрим модуль поближе, в левой части расположен сам сенсорный датчик BMP180 фирмы Bosch. Так как датчик BMP 180, работает от 3.3В (а почти все платы Arduino работают на 5В), на плате предусмотрен стабилизатор напряжения XC6206P332MR в корпус SOT-23, который выдает на выходе напряжение в 3.3В, рядом установлена обвязка стабилизатора, состоящая из двух керамических конденсаторов на 1 мкФ. Подключение осуществляется по интерфейсу I2C, линии SCL и SDA выведены на группу контактов на другой стороне модуля, туда же выведено и питание. Последние два резистора на 4.7 кОм, необходимы подтяжки линии SCL и SDA к питанию, конечно при необходимости их можно выпаять, если используете несколько устройств на I2C линии.

Назначение контактов:► SCL — линия тактирования (Serial CLock)► SDA — линия данных (Serial Data)► VCC — «+» питание► GND — «-» питание

Принципиальная схема датчика BMP180, показана ниже.

Подключение датчика давления BMP180 к Arduino

Необходимые детали:► Барометрический датчик давления BMP180 (3.3В, GY-68) x 1 шт.► Arduino UNO R3 (DCCduino, CH340G)x 1 шт.► Провод DuPont 10x, 2,54 мм, 20 см, F-F (Female — Female) x 1 шт.

Подключение:В данном примере используем датчик BMP 180 и плату Arduino UNO R3, все получение показание отправлять в «Serial порт», принципе и все, осталось собрать схему по рисунку ниже. Для интерфейса I2C на плате arduino предусмотрено только два вывода A4 и A5, другие вывода не поддерживают I2C, так что учтите при проектирование.

Теперь, о программной части, для нашего удобства разработана библиотека BMP180 Breakout Arduino Library v.1.1.2, которая позволяет упросить работу с датчиком, скачиваем и устанавливаем ее, кстати датчик BMP180 и BMP080 похожи, включая и команды, так что библиотека у них одна.

Источник

Принцип работы барометра

Давление атмосферного столбика измеряют прибором, именуемым барометром. Раньше он был круглым и плоским, как тарелка, внутрь помещали ртуть и ставили пробирку. Если снаружи давление увеличивалось, то и ртуть поднималась внутри колбы выше.

Такой принцип действия сродни термометру спиртового типа. Барометр-анероид — более усовершенствованная и безопасная модель, ее создали позже.


Карманный барометр Baro 90BИсточник bigl.ua

Сегодня барометры используют не только для оценки показателей атмосферного давления. Его так же устанавливают на различные летательные аппараты с целью определения высоты полета. Если летательный аппарат при подъеме оказывается выше уровня моря, показатель давления на приборе уменьшается. Таким образом, получается определить высоту полета.

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

Электронный барометр

Такие громоздкие барометры мы не сможем использовать в робототехнике. Нам нужен миниатюрный и энергоэффективный прибор, который легко подключается к той же Ардуино Уно. Большинство современных барометров делают по технологии МЭМС, так же как и гиротахометры с акселерометрами. МЭМС барометры основаны на пьезорезистивном, либо на тензометрическом методе, в которых используется эффект изменения сопротивления материала под действием деформирующих сил.

Если открыть корпус МЭМС барометра, можно увидеть чувствительный элемент (справа), который находится прямо под отверстием в защитном корпусе прибора, и плату управления (слева), которая осуществляет первичную фильтрацию и преобразование измерений.

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий