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

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

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

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

HTU21D module

Прежде чем мы погрузимся в проводку и код, важно понимать участвующие компоненты. Датчик 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, если они не интегрированы.
  • Сохраняйте соединения датчиков короткими, чтобы минимизировать шум.
  • Следите за напряжением во время работы, чтобы поддерживать стабильность.
  • Рассмотрите возможность использования конденсатора для декупирования рядом с силовыми выводами.

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

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

Чтобы подключить датчик температуры 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Вывод

Изображения

Arduino wiring for HTU21DF light intesity sensor
Arduino wiring for HTU21DF light intesity sensor
HTU21D module
HTU21D module
HTU21D module-back
HTU21D module-back
513-Lesson 35: Using HTU21D Temperature Sensor (F, C, K, RH)
Язык: C++
/*
 * 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");  
}

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

Файлы📁

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

Другие файлы