Датчик температуры и влажности HTU-21 (GY-21)
Модуль датчика влажности и температуры GY21 на основе датчика SHT21 представляет собой высокоточный модуль для измерения температуры и влажности.
Содержание
Обзор датчика температуры и влажности GY-21
Модуль датчика влажности и температуры GY21 (рисунок 1) на основе датчика SHT21 представляет собой высокоточный модуль для измерения температуры и влажности. Обладает очень низкой погрешностей в своём классе: при измерении температуры она составляет - 0.4%, а влажности - 2% (см. рис. 2). Благодаря такой низкой погрешности и универсальному интерфейсу I2C данный модуль подходит для замеров температуры и влажности в промышленных помещениях.
Рисунок 1. Модуль датчика влажности и температуры GY21.
Рисунок 2. Погрешность измерений датчика влажности и температуры SHT21.
Технические характеристики GY-21
- Датчик : SHT21
- Интерфейс : I2C
- Диапазон рабочего напряжения датчика: 1,9 – 3,6 В
- Напряжение питания модуля: 5 В
- Потребляемый ток в режиме измерения: 300 μA
- Потребляемый ток в режиме ожидания: 0.15 μA
- Влажность: рабочий диапазон: от 0 до 100%. Точность измерения: ± 3% (макс), 0-80%
- Температура: рабочий диапазон: от -40 до +125 ° C. Точность измерения: ± 0,4 ° C (макс), от -10 до 85 ° C
- Заводская калибровка
- Встроенный детектор разряда батареи (выставляет флаг, если напряжение питания опускается ниже 2.25 В)
- Встроенный нагреватель для самодиагностики датчиков
Назначение выводов
- VIN – вход напряжения питания, от +4 до +6 В (номинально 5 В) постоянного тока
- GND – вход питания (общий)
- SCL – контакт синхронизации интерфейса I2C
- SDA – контакт данных интерфейса I2C
Подключение GY-21 к плате Arduino
Датчик работает по протоколу I2C. Подключение модуля к плате Arduino производим согласно таблице.
Схема соединений показана на рис. 3.
Рисунок 3. Схема соединений для подключения датчика SHT21
Для получения адреса датчика загрузим на плату Arduino скетч I2C-сканера (скачать test_i2c_uno.zip).
Адрес датчика фиксирован —0x40 (см. рис. 4). К шине I2C можно подключить только 1 датчик SHT21.
Рисунок 4. Сканер I2C устройств
Команды для управления SHT21
- 0xE3 — измерить температуру, линия SCL будет прижата к земле
- 0xE5 — измерить влажность, линия SCL будет прижата к земле
- 0xF3 — измерить температуру, линия SCL не прижата к земле
- 0xF5 — измерить влажность, линия SCL не прижата к земле
- 0xE6 — записать данные в пользовательский регистр
- 0xE7 — прочитать данные из пользовательского регистра
- 0xFE — перезагрузить датчик
Для получения данных будем использовать Arduino-библиотеку SHT21. Скетч для получения данных с датчика представлен в листинге 1.
Листинг 1.
#include <Wire.h>
#include <SHT2x.h>
void setup() {
Wire.begin();
Serial.begin(9600);
}
void loop() {
Serial.print("Humidity(%RH): ");
Serial.print(SHT2x.GetHumidity());
Serial.print(" Temperature(C): ");
Serial.println(SHT2x.GetTemperature());
delay(1000);
}
Загружаем скетч на плату Arduino, открываем монитор последовательного порта и наблюдаем вывод данных (см. рис. 5).
Рисунок 5. Вывод данных в монитор последовательного порта
Создадим проект вывода показаний с датчика SHT21 на светодиодную матрицу 8x32 c драйвером MAX7119.
- Плата Arduino Uno – 1 шт
- Плата прототипирования – 1 шт
- Модуль GY21 (датчик SHT21) – 1 шт
- Cветодиодная матрица 8x32 c драйвером MAX7119 – 1 шт
- Блок питания 5В 1А – 1 шт
- Провода
Схема соединения элементов показана на рис. 6.
Рисунок 6. Схема соединений для вывода данных с SHT21 на светодиодную матрицу.
Блок питания 5В используем для питания светодиодной матрицы. Содержимое скетча представлено в листинге 2. В скетче в массиве figure прописаны все цифры (0-9) и знаки пробел, % и °С.
Листинг 2
// подключение библиотек
#include <Wire.h>
#include <SHT2x.h>
#include <SPI.h>
#include <MaxMatrix.h>
// создание объекта Matrix
MaxMatrix m(6,7,8,4);
// массив для вывода цифр (0-9) и знаков пробел, % и °С
byte figure[13][10]={
{8,8, //0
B00111110,
B01111111,
B01100011,
B01100011,
B01100011,
B01100011,
B01111111,
B00111110},
{8,8, //1
B00000011,
B00000111,
B00001011,
B00010011,
B00000011,
B00000011,
B00000011,
B00000011},
{8,8, //2
B00111110,
B01111111,
B00000111,
B00001110,
B00011100,
B00111000,
B01111111,
B01111111},
{8,8, //3
B01111111,
B01111111,
B00000011,
B01111111,
B01111111,
B00000011,
B01111111,
B01111111},
{8,8, //4
B01100011,
B01100011,
B01100011,
B01111111,
B01111111,
B00000011,
B00000011,
B00000011},
{8,8, //5
B01111111,
B01111111,
B01100000,
B01111111,
B01111111,
B00000011,
B01111111,
B01111111},
{8,8, //6
B01111111,
B01111111,
B01100000,
B01111111,
B01111111,
B01100011,
B01111111,
B01111111},
{8,8, //7
B01111111,
B01111111,
B00000111,
B00001110,
B00011100,
B00011000,
B00011000,
B00011000},
{8,8, //8
B01111111,
B01111111,
B01100011,
B01111111,
B01111111,
B01100011,
B01111111,
B01111111},
{8,8, //9
B01111111,
B01111111,
B01100011,
B01111111,
B01111111,
B00000011,
B01111111,
B01111111},
{8,8, //пробел
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000},
{8,8, // %
B10000000,
B01000110,
B00100110,
B00010000,
B00001000,
B01100100,
B01100010,
B00000001},
{8,8, // *C
B11000000,
B11000000,
B00001111,
B00010000,
B00010000,
B00010000,
B00010000,
B00001111},
};
void setup() {
Wire.begin();
Serial.begin(9600);
// инициализация матриц
delay(500);
m.init();
m.setIntensity(15);
// начальная картинка
m.writeSprite(24, 0, figure[12]);
m.writeSprite(16, 0, figure[11]);
m.writeSprite(8,0, figure[12]);
m.writeSprite(0, 0, figure[11]);
delay(5000);
}
void loop() {
// измерение влажности
int h=SHT2x.GetHumidity();
Serial.print("Humidity(%RH): ");
Serial.println(h);
m.writeSprite(24, 0, figure[11]);
m.writeSprite(16, 0, figure[10]);
m.writeSprite(8,0, figure[h/10]);
m.writeSprite(0, 0, figure[h%10]);
delay(2000);
// измерение температуры
int t=SHT2x.GetTemperature();
Serial.print(" Temperature(C): ");
Serial.println(t);
m.writeSprite(24, 0, figure[12]);
m.writeSprite(16, 0, figure[10]);
m.writeSprite(8,0, figure[t/10]);
m.writeSprite(0, 0, figure[t%10]);
delay(2000);
}
Загружаем скетч на плату и видим попеременный вывод на матрицу значений влажности и температуры (рис. 7,8).
Рисунок 7,8. Схема в сборе.
Часто задаваемые вопросы
- Проверьте подано ли питание на модуль
- Проверьте правильность подключения контактов SDA и SCL
- Исключите попадание влаги на датчик
- Исключите попадание прямых солнечных лучей на датчик
- Уменьшите частоту получения данных с датчика до 1 сек