Подключение датчика температуры и влажности HTU21D к Arduino
Хотите вести журнал климата в вашей теплице, создать систему контроля хьюмидора или отслеживать данные температуры и влажности для метеостанции? Датчик температуры и влажности HTU21D может стать правильным выбором для вас!
Этот датчик откалиброван на заводе и не требует внешних компонентов для работы. Поэтому, сделав всего несколько подключений и написав немного кода для Arduino, вы сможете сразу начать измерять относительную влажность и температуру.
Обзор оборудования
Модуль содержит недорогой, простой в использовании, высокоточный цифровой датчик температуры и влажности от MEAS Switzerland — HTU21D.
Небольшой размер модуля позволяет встраивать его практически в любое устройство, такое как термостаты, гигростаты, домашние метеостанции и подобные приборы, для мониторинга и контроля температуры/влажности.
Датчик HTU21D способен измерять влажность во всём диапазоне от 0 до 100% RH с типичной точностью ±2% в диапазоне от 5% до 95% RH.
Максимальный диапазон температур HTU21D составляет от -40 до 125°C. Типичная точность составляет ±0.3°C в диапазоне от 0 до 70°C.
В нормальном режиме измерения влажности и температуры датчик имеет разрешение 0.7% RH и 0.040°C со временем преобразования 2 мс и 11 мс соответственно. Для более требовательных задач датчик позволяет увеличить разрешение за счёт увеличения времени преобразования. В режиме максимального разрешения HTU21D может обеспечить 0.04% RH со временем преобразования 14 мс и 0.01°C со временем преобразования 44 мс.
Внимание:
Датчик HTU21D имеет небольшое окно, в котором видна полимерная чувствительная плёнка, отвечающая за измерение температуры и влажности. Рекомендуется не допускать контакта жидкостей, пыли или других загрязняющих веществ с ней, так как это может повлиять на точность датчика.
Некоторые модули содержат HTU21D-F (фильтрованная версия), которые оснащены гидрофобным PTFE-фильтром (маленькая белая крышка на микросхеме). Этот фильтр блокирует загрязняющие вещества, но пропускает водяной пар, защищая ваш датчик от повреждения водой и при этом обеспечивая точные показания.
Требования к питанию
Модуль оснащён прецизионным стабилизатором напряжения 3.3V и преобразователем уровня напряжения, поэтому вы можете использовать его с вашим любимым 3.3V или 5V микроконтроллером без проблем.
HTU21D потребляет менее 0.5 мА при измерениях и менее 0.14 мкА в спящем режиме. Такое низкое энергопотребление позволяет использовать его в устройствах с батарейным питанием, таких как смартфоны, носимые устройства или умные часы.
Интерфейс I2C
HTU21D — это I2C-датчик, что означает, что он использует два провода данных/тактирования I2C, доступные на большинстве микроконтроллеров, и может совместно использовать эти выводы с другими I2C-датчиками при условии отсутствия конфликта адресов.
Датчик имеет фиксированный I2C-адрес 0x40HEX. Для связи с несколькими датчиками HTU21D на одной шине требуется мультиплексор.
Технические характеристики
Вот полные технические характеристики:
Для получения дополнительной информации обратитесь к техническому описанию ниже.
Распиновка модуля HTU21D
Давайте рассмотрим распиновку.
VCC — это вывод питания. Вы можете подключить его к выходу 3.3V или 5V вашего Arduino.
GND — это общая земля для питания и логики.
SCL — это также вывод тактирования I2C, подключите к линии тактирования I2C вашего микроконтроллера.
SDA — это также вывод данных I2C, подключите к линии данных I2C вашего микроконтроллера.
Схема подключения модуля HTU21D к Arduino
Подключение датчика влажности HTU21D очень простое!
Необходимо подключить всего четыре вывода, чтобы начать использовать датчик. Один для VCC, один для GND и два вывода данных для связи по I2C.
Подключите вывод SCL к выводу тактирования I2C, а вывод SDA — к выводу данных I2C на вашем Arduino. Обратите внимание, что каждая плата Arduino имеет разные выводы I2C, которые необходимо подключать соответствующим образом. На платах Arduino с разводкой R3 выводы SDA (линия данных) и SCL (линия тактирования) расположены на штыревых разъёмах рядом с выводом AREF. Они также известны как A5 (SCL) и A4 (SDA).
Ниже показана схема подключения.
Установка библиотеки
Для запуска датчика вам нужно установить библиотеку Adafruit HTU21DF. Она доступна через менеджер библиотек Arduino.
Для установки библиотеки перейдите в Скетч > Подключить библиотеку > Управление библиотеками… Дождитесь, пока менеджер библиотек загрузит индекс библиотек и обновит список установленных библиотек.
Отфильтруйте поиск, введя „HTU21D“, и установите библиотеку.
Библиотека Adafruit_HTU21DF внутренне использует вспомогательную библиотеку Adafruit Bus IO для абстрагирования транзакций и регистров I2C и SPI. Поэтому найдите в менеджере библиотек adafruit bus и также установите её.
Код Arduino — Чтение температуры и влажности
Ниже приведён базовый скетч для Arduino. Загрузите его в Arduino. Вы увидите текущую температуру и влажность в вашей комнате!
#include <Wire.h>
#include "Adafruit_HTU21DF.h"
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
void setup() {
Serial.begin(9600);
if (!htu.begin()) {
Serial.println("Couldn't find sensor!");
while (1);
}
}
void loop() {
float temp = htu.readTemperature();
float rel_hum = htu.readHumidity();
Serial.print("Temp: "); Serial.print(temp); Serial.print(" C");
Serial.print("\t\t");
Serial.print("Humidity: "); Serial.print(rel_hum); Serial.println(" \%");
delay(500);
}
После загрузки кода откройте монитор последовательного порта на скорости 9600 бод. Вы должны увидеть вывод, похожий на показанный ниже. Попробуйте подышать на датчик, чтобы увидеть изменение значений влажности и температуры!
Объяснение кода:
Код довольно прост. В начале подключаются библиотеки Wire.h и Adafruit_HTU21DF.h, и в глобальной области создаётся объект Adafruit_HTU21DF.
#include <Wire.h>
#include "Adafruit_HTU21DF.h"
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
В функции setup() мы инициализируем последовательную связь с ПК и вызываем функцию begin().
Функция htu.begin() инициализирует датчик. Она возвращает True, если датчик был найден и ответил корректно, и False, если датчик не найден.
void setup() {
Serial.begin(9600);
if (!htu.begin()) {
Serial.println("Couldn't find sensor!");
while (1);
}
}
После инициализации вы можете обращаться к методам объекта (htu) через оператор точки.
htu.readTemperature() возвращает значение температуры с плавающей точкой (целая + дробная часть) в °C. Для преобразования в Фаренгейты умножьте на 1.8 и прибавьте 32.
htu.readHumidity() возвращает значение влажности, также в виде числа с плавающей точкой от 0 до 100 (показывает % влажности).
void loop() {
float temp = htu.readTemperature();
float rel_hum = htu.readHumidity();
Serial.print("Temperature: "); Serial.print(temp); Serial.print(" C");
Serial.print("\t");
Serial.print("Humidity: "); Serial.print(rel_hum); Serial.println(" \%");
delay(500);
}