Датчик BME280 фирмы BOSCH совмещает в себе сразу три устройства:
- барометр, измеряющий атмосферное давление;
- гигрометр — он же датчик влажности;
- термометр — датчик температуры.
Барометры мы уже разбирали ранее на примере BMP180 и BMP280. Они тоже были с термометром, так как температура в этих датчиках используется для корректировки значений давления.
В робототехнике барометр часто используется для определения высоты полёта беспилотных летательных аппаратов, тех же квадрокоптеров и планеров. А совмещенный с датчиком влажности, BME280 идеально подходит для создания экспериментальной погодной станции или системы контроля климата в помещении. С помощью него можно наблюдать за изменением атмосферного давления и влажности в течение длительного времени.
На этом уроке мы будем работать с модулем BMP280 ROC, разработанной в лаборатории RobotClass.
Характеристики модуля:
- напряжение питания: от 3,3 до 5 В;
- диапазон измерения давления: от 300 гПа до 1100 гПа (от 9000 м до -500 м);
- точность измерения давления: 1 гПа;
- диапазон измерения влажности: от 0 до 100%;
- точность измерения влажности: 3%;
- частота измерения влажности: 1 Гц;
- диапазон измерения температуры: от 0 до 65;
- точность измерения температуры: 0,5.
Новое поколение датчиков BOSCH обладают низким энергопотреблением. Например, для сбора показаний влажности и температуры раз в секунду потребуется всего 1,8 мкА. Если нужно анализировать еще и давление, суммарный ток составит 3,6 мкА. В режиме сна датчик потребляет и вовсе 0,1 мкА.
Такая энергоэффективность позволяет использовать датчик в мобильных устройствах умного дома, которые годами питаются от одного литиевого элемента питания, например, CR2450.
На плате есть семь контактов для подключения:
- VIN — питание, от 4,5 до 5,5 В;
- 3V3 — питание 3,3 В;
- G — земля GND;
- MO/SDA — контакт MOSI для SPI, либо контакт SDA для шины I2C;
- SCK/SCL — контакт SCK для SPI, либо контакт SCL для шины I2C;
- MI/AD — контакт MISO для SPI, либо контакт для выбора адреса шины I2C;
- CS — контакт Chip Select для шины SPI.
Список необходимых компонентов
Для выполнения всех экспериментов в данном уроке, кроме самого датчика BME280 от RobotClass, потребуются: Ардуино-совместимый контроллер и немного проводов вилка-розетка. Необходимые компоненты можно добавить в корзину прямо здесь, и затем оформить заказ в нашем интернет-магазине.
Подключение
Для подключения к Ардуино можно использовать как интерфейс I2C, так и SPI. Также плата датчика ROC поддерживает два рабочих напряжения: 5В и 3,3В, а значит его можно подключать и к Ардуино и к низковольтным (в плане логики) платам типа ESP или STM32. Ниже представлены два варианта схем подключения.
Схема для I2C
Arduino Uno | Gnd | 5V | A4 | A5 |
BME280 ROC | Gnd | VIN | SDA | SCL |
Схема для SPI
Arduino Uno | Gnd | 5V | 10 | 11 | 12 | 13 |
BME280 ROC | Gnd | VIN | CS | MO | MI | CK |
Программа
Для теста напишем программу, которая будет выводить значение атмосферного давления, влажности и температуру датчика в последовательный порт. Используем библиотеку Adafruit_BME280, которую можно найти в репозитории Arduino IDE. Для начала вариант с I2C интерфейсом.
#include <Adafruit_BME280.h>
Adafruit_BME280 bme;
void setup() {
Serial.begin(9600);
bme.begin();
}
void loop() {
// вывод температуры в градусах Цельсия
Serial.print("t = ");
Serial.print(bme.readTemperature());
Serial.println(" *C");
// вывод атмосферного давления в гектопаскалях hPa
Serial.print("p = ");
Serial.print(bme.readPressure() / 100.0F);
Serial.println(" hPa");
// вывод высоты над уровнем моря в метрах
// 1013.25 - давление на уровне моря
Serial.print("alt = ");
Serial.print(bme.readAltitude(1013.25));
Serial.println(" m");
// вывод влажности в процентах
Serial.print("h = ");
Serial.print(bme.readHumidity());
Serial.println(" %");
Serial.println();
delay(1000);
}
Загружаем программу на Ардуино и открываем монитор последовательного порта. Результат:
Полезные ссылки
Исходные коды библиотеки Adafruit_BME280_Library
Принципиальная схема платы BME280 от RobotClass