Взаимодействие BME280, датчика температуры, влажности и давления, с Arduino

Содержание

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

Взаимодействие BME280, датчика температуры, влажности и давления, с Arduino Взаимодействие BME280, датчика температуры, влажности и давления, с Arduino

BME280, датчик температуры, относительной влажности и атмосферного давления

В основе модуля находится цифровой датчик температуры, влажности и давления нового поколения производства Bosch BME280. Он является преемником таких датчиков, как BMP180, BMP085 или BMP183.

Рисунок 1 Чип BME280 на модуле Рисунок 1 Чип BME280 на модуле

Этот прецизионный датчик может измерять относительную влажность воздуха от 0 до 100% с точностью ±3%, атмосферное давление от 300 гПа до 1100 гПа с абсолютной точностью ± 1 гПа, и температуру от -40C до 85C с точностью ±1,0C.

Измерения давления настолько точны, что вы даже можете использовать его в качестве альтиметра (высотомера) с точностью ±1 метр.

Рисунок 2 Диапазоны измерений датчика BME280 Рисунок 2 Диапазоны измерений датчика BME280

Требования к питанию

Модуль поставляется с встроенным стабилизатором напряжения 3,3 В LM6206 и преобразователем уровней напряжения на шине I2C, поэтому вы можете без проблем использовать его с микроконтроллером, работающим с логическими уровнями 3,3 В или 5 В, таким как Arduino.

Рисунок 3 Модуль BME280. Преобразователь уровней на шине I2C и стабилизатор напряжения 3,3 В Рисунок 3 Модуль BME280. Преобразователь уровней на шине I2C и стабилизатор напряжения 3,3 В

Во время измерений BME280 потребляет менее 1 мА и только 5 мкА в режиме ожидания. Такое низкое энергопотребление позволяет использовать его в устройствах с батарейным питанием, таких как телефоны, модули GPS или часы.

Интерфейс I2C

Модуль использует простой двухпроводной интерфейс I2C, который можно легко подключить к любому микроконтроллеру.

Адрес I2C по умолчанию для модуля BME280 равен 0x76HEX и может быть легко изменен на 0x77HEX с помощью перемычки из припоя, устанавливаемой между площадками рядом с микросхемой.

Рисунок 4 Модуль BME280. Площадки для напайки перемычки для выбора адреса I2C Рисунок 4 Модуль BME280. Площадки для напайки перемычки для выбора адреса I2C

Процедура изменения адреса I2C

  • Найдите перемычку из припоя рядом с чипом. По умолчанию средняя медная площадка подключена к левой площадке.
  • Перережьте ножом соединение между средней и левой медными площадками.
  • Добавьте каплю припоя между средней и правой медными площадками, чтобы установить между ними электрическое соединение. Это сменит адрес I2C на 0x77HEX.

Распиновка датчика BME280

Для связи с внешним миром у модуля BME280 есть только 4 контакта. Их назначение показано на рисунке ниже.

Рисунок 6 Распиновка BME280, датчика атмосферного давления, температуры и влажности Рисунок 6 Распиновка BME280, датчика атмосферного давления, температуры и влажности

VIN вывод для подключения источника питания для модуля, напряжение питания может находиться в диапазоне от 3,3 до 5 В.

GND подключается к выводу земля на Arduino

SCL это вывод синхронизации для интерфейса I2C.

SDA вывод данных для интерфейса I2C.

Подключение модуля BME280 к Arduino UNO

Давайте подключим модуль BME280 к Arduino.

Подключение довольно простое. Начните с соединения выводов GND на модуле и на плате Arduino, затем подключите вывод VIN к выводу 5V на Arduino.

Теперь остаются выводы, которые используются для связи I2C. Обратите внимание, что у разных плат Arduino для I2C используются разные выводы. На платах Arduino с разводкой R3 SDA (линия передачи данных) и SCL (линия синхронизации) находятся на разъеме выводов рядом с выводом AREF. Они также известны как A5 (SCL) и A4 (SDA).

Если у вас Arduino Mega, выводы будут отличаться! Вам необходимо использовать цифровые выводы 21 (SCL) и 20 (SDA). В таблице ниже приведены выводы, использующиеся для I2C на разных платах Arduino.

Выводы шины I2C на разных платах Arduino

SCL SDA
Arduino Uno A5 A4
Arduino Nano A5 A4
Arduino Mega 21 20
Leonardo/Micro 3 2

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

Рисунок 7 Схема подключения модуля BME280 к Arduino Рисунок 7 Схема подключения модуля BME280 к Arduino

Установка необходимых библиотек

Для связи с модулем BME280 необходимо выполнить кучу работы. К счастью, чтобы скрыть все сложности, была написана библиотека Adafruit BME280, чтобы мы могли выполнять простые команды для считывания данных о температуре, относительной влажности и атмосферном давлении.

Чтобы установить библиотеку, перейдите в раздел Скетч→ Подключить библиотеку → Управлять библиотеками. Подождите, пока менеджер библиотек загрузит индекс библиотек и обновит список установленных библиотек.

Рисунок 8 Установка библиотеки Arduino – выбор управления библиотеками в Arduino IDE Рисунок 8 Установка библиотеки Arduino выбор управления библиотеками в Arduino IDE

Отфильтруйте результаты поиска, набрав bme280. Там должно быть пара записей. Ищите библиотеку Adafruit BME280 by Adafruit. Нажмите на эту запись, а затем выберите Установка.

Рисунок 9 Установка библиотеки BME280 в Arduino IDE Рисунок 9 Установка библиотеки BME280 в Arduino IDE

Библиотека датчиков BME280 использует Adafruit Sensor support backend, поэтому при установке Arduino IDE предложит установить и эти библиотеки. Соглашайтесь (Install all).

Рисунок 10 Установка Adafruit Unified Sensor Рисунок 10 Установка Adafruit Unified Sensor

Код Arduino, считывание показаний температуры, относительной влажности воздуха и атмосферного давления

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

Вот как выглядит вывод в мониторе последовательного порта.

Рисунок 11 Вывод показаний датчика BME280. Температура, относительная влажность, атмосферное давление и высота над уровнем моря Рисунок 11 Вывод показаний датчика BME280. Температура, относительная влажность, атмосферное давление и высота над уровнем моря

Объяснение кода

Скетч начинается с подключения четырех библиотек, а именно, Wire.h, SPI.h, Adafruit_Sensor.h и Adafruit_BME280.h.

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

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

Функция begin(I2C_ADDR) в качестве параметра принимает адрес модуля на шине I2C. Если ваш модуль имеет другой адрес I2C или вы изменили его, вам нужно указать его правильно. Эта функция инициализирует интерфейс I2C с заданным адресом и проверяет правильность идентификатора чипа. Затем она программно перезапускает микросхему и ждет окончания калибровки датчика после запуска.

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

  • функция readTemperature() возвращает от датчика температуру;
  • функция readPressure() возвращает от датчика атмосферное давление;
  • функция readAltitude(SEALEVELPRESSURE_HPA) вычисляет высоту (в метрах) исходя из текущего атмосферного давления (в гПа) и давления на уровне моря (в гПа);
  • функция readHumidity() возвращает от датчика относительную влажность воздуха.

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.

У меня такого не наблюдается. Показания на 3 и 5 Вольтах не различаются. А вот сам датчик врёт на +2 градуса по отношению к датчику ds18b20 и лабораторному ртутному термометру.

Температура и влажность меняются. При повышении напряжения растет температура и падает влажность.
Давление не скачет.


Источник: radioprog.ru