Цифровые датчики влажности: SHT3x, HDC1080, HDC2080 и BME280
Цифровой датчик влажности сам измеряет, калибрует и выдаёт готовое число по I²C. Разбираем по даташитам производителей, чем различаются популярные SHT30–SHT35, HDC1080, HDC2080 и BME280, как их подключить, пересчитать коды и где поставить, чтобы они не врали.
Обновлено Редакция GAW
Внутри каждого датчика — влагочувствительный элемент (у SHT3x и HDC2080 производители прямо называют его ёмкостным), АЦП и калибровочные коэффициенты, записанные на заводе: микросхема сама превращает сигнал в готовые проценты относительной влажности. Рядом на кристалле стоит термометр: относительная влажность сильно зависит от температуры, и без неё число не имеет смысла.
Сравнение
По даташитам производителей:
| Параметр | SHT30 / SHT31 / SHT35 | HDC1080 | HDC2080 | BME280 |
|---|---|---|---|---|
| Влажность, типично | ±2 / ±2 / ±1,5 % | ±2 % | ±2 %, максимум ±3 % | ±3 % (20–80 %, 25 °C) |
| Температура, типично | ±0,2 / ±0,2 / ±0,1 °C | ±0,2 °C, до ±0,4 °C | ±0,2 °C | ±0,5 °C при 0–65 °C |
| Время отклика по влажности (63 %) | 8 с | 15 с | 8 с | 1 с |
| Дрейф | меньше 0,25 %/год | ±0,25 %/год | ±0,25 %/год | — |
| Питание | 2,15–5,5 В | 2,7–5,5 В | 1,62–3,6 В | 1,71–3,6 В |
| Адрес I²C | 0x44 или 0x45 | 0x40 | 0x40 или 0x41 | 0x76 или 0x77 |
| Нагреватель | есть, 3,6–33 мВт | есть | есть | нет |
| Ток при измерении раз в секунду | 1,7 мкА | 1,3 мкА (11 бит, влажность и температура) | 0,55 мкА | 1,8 мкА (влажность и температура) |
Погрешность зависит от влажности и температуры: по графикам Sensirion у SHT30 она ±2 % в середине диапазона и до ±4 % около 0 и 100 %, у SHT31 — ±2 % во всём диапазоне 0–100 % при 0–80 °C, у SHT35 — ±1,5 % и до ±2 % при высокой влажности. BME280 заметно быстрее остальных откликается на изменение влажности и заодно измеряет давление — подробнее о нём в статье «Датчики давления». HDC2080 умеет сам опрашивать датчик по таймеру и будить микроконтроллер прерыванием при выходе за пороги.
Подключение
Все четыре работают по I²C. Вывод выбора адреса подключают к общему проводу или к питанию: оставлять его свободным Sensirion запрещает, у HDC2080 неподключённый вывод даёт адрес 0x40. Два одинаковых датчика на одной шине разводят этим выводом; адреса всех популярных устройств — в статье об адресах I²C.
SHT3x и HDC1080 работают от 5 В, поэтому с платой Arduino на 5 В их соединяют напрямую, подтягивая шину к тому же питанию. HDC2080 и BME280 — только до 3,6 В. Подтягивающие резисторы считают как для любой шины — в калькуляторе подтяжек I²C.
Пересчёт кодов
| Датчик | Влажность, % | Температура, °C |
|---|---|---|
| SHT3x | 100 · S / 65535 | −45 + 175 · S / 65535 |
| HDC1080 | 100 · S / 65536 | 165 · S / 65536 − 40 |
S — 16-битный код из датчика. SHT3x добавляет к каждой паре байтов контрольную сумму CRC-8 с полиномом 0x31 и начальным значением 0xFF; пример из даташита — CRC(0xBEEF) = 0x92. Проверить свою реализацию можно в калькуляторе CRC, это пресет CRC-8/NRSC-5. Время измерения SHT3x зависит от выбранной повторяемости: 2,5, 4,5 или 12,5 мс типично. У HDC1080 по регистру 0xFE читается идентификатор производителя 0x5449, по 0xFF — идентификатор устройства 0x1050: так проверяют, что на шине именно этот датчик.
Размещение и условия работы
Рекомендуемый диапазон. Sensirion рекомендует 5–60 °C и 20–80 % влажности. Долгое пребывание при высокой влажности сдвигает показания — например, на +3 % после 60 часов выше 80 %; вернувшись в нормальные условия, датчик постепенно восстанавливается сам.
Нагрев. Датчик измеряет влажность воздуха при своей температуре. Если его греет стабилизатор, микроконтроллер или он сам из-за частых измерений, относительная влажность у него получится ниже, чем в комнате. Датчик выносят на край платы, подальше от тёплых компонентов, и не опрашивают чаще, чем нужно.
Загрязнения. И Sensirion, и TI предупреждают: пары растворителей, клейкие ленты, клеи и упаковочные материалы ускоряют дрейф. Датчик не заливают компаундом и не закрывают лентой — нужен свободный доступ воздуха через защитную мембрану или отверстия в корпусе.
Нагреватель. Встроенный нагреватель сгоняет конденсат и позволяет проверить, что датчик жив: при включении температура растёт, а влажность падает. Пока он работает, показания влажности недостоверны.
Другие датчики — в разделе «Датчики».
Частые вопросы
Какой датчик влажности самый точный из популярных?
Из рассмотренных — SHT35: по Sensirion ±1,5 % типично и ±0,1 °C в диапазоне 20–60 °C. SHT30, SHT31, HDC1080 и HDC2080 дают ±2 % типично, BME280 — ±3 %. Но на практике точность чаще портит не датчик, а его размещение: нагрев от платы и плохой обмен воздухом.
Какой адрес I²C у SHT31?
0x44, если вывод ADDR соединён с общим проводом, и 0x45, если с питанием. Оставлять ADDR свободным Sensirion запрещает. У HDC1080 адрес один — 0x40, у HDC2080 — 0x40 или 0x41 по выводу ADDR, у BME280 — 0x76 или 0x77.
Можно ли подключить SHT31 к Arduino на 5 В?
Да: SHT3x работает от 2,15 до 5,5 В, HDC1080 — от 2,7 до 5,5 В, поэтому их можно питать от 5 В вместе с подтяжками шины. HDC2080 и BME280 рассчитаны только до 3,6 В — им нужны стабилизатор и согласование уровней.
Почему датчик влажности показывает завышенную влажность после тумана или душа?
После долгого пребывания при влажности выше 80 % показания сдвигаются: Sensirion приводит пример +3 % после 60 часов, а затем датчик сам медленно возвращается к калибровке. Конденсат на датчике сгоняют встроенным нагревателем — он есть у SHT3x, HDC1080 и HDC2080.
Источники
- Sensirion. Datasheet SHT3x-DIS: Humidity and Temperature Sensor (Version 7, December 2022) — табл. 1, 2 — точность SHT30, SHT31, SHT35, отклик, дрейф; разд. 1.1 — рекомендуемые условия 5–60 °C и 20–80 %; разд. 2 — питание 2,15–5,5 В, токи, нагреватель, время измерения; табл. 8 — адреса 0x44 и 0x45; табл. 20 — CRC-8; разд. 4.13 — пересчёт кодов
- Texas Instruments. HDC1080 Low Power, High Accuracy Digital Humidity Sensor with Temperature Sensor (SNAS672A, revised January 2016) — ±2 % RH, ±0,2 °C, 2,7–5,5 В, адрес 0x40, отклик 15 с, дрейф ±0,25 %/год, нагреватель; разд. 8.6 — регистры и формулы пересчёта
- Texas Instruments. HDC2080 Low-Power Humidity and Temperature Digital Sensor (SNAS678C, revised July 2021) — ±2 % типично и ±3 % максимум, 1,62–3,6 В, адреса 0x40 и 0x41, отклик 8 с, нагреватель 90 мА, прерывания по порогам
- Bosch Sensortec. BME280 Combined humidity and pressure sensor: Data sheet (BST-BME280-DS001-24, February 2024) — влажность ±3 % при 20–80 % и 25 °C, гистерезис ±1 %, отклик 1 с; питание 1,71–3,6 В
Нашли ошибку?
Смотрите также
- ДатчикиТок и температура: шунты, датчики Холла, термисторы, термопары — подключение и расчёт
- Датчики давления BMP280, BME280, BMP390Точность, подключение по I²C и SPI, режимы, фильтр, компенсация, высота по давлению
- I²CSDA и SCL, START/STOP, ACK, адреса, скорости, расчёт подтяжек
- Калькулятор CRCCRC-8, CRC-16, CRC-32, Modbus, блок CRC STM32, код на C
- Адрес I²C7-битный адрес ведомого и байт адреса с битом R/W