Цифровой датчик датчик HTU21D предназначен для точного измерения температуры и влажности, связь датчика с микроконтроллером осуществляется при помощи шины I2C.
В данной статье будет рассмотрен пример применения датчика HTU21D в виде модуля. Напряжение питания датчика должно быть в пределах от 1,9 до 3,6 В, на некоторые модули можно подавать напряжение питания 5 В, но при этом этот модуль должен быть оснащен стабилизатором напряжения 3,3 В. Ток потребления датчика в режиме измерения 300 μА, а в режиме ожидания 0,15 μА. Датчик снабжен детектором разряда батареи, если напряжение опускается ниже 2,25 В меняется флаг в регистре датчика.
Рабочий диапазон при измерении влажности от 0 до 100%, точность измерения ± 3% (макс. в диапазоне от 0 до 80%), диапазон измерения температуры от -40 до 125 °С, точность измерения ± 0,4 °С (макс. в диапазоне от -10 до 85 °С). Датчик измеряет температуру с разрешением 12…14 бит и влажность с разрешением 8…12 бит. Разрешение может быть изменено программно.
При тестировании датчика HTU21D была использована следующая библиотека — https://github.com/enjoyneering/HTU21D.git (HTU21D-master.zip)
#include <Wire.h> #include <HTU21D.h> /* HTU21D_RES_RH12_TEMP14 - RH: 12Bit, Temperature: 14Bit, by default HTU21D_RES_RH8_TEMP12 - RH: 8Bit, Temperature: 12Bit HTU21D_RES_RH10_TEMP13 - RH: 10Bit, Temperature: 13Bit HTU21D_RES_RH11_TEMP11 - RH: 11Bit, Temperature: 11Bit */ HTU21D myHTU21D(HTU21D_RES_RH12_TEMP14); void setup(){ Serial.begin(9600); Serial.println(); myHTU21D.begin(); delay(5000); } void loop(){ Serial.print(F("Humidity............: ")); Serial.print(myHTU21D.readHumidity());Serial.println(F(" +-2%")); Serial.print(F("Compensated Humidity: ")); Serial.print(myHTU21D.readCompensatedHumidity());Serial.println(F(" +-2%")); Serial.print(F("Temperature.........: ")); Serial.print(myHTU21D.readTemperature()); Serial.println(F(" +-0.3C")); if(myHTU21D.batteryStatus() == 1){Serial.println(F("Battery.............: OK. Level > 2.25v"));} else{Serial.println(F("Battery.............: LOW. Level < 2.25v"));} delay(20000); }
По умолчанию подтягивающие резисторы (4,7 кОм) в модуле не подключены. Чтобы их задействовать, необходимо запаять имеющуюся на модуле перемычку, иначе необходимо предусмотреть внешние подтягивающие резисторы.
Ниже показан пример применения датчика температуры и влажности, информация о температуре и влажности будет выводится (с интервалом 10 секунд) на дисплей 0.54″ 14-segment LED на базе драйвера HT16K33 (ссылка на описание дисплея — http://rcl-radio.ru/?p=108647).
Дисплей 0.54″ 14-segment LED HT16K33 Backpact представляет собой четырех разрядный 14 сегментный (15 сегмент — запятая на каждом разряде) индикатор которым управляет светодиодный драйвер HT16K33.
Для управления дисплеем используется библиотека 4x14LED.zip , которая рассчитана для работы в среде Arduino IDE и поддерживает платы Arduino Nano и UNO. Библиотека содержит несколько функций, которые позволяют выводить цифры и символы, управлять запятыми.
#include <Wire.h> #include <HTU21D.h> // http://rcl-radio.ru/wp-content/uploads/2021/12/HTU21D-master.zip #include <4x14LED.h> // http://rcl-radio.ru/wp-content/uploads/2021/09/4x14LED.zip HT4x14LED led; HTU21D myHTU21D(HTU21D_RES_RH12_TEMP14); /* HTU21D(resolution) resolution: HTU21D_RES_RH12_TEMP14 - RH: 12Bit, Temperature: 14Bit, by default HTU21D_RES_RH8_TEMP12 - RH: 8Bit, Temperature: 12Bit HTU21D_RES_RH10_TEMP13 - RH: 10Bit, Temperature: 13Bit HTU21D_RES_RH11_TEMP11 - RH: 11Bit, Temperature: 11Bit */ void setup(){ Serial.begin(9600); Serial.println(); myHTU21D.begin(); delay(1000); led.init(1); led.brig(10); led.blink(1); led.clear(); } void loop(){ led.print(myHTU21D.readHumidity()*10, 3, 0xf6, -1,-1,-1); delay(10000); led.print(myHTU21D.readTemperature()*10, 3, 0x1201, -1,-1,-1); delay(10000); }