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

استفاده از دو حساس(حس کننده) رطوبت و دما HTU21DF دیگر با آردوینو

استفاده از دو حساس(حس کننده) رطوبت و دما HTU21DF دیگر با آردوینو

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

HTU21D module

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

برای درک بهتر از فرآیند سیم‌کشی و کدنویسی، پیشنهاد می‌کنیم ویدئوی مرتبط را تماشا کنید (در ویدئو در :30). بیایید به جزئیات بپردازیم!

توضیح سخت‌افزار

اجزای اصلی این پروژه حساس(حس کننده) HTU21DF است که دما و رطوبت نسبی را اندازه‌گیری می‌کند. این حساس(حس کننده) با استفاده از ارتباط I2C کار می‌کند که با نیاز به تنها دو خط داده، سیم‌کشی را ساده می‌کند. این حساس(حس کننده) قادر است دماهای بین -40°C تا 125°C و سطوح رطوبت بین 0% تا 100% را با دقت 0.04% اندازه‌گیری کند.

زمانی که حساس(حس کننده) به طور فعال اندازه‌گیری نمی‌کند، تنها ۰.۰۴ میکروآمپر مصرف می‌کند که آن را برای برنامه‌های باتری‌خور مناسب می‌سازد. هنگام اندازه‌گیری، مصرف جریان حدود ۴۰۰ میکروآمپر است که هنوز هم برای بسیاری از پروژه‌ها نسبتاً کم است.

جزئیات ورق داده

تولیدکنندهتِی ای کانکتویتی
شماره قطعهHTU21DF
ولتاژ منطقی/ورودی و خروجی۱.۵ - ۳.۶ ولت
ولتاژ تامین۳.۳ ولت
جریان خروجی (به ازای هر کانال)۰.۴ میلی‌آمپر (اندازه‌گیری)
جریان اوج (به ازای هر کانال)۴۵۰ میکروآمپر (حداکثر)
راهنمایی فرکانس PWMقابل اعمال نیست
آستانه های منطقی ورودی۰.۳ × VDDبه 0.7 x VDD
افت ولتاژ / RDS(on)/ اشباعN/A
محدودیت‌های حرارتی-۴۰ درجه سانتی‌گراد تا +۱۲۵ درجه سانتی‌گراد
بستهDFN شش‌پایه
یادداشت‌ها / واریانت‌هادر اندازه‌های مختلف بسته‌بندی موجود است

  • منبع تغذیه: ۳.۳ ولت برای عملکرد بهینه توصیه می‌شود.
  • SCL را به پایه ساعت I2C (A5 در آردوینو UNO) وصل کنید.
  • سیم SDA را به پایه داده I2C (A4 در آردوینو UNO) متصل کنید.
  • اطمینان حاصل کنید که سیم‌کشی به درستی انجام شده باشد تا از ورودی‌های شناور جلوگیری شود.
  • در هنگام اندازه‌گیری مصرف کنونی را تحت نظر داشته باشید تا عمر باتری را مدیریت کنید.
  • در صورت لزوم از مقاومت‌های کششی برای خطوط I2C استفاده کنید.

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

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

برای سیم‌کشی حسگرهای HTU21DF، ابتدا شروع به اتصال V کنید.CCپایه هر حساس(حس کننده) را به پایه ۳.۳ ولت روی آردوینو متصل کنید. سپس پایه GND هر حساس(حس کننده) را به زمین مشترک متصل کنید. برای ارتباط I2C، پایه SDA هر دو حساس(حس کننده) را به پایه A4 روی آردوینو و پایه SCL را به پایه A5 متصل کنید. اطمینان حاصل کنید که سنسورها به درستی برق‌دار شده‌اند و اتصالات داده ایمن هستند تا ارتباط تسهیل شود.

اگر از حسگرها یا اجزای اضافی استفاده می‌کنید، مطمئن شوید که سیم‌کشی آن‌ها با باس I2C تداخل نکند. حسگرهای HTU21DF می‌توانند به‌صورت موازی به همان باس I2C متصل شوند و این امکان را برای آردوینو فراهم می‌کند که بدون ابهام داده‌ها را از هر دو حساس(حس کننده) بخواند.

نمونه‌های شِفر (کود) و راهنمای استفاده

شِفر (کود) زیر سنسورهای HTU21DF را راه‌اندازی کرده و مقادیر دما و رطوبت آنها را می‌خواند. ابتدا، کتابخانه‌های لازم را وارد می‌کنیم و نمونه‌هایی برای هر دو حساس(حس کننده) ایجاد می‌کنیم:

#include 
#include "Adafruit_HTU21DF.h"

Adafruit_HTU21DF htu1 = Adafruit_HTU21DF(); // create object for first sensor
Adafruit_HTU21DF htu2 = Adafruit_HTU21DF(); // create object for second sensor

شِفر (کود) بالا کتابخانه‌های مورد نیاز را تنظیم کرده و دو شیء حساس(حس کننده) ایجاد می‌کند،htu1وhtu2که برای خواندن داده‌ها از هر حساس(حس کننده) به طور مستقل استفاده خواهد شد.

متن بعدی درsetup()تابع، ما نمایشگر مسلسل را راه‌اندازی کرده و بررسی می‌کنیم که آیا حسگرها متصل هستند:

void setup() {
  Serial.begin(9600);
  if (!htu1.begin() || !htu2.begin()) {
    Serial.println("Couldn't find sensor!");
    while (1);
  }
}

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

در حلقه اصلی، ما مقادیر دما و رطوبت را از هر دو حساس(حس کننده) خوانده و نمایش می‌دهیم:

void loop() {
    float temp1 = htu1.readTemperature();
    float rel_hum1 = htu1.readHumidity();
    float temp2 = htu2.readTemperature();
    float rel_hum2 = htu2.readHumidity();

    Serial.print("Sensor 1 Temp: "); Serial.print(temp1); Serial.print(" C");
    Serial.print("\tSensor 1 Humidity: "); Serial.print(rel_hum1); Serial.println(" %");
    Serial.print("Sensor 2 Temp: "); Serial.print(temp2); Serial.print(" C");
    Serial.print("\tSensor 2 Humidity: "); Serial.print(rel_hum2); Serial.println(" %");
    delay(500);
}

این حلقه به طور مداوم دما و رطوبت را از هر دو حساس(حس کننده) هر ۵۰۰ میلی‌ثانیه می‌خواند و چاپ می‌کند. شما می‌توانید مشاهده کنید که چگونه مقادیر در پاسخ به شرایط محیطی تغییر می‌کنند.

نمایشگاه / چه انتظاری باید داشت

زمانی که شِفر (کود) را اجرا می‌کنید، نمایشگر مسلسل دما و رطوبت هر دو حساس(حس کننده) را نمایش خواهد داد. شما می‌توانید از گرم‌کن، مانند تفنگ حرارتی، استفاده کنید تا ببینید چگونه اندازه‌گیری‌های دما افزایش می‌یابد در حالی که سطح رطوبت ممکن است کاهش یابد (در ویدئو در ۱۲:۳۰). اگر دما از حداکثر حد قابل اندازه‌گیری یعنی ۱۲۵ درجه سانتی‌گراد فراتر رود، حساس(حس کننده) ممکن است صفر یا خطا را برگرداند که نشان‌دهنده عدم توانایی در خواندن مقدار است.

به اشتباهات سیم‌کشی توجه داشته باشید، مانند اتصالات معکوس یا ورودی‌های شناور که می‌توانند به خوانش‌های نادرست منجر شوند. با پیروی از مراحل توضیح داده شده در این آموزش، باید قادر باشید سنسورهای HTU21DF را به‌طور موفقیت‌آمیز پیاده‌سازی کرده و خوانش‌های آن‌ها را به‌طور مؤثر زیر نظر داشته باشید.

برچسب‌های زمانی ویدیو

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

تصاویر

thumb_robojax_HTU21DF_types-1756423961-8524
thumb_robojax_HTU21DF_types-1756423961-8524
Arduino wiring for HTU21DF light intesity sensor
Arduino wiring for HTU21DF light intesity sensor
HTU21D module
HTU21D module
HTU21D module-back
HTU21D module-back
212-Arduino code using HTU21D-F Humidity & Temperature Sensor (basic)
زبان: C++
++
/***************************************************
  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 module 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 htu1 = Adafruit_HTU21DF();//create object for first HTU21DF sensor
Adafruit_HTU21DF htu2 = Adafruit_HTU21DF();//create object for second HTU21DF sensor
//Adafruit_HTU21DF htu3 = Adafruit_HTU21DF();//create object for third HTU21DF sensor (disabled, remove // from begging of code)

void setup() {
  Serial.begin(9600);
  Serial.println("HTU21D-F test for two modules");

  if (!htu.begin()) {
    Serial.println("Couldn't find sensor!");
    while (1);
  }
}

void loop() {
	//get value for sensor 1
    float temp1 = htu1.readTemperature();
    float rel_hum1 = htu1.readHumidity();

	//get value for sensor 2
    float temp2 = htu2.readTemperature();
    float rel_hum2 = htu2.readHumidity();	

	//get value for sensor 3
    float temp3 = htu3.readTemperature();
    float rel_hum3 = htu3.readHumidity();	
	
	//print values for sensor 1
    Serial.print("Sensor 1 Temp : "); Serial.print(temp1); Serial.print(" C");
    Serial.print("\t\t");
    Serial.print("Sensor 1 Humidity: "); Serial.print(rel_hum1); Serial.println(" %");

	//print values for sensor 2
    Serial.print("Sensor 2 Temp : "); Serial.print(temp2); Serial.print(" C");
    Serial.print("\t\t");
    Serial.print("Sensor 2 Humidity: "); Serial.print(rel_hum2); Serial.println(" %");	
	
	//print values for sensor 3
    //Serial.print("Sensor 3 Temp : "); Serial.print(temp3); Serial.print(" C");
    //Serial.print("\t\t");
    //Serial.print("Sensor 3 Humidity: "); Serial.print(rel_hum3); Serial.println(" %");	
	
    delay(500);
}

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

منابع و مراجع

فایل‌ها📁

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