РадиоЛоцман - Все об электронике

Raspberry Pi 3 Model B - подключаем датчик атмосферного давления BMP180

Мастер Кит BMP180

Модули на основе сборки BMP180 от компании Bosсh на сегодняшний день, наверное, самые популярные датчики атмосферного давления и температуры с цифровым интерфейсом I2C. Кстати, это не обязательно может быть атмосферное давление. Можно измерить, например, давление в закрытой бутылке, накачанной воздухом, или в салоне самолета, летящего на высоте 10000 м. Поскольку атмосферное давление напрямую связано с высотой, с помощью датчика можно определить, на какой высоте над уровнем моря он находится. Давление также зависит и от температуры, так что измерения этих двух величин одним датчиком способствует максимально точному вычислению высоты.

Наличие интерфейса I2C делает весьма простой задачу подключения датчика к микроконтроллеру, который считывает данные, производит необходимые вычисления, индицирует результаты и управляет необходимыми исполнительными устройствами.

В данном материале мы рассмотрим, как подключить BMP180 к Raspberry Pi 3 Model B, получить и обработать результаты измерений. Мы попробуем выполнить управляющую программу на двух алгоритмических языках: С и Python.

BMP180 — датчик абсолютного давления (барометр), построенный по пьезорезистивной схеме. Датчик имеет низкий уровень шумов и высокую линейность, а также высокую скорость установки показаний. На кристалле находится MEMS-датчик (микромеханический датчик) в виде гибкой кремниевой мембраны, закрывающей камеру со стандартным давлением. На мембране расположены тензодатчики, которые включены по схеме моста, и изменяют своё сопротивление при изгибе мембраны. Изгиб мембраны зависит от разности между окружающим давлением и давлением в камере. Таким образом, выходной сигнал, снимаемый с тензомоста, зависит от давления окружающей среды. Так как параметры мембраны и резисторов зависят от температуры, то на кристалле расположен цифровой термометр, показания которого используются для компенсации данных барометра, но термометр может использоваться и самостоятельно. Данные о температуре, снятые с других датчиков, для компенсации использовать не рекомендуется. Термометр в датчике BMP180 расположен на самом измерительном кристалле, и он измеряет температуру чувствительного элемента — поэтому показания встроенного термометра наиболее близки к температуре барометра. Максимальная точность измерения давления составляет 2 Пa, поэтому, если использовать датчик BMP180 как барометрический высотомер, то соответствующая погрешность измерения высоты составит 17 см.

Технические характеристики датчика 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 мкА).

Raspberry Pi 3 Model B - подключаем датчик атмосферного давления BMP180
Рис. 1.

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

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

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

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

Raspberry Pi 3 Model B - подключаем датчик атмосферного давления BMP180
Рис. 2.

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

Raspberry Pi 3 Model B - подключаем датчик атмосферного давления BMP180
Рис. 3.

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

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

Raspberry Pi 3 Model B - подключаем датчик атмосферного давления 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

Загрузка, компиляция и запуск программы на языке 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.

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

Raspberry Pi 3 Model B - подключаем датчик атмосферного давления BMP180
Рис. 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

Raspberry Pi 3 Model B - подключаем датчик атмосферного давления BMP180
Рис. 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

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

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

Мастер Кит

Цена BMP180BMP180 на РадиоЛоцман.Цены — от 112 до 369 руб.
26 предложений от 17 поставщиков
Барометр GY-68 для проектов на Arduino. Датчик атмосферного давления и температуры BMP180. Отлично подходит для создания различных погодных макетов на Arduino,...
ПоставщикПроизводительНаименованиеЦена
Стандарт СИЗBMP180112 руб.
AliExpressATMEGA644PA-AU PHW80NQ10T ATMEGA328PB-AU B1212LS-1W IRFP4227 INA226AIDGSR MS5607-02BA03 MPU-6050 B1212S-2W BMP180120 руб.
ИнтерияBoschBMP180165 руб.
ТриемаBMP180205 руб.
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя