این آموزش بخشی است از: سنسور رطوبت و دمای نسبی دیجیتال HTU21D
ویدیوهای مربوط به سنسور رطوبت و دمای نسبی دیجیتال HTU21D. لینک سایر ویدیوها در زیر این مقاله قرار دارد.
نمایش دما از یک HTU21D به صورت نمودار میلهای بر روی یک LCD
در این آموزش، ما یاد خواهیم گرفت که چگونه خوانشهای دما از حساس(حس کننده) دما و رطوبت HTU21D را روی یک صفحه نمایش LCD به صورت نمودار میلهای نمایش دهیم. خوانشها شامل مقادیر در سلسیوس، فارنهایت، کلوین و رطوبت نسبی خواهد بود که نمایی جامع از شرایط محیطی را ارائه میدهد. این پروژه به شما کمک خواهد کرد تا یاد بگیرید که چگونه اجزاء را به درستی متصل کنید و شِفر (کود) لازم را پیادهسازی کنید تا همه چیز به صورت یکپارچه کار کند.

برای کسانی که به یک راهنمای بصری نیاز دارند، حتماً ویدیویی که با این آموزش مرتبط است را بررسی کنید (در ویدیو در ۰۰:۰۰).
توضیح سختافزار
اجزای اصلی این پروژه شامل حساس(حس کننده) HTU21D و نمایشگر LCD 1602 است. HTU21D یک حساس(حس کننده) دیجیتال رطوبت و دما است که از طریق I2C ارتباط برقرار میکند. این حساس(حس کننده) قرائتهای دقیقی از دما و رطوبت ارائه میدهد که به راحتی میتوان به آنها از طریق کتابخانهاش دسترسی پیدا کرد. از طرف دیگر، نمایشگر LCD 1602 قرائتها را به صورت قابلفهم برای انسان نمایش میدهد و امکان ارزیابی سریع شرایط محیطی را فراهم میکند.
ماجیول HTU21D از یک رابط I2C ساده استفاده میکند که آن را به راحتی به میکروکنترلرهایی مانند آردوینو متصل و ارتباط برقرار میکند. نمایشگر LCD 1602 نیز از I2C استفاده میکند که با کاهش تعداد پایههای مورد نیاز برای اتصال به آردوینو، سیمکشی را سادهتر میسازد. این امر امکان ایجاد یک تنظیمات تمیزتر را فراهم میآورد در حالی که همچنان خروجی بصری واضحی را ارائه میدهد.
جزئیات برگه داده
| تولیدکننده | ادو فرانک |
|---|---|
| شماره قطعه | HTU21D |
| ولتاژ منطقی/ورودی و خروجی | ۳.۳ ولت (معمولی) |
| ولتاژ تغذیه | 1.5 - 3.6 ولت |
| محدوده دما | -۴۰ تا ۱۲۵ درجه سلسیوس |
| دامنه رطوبت | 0 تا 100 %RH |
| قطعنامه | ۰٫۰۱ °C / ۰٫۰۴ %RH |
| ارتباطات | I2C |
| بسته | ۴ پایه LGA |
- از ولتاژ ۳.۳ ولت برای تغذیه HTU21D استفاده کنید؛ اتصال به ۵ ولت میتواند به آن آسیب برساند.
- اطمینان حاصل کنید که از مقاومتهای کشش مناسب در خطوط I2C (SDA و SCL) استفاده شده است.
- در حین آزمایش، حساس(حس کننده) را از منابع حرارتی دور نگه دارید.
- آدرس صحیح I2C را با استفاده از یک اسکتچ اسکنر I2C بررسی کنید.
- اطمینان حاصل کنید که السیدی به درستی با آدرس صحیح inicialized شده است.
دستورالعملهای سیمکشی

برای اتصال حساس(حس کننده) HTU21D و نمایشگر LCD 1602، این مراحل را با دقت دنبال کنید:
ابتدا حساس(حس کننده) HTU21D را وصل کنید. پایه اول (VCC) را به پایه ۳.۳ ولت روی آردوینو متصل کنید. پایه دوم (GND) باید به زمین (GND) آردوینو متصل شود. پایه سوم (SDA) به پایه A4 آردوینو متصل است و پایه چهارم (SCL) به پایه A5 وصل میشود. اطمینان حاصل کنید که از رنگهای مناسب سیمها برای وضوح استفاده کنید: قرمز برای VCC، سیاه برای GND، نارنجی برای SDA و زرد برای SCL.
سپس، برای صفحه نمایش LCD 1602، پایه VCC را به پایه 5 ولت روی آردوینو و پایه GND را به زمین وصل کنید. پایه SDA LCD باید به همان پایه A4 که برای HTU21D استفاده شده وصل شود و پایه SCL باید به پایه A5 متصل شود. این تنظیم اجازه میدهد تا هم حساس(حس کننده) و هم نمایشگر از طریق پروتکل I2C با یکدیگر ارتباط برقرار کنند.
مثالهای شِفر (کود) و راهنمایی
در شِفر (کود)، اولین قدم شامل کردن کتابخانههای ضروری برای حساس(حس کننده) و LCD است. خط#include برای ارتباط I2C ضروری است، در حالی که#include "Adafruit_HTU21DF.h"حساس(حس کننده) HTU21D را راهاندازی میکند. خط بعدی یک نمونه از کلاس HTU21D ایجاد میکند:
Adafruit_HTU21DF htu = Adafruit_HTU21DF();این خط، حساس(حس کننده) را برای استفاده در برنامه تنظیم میکند و به ما این امکان را میدهد که بعداً به روشهای آن برای خواندن مقادیر دما و رطوبت دسترسی داشته باشیم.
در داخلsetup()تابع، ما مانیتور سریالی و نمایشگر LCD را راه اندازی می کنیم. خطوط زیر بررسی می کنند که آیا حساس(حس کننده) به درستی کار می کند:
if (htu.begin()) {
lcd.print("HTU21DF Bargraph");
} else {
lcd.print("missing HTU21DF");
while(1); // Pause forever.
}اگر حساس(حس کننده) نتواند راهاندازی شود، برنامه یک پیام خطا نمایش خواهد داد و اجرای آن متوقف خواهد شد. این برای اشکالزدایی بسیار مهم است و اطمینان میدهد که حساس(حس کننده) به درستی متصل است.
In theloop()کارکرد، دما خوانده شده و نمایش داده میشود. خطfloat T = getHTU('H');دمای یا رطوبت را بر اساس پارامتر وارد شده بازیابی میکند. سپس مقدار بازیابی شده بر روی LCD نمایش داده میشود:
lcd.setCursor (0,1);
lcd.print(T); // print
lcd.print((char)223); // prints degree symbol
lcd.print("C"); //این شِفر (کود) نشانگر را در خط دوم LCD قرار میدهد و مقدار دما را به همراه نماد درجه چاپ میکند. استفاده از(char)223این یک ترفند مفید برای نمایش نماد درجه بر روی LCD است.
نمایشگاه / چه انتظاری باید داشته باشیم
پس از اینکه همه چیز تنظیم شد و شِفر (کود) بارگذاری شد، باید دما را به صورت یک گراف میلهای روی LCD مشاهده کنید. خوانشها به طور مداوم بهروز میشوند و دما و رطوبت کنونی را نمایش میدهند. اگر هوای گرم را به حساس(حس کننده) بدمید، خواهید دید که دما به سرعت افزایش مییابد و تأیید میکند که سیستم طبق انتظار کار میکند. مراقب معکوس بودن قطبیت یا سیمکشی نادرست باشید، زیرا این موارد میتوانند به خرابی یا آسیب منجر شوند (در ویدیو در 02:30).
زمانبندی ویدئو
- ۰۰:۰۰- مقدمه
- ۰۱:۳۰- توضیح سیمکشی
- ۰۰:۳۰- بررسی شِفر (کود)
- 04:00- نمایش
- ۰۵:۳۰- نتیجه گیری
این آموزش بخشی از: سنسور رطوبت و دمای نسبی دیجیتال HTU21D
- درس 35-1: استفاده از حساس(حس کننده) دما HTU21D
- درس 35-2: استفاده از حساس(حس کننده) دما HTU21D - شِفر (کود) سفارشی
- درس 35: استفاده از حساس(حس کننده) دمای HTU21D با آردوینو
- درس ۳۶: استفاده از حساس(حس کننده) دما HTU21D با یک LCD در دوره آموزشی مرحله به مرحله آردوینو
- استفاده از دو حساس(حس کننده) رطوبت و دما HTU21DF دیگر با آردوینو
- نمایش دما از یک HTU21D بر روی LCD
- نحوه استفاده از حساس(حس کننده) رطوبت و دما HTU21DF با آردوینو (شِفر (کود) پایه)
- نحوه استفاده از حساس(حس کننده) رطوبت و دما HTU21DF با آردوینو (شِفر (کود) سفارشی)
/*
* 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.com
فایلها📁
برگه مشخصات (pdf)
-
سند داده های دما و رطوبت HTU21D
HTU21D_temerature_humidity_datasheet.pdf0.96 MB