Введение
В эпоху растущего осознания важности здоровья и экологической устойчивости, мониторинг качества воздуха и окружающей среды становится все более неотъемлемой частью нашей повседневной жизни. Для эффективного и точного измерения различных параметров, таких как температура, влажность, давление и состав воздуха, необходимы современные и многофункциональные датчики. И одним из наиболее передовых и разносторонних среди них является BME680.
BME680 - это интегрированный цифровой датчик, разработанный компанией Bosch Sensortec. Он объединяет в себе измерение четырех ключевых параметров окружающей среды: газового состава, температуры, влажности и атмосферного давления. Этот мощный датчик открывает перед пользователями новые возможности для отслеживания и контроля окружающей среды в реальном времени.
Одним из наиболее уникальных аспектов BME680 является его способность измерять газовый состав воздуха, включая VOC (вредные летучие органические соединения). Это позволяет использовать датчик для определения уровня загрязнения воздуха внутри помещений или на улице, а также для мониторинга качества воздуха в зданиях, автомобилях и других средах.
В этой статье мы рассмотрим подробнее возможности и преимущества BME680, а также его применение в различных областях, включая умные дома, промышленность, здравоохранение и экологический мониторинг. Мы также рассмотрим некоторые практические примеры использования этого датчика и его влияние на нашу повседневную жизнь.
Технические характеристики
Основные технические характеристики датчика представлены в таблице ниже:
В магазинах датчик встречается как отдельно, так и виде модуля для подключения к микроконтроллеру со всей необходимой обвязкой. На картинке ниже представлено большинство известных мне вариантов исполнения данного устройства:
Но несмотря на все многообразие форм-факторов, по сути все эти модули имеют одинаковый функционал и ваш выбор будет зависеть только от способа подключения модуля к микроконтроллеру и его габаритных размеров.
Распиновка и схема подключения
Независимо от варианта исполнения, каждый модуль BME680 имеет следующие контакты для подключения:
Если по каким либо причинам использование готового модуля вам не подходит, то на картинке ниже приведена схема расположения контактов на чипе BME680:
При самостоятельной распайке чипа на плату, необходима дополнительная обвязка. Ее схема приведена ниже:
Измеряемые параметры
BME680 — это цифровой датчик 4 в 1, который измеряет:
- Температуру
- Влажность
- Барометрическое давление
- Газ: летучие органические соединения (ЛОС), включающие в себя углеводороды, альдегиды, спирты, кетоны, терпеноиды и др.
Датчик температуры позволяет измерять температуру во всем рабочем диапазоне –40 …+85 °С. Абсолютная точность в диапазоне 0 …+65 °С составляет ±1 °С. Несмотря на 20-битное разрешение встроенного АЦП, на выходе пользователи получают данные с разрешением 0, 01 °С, что связано с уровнем собственных шумов 0,005 °С.
Датчик давления имеет рабочий диапазон 300…1100 кПа с разрешением 0,18 Па. В диапазоне температур 0 …+65 °С сенсор характеризуется абсолютной погрешностью ± 0,6 кПа.
Максимальная частота опроса датчика достигает 182 Гц. При частоте опроса 1 Гц типовое потребление составляет 3,1 мкА.
Не стоит забывать о таком негативном эффекте, как старение, которое для данного сенсора оказывается равным примерно ± 1 кПа в год.
Датчик влажности работает в диапазоне 0…100% с абсолютной точностью ± 3% (температура 0 …+65 °С) и разрешением 0,008%. Старение для датчика составляет 0,5% в год.
Для измерения качества воздуха BME680 имеет датчик на основе оксида металла, который определяет содержание ЛОС путем адсорбции молекул кислорода на его чувствительном слое. Датчик реагирует на большинство летучих веществ, загрязняющих воздух в помещении (за исключением CO2). Датчик способен измерять количество загрязняющих веществ ЛОС в окружающем воздухе, таких как выделение газов из краски, мебели или отходов, высокие уровни ЛОС в результате приготовления пищи, потребления пищи и выдыхаемого воздуха или потоотделения.
В качестве необработанного сигнала датчик выдает значения сопротивления, которые изменяются в зависимости от изменения концентрации ЛОС. Чем выше концентрация восстанавливающих ЛОС, тем ниже сопротивление, и наоборот. Поскольку на этот необработанный сигнал влияют параметры, отличные от концентрации ЛОС (например, уровень влажности), необработанные значения преобразуются интеллектуальными алгоритмами в рамках BSEC (Экологический кластер Bosch Sensortec) в индекс качества воздуха в помещении (IAQ).
Шкала IAQ находится в диапазоне от 0 (чистый воздух) до 500 (сильно загрязненный воздух). Во время работы алгоритмы автоматически калибруются и адаптируются к типичным условиям, в которых используется датчик. В процессе калибровки учитывается недавняя история измерений, чтобы гарантировать, что IAQ, равный 25, соответствует “обычно хорошему” воздуху, а IAQ, равный 250, указывает на “обычно загрязненный” воздух.
Недостатком встроенного газоанализатора является необходимость дополнительного разогрева чувствительного элемента с помощью специального нагревателя, температура которого достигает нескольких сотен градусов. В частности в BME680 она составляет около 320 °С.
К сожалению, использование нагревателя приводит к тому, что датчик ЛОС оказывается самым «прожорливым» среди встроенных сенсоров. Пиковый ток потребления нагревателя достигает 18 мА, а типовой 12 мА. Благодаря наличию режимов пониженного потребления удается значительно сэкономить ресурс батареи. Среднее потребление датчика в режиме «Ultra Low Power» составляет 90 мкА, 0,9 мА в режиме «Low Power» и 12 мА при периодическом опросе. Между собой режимы главным образом отличаются частотой опроса и, соответственно, временем отклика.
Пример использования датчика в Arduino IDE
Для работы с датчиком используется библиотека BME280, разработанная Adafruit. Она позволяет измерять температуру, влажность, давление, высоту, точку росы и газ. Библиотека очень простая, и, используя всего несколько строк кода, вы можете подключить BME680 к любому микрокотроллеру. Для компиляции библиотеки требуется другая библиотека под названием Adafruit Unified Sensor. Вы можете загрузить библиотеку по следующей ссылке Adafruit Unified Sensor.
После добавления вышеуказанной библиотеки в Arduino IDE, вы можете добавить библиотеку Arduino BME680 в Arduino IDE, скачав её по следующей ссылке Adafruit BME680 Library.
После установки вышеупомянутых библиотек, и подключения модуля по I2c или SPI интерфейсу загрузите в вашу плату микроконтроллера следующий скетч:
#include <Wire.h> //подключаем библиотеку Wire при подключении по i2c
#include <SPI.h> //подключаем библиотеку SPI при соединении по SPI
#include <Adafruit_Sensor.h>//библиотека обработки показаний датчика
#include <Adafruit_BME680.h>//библиотека драйвер датчика BME680
//Пины SPI Arduino
#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10
#define SEALEVELPRESSURE_HPA (1013.25) //атмосферное давление на уровне море. Нужно для корректного определения высоты
Adafruit_BME680 bme; // Работаем по I2C интерфейсу. Для Arduino это пины A4 и A5
//Adafruit_BME680 bme(BME_CS); // Раскомментируйте если хотите работать через SPI по стандартным пинам
//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); //Программно определить пины SPI
void setup() {
Serial.begin(9600); //Запускаем монитор серийного порта
while (!Serial);
Serial.println(F("BME680 test"));
//Пробуем запустить BME пока не получится
if (!bme.begin()) {
Serial.println("Could not find a valid BME680 sensor, check wiring!");
while (1);
}
// Количество измерений каждого параметра для вывода среднего значения. Чем больше тем выше точность, но ниже скорость
bme.setTemperatureOversampling(BME680_OS_8X); //Температура 8х
bme.setHumidityOversampling(BME680_OS_2X); //Влажность 2х
bme.setPressureOversampling(BME680_OS_4X); //Атмосферное давление
bme.setIIRFilterSize(BME680_FILTER_SIZE_3); //фильтрация значений газоанализатора 3х
bme.setGasHeater(320, 150); // Температура нагрева газоанализатора 320*C на 150 ms
}
void loop() {
if (! bme.performReading()) { //чтение всех показаний датчика
Serial.println("Failed to perform reading :(");//ошибка
return;
}
//Выводим показания в серийный порт
Serial.print("Temperature = ");
Serial.print(bme.temperature);//Температура
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bme.pressure / 100.0);//Атмосферное давление
Serial.println(" hPa");
Serial.print("Pressure mm = ");
Serial.print(bme.pressure / 133.3);//Атмосферное давление в мм ртутного столба
Serial.println(" mm");
Serial.print("Humidity = ");
Serial.print(bme.humidity);//Влажность воздуха
Serial.println(" %");
Serial.print("Gas = ");
Serial.print(bme.gas_resistance / 1000.0); //Индекс качества воздуха
Serial.println(" KOhms");
Serial.print("Approx. Altitude = ");
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); //вычисляем высоту над уровнем моря на основе атмосферного давления
Serial.println(" m");
Serial.println();
delay(2000);//Пауза 2 секунды
}
Вышенаписанный код я постарался основательно разбавить комментариями, так что, думаю, в дополнительных пояснениях он не нуждается.
Заключение
В заключении можно сказать, что BME680 - мощный и универсальный датчик, позволяющий нам контролировать качество воздуха и окружающей среды. Он обладает уникальной способностью измерять газовый состав, включая вредные соединения. BME680 находит широкое применение в умных домах, промышленности, здравоохранении и экологическом мониторинге. Его точность и функциональность делают его незаменимым инструментом для повышения качества жизни и бережного отношения к окружающей среде. BME680 представляет собой важный прогресс в области датчиков и имеет потенциал стать ключевым элементом в мониторинге окружающей среды для создания более устойчивого будущего.
Материал также доступен на моем сайте: https://projectalt.ru