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

Отображение температуры с HTU21D в виде столбчатой диаграммы на ЖК-дисплее

Отображение температуры с HTU21D в виде столбчатой диаграммы на ЖК-дисплее

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

HTU21D module

Для тех, кто хочет визуальное руководство, обязательно посмотрите видео, связанное с этим учебником (видео на :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.
  • Убедитесь, что ЖК-дисплей правильно инициализирован с правильным адресом.

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

Arduino wiring for HTU21DF light intesity sensor with LCD
Arduino wiring for HTU21DF light intesity sensor with LCD

Чтобы подключить датчик 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- Заключение

Изображения

Arduino wiring for HTU21DF light intesity sensor with LCD
Arduino wiring for HTU21DF light intesity sensor with LCD
HTU21D module
HTU21D module
HTU21D module-back
HTU21D module-back
214-Arduino code using HTU21D-F Humidity & Temperature on LCD bargraph
Язык: C++
/* 
 *  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;
}//

Файлы📁

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

Другие файлы