Добрый день, уважаемый читатель! Продолжаем цикл статей о сенсорах. Сегодня на очереди семейство довольно известных и популярных сенсоров от Bosch Sensortec.
В настоящий момент самые популярные сенсоры от Bosch Sensortec представлены в таблице ниже:
На данный момент существует уже и третья серия, но лично я её не имею и не тестировал, поэтому ничего конкретного сказать не могу. Напишу про те, с чем я работал. Прежде чем перейти к обсуждению конкретных сенсоров, давайте рассмотрим их общие особенности.
Особенности сенсоров от Bosch
Сенсоры данного производителя имеет довольно интересные особенности, отличающие его от других производителей.
Если говорить строго, сенсоры от Bosch - это не про температуру и влажность. Это про давление. В первую очередь эти сенсоры предназначены для изменения давления воздуха, и, как следствие, высоты над уровнем моря. И только во вторую очередь - всё остальное. Сенсор температуры нужен самому датчику для внутренних расчётов (давление зависит в том числе и от температуры воздуха), поэтому он так же присутствует во всех моделях сенсоров от Bosch. Ну а сенсоры для изменения относительной влажности воздуха и IAQ добавили "сбоку-припеку" постольку-поскольку они очень популярны в настоящее время.
Во-вторых, данные с датчика приходят “в сыром виде” (RAW), то есть ровно так, как были измерены и оцифрованы. Никаких внутренних перерасчётов в удобный пользователю формат внутри сенсора не производится. Пересчёт и корректировка измеренных значений по данным заводской калибровки должна производится на стороне микроконтроллера по специальным формулам. Для этого предварительно нужно “скачать” с датчика калибровочные коэффициенты. Сделано это, видимо, для снижения нагрузки на процессор датчика, а следовательно и снижение потребления энергии. Но не спешите паниковать – в библиотеках для Arduino уже встроены все необходимые функции, либо можно воспользоваться официальными API от Bosch.
В-третьих в этих сенсорах есть встроенные функции для повышения точности изменения:
- Oversampling - когда для выдачи результатов требуется от 1 до 16 предыдущих изменений (по сути это фильтр "по среднему значению")
- Медианный фильтр, с помощью которого можно “гасить” резкие выпады значений, которые часто могут быть ошибочными.
Если вы захотите написать свой драйвер для сенсоров, то вам совсем не обязательно с головой нырять во все тонкости обмена данными с датчиком - вы всегда можете использовать готовыми API.
Питание и интерфейсы подключения
Собственно сам датчик очень небольшого размера. В устройствах на Arduino почти всегда используется датчики, уже припаянные на платы (шилды), так их гораздо проще использовать.
На некоторых платах дополнительно установлен стабилизатор 3.3 В для возможности подключения датчика к Arduino, которые имеют напряжение питания 5.0 В. Если же Вы планируете использовать данный датчик с ESP8266 или ESP32, то Вам следует использовать версию без стабилизатора. Интерфейс SPI доступен только на плате 3.3В. На плате также распаяны резисторы подтяжки линий SDA и SCL. Если Вы хотите использовать на шине I2C несколько датчиков одновременно (даже разных производителей), то эти резисторы можно выпаять. И чем больше датчиков Вы будете подключать, тем желательнее это сделать. Как это сделать, наглядно это продемонстрировано в статье: обзор и подключение к Arduino.
Почти все современные сенсоры Bosch имеют два интерфейса: SPI и I2C. Но SPI доступен только на трехвольтовых платах. Адрес на шине I2C: 0x76 или 0x77 (изменить можно с помощью перемычки на некоторых шилдах).
При измерении давления всегда берите во внимание высоту установки сенсора.
Я поначалу долго гадал, почему показания сенсоров на даче сильно отличаются от показаний городской метеостанции Гидрометцентра и датчиков в городе. Подозревал, что сенсоры либо поддельные, либо не калиброванные.
Потом понял - разница в высоте относительно уровня моря. С высотой атмосферное давление уменьшается, поскольку оно как раз собственно и создается самим воздухом.
График изменения давления не линеен, но для небольших высот можно приблизительно считать, что каждые 12 м подъёма уменьшают атмосферное давление на 1 мм рт. ст. без учета температуры. То есть на 1 метр высоты разница составит около 0,083333333 мм рт. ст.
Теперь открываем карту высот, сравниваем и пересчитываем. Оказывается, что сенсоры очень даже точные. Но как только вы подняли устройство с первого этажа на пятый, и всё - показания заметно изменились. На этом же принципе основано измерение высоты прибора.
Поэтому не стоит доверять показаниям метеостанций, установленных на верхних этажах высотных зданий. Весьма наглядно это можно увидеть на карте Народного мониторинга.
BMP180
BMP180 – дешёвый сенсор от Bosch Sensortec. Этот датчик позволяет измерить только атмосферное давление и температуру окружающей среды. Используют данный датчик для определения высоты (чем выше, тем меньше давление), а так же в самодельных метеостанциях. Собственно датчик (металлический прямоугольный модуль с отверстием) включает в себя: пьезо-резистивный сенсор для определения атмосферного давления, термодатчик для определения температуры, АЦП (аналого-цифровой преобразователь), EEPROM (энергонезависимая электрически стираемая перепрограммируемая память), RAM (энергозависимая память, другими словами ОЗУ), микроконтроллер. Не допускайте попадания на датчик влаги и прямых солнечных лучей.
Производитель: Bosch Sensortec
Интерфейс: I2C, адрес на шине: 0x77
Напряжение питания: без стабилизатора от +1.8 В до 3.6 В, со стабилизатором от +3.3 до +5.5 В
Потребляемый ток: от ~0.1 µA в режиме ожидания до 32 µA в режиме измерения, в пике может достигать 1 mA
Диапазон измерения температуры: от -40 до +85 °C
Шаг измерения температуры (разрешение): 0.1°C
Погрешность измерения температуры (точность):
– при 25°C: ±0.5°C (max ±1.5°C)
– от 0 до +65°C: ±1.0°C (max ±2.0°C)
Возможность измерения влажности: отсутствует
Диапазон измерения давления: от 300 до 1100 hPa (+9000…-500 метров относительно уровня моря)
Шаг измерения давления (разрешение): 0.01 hPa
Погрешность измерения давления (точность):
– от 0 до +65°C: ±1.0 hPa (max -4.0 hPa/+2.0 hPa)
– от -20 до 0°C: ±1.0 hPa (max -6.0 hPa/+4.5 hPa)
Библиотека для Arduino: BMP180 Breakout Arduino Library
Источники информации: Datasheet EN, Datasheet RU, Обзор и подключение к Arduino
BMP180 без стабилизатора лично я не встречал, хотя они и могут существовать в природе.
BMP280
Модуль BMP280 был разработан фирмой Bosch Sensortec как более технологичная модель своего предшественника BMP180. Датчик представляет собой высокоточный цифровой измеритель атмосферного давления и температуры окружающей среды. Его малые размеры, низкое энергопотребление и высокая измерительная способность позволили завоевать популярность среди множества разработчиков Arduino-проектов. Данная модификация, в отличие от своего младшего брата, предоставляет пользователю 3 режима работы:
- SLEEP – режим максимально пониженного энергопотребления;
- NORMAL – в данном режиме модуль просыпается с определённой периодичностью, выполняет необходимые измерения и снова засыпает. Частота измерений задаётся программным путём, а результат считывается при необходимости;
- FORCED – этот режим позволяет будить модуль подачей внешнего управляющего сигнала. После выполнения измерений, модуль автоматически переходит в режим пониженного энергопотребления.
Производитель: Bosch Sensortec
Интерфейс: SPI или I2C, адрес на шине: 0x76 или 0x77 (изменить можно с помощью перемычки на плате)
Напряжение питания: без стабилизатора от +1.71 В до 3.6 В, со стабилизатором от +3.3 до +5.5 В
Потребляемый ток: от ~0.1 µA в режиме ожидания до 720 µA в режиме измерения, в пике может достигать 1.12 mA
Диапазон измерения температуры: от -40 до +85 °C
Шаг измерения температуры (разрешение): 0.01°C
Погрешность измерения температуры (точность):
– при 25°C: ±0.5°C
– от 0 до +65°C: ±1.0°C
Возможность измерения влажности: отсутствует
Диапазон измерения давления: от 300 до 1100 hPa (+9000…-500 метров относительно уровня моря)
Шаг измерения давления (разрешение): 0.0016 hPa
Погрешность измерения давления (точность):
– от 0 до +65°C: ±1.0 hPa
– от -20 до 0°C: ±1.7 hPa
Особенности: автономная работа
Библиотека для Arduino: Adafruit BMP280 Library
Библиотека для ESP32 + ESP-IDF: kotyara12/reBMP280
Источники информации: Datasheet EN, Обзор и подключение к Arduino
По некоторым отзывам, при частом измерении возможен небольшой внутренний нагрев сенсора на 1-2 градуса. Лично я пока подтвердить это не могу. Датчик имеет режим периодического автоматического изменения с заданным интервалом (в этом случае по запросу MCU сразу же выдаются последние измеренные данные), при этом саморазогрева я не заметил. Датчик поддерживает встроенную фильтрацию и усреднение измеренных данных (x0, x2, x4…x16).
Не допускайте попадания на датчик влаги и прямых солнечных лучей.
BME280
Сенсор BME280 предназначен для измерения атмосферного давления, температуры и влажности. Это очередной датчик давления фирмы Bosch Sensortec для измерения атмосферного давления и температуры. По сравнению с первыми датчиками серии (BMP085 и BMP180) он имеет лучшие характеристики и меньшие размеры. Отличие от датчика BMP280 – наличие гигрометра, что позволяет измерять относительную влажность воздуха и создать на его основе маленькую метеостанцию. Увы, но и стоит он заметно дороже BMP280. Этот датчик (так же как и BMP280) имеет 3 режима работы:
- SLEEP – режим максимально пониженного энергопотребления, измерение не производится;
- NORMAL – в данном режиме модуль просыпается с определённой периодичностью, выполняет необходимые измерения и снова засыпает. Частота измерений задаётся программным путём, а результат считывается при необходимости;
- FORCED – этот режим позволяет будить модуль подачей внешнего управляющего сигнала. После выполнения измерений, модуль автоматически переходит в режим пониженного энергопотребления.
Производитель: Bosch Sensortec
Интерфейс: SPI или I2C, адрес на шине: 0x76 или 0x77 (изменить можно с помощью перемычки на плате)
Напряжение питания: без стабилизатора от +1.71 В до 3.6 В, со стабилизатором от +3.3 до +5.5 В
Потребляемый ток: от ~0.1 µA в режиме ожидания до 714 µA в режиме измерения
Диапазон измерения температуры: от -40 до +85 °C
Шаг измерения температуры (разрешение): 0.01°C
Погрешность измерения температуры (точность):
– при 25°C: ±0.5°C
– от 0 до +65°C: ±1.0°C
– от -20 до +0°C: ±1.25°C
– от -40 до -20°C: ±1.5°C
Диапазон измерения влажности: от 0 до 100 %RH
Шаг измерения влажности (разрешение): 0.008 %RH
Погрешность измерения влажности (точность): ±3.0 %RH
Рабочий диапазон измерения влажности: смотри график ниже
Диапазон измерения давления: от 300 до 1100 hPa (+9000…-500 метров относительно уровня моря)
Шаг измерения давления (разрешение): 0.0016 hPa
Погрешность измерения давления (точность):
– от 0 до +65°C: ±1.0 hPa
– от -20 до 0°C: ±1.7 hPa
Особенности: автономная работа
Библиотека для Arduino: Adafruit BME280 Library
Библиотека для ESP32 + ESP-IDF: kotyara12/reBME280
Источники информации: Datasheet EN, Обзор и подключение к Arduino
Этот датчик стабильно проработал около 3 лет подряд в уличной метеостанции, после чего вышел из строя. Длина провода для шины I2C при этом составляла около 3 метров. В данном конкретном случае использован стандартный 4-х жильный плоский кабель, который обычно применяется для подключения стационарных телефонных аппаратов к телефонной сети. По моим наблюдениям за несколькими BME280 эти датчики немного завышают показания температуры и немного занижают показания влажности (по сравнению с Si7021 / SHT31). Но на улице гигрометр может замерзать и показывать максимальную влажность. Давление в целом соответствует данным нашей городской метеостанции, так что ему вполне можно доверять.
Некоторые ушлые продаваны на AliExpress пытаются продать более дешевые BMP280 по цене BME280. Распознать их достаточно просто по форме корпуса датчика – у BMP280 она более вытянутая (прямоугольная), а у BME280 – квадратная. Наглядно это продемонстрировано на рисунке:
Не допускайте попадания на датчик влаги и прямых солнечных лучей.
BME680
Датчик BME680 представляет собой целый набор сенсоров в едином корпусе. Микросхема BME680 предназначена для измерения параметров окружающей среды. Она позволяет определять не только такие привычные характеристики как давление, температура и влажность, но и оценивать качество воздуха. Если учесть, что данная микросхема отличается весьма компактными габаритами и скромным потреблением, то она может стать идеальным выбором для таких приложений как умные часы, фитнес-браслеты, шагомеры, смартфоны, навигаторы и многих других.
Производитель: Bosch Sensortec
Интерфейс: SPI или I2C, адрес на шине: 0x76 или 0x77
Напряжение питания: без стабилизатора от +1.71 В до 3.6 В, со стабилизатором от +3.3 до +5.5 В
Потребляемый ток: от ~0.15 µA в режиме ожидания до 714 µA в режиме измерения
Диапазон измерения температуры: от -40 до +85 °C
Шаг измерения температуры (разрешение): 0.01°C
Погрешность измерения температуры (точность):
– при 25°C: ±0.5°C
– от 0 до +65°C: ±1.0°C
Диапазон измерения влажности: от 0 до 100 %RH
Шаг измерения влажности (разрешение): 0.008 %RH
Погрешность измерения влажности (точность): ±3.0 %RH
Рабочий диапазон измерения влажности: смотри график ниже
Диапазон измерения давления: от 300 до 1100 hPa (+9000…-500 метров относительно уровня моря)
Шаг измерения давления (разрешение): 0.0018 hPa
Погрешность измерения давления (точность): абсолютная ±0.6 hPa, относительная ±0.12 hPa
Особенности: сенсор качества воздуха
Библиотека для Arduino: Adafruit BME680 Library
Библиотека для ESP32 + ESP-IDF: kotyara12/reBME680
Источники информации: Datasheet EN, Обзор
Датчик качества воздуха – главная «изюминка» в рассматриваемом датчике. BME680 имеет встроенный металло-оксидный датчик (Metal Oxide Semiconductor) органических летучих соединений (ЛОС). Это датчик резистивного типа, сопротивление поверхности которого зависит от содержания в воздухе ЛОС (этанол, ацетон, изопрен, угарный газ, продукты дыхания и т.д). Недостаток таких сенсоров заключается в необходимости дополнительного разогрева чувствительного элемента с помощью специального нагревателя, температура которого достигает нескольких сотен градусов. В частности в BME680 она составляет около 320 °С. Сопротивление датчика измеряется, оцифровывается 20-битным АЦП и фильтруется. Затем датчик преобразуют исходные данные в форму, удобную для дальнейшей обработки, а конкретно в баллы качества воздуха IAQ (Indoor air quality) BME680 работает с диапазоном IAQ 0…500 с разрешением 1. По предложенной таблице можно легко принять решение о необходимости проветривания, если речь идет о системе вентиляции, или просто предупредить пользователя, если микросхема BME680 установлена в умных часах.
На самом деле с IAQ "гладко было на бумаге, да забыли про овраги". API предоставляет нам только "сырое" значение качества воздуха - сопротивление резистора, который его (качества воздуха) собственно и измеряет. Алгоритм пересчета в сопротивление Bosch не предоставляет, а требует подключения к проекту закрытых скомпилированных файлов, что не всегда возможно. В итоге пришлось искать приближенный метод расчета IAQ
Ничего сложного в нем нет, просто пересчет в % по заданному диапазону, а затем умножаем на 5 и "инвертируем".
Для корректной работы может потребоваться подбор температуры и времени подогрева сенсора качества воздуха. Кроме того, следует учитывать что сенсор качества воздуха выдает нормальные показания только спустя примерно сутки непрерывной работы.
Как вывод: если вам действительно необходимо изменение ЛОС в воздухе - купите лучше датчик CCS811, в нем микропрограмма для всех необходимых расчетов уже встроена в чип, и работать с ним проще и удобнее.
👉 Другие части данной серии:
👉 Оригинальная статья на моем сайте, в ней вы сможете найти описания и для других сенсоров
_______________
На этом пока всё, до встречи на сайте и на dzen-канале!
👍 Понравилась статья? Поддержите канал лайком или комментарием! Каналы на Дзене "живут" только за счет ваших лайков.
📌Подпишитесь на канал и вы всегда будете в курсе новых статей.
🔶 Полный архив статей вы найдете здесь
Благодарю за вашу поддержку! 🙏