Код для поиска

Урок 35-1: Использование датчика температуры HTU21D

Урок 35-1: Использование датчика температуры HTU21D

В этом учебном пособии мы рассмотрим, как использовать датчик температуры и влажности HTU21D с Arduino. HTU21D — это компактный датчик, который общается через I2C, что облегчает его подключение к микроконтроллерам. К концу этого урока вы сможете считывать значения температуры и влажности и отображать их через сериальный монитор Arduino.

HTU21D module

Для этого проекта мы будем использовать библиотеку Adafruit, специально разработанную для сенсора HTU21D. Библиотека упрощает процесс считывания данных с сенсора, что позволяет нам сосредоточиться на интеграции сенсора в наши проекты. Вы можете ожидать увидеть показания температуры сенсора в Цельсиях, Фаренгейтах и Кельвинах, а также процент относительной влажности (в видео на 03:15).

Аппаратное обеспечение объяснено

Основным компонентом для этого проекта является датчик температуры и влажности HTU21D. Этот датчик работает при напряжении питания от 1,5 до 3,6 вольт и потребляет очень мало энергии, что делает его идеальным для устройств на батарейках. Он общается с Arduino по протоколу I2C, требуя всего две линии передачи данных: SDA для данных и SCL для тактового сигнала.

Чтобы запитать сенсор, мы подключим его к источнику 3,3 В или 5 В в зависимости от конкретного модуля, который вы используете. Версия Adafruit включает в себя стабилизатор напряжения, что позволяет ей работать без проблем с обоими уровнями напряжения. Эта гибкость делает ее отличным выбором для различных приложений.

Технические характеристики

ПроизводительTE Connectivity
Номер деталиHTU21D-F
Логика/входное напряжение1.5 - 3.6 В
Напряжение питания3,3 В (тип.)
Текущий расход (в режиме ожидания)0.02 мкА
Текущее потребление (измерение)450 мкА (тип.)
Диапазон температур-40 до +125 °C
Разрешение влажности0,04 %
Пакет6-контактный DFN

  • Обеспечьте правильные уровни напряжения, чтобы избежать повреждения датчика.
  • Используйте подтягивающие резисторы на линиях I2C, если они не предусмотрены в модуле.
  • Держите провода короткими, чтобы минимизировать помехи с I2C-связью.
  • Учтите необходимость теплоотведения, если используется в условиях высокой температуры.
  • Проверьте ориентацию датчика, чтобы обеспечить правильное соединение выводов.

Инструкции по проводке

Arduino wiring for HTU21DF light intesity sensor
Arduino wiring for HTU21DF light intesity sensor

Чтобы подключить датчик HTU21D к вашему Arduino, начните с подключения вывода VCC датчика к выводу питания 3.3V на Arduino. Затем подключите вывод GND датчика к выводу заземления (GND) на Arduino. После этого подключите вывод SDA датчика к аналоговому выводу A4 на Arduino, который служит как линия данных I2C. Наконец, подключите вывод SCL датчика к аналоговому выводу A5, который выполняет функции линии тактового сигнала I2C. Убедитесь, что ваши соединения надежны, чтобы избежать прерывистых показаний.

Для ясности, если вы используете другую плату, убедитесь, что правильно определили контакты для SDA и SCL, так как они могут отличаться. Эта схема подключения позволит Arduino эффективно взаимодействовать с датчиком HTU21D (в видео на 05:00).

Примеры кода и руководство

Ниже приведен фрагмент функции настройки, которая инициализирует последовательную связь и проверяет, обнаружен ли датчик:

void setup() {
  Serial.begin(9600);
  if (!htu.begin()) {
    Serial.println("Couldn't find sensor!");
    while (1);
  }
}

Этот код начинает последовательную связь с baud rate 9600 и пытается инициализировать датчик HTU21D. Если датчик не обнаружен, он выведет сообщение об ошибке и прекратит дальнейшее выполнение.

Основной цикл программы непрерывно считывает значения температуры и влажности:

void loop() {
    Serial.print(getHTU('C'));
    Serial.println("C");
    Serial.print("Humidity:");
    Serial.print(getHTU('H'));
    Serial.println("%");
    delay(1000);
}

В этом цикле мы вызываем функциюgetHTUс 'C' для получения температуры в Цельсиях и 'H' для получения влажности. Результаты выводятся на последовательный монитор каждую секунду. Это позволяет в реальном времени наблюдать за показаниями сенсора.

Кроме того, у нас есть функцияgetHTUкоторая возвращает температуру или влажность в зависимости от ввода символа:

float getHTU(char type) {
    float temp = htu.readTemperature();
    float rel_hum = htu.readHumidity();
    return (type == 'H') ? rel_hum : temp;
}

Эта функция считывает температуру и влажность с сенсора и возвращает соответствующее значение в зависимости от указанного типа. Этот модульный подход позволяет поддерживать код чистым и легким для обслуживания.

Демонстрация / Что можно ожидать

После успешной настройки и выполнения кода вы должны увидеть, как значения температуры и влажности выводятся на(serial monitor. Если вы примените тепло к сенсору, показания температуры должны соответственно увеличиться, в то время как влажность может уменьшиться. Если температура превысит максимальный диапазон сенсора, это может привести к неожиданным результатам, таким как ноль (в видео на 12:00).

Временные метки видео

  • 00:00- Введение
  • 03:15- Обзор сенсоров
  • 05:00- Инструкции по проводке
  • 10:00- Просмотр кода
  • 12:00- Демонстрация

Изображения

Arduino wiring for HTU21DF light intesity sensor
Arduino wiring for HTU21DF light intesity sensor
HTU21D module
HTU21D module
HTU21D module-back
HTU21D module-back
512-Lesson 35: Using HTU21D Temperature Sensor
Язык: C++
/*
 * Robojax Arduino Step-by-Step Course
 * Part 4: Temperature Sensors
 * Lesson 35: HTU21D Temperature Sensor
 

 * 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 & 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
 ****************************************************/

#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() {
  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");  
}

Вещи, которые могут вам понадобиться

Файлы📁

Технический паспорт (pdf)