Модуль GY-21 (SHT21): температура и влажность по шине I2C

Модуль GY-21 (SHT21): температура и влажность по шине I2C

Характеристики модуля GY-21, назначение выводов, команды датчика SHT21, чтение данных библиотекой SHT2x и вывод показаний на светодиодную матрицу.

Особенности модуля

GY-21 — модуль для измерения температуры и относительной влажности, построенный на датчике SHT21. В своём классе он отличается малой погрешностью, а благодаря интерфейсу I2C легко подключается к любому контроллеру. Такое сочетание позволяет применять его в том числе для контроля микроклимата в производственных помещениях. Датчик откалиброван на заводе, имеет встроенный нагреватель для самодиагностики и детектор разряда батареи, который выставляет флаг при падении напряжения питания ниже 2,25 В.

Модуль датчика температуры и влажности GY-21
График погрешности измерений датчика SHT21
ДатчикSHT21
ИнтерфейсI2C
Рабочее напряжение датчика1,9–3,6 В
Напряжение питания модуля5 В
Ток при измерении300 мкА
Ток в режиме ожидания0,15 мкА
Диапазон влажности0–100 %
Точность по влажности±3 % (макс.) в диапазоне 0–80 %
Диапазон температурот -40 до +125 °C
Точность по температуре±0,4 °C (макс.) от -10 до +85 °C
Адрес I2C0x40 (фиксированный)

Выводы и подключение

На плате четыре контакта:

  • VIN — питание от +4 до +6 В постоянного тока, номинально 5 В;
  • GND — общий провод;
  • SCL — линия синхронизации I2C;
  • SDA — линия данных I2C.
Таблица соответствия выводов GY-21 и Arduino
Схема подключения датчика SHT21 к Arduino

Адрес датчика можно проверить скетчем I2C-сканера: он показывает 0x40. Адрес не изменяется, поэтому на одной шине I2C может работать только один SHT21.

Команды SHT21

Датчик понимает небольшой набор команд:

  • 0xE3 — измерить температуру, линия SCL на время измерения удерживается у земли;
  • 0xE5 — измерить влажность, SCL удерживается у земли;
  • 0xF3 — измерить температуру без удержания SCL;
  • 0xF5 — измерить влажность без удержания SCL;
  • 0xE6 — запись в пользовательский регистр;
  • 0xE7 — чтение пользовательского регистра;
  • 0xFE — перезагрузка датчика.

Чтение данных из скетча

На практике напрямую посылать команды не обязательно: существует Arduino-библиотека для SHT21, подключаемая заголовком SHT2x.h вместе с Wire.h. В setup достаточно вызвать Wire.begin() и открыть последовательный порт на 9600, а в цикле раз в секунду печатать результаты функций SHT2x.GetHumidity() и SHT2x.GetTemperature(). В мониторе порта появляются строки с влажностью в %RH и температурой в градусах Цельсия.

Пример: показания на светодиодной матрице

Более наглядный вариант — вывод значений на светодиодную матрицу 8x32. Для сборки нужны:

  • Arduino Uno;
  • макетная плата;
  • модуль GY-21;
  • светодиодная матрица 8x32 с драйвером;
  • блок питания 5 В, 1 А;
  • провода.

Отдельный блок питания 5 В нужен для самой матрицы. Скетч использует библиотеки Wire, SHT2x, SPI и MaxMatrix; объект матрицы создаётся строкой MaxMatrix m(6,7,8,4). В программе описан массив из 13 символов размером 8x8 точек: цифры от 0 до 9, пробел, знак процента и значок градуса Цельсия. После инициализации устанавливается максимальная яркость (m.setIntensity(15)) и на пять секунд показывается заставка.

В основном цикле программа измеряет влажность, приводит её к целому числу и функцией writeSprite выводит десятки, единицы и знак процента. Через две секунды то же самое происходит с температурой и значком °C. В результате на матрице попеременно отображаются оба параметра, а в монитор порта параллельно идут те же значения.

Возможные неполадки

Если датчик не выдаёт показаний, проверяют наличие питания на модуле и правильность подключения линий SDA и SCL. При неверных показаниях исключают попадание на датчик влаги и прямых солнечных лучей, а также снижают частоту опроса до одного раза в секунду.

← Все статьи