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

قبل از اینکه به سیمکشی و کدنویسی بپردازیم، فهم اجزای مرتبط ضروری است. حساس(حس کننده) HTU21D به حداقل اتصالات نیاز دارد: تغذیه، زمین و دو سیم I2C برای انتقال داده. این سادگی آن را برای کاربردهای مختلف، از ایستگاههای هواشناسی تا دستگاههای خانه هوشمند، گزینهای عالی میسازد. برای راهنمایی بصری، به ویدیو در زمان 03:45 مراجعه کنید.
تجهیزات توضیح داده شده
الاجزای اصلی در این پروژه حساس(حس کننده) HTU21D است که دما و رطوبت را اندازهگیری میکند. این حساس(حس کننده) میتواند در ولتاژهای بین 1.5V تا 3.6V کار کند، که آن را برای کاربردهای مختلف چندمنظوره میسازد. این حساس(حس کننده) قرائتهای با دقت بالا ارائه میدهد، با اندازهگیریهای دما که از -40°C تا +125°C و اندازهگیریهای رطوبت با دقت 0.04% متغیر است.
علاوه بر این، حساس(حس کننده) از ارتباط I2C استفاده میکند که نیاز به دو پایه دارد: SDA (خط داده) و SCL (خط ساعت). این امکان ادغام آسان با آردوینو و سایر میکروکنترلرها را بدون نیاز به سیمکشی پیچیده فراهم میکند. کتابخانه آداFruit تعامل با حساس(حس کننده) را ساده میکند و بازیابی داده و پروتکلهای ارتباطی را به آسانی مدیریت میکند.
جزئیات برگه داده
| تولید کننده | تی ای کانکتویتی |
|---|---|
| شماره قطعه | HTU21D-F |
| ولتاژ منطق/ورودی-خروجی | 1.5 - 3.6 ولت |
| ولتاژ تأمین | ۳.۳ ولت |
| مصرف جاری (بیکار) | ۰.۰۲ میکروآمپر (معمولی) |
| مصرف کنونی (فعال) | ۴۵۰ میکروآمپر (معمولی) |
| محدوده دما | -۴۰ تا +۱۲۵ درجه سانتیگراد |
| محدوده رطوبت | ۰ تا ۱۰۰٪ رطوبت نسبی |
| قطعنامه | ۰.۰۴ %RH؛ ۰.۰۱ °C |
| بسته | DFN شش پینی |
- اطمینان حاصل کنید که منبع تغذیه صحیح باشد تا از آسیب دیدن حساس(حس کننده) جلوگیری شود.
- در صورت عدم ادغام، از مقاومتهای بکش بالا بر روی خطوط SDA و SCL استفاده کنید.
- اتصالات حساس(حس کننده) را کوتاه نگه دارید تا اغتشاش (نویز) را به حداقل برسانید.
- ولتاژ را در حین کار مانیتور کنید تا ثبات حفظ شود.
- استفاده از یک خازن برای جداسازی نزدیک پایههای تغذیه را در نظر بگیرید.
دستورالعملهای سیمکشی

برای اتصال حساس(حس کننده) دما HTU21D، ابتدا به برق و زمین وصل کنید. پایه چپ حساس(حس کننده) را به یک منبع 3.3 ولت متصل کنید و اطمینان حاصل کنید که میتواند ولتاژ مورد نیاز را تحمل کند. پایه دوم، که معمولاً با رنگ قرمز علامتگذاری شده است، باید به زمین متصل شود.
سپس، پایه SDA حساس(حس کننده) را به پایه متصل کنیدA4در آردوینو، که به عنوان خط داده برای ارتباط 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()با پارامترهای مختلف فراخوانی میشود تا دما را به درجه سلسیوس و رطوبت دریافت کند. تأخیر تضمین میکند که اندازهگیریها هر ثانیه انجام شوند و خروجی مناسب و صاف بر روی نمایشگر مسلسل ارائه شود. شِفر (کود) کامل برای مرجع در زیر مقاله موجود است.
نمایشگاه / چه انتظاری باید داشت
پس از اینکه همه چیز به درستی سیمکشی شد و شِفر (کود) بارگذاری شد، باید شاهد خوانش دما و رطوبت در نمایشگر مسلسل باشید. دما به سانتیگراد نمایش داده میشود و پس از آن درصد رطوبت مربوطه نمایش مییابد. اگر به حساس(حس کننده) گرما اعمال کنید، باید شاهد افزایش دما به طور متناسب باشید (در ویدیو در :15).
مراقب محدودیتهای حساس(حس کننده) باشید؛ اگر دما از ۱۲۵ درجه سانتیگراد تجاوز کند، ممکن است نتایج نادرستی ارائه دهد یا صفر را نمایش دهد. همیشه اطمینان حاصل کنید که اتصالات شما محکم هستند و حساس(حس کننده) به درستی تغذیه شده است تا از بروز هر گونه مشکل در حین عملکرد جلوگیری شود.
زمانبندی ویدیوها
- ۰۰:۰۰مقدمه
- ۰۳:۴۵سیمکشی حساس(حس کننده)
- ۰۵:۳۰مسیرنمای شِفر (کود)
- ۱۰:۱۵نمونشگرایی
- ۱۲:۰۰نتیجهگیری
این آموزش بخشی از: سنسور رطوبت و دمای نسبی دیجیتال HTU21D
- درس 35-1: استفاده از حساس(حس کننده) دما 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 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");
}
مواردی که ممکن است به آنها نیاز داشته باشید
-
آمازون
-
ایبیHTU21D را از eBay خریداری کنیدebay.us
-
علیاکسپرسHTU21D یا SHT21 را از علیاکسپرس خریداری کنیدs.click.aliexpress.com
منابع و مراجع
-
خارجیبرگ وبورق HTU21D (PDF)cdn-shop.adafruit.com
-
خارجیتفاوت بین HTU21DF و HTU21D (تصویر)robojax.com
-
خارجیکتابخانه Adafruit HTU21D (گیتهاب)github.com
فایلها📁
برگه مشخصات (pdf)
-
سند داده های دما و رطوبت HTU21D
HTU21D_temerature_humidity_datasheet.pdf0.96 MB