شِفر (کود) جستجو

درس 35-2: استفاده از حساس(حس کننده) دما HTU21D - شِفر (کود) سفارشی

درس 35-2: استفاده از حساس(حس کننده) دما HTU21D - شِفر (کود) سفارشی

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

HTU21D module

قبل از اینکه به سیم‌کشی و کدنویسی بپردازیم، فهم اجزای مرتبط ضروری است. حساس(حس کننده) 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 استفاده کنید.
  • اتصالات حساس(حس کننده) را کوتاه نگه دارید تا اغتشاش (نویز) را به حداقل برسانید.
  • ولتاژ را در حین کار مانیتور کنید تا ثبات حفظ شود.
  • استفاده از یک خازن برای جداسازی نزدیک پایه‌های تغذیه را در نظر بگیرید.

دستورالعمل‌های سیم‌کشی

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

برای اتصال حساس(حس کننده) دما 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).

مراقب محدودیت‌های حساس(حس کننده) باشید؛ اگر دما از ۱۲۵ درجه سانتی‌گراد تجاوز کند، ممکن است نتایج نادرستی ارائه دهد یا صفر را نمایش دهد. همیشه اطمینان حاصل کنید که اتصالات شما محکم هستند و حساس(حس کننده) به درستی تغذیه شده است تا از بروز هر گونه مشکل در حین عملکرد جلوگیری شود.

زمانبندی ویدیوها

  • ۰۰:۰۰مقدمه
  • ۰۳:۴۵سیم‌کشی حساس(حس کننده)
  • ۰۵:۳۰مسیرنمای شِفر (کود)
  • ۱۰:۱۵نمونشگرایی
  • ۱۲:۰۰نتیجه‌گیری

تصاویر

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)