Этот учебник является частью: Цифровой датчик относительной влажности и температуры HTU21D
Видеоролики, посвященные цифровому датчику относительной влажности и температуры HTU21D. Ссылки на другие видеоролики находятся ниже этой статьи.
Урок 36: Использование датчика температуры HTU21D с LCD Arduino пошаговый курс
Датчик температуры и влажности HTU21D является популярным выбором для многих проектов на Arduino благодаря своей простоте в использовании и точности. В этом уроке мы создадим простую проект, который считывает данные о температуре и влажности с датчика и отображает их на ЖК-дисплее. К концу этого урока у вас будет рабочая установка, которая непрерывно показывает температуру в Цельсиях, Фаренгейтах и Кельвинах, а также процент относительной влажности. Для дальнейшего разъяснения вы можете обратиться к видео (в видео на мм:сс).
Пояснение аппаратного обеспечения
Основным компонентом этого проекта является датчик температуры и влажности HTU21D, который передает данные по I2C. Этот датчик работает в диапазоне напряжений от 1.5 до 3.6 вольт, что делает его подходящим как для систем на 3.3В, так и на 5В. Он потребляет очень мало энергии, обычно всего 0.02 микроампера в неактивном состоянии и 450 микроампер во время измерения. Помимо HTU21D, мы также будем использовать ЖК-дисплей, конкретно ЖК1602 с I2C. Этот дисплей позволяет легко выводить текстовые данные и требует всего две ножки для связи: SDA (линия данных) и SCL (тактовая линия). Сочетание этих компонентов позволит нам создать информативный дисплей для мониторинга уровней температуры и влажности.
Технические данные
| Производитель | TE Connectivity |
|---|---|
| Номер детали | HTU21D-F |
| Логическое/Уровень напряжения ввода-вывода | 1,5 - 3,6 В |
| С Supply voltage | 3,3 В (тип.) |
| Выходной ток (тип.) | 0.02 мкА (бездеятельность), 450 мкА (измерение) |
| Температурный диапазон | -40 до +125 °C |
| Диапазон влажности | 0 до 100 %RH |
| Разрешение (Температура) | 0,01 °C |
| Разрешение (влажность) | 0,04 %RH |
| Пакет | DFN-6 |
- Используйте подтягивающий резистор для линий SDA и SCL, если они не интегрированы.
- Обеспечьте правильное напряжение питания, чтобы избежать повреждения сенсора.
- Поддерживайте правильную проводку, чтобы избежать ошибок в коммуникации.
- Проверьте адрес I2C, если датчик не отвечает.
- Используйте задержку между считываниями, чтобы предотвратить перегрузку датчика.
- Убедитесь, что ЖК-дисплей совместим с I2C-коммуникацией.
Инструкции по проводке
Чтобы подключить датчик HTU21D и ЖК-дисплей, начните с подключения питания. Подключите левый контакт HTU21D к источнику питания 3,3В, а второй контакт (обычно красный) к земле. Далее подключите вывод SDA HTU21D к аналоговому выводу A4 Arduino, а вывод SCL к аналоговому выводу A5. Для дисплея LCD1602 подключите вывод VCC к тому же источнику питания 3,3В, а вывод GND к земле. Вывод SDA на ЖК-дисплее также должен быть подключен к A4, а вывод SCL должен быть подключен к A5, что позволит обоим компонентам использовать шину I2C. Убедитесь, что все соединения надежны для обеспечения правильной связи между Arduino, датчиком и дисплеем.
Примеры кода и руководство
Следующий код инициализирует сенсор HTU21D и ЖК-дисплей. В функции настройки ЖК-дисплей подготавливается к использованию, а сенсор проверяется на наличие соединения:
void setup() {
lcd.begin();
lcd.backlight();
if (!htu.begin()) {
lcd.print("Robojax HTUD1DF");
lcd.setCursor(0,1);
lcd.print("sensor missing");
while (1);
} else {
lcd.print("Robojax HTUD1DF");
lcd.setCursor(0,1);
lcd.print("Demo");
}
delay(2000);
}Этот фрагмент проверяет, правильно ли подключен датчик. Если нет, на ЖК-дисплее отображается сообщение об ошибке, и программа останавливается. Если датчик работает, на экране появляется демонстрационное сообщение на две секунды. Функция цикла — это место, где происходят основные считывание и отображение. Здесь мы вызываем функцию `lcdDisplay`, чтобы показать температуру в разных единицах:
void loop() {
lcd.clear(); // clear previous values from screen
lcdDisplay(0, 0, "Celsius: ", 10, 0, getHTU('C'), 'd');
lcdDisplay(0, 1, "Fahrenheit: ", 10, 1, getHTU('F'), 'd');
delay(5000);
}В этом цикле ЖК-дисплей очищается, и отображаются показания температуры в Цельсиях и Фаренгейтах. Функция `getHTU` вызывается с символом 'C' для Цельсия и 'F' для Фаренгейта соответственно. Наконец, функция `getHTU` определена для считывания температуры или влажности в зависимости от входного символа:
float getHTU(char type) {
float temp = htu.readTemperature();
float rel_hum = htu.readHumidity();
if(type =='F') {
return temp * 9/5 + 32; // convert to Fahrenheit
} else if(type =='K') {
return temp + 273.15; // convert to Kelvin
} else if(type =='H') {
return rel_hum; // return relative humidity
} else {
return temp; // return Celsius
}
}Эта функция считывает температуру и влажность с датчика и конвертирует температуру в запрашиваемую единицу. Обязательно ознакомьтесь с полным кодом, загруженным ниже статьи, для получения дополнительных деталей.
Демонстрация / Что ожидать
После завершения проводки и загрузки кода вы должны увидеть на ЖК-дисплее значения температуры и влажности. Показания будут обновляться каждые несколько секунд, отражая текущие условия. Если вы приложите тепло к датчику, вы должны заметить, как температура соответственно увеличивается, в то время как влажность должна немного снизиться. Будьте внимательны к максимальному температурному пределу датчика; превышение этого предела может привести к неточным показаниям или выходу датчика из строя (в видео на мм:ss).
Временные метки видео
- 00:00- Введение в проект
- 01:15- Инструкции по проводке
- 03:30- Проверка кода
- 10:00- Демонстрация настройки
Этот учебник является частью: Цифровой датчик относительной влажности и температуры HTU21D
- Урок 35-1: Использование датчика температуры HTU21D
- Урок 35-2: Использование датчика температуры HTU21D - собственный код
- Урок 35: Использование датчика температуры HTU21D с Arduino
- Использование двух датчиков влажности и температуры HTU21DF с Arduino
- Отображение температуры с HTU21D на ЖК-дисплее
- Отображение температуры с HTU21D в виде столбчатой диаграммы на ЖК-дисплее
- Как использовать датчик влажности и температуры HTU21DF с Arduino (базовый код)
- Как использовать датчик влажности и температуры HTU21DF с Arduino (пользовательский код)
/*
* Robojax Arduino Step-by-Step Course
* Part 4: Temperature Sensors
* Lesson 36: HTU21D Temperature Sensor with LCD1602 and LCD2004 Display
* Display Temperature from HTU21DF on LCD1602-I2C or LCD2004
* Updated by Ahmad Shamshiri on July 13, 2019
Please watch video instructions here https://youtu.be/SrFJKbmiaPM
This code is available at http://robojax.com/course1/?vid=lecture36
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
and make a donation using PayPal http://robojax.com/L/?id=64
*
This is an example for the HTU21D-F Humidity & Temp 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
Watch Introduction to a 360 Servo video with code: https://youtu.be/b_xvu6wWafA
You can get the wiring diagram from my Arduino Course at Udemy.com
Learn Arduino step by step with all libraries, codes, and wiring diagrams all in one place.
Visit my course now http://robojax.com/L/?id=62
If you found this tutorial helpful, please support me so I can continue creating
content like this.
or 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/>.
*/
#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();
// start of settings for LCD1602 with I2C
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// end of settings for LCD1602 with I2C
void setup() {
//Get the code for the course: http://robojax.com/L/?id=339
lcd.begin();
lcd.backlight();
if (!htu.begin()) {
lcd.print("Robojax HTUD1DF");
lcd.setCursor(0,1);
lcd.print("sensor missing");
while (1);
}else{
// initialize the LCD
lcd.print("Robojax HTUD1DF");
lcd.setCursor(0,1);
lcd.print("Demo");
}
delay(2000);
}
void loop() {
//Get the code for the course: http://robojax.com/L/?id=339
lcd.clear();// clear previous values from screen
lcdDisplay(
// to print Celsius:
0, // character 0
0, // line 0
"Celsius: ",
// to print Celsius
10, // character 10
0, // line 0
getHTU('C'),
'd'
);
lcdDisplay(
// to print fahrenheit:
0, // character 0
1, // line 1
"Fahrenheit: ",
// to print Fahrenheit
10, // character 9
1, // line 0
getHTU('F'),
'd'
);
delay(5000);
lcdDisplay(
// to print Kelvin:
0, // character 0
0, // line 0
"Kelvin: ",
// to print Celsius
9, // character 10
0, // line 0
getHTU('K'),
'k'
);
lcdDisplay(
// to print humidity text
0, // character 0
1, // line 1
"Humidity: ",
// to print humidity
10, // character 9
1, // line 1
getHTU('H'),
'%'
);
delay(5000);
}
/*
* @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;
}//
/*
* lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
* displays value and title on LCD1602
* How to use:
* If you want to display: "Voltage: 13.56mV" starting from the first character
* on the second row.
* use:
* lcdDisplay(0, 1, "Voltage: ", 13.56,'d')
*
* 'd' is degree symbol
* tc is character number (0)
* tr is row in the lcd (1)
* title is the text (Voltage:)
* vc value for character
* vr value for row or line
* value is the value (13.56)
*/
void lcdDisplay(int tc, int tr, String title, int vc, int vr, float value,char symbol)
{
// Robojax.com LCD1602 for HTU21D Demo
lcd.setCursor (tc,tr); //
lcd.print(title);
lcd.setCursor (vc,vr); //
lcd.print(value);
if(symbol == 'd')
{
lcd.print((char)223);
}else if(symbol =='%')
{
lcd.print("%");
}else if(symbol =='k')
{
lcd.print("K");
}
// Robojax.com LCD1602 for HTU21D Demo
}
Вещи, которые могут вам понадобиться
-
АмазонкаКупите модуль HTU21D на Amazon.amzn.to
-
eBayКупите HTU21D на eBayebay.us
-
АлиЭкспрессПриобретите HTU21D или SHT21 на AliExpress.s.click.aliexpress.com
Ресурсы и ссылки
-
ВнешнийБиблиотека Adafruit HTU21D (GitHub)github.com
-
ВнешнийРазница между HTU21DF и HTU21D (изображение)robojax.com
Файлы📁
Технический паспорт (pdf)
-
HTU21D_даташит_температуры_и_влажности
HTU21D_temerature_humidity_datasheet.pdf0.96 MB