Этот учебник является частью: Цифровой датчик относительной влажности и температуры HTU21D
Видеоролики, посвященные цифровому датчику относительной влажности и температуры HTU21D. Ссылки на другие видеоролики находятся ниже этой статьи.
Урок 35-2: Использование датчика температуры HTU21D - собственный код
В этом учебном пособии мы рассмотрим, как использовать датчик температуры HTU21D с Arduino для измерения температуры и влажности. HTU21D - это надежный, маломощный датчик, который подключается по I2C, что облегчает его интеграцию в ваши проекты. К концу этого урока у вас будет рабочий код, который считывает температуру в Цельсиях, Фаренгейтах и Кельвинах, а также относительную влажность.

Прежде чем мы погрузимся в проводку и код, важно понимать участвующие компоненты. Датчик HTU21D требует минимальных подключений: питание, земля и два провода I2C для передачи данных. Эта простота делает его отличным выбором для различных приложений, от метеостанций до умных домашних устройств. Для визуального руководства обратитесь к видео на тайм-коде :45.
Аппаратное обеспечение объяснено
Основным компонентом в этом проекте является сенсор HTU21D, который измеряет температуру и влажность. Этот сенсор может работать при напряжениях от 1,5В до 3,6В, что делает его универсальным для различных приложений. Он предоставляет высокоточные данные, при этом диапазон измерений температуры составляет от -40°C до +125°C, а разрешение измерений влажности — 0,04%.
Кроме того, сенсор использует I2C-коммуникацию, которая требует двух пинов: SDA (линия данных) и SCL (линия тактирования). Это позволяет легко интегрировать его с Arduino и другими микроконтроллерами без необходимости в сложной проводке. Библиотека Adafruit упрощает взаимодействие с сенсором, обеспечивая бесшовное получение данных и протоколы связи.
Технические характеристики
| Производитель | TE Connectivity |
|---|---|
| Номер детали | HTU21D-F |
| Логическое/ входное напряжение | 1.5 - 3.6 В |
| Сетевое напряжение | 3,3 В |
| Текущие расходы (в режиме ожидания) | 0.02 мкА (тип.) |
| Текущие расходы (активные) | 450 мкА (тип.) |
| Температурный диапазон | от -40 до +125 °C |
| Диапазон влажности | 0 до 100 % относительной влажности |
| Разрешение | 0.04 %RH; 0.01 °C |
| Упаковка | 6-контактный DFN |
- Обеспечьте правильное питание, чтобы избежать повреждения датчика.
- Используйте резисторы подтяжки на линиях SDA и SCL, если они не интегрированы.
- Сохраняйте соединения датчиков короткими, чтобы минимизировать шум.
- Следите за напряжением во время работы, чтобы поддерживать стабильность.
- Рассмотрите возможность использования конденсатора для декупирования рядом с силовыми выводами.
Инструкции по проводке

Чтобы подключить датчик температуры HTU21D, начните с подключения питания и заземления. Подсоедините левый контакт датчика к источнику 3.3В, убедившись, что он может выдержать требуемое напряжение. Второй контакт, обычно отмеченный красным, должен быть подключен к заземлению.
Затем подключите вывод SDA датчика к выводуA4на Arduino, который служит в качестве линии данных для I2C связи. Затем подключите пин SCL к пинуA5, который действует как линия часов. Убедитесь, что эти соединения надежны, так как слабые контакты могут привести к прерывистым показаниям или невозможности связи с датчиком.
Примеры кода и пошаговое руководство
В коде мы начинаем с подключения необходимых библиотек и инициализации датчика. СтрокаAdafruit_HTU21DF htu = Adafruit_HTU21DF();создает экземпляр класса сенсора. В setup()функции мы начинаем последовательную связь и проверяем, правильно ли подключен датчик.
void setup() {
Serial.begin(9600);
if (!htu.begin()) {
Serial.println("Couldn't find sensor!");
while (1);
}
}Этот фрагмент проверяет, функционирует ли сенсор корректно. Если нет, он выводит сообщение об ошибке и останавливает программу. В.loop()функция, мы постоянно считываем значения температуры и влажности.
void loop() {
Serial.print(getHTU('C'));
Serial.print("C");
Serial.print(getHTU('H'));
Serial.println("%");
delay(1000);
}Здесь функцияgetHTU()вызывается с разными параметрами для получения температуры в Цельсиях и влажности. Задержка обеспечивает снятие показаний каждую секунду, обеспечивая плавный вывод на сериальном мониторе. Полный код доступен для справки ниже статьи.
Демонстрация / Что ожидать
Как только всё будет правильно подключено, и код загружен, вы должны увидеть показания температуры и влажности, напечатанные в последовательном мониторе. Температура будет отображаться в градусах Цельсия, за ней будет следовать соответствующий процент влажности. Если вы приложите тепло к датчику, вы должны заметить, что температура повысится соответственно (в видео в 10:15).
Будьте осторожны с пределами датчика; если температура превышает 125°C, он может дать неправильное показание или отображать ноль. Всегда удостоверяйтесь, что ваши соединения надежны и что датчик правильно подключен к питанию, чтобы избежать проблем в ходе работы.
Временные метки видео
- 00:00Введение
- 03:45Подключение датчика
- 05:30Обзор кода
- 10:15Демонстрация
- 12:00Вывод
Этот учебник является частью: Цифровой датчик относительной влажности и температуры HTU21D
- Урок 35-1: Использование датчика температуры HTU21D
- Урок 35: Использование датчика температуры HTU21D с Arduino
- Урок 36: Использование датчика температуры HTU21D с LCD Arduino пошаговый курс
- Использование двух датчиков влажности и температуры HTU21DF с Arduino
- Отображение температуры с HTU21D на ЖК-дисплее
- Отображение температуры с HTU21D в виде столбчатой диаграммы на ЖК-дисплее
- Как использовать датчик влажности и температуры HTU21DF с Arduino (базовый код)
- Как использовать датчик влажности и температуры HTU21DF с Arduino (пользовательский код)
/*
* Robojax Arduino Step-by-Step Course
* Part 4: Temperature Sensors
* Lesson 35: HTU21D Temperature Sensor Custom code
* Written/Updated by Ahmad Shamshiri on July 13, 2019
* in Ajax, Ontario, Canada
Please watch video instructions here https://youtu.be/LyA0yAKlf9E
This code is available at http://robojax.com/course1/?vid=lecture35
with over 100 lectures free on YouTube. Watch it here http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339
If you found this tutorial helpful, please support me so I can continue creating.
Make a donation using PayPal http://robojax.com/L/?id=64
* Code is available at http://robojax.com/learn/arduino
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/*
**************************************************
*
This is an example for the HTU21D-F Humidity & Temperature Sensor
Designed specifically to work with the HTU21D-F sensor from Adafruit
----> https://www.adafruit.com/products/1899
These displays use I2C to communicate; 2 pins are required to
interface
***************************************************
*/
#include <Wire.h>
#include "Adafruit_HTU21DF.h"
// Connect Vin to 3-5VDC
// Connect GND to ground
// Connect SCL to I2C clock pin (A5 on UNO)
// Connect SDA to I2C data pin (A4 on UNO)
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
void setup() {
//Get the code for the course: http://robojax.com/L/?id=339
Serial.begin(9600);
Serial.println("Robojax.com");
Serial.println("HTU21D-F test");
if (!htu.begin()) {
Serial.println("Couldn't find sensor!");
while (1);
}
}
void loop() {
//Get the code for the course: http://robojax.com/L/?id=339
Serial.print(getHTU('C'));
printDegree();
Serial.println("C");
Serial.print(getHTU('F'));
printDegree();
Serial.println("F");
Serial.print(getHTU('K'));
Serial.println("K");
Serial.println(" ");
Serial.print("Humidity:");
Serial.print(getHTU('H'));
Serial.println("%");
if(getHTU('C') <81)
{
//digitalWrite(5, LOW);
}
delay(1000);
}
/*
* @brief returns temperature or relative humidity
* @param "type" is character
* C = Celsius
* K = Kelvin
* F = Fahrenheit
* H = Humidity
* @return returns one of the values above
* Usage: to get Fahrenheit type: getHTU('F')
* to print it on serial monitor Serial.println(getHTU('F'));
* Written by Ahmad Shamshiri on July 13, 2019
* in Ajax, Ontario, Canada
* www.Robojax.com
*/
float getHTU(char type)
{
//Get the code for the course: http://robojax.com/L/?id=339
float value;
float temp = htu.readTemperature();
float rel_hum = htu.readHumidity();
if(type =='F')
{
value = temp *9/5 + 32;//convert to Fahrenheit
}else if(type =='K')
{
value = temp + 273.15;//convert to Kelvin
}else if(type =='H')
{
value = rel_hum;//return relative humidity
}else{
value = temp;// return Celsius
}
return value;
}//
/*
* @brief prints degree symbol on serial monitor
* @param none
* @return returns nothing
* Written by Ahmad Shamshiri on July 13, 2019
* for Robojax Tutorial Robojax.com
*/
void printDegree()
{
Serial.print("\xC2");
Serial.print("\xB0");
}
Вещи, которые могут вам понадобиться
-
АмазонкаКупите модуль HTU21D на Amazon.amzn.to
-
eBayКупите HTU21D на eBayebay.us
-
АлиЭкспрессПриобретите HTU21D или SHT21 на AliExpress.s.click.aliexpress.com
Ресурсы и ссылки
-
ВнешнийHTU21D Технические характеристики (PDF)cdn-shop.adafruit.com
-
ВнешнийБиблиотека Adafruit HTU21D (GitHub)github.com
-
ВнешнийРазница между HTU21DF и HTU21D (изображение)robojax.com
Файлы📁
Технический паспорт (pdf)
-
HTU21D_даташит_температуры_и_влажности
HTU21D_temerature_humidity_datasheet.pdf0.96 MB