این آموزش بخشی است از: سنسور رطوبت و دمای نسبی دیجیتال HTU21D
ویدیوهای مربوط به سنسور رطوبت و دمای نسبی دیجیتال HTU21D. لینک سایر ویدیوها در زیر این مقاله قرار دارد.
درس 35-1: استفاده از حساس(حس کننده) دما HTU21D
در این آموزش، ما به بررسی چگونگی استفاده از حساس(حس کننده) دما و رطوبت HTU21D با آردوینو خواهیم پرداخت. HTU21D یک حساس(حس کننده) جمع و جور است که از طریق I2C ارتباط برقرار میکند و این کار را برای ارتباط با میکروکنترلرها آسان میسازد. در پایان این درس، شما قادر خواهید بود مقادیر دما و رطوبت را خوانده و آنها را از طریق نمایشگر مسلسل آردوینو نمایش دهید.

برای این پروژه، ما از کتابخانه Adafruit که بهطور خاص برای حساس(حس کننده) HTU21D طراحی شده است، استفاده خواهیم کرد. این کتابخانه فرآیند خواندن دادههای حساس(حس کننده) را ساده میکند و به ما این امکان را میدهد که بر روی یکپارچهسازی حساس(حس کننده) در پروژههایمان تمرکز کنیم. شما میتوانید انتظار داشته باشید که دماهای حساس(حس کننده) را به درجه سانتیگراد، درجه فارنهایت و کلاسیوس، و همچنین درصد رطوبت نسبی (در ویدیو در :15) مشاهده کنید.
توضیح سختافزار
اجزای اصلی این پروژه حساس(حس کننده) دما و رطوبت HTU21D است. این حساس(حس کننده) با ولتاژ تأمین 1.5 تا 3.6 ولت کار میکند و مصرف پاور بسیار کمی دارد که آن را برای دستگاههای باتریعملیاتی ایدهآل میسازد. این حساس(حس کننده) با استفاده از پروتکل I2C با آرودینو ارتباط برقرار میکند و تنها به دو خط داده نیاز دارد: SDA برای داده و SCL برای کلاک.
برای تغذیه حساس(حس کننده)، ما آن را به یکی از منابع 3.3V یا 5V متصل خواهیم کرد، بسته به ماجیول خاصی که استفاده میکنید. نسخه آدافروت شامل یک تنظیمکننده ولتاژ است که به آن اجازه میدهد بهطور یکپارچه با هر دو سطح ولتاژ کار کند. این انعطافپذیری آن را به انتخاب مناسبی برای کاربردهای مختلف تبدیل میکند.
جزئیات برگه داده
| تولیدکننده | TE Connectivity |
|---|---|
| شماره قطعه | HTU21D-F |
| ولتاژ منطقی/ورودی-خروجی | 1.5 - 3.6 ولت |
| ولتاژ تأمین | 3.3 ولت (معمولی) |
| مصرف فعلی (در حالت بیکار) | ۰.۰۲ میکروآمپر |
| مصرف فعلی (اندازهگیری) | ۴۵۰ میکروآمپر (معمولی) |
| دامنه دما | -40 تا +125 درجه سانتیگراد |
| رزولوشن رطوبت | ۰.۰۴ درصد |
| بسته | DFN شش پایه |
- اطمینان حاصل کنید که سطوح ولتاژ مناسب باشد تا از آسیب به حساس(حس کننده) جلوگیری شود.
- از مقاومتهای کششی در خطوط I2C استفاده کنید اگر در ماجیول گنجانده نشده باشد.
- کابلها را کوتاه نگهدارید تا تداخل با ارتباط I2C به حداقل برسد.
- در صورت استفاده در محیطهای با دمای بالا، به استفاده از سینک حرارتی توجه کنید.
- حساس(حس کننده) را از نظر جهتگیری بررسی کنید تا از اتصالات صحیح پایهها اطمینان حاصل شود.
دستورالعملهای سیمکشی

برای متصل کردن حساس(حس کننده) HTU21D به آردوینو، ابتدا پایه VCC حساس(حس کننده) را به پایه تغذیه 3.3V آردوینو وصل کنید. سپس پایه GND حساس(حس کننده) را به پایه زمین (GND) آردوینو متصل کنید. بعد، پایه SDA حساس(حس کننده) را به پایه آنالوگ A4 آردوینو که به عنوان خط داده I2C عمل میکند متصل کنید. در نهایت، پایه SCL حساس(حس کننده) را به پایه آنالوگ A5 که به عنوان خط ساعت I2C عمل میکند وصل کنید. مطمئن شوید که اتصالات شما محکم هستند تا از قرائتهای متناوب جلوگیری شود.
برای وضوح، اگر از یک برد متفاوت استفاده میکنید، اطمینان حاصل کنید که پایههای صحیح برای SDA و SCL را شناسایی کردهاید زیرا ممکن است متفاوت باشند. این تنظیمات سیمکشی به آردوینو اجازه میدهد تا بهطور مؤثر با حساس(حس کننده) HTU21D ارتباط برقرار کند (در ویدئو در 05:00).
نمونههای شِفر (کود) و راهنمایی
در زیر بخشی از تابع راهاندازی آمده است که ارتباط سریال را راهاندازی کرده و بررسی میکند که آیا حساس(حس کننده) پیدا شده است:
void setup() {
Serial.begin(9600);
if (!htu.begin()) {
Serial.println("Couldn't find sensor!");
while (1);
}
}این شِفر (کود) ارتباط سریالی را با سرعت 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;
}این تابع دما و رطوبت را از حساس(حس کننده) میخواند و بر اساس نوع مشخص شده، مقدار مناسب را بازمیگرداند. این رویکرد ماژولار شِفر (کود) را تمیز و نگهداری آن را آسان میکند.
نمایشگاه / چه انتظاری باید داشت
با موفقیت راهاندازی و اجرای شِفر (کود)، باید مقادیر دما و رطوبت در نمایشگر مسلسل چاپ شود. اگر به حساس(حس کننده) گرما اعمال کنید، قرائتهای دما باید بهطور متناسب افزایش یابند، در حالی که رطوبت ممکن است کاهش یابد. اگر دما از حداکثر محدوده حساس(حس کننده) فراتر رود، ممکن است نتایج غیرمنتظرهای، مانند صفر، نشان داده شود (در ویدیو در 12:00).
زمانبندی ویدیو
- ۰۰:۰۰- مقدمه
- ۰۳:۱۵- مرور کلی حساس(حس کننده)
- ۰۵:۰۰- دستورالعملهای سیمکشی
- ۱۰:۰۰- بررسی شِفر (کود)
- ۱۲:۰۰- نمایش
این آموزش بخشی از: سنسور رطوبت و دمای نسبی دیجیتال HTU21D
- درس 35-2: استفاده از حساس(حس کننده) دما HTU21D - شِفر (کود) سفارشی
- درس 35: استفاده از حساس(حس کننده) دمای HTU21D با آردوینو
- درس ۳۶: استفاده از حساس(حس کننده) دما HTU21D با یک LCD در دوره آموزشی مرحله به مرحله آردوینو
- استفاده از دو حساس(حس کننده) رطوبت و دما HTU21DF دیگر با آردوینو
- نمایش دما از یک HTU21D بر روی LCD
- نمایش دما از یک HTU21D به صورت نمودار میلهای بر روی یک LCD
- نحوه استفاده از حساس(حس کننده) رطوبت و دما HTU21DF با آردوینو (شِفر (کود) پایه)
- نحوه استفاده از حساس(حس کننده) رطوبت و دما HTU21DF با آردوینو (شِفر (کود) سفارشی)
/*
* 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");
}
مواردی که ممکن است به آنها نیاز داشته باشید
-
آمازون
-
ایبیHTU21D را از eBay خریداری کنیدebay.us
-
علیاکسپرسHTU21D یا SHT21 را از علیاکسپرس خریداری کنیدs.click.aliexpress.com
منابع و مراجع
-
خارجیتفاوت بین HTU21DF و HTU21D (تصویر)robojax.com
فایلها📁
برگه مشخصات (pdf)
-
سند داده های دما و رطوبت HTU21D
HTU21D_temerature_humidity_datasheet.pdf0.96 MB -
برگه داده حسگرهای دما و رطوبت HTU31D HTU31V
HTU31_Sensors_Datasheet.pdf0.67 MB