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

درس 35-1: استفاده از حساس(حس کننده) دما HTU21D

درس 35-1: استفاده از حساس(حس کننده) دما HTU21D

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

HTU21D module

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

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

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

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

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

  • ۰۰:۰۰- مقدمه
  • ۰۳:۱۵- مرور کلی حساس(حس کننده)
  • ۰۵:۰۰- دستورالعمل‌های سیم‌کشی
  • ۱۰:۰۰- بررسی شِفر (کود)
  • ۱۲:۰۰- نمایش

تصاویر

Arduino wiring for HTU21DF light intesity sensor
Arduino wiring for HTU21DF light intesity sensor
HTU21D module
HTU21D module
HTU21D module-back
HTU21D module-back
512-Lesson 35: Using HTU21D Temperature Sensor
زبان: C++
/*
 * 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");  
}

مواردی که ممکن است به آن‌ها نیاز داشته باشید

فایل‌ها📁

برگه مشخصات (pdf)