Взаимодействие BME280, датчика температуры, влажности и давления, с Arduino
Содержание
- BME280, датчик температуры, относительной влажности и атмосферного давления
- Требования к питанию
- Интерфейс I2C
- Распиновка датчика BME280
- Подключение модуля BME280 к Arduino UNO
- Установка необходимых библиотек
- Код Arduino, считывание показаний температуры, относительной влажности воздуха и атмосферного давления
Добавьте в свой следующий проект на Arduino возможность отслеживать состояние окружающей среды с помощью датчика BME280. Эти датчики довольно просты в использовании, предварительно откалиброваны и не требуют дополнительных компонентов. Поэтому вы можете начать измерение относительной влажности, температуры, атмосферного давления и приблизительного значения высоты в самые кратчайшие сроки.
Взаимодействие BME280, датчика температуры, влажности и давления, с Arduino
BME280, датчик температуры, относительной влажности и атмосферного давления
В основе модуля находится цифровой датчик температуры, влажности и давления нового поколения производства Bosch BME280. Он является преемником таких датчиков, как BMP180, BMP085 или BMP183.
Рисунок 1 Чип BME280 на модуле
Этот прецизионный датчик может измерять относительную влажность воздуха от 0 до 100% с точностью ±3%, атмосферное давление от 300 гПа до 1100 гПа с абсолютной точностью ± 1 гПа, и температуру от -40C до 85C с точностью ±1,0C.
Измерения давления настолько точны, что вы даже можете использовать его в качестве альтиметра (высотомера) с точностью ±1 метр.
Рисунок 2 Диапазоны измерений датчика BME280
Требования к питанию
Модуль поставляется с встроенным стабилизатором напряжения 3,3 В LM6206 и преобразователем уровней напряжения на шине I2C, поэтому вы можете без проблем использовать его с микроконтроллером, работающим с логическими уровнями 3,3 В или 5 В, таким как Arduino.
Рисунок 3 Модуль BME280. Преобразователь уровней на шине I2C и стабилизатор напряжения 3,3 В
Во время измерений BME280 потребляет менее 1 мА и только 5 мкА в режиме ожидания. Такое низкое энергопотребление позволяет использовать его в устройствах с батарейным питанием, таких как телефоны, модули GPS или часы.
Интерфейс I2C
Модуль использует простой двухпроводной интерфейс I2C, который можно легко подключить к любому микроконтроллеру.
Адрес I2C по умолчанию для модуля BME280 равен 0x76HEX и может быть легко изменен на 0x77HEX с помощью перемычки из припоя, устанавливаемой между площадками рядом с микросхемой.
Рисунок 4 Модуль BME280. Площадки для напайки перемычки для выбора адреса I2C
Процедура изменения адреса I2C
- Найдите перемычку из припоя рядом с чипом. По умолчанию средняя медная площадка подключена к левой площадке.
- Перережьте ножом соединение между средней и левой медными площадками.
- Добавьте каплю припоя между средней и правой медными площадками, чтобы установить между ними электрическое соединение. Это сменит адрес I2C на 0x77HEX.
Распиновка датчика BME280
Для связи с внешним миром у модуля BME280 есть только 4 контакта. Их назначение показано на рисунке ниже.
Рисунок 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.
SCL | SDA | |
---|---|---|
Arduino Uno | A5 | A4 |
Arduino Nano | A5 | A4 |
Arduino Mega | 21 | 20 |
Leonardo/Micro | 3 | 2 |
Следующая диаграмма показывает, как всё подключить.
Рисунок 7 Схема подключения модуля BME280 к Arduino
Установка необходимых библиотек
Для связи с модулем BME280 необходимо выполнить кучу работы. К счастью, чтобы скрыть все сложности, была написана библиотека Adafruit BME280, чтобы мы могли выполнять простые команды для считывания данных о температуре, относительной влажности и атмосферном давлении.
Чтобы установить библиотеку, перейдите в раздел Скетч→ Подключить библиотеку → Управлять библиотеками. Подождите, пока менеджер библиотек загрузит индекс библиотек и обновит список установленных библиотек.
Рисунок 8 Установка библиотеки Arduino выбор управления библиотеками в Arduino IDE
Отфильтруйте результаты поиска, набрав bme280. Там должно быть пара записей. Ищите библиотеку Adafruit BME280 by Adafruit. Нажмите на эту запись, а затем выберите Установка.
Рисунок 9 Установка библиотеки BME280 в Arduino IDE
Библиотека датчиков BME280 использует Adafruit Sensor support backend, поэтому при установке Arduino IDE предложит установить и эти библиотеки. Соглашайтесь (Install all).
Рисунок 10 Установка Adafruit Unified Sensor
Код Arduino, считывание показаний температуры, относительной влажности воздуха и атмосферного давления
Следующий скетч даст вам полное представление о том, как считывать показания температуры, относительной влажности и барометрического давления с модуля 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 и лабораторному ртутному термометру.
Температура и влажность меняются. При повышении напряжения растет температура и падает влажность.
Давление не скачет.
Источник: