Этот учебник является частью: Цифровой датчик относительной влажности и температуры HTU21D
Видеоролики, посвященные цифровому датчику относительной влажности и температуры HTU21D. Ссылки на другие видеоролики находятся ниже этой статьи.
Отображение температуры с HTU21D в виде столбчатой диаграммы на ЖК-дисплее
В этом уроке мы学习ем, как отображать показания температуры с датчика температуры и влажности HTU21D на ЖК-экране в виде столбчатой диаграммы. Показания будут включать значения в Цельсиях, Фаренгейтах, Кельвинах и относительной влажности, предоставляя полное представление о погодных условиях. Этот проект поможет вам понять, как правильно подключить компоненты и реализовать необходимый код, чтобы всё работало без сбоев.

Для тех, кто хочет визуальное руководство, обязательно посмотрите видео, связанное с этим учебником (видео на :00).
Объяснение аппаратного обеспечения
Основные компоненты этого проекта включают датчик HTU21D и дисплей LCD 1602. Датчик HTU21D представляет собой цифровой датчик влажности и температуры, который общается по протоколу I2C. Он предоставляет точные показания температуры и влажности, которые можно легко получить через его библиотеку. Дисплей LCD 1602, с другой стороны, отображает показания в человеко-читаемом формате, что позволяет быстро оценивать условия окружающей среды.
HTU21D использует простой интерфейс I2C, что облегчает подключение и общение с микроконтроллерами, такими как Arduino. Дисплей LCD 1602 также использует I2C, что упрощает проводку, уменьшая количество выводов, необходимых для подключения к Arduino. Это позволяет создать более аккуратную конфигурацию, обеспечивая при этом четкий визуальный вывод.
Технические характеристики
| Производитель | Адафрут |
|---|---|
| Номер детали | HTU21D |
| Логика/напряжение питания | 3.3 В (тип.) |
| Сетевое напряжение | 1,5 - 3,6 В |
| Температурный диапазон | от -40 до 125 °C |
| Диапазон влажности | 0 до 100 %RH |
| Разрешение | 0.01 °C / 0.04 %RH |
| Связь | I2C |
| Пакет | 4-контактный LGA |
- Используйте 3.3 В для питания HTU21D; подключение к 5 В может его повредить.
- Убедитесь, что на линиях I2C (SDA и SCL) используются правильные подтягивающие резисторы.
- Держите датчик подальше от источников тепла во время тестирования.
- Проверьте правильный адрес I2C с помощью скетча сканера I2C.
- Убедитесь, что ЖК-дисплей правильно инициализирован с правильным адресом.
Инструкции по проводке

Чтобы подключить датчик HTU21D и дисплей LCD 1602, внимательно следуйте следующим шагам:
Сначала подключите датчик HTU21D. Подключите первый контакт (VCC) к контакту 3.3 В на Arduino. Второй контакт (GND) должен быть подключен к заземлению (GND) Arduino. Третий контакт (SDA) подключается к контакту A4 на Arduino, а четвертый контакт (SCL) соединяется с контактом A5. Убедитесь, что вы используете правильные цвета проводов для ясности: красный для VCC, черный для GND, оранжевый для SDA и желтый для SCL.
Затем, для дисплея LCD 1602 подключите контакт VCC к контакту 5 В на Arduino, а контакт GND - к земле. Контакт SDA дисплея должен быть подключен к тому же контакту A4, который использовался для HTU21D, а контакт SCL должен подключаться к контакту A5. Эта схема позволяет как датчику, так и дисплею общаться по протоколу I2C.
Примеры кода и пошаговое руководство
В коде первым шагом является подключение необходимых библиотек для сенсора и ЖК-дисплея. Строка#include имеет важное значение для связи I2C, в то время как#include "Adafruit_HTU21DF.h"инициализирует датчик HTU21D. В следующей строке создается экземпляр класса HTU21D:
Adafruit_HTU21DF htu = Adafruit_HTU21DF();Эта строка настраивает датчик для использования в программе, позволяя нам позже вызывать его методы для считывания значений температуры и влажности.
Внутриsetup()функции мы инициализируем последовательный монитор и LCD-дисплей. Следующие строки проверяют, работает ли датчик correctement:
if (htu.begin()) {
lcd.print("HTU21DF Bargraph");
} else {
lcd.print("missing HTU21DF");
while(1); // Pause forever.
}Если датчик не удастся инициализировать, программа отобразит сообщение об ошибке и остановит выполнение. Это важно для отладки и гарантирует, что датчик подключен правильно.
В вloop()функция, температурные показания снимаются и отображаются. Линияfloat T = getHTU('H');извлекает температуру или влажность в зависимости от переданного параметра. Извлеченное значение затем отображается на ЖК-дисплее:
lcd.setCursor (0,1);
lcd.print(T); // print
lcd.print((char)223); // prints degree symbol
lcd.print("C"); //Этот код размещает курсор на второй строке ЖК-дисплея и выводит значение температуры вместе со знаком градуса. Использование(char)223это удобный трюк для отображения символа градуса на ЖК-дисплее.
Демонстрация / Что ожидать
После того как всё настроено и код загружен, вы должны увидеть показания температуры, отображаемые на ЖК-дисплее в виде столбчатой диаграммы. Показания будут обновляться непрерывно, отражая текущую температуру и влажность. Если вы подышите горячим воздухом на датчик, вы увидите, как температура быстро повышается, что подтверждает, что система функционирует как ожидалось. Будьте осторожны с обратной полярностью или неправильной проводкой, так как это может привести к неисправности или повреждению (в видео на 02:30).
Временные метки видео
- 00:00- Введение
- 01:30- Объяснение проводки
- 02:30- Проход по коду
- 04:00- Демонстрация
- 05:30- Заключение
Этот учебник является частью: Цифровой датчик относительной влажности и температуры HTU21D
- Урок 35-1: Использование датчика температуры HTU21D
- Урок 35-2: Использование датчика температуры HTU21D - собственный код
- Урок 35: Использование датчика температуры HTU21D с Arduino
- Урок 36: Использование датчика температуры HTU21D с LCD Arduino пошаговый курс
- Использование двух датчиков влажности и температуры HTU21DF с Arduino
- Отображение температуры с HTU21D на ЖК-дисплее
- Как использовать датчик влажности и температуры HTU21DF с Arduino (базовый код)
- Как использовать датчик влажности и температуры HTU21DF с Arduino (пользовательский код)
/*
* Display Temperature from HTU21D(F) on LCD as bargraph
* Written and Updated by Ahmad Shamshiri on July 18, 2019
* for Robojax in Ajax, Ontario, Canada
Watch Video tutorial for this code: https://youtu.be/kpGvzNWLHuk
Must watch:
1- Introduction to HTU21DF
https://youtu.be/Q5y18rgTAhA
2- LCD1602-I2C video: https://youtu.be/q9YC_GVHy5A
* Original Sources:
* LCD library: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
* Bargraph library from https://playground.arduino.cc/Code/LcdBarGraph/
*
*
- (GND) to GND
+ (VDD) to 3.3V
(WARNING: Do not connect + to 5V or the sensor will be damaged!)
*/
#include <Wire.h>
#include "Adafruit_HTU21DF.h"
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
#define maxValue 160 // is the value in celsius or fahrenheit set in line above
// LCD settings
#include <LiquidCrystal_I2C.h>
byte lcdNumCols = 16; // -- number of columns in the LCD
byte lcdLine = 2; // -- number of lines in the LCD
LiquidCrystal_I2C lcd(0x3f,lcdNumCols,lcdLine); //0x3f is address for I2C
// to get I2C address, run I2C Scanner.
//Link is provided (in same page as this code) at http://robojax.com/learn/arduino
// bargraph settings
#include <LcdBarGraphRobojax.h>
LcdBarGraphRobojax robojax(&lcd, 16, 0, 0); // -- creating 16 character long bargraph starting at char 0 of line 0 (see video)
void setup()
{
Serial.begin(9600);//initialize serial monitor
// -- initializing the LCD
lcd.begin();
lcd.clear();
lcd.print("Robojax");
// Initialize the sensor (it is important to get calibration values stored on the device).
if (htu.begin())
{
lcd.setCursor (0,1); //
lcd.print("HTU21DF Bargraph");
}else {
lcd.setCursor (0,1); //
lcd.print("missing HTU21DF");
while(1); // Pause forever.
}
// -- give user some time to read the text above
delay(2000);
lcd.clear();
}// setup
void loop()
{
// Robojax HTU21DF Bargraph main loop
robojax.clearLine(1);// clear line 1 to display fresh temperature
float T = getHTU('H');// get the temperature
float Tgraph=T;
if( Tgraph > maxValue){
Tgraph =0;
}
robojax.drawValue( Tgraph, maxValue);// draw the bargraph
// Print out the measurement:
Serial.print("temperature: ");
Serial.print(T,2);
lcd.setCursor (0,1); //
if(T< maxValue){
lcd.print("Temp.:");
//lcd.print("Humi.:");
}else{
lcd.print("Max.:");
}
lcd.setCursor (7,1); //
lcd.print(T); // print
lcd.print((char)223);// prints degree symbol
//lcd.print("%");// prints degree symbol
lcd.print("C");//
delay(500);
}
/*
* @brief returns temperature or relative humidity
* @param "type" is a 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 the 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)
{
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')
{
if(rel_hum<0){rel_hum =0;}//prevents it from negative value
value = rel_hum;//return relative humidity
}else{
value = temp;// return Celsius
}
return value;
}//
Ресурсы и ссылки
-
ВнешнийHTU21D Технические характеристики (PDF)cdn-shop.adafruit.com
-
ВнешнийБиблиотека Adafruit HTU21D (GitHub)github.com
Файлы📁
Технический паспорт (pdf)
-
HTU21D_даташит_температуры_и_влажности
HTU21D_temerature_humidity_datasheet.pdf0.96 MB