درس ۳۶: استفاده از حساس(حس کننده) دما HTU21D با یک LCD در دوره آموزشی مرحله به مرحله آردوینو

درس ۳۶: استفاده از حساس(حس کننده) دما HTU21D با یک LCD در دوره آموزشی مرحله به مرحله آردوینو

حساس(حس کننده) دما و رطوبت HTU21D یک انتخاب محبوب برای بسیاری از پروژه‌های آردوینو به دلیل سهولت استفاده و دقت آن است. در این جلسه، ما یک پروژه ساده می‌سازیم که داده‌های دما و رطوبت را از حساس(حس کننده) خوانده و بر روی یک صفحه نمایش LCD نمایش می‌دهد. در پایان این آموزش، شما یک تنظیمات کاربردی خواهید داشت که به طور مداوم دما را به درجه سلسیوس، فارنهایت و کلوین و همچنین درصد رطوبت نسبی نمایش می‌دهد. برای توضیحات بیشتر، می‌توانید به ویدیو (در ویدیو در دقیقه:ثانیه) مراجعه کنید.

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

اجزای اصلی این پروژه حساس(حس کننده) دما و رطوبت HTU21D است که از طریق I2C ارتباط برقرار می‌کند. این حساس(حس کننده) در محدوده ولتاژ ۱.۵ تا ۳.۶ ولت کار می‌کند و بنابراین برای سیستم‌های ۳.۳ ولت و ۵ ولت مناسب است. این حساس(حس کننده) بسیار کم‌مصرف است و معمولاً تنها ۰.۰۲ میکروآمپر در حالت بیکار و ۴۵۰ میکروآمپر در حین اندازه‌گیری مصرف می‌کند. علاوه بر HTU21D، ما از یک نمایشگر LCD نیز استفاده خواهیم کرد، به‌خصوص LCD1602 با I2C. این نمایشگر امکان خروجی آسان داده‌های متنی را فراهم می‌کند و تنها به دو پایه برای ارتباط نیاز دارد: SDA (خط داده) و SCL (خط ساعت). ترکیب این اجزا به ما این امکان را می‌دهد که یک نمایشگر اطلاعاتی برای نظارت بر سطوح دما و رطوبت ایجاد کنیم.

جزئیات دیتا شیت

سازندهتی ای کانکتویتی
شماره قطعهHTU21D-F
ولتاژ منطق/ورودی و خروجی1.5 - 3.6 ولت
ولتاژ تغذیه۳.۳ ولت (معمولی)
جریان خروجی (معمولی)۰.۰۲ میکروآمپر (بی‌بار)، ۴۵۰ میکروآمپر (اندازه‌گیری)
دامنه دما-40 تا +125 درجه سانتی‌گراد
دامنه رطوبت۰ تا ۱۰۰ درصد رطوبت نسبی
وضوح (دما)0.01 درجه سانتی‌گراد
دقت (رطوبت)۰.۰۴ %RH
بستهDFN-6

  • اگر این خطوط یکپارچه نیستند، از یک مقاومت Pull-up برای خطوط SDA و SCL استفاده کنید.
  • ولتاژ تامین برق صحیح را تضمین کنید تا از آسیب به حساس(حس کننده) جلوگیری شود.
  • نگهداری کابل‌کشی مناسب برای جلوگیری از خطاهای ارتباطی.
  • اگر حساس(حس کننده) پاسخ نمی‌دهد، آدرس I2C را بررسی کنید.
  • برای جلوگیری از بارگذاری حساس(حس کننده)، بین خواندن‌ها یک تأخیر استفاده کنید.
  • اطمینان حاصل کنید که LCD با ارتباط I2C سازگار است.

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

برای اتصال حساس(حس کننده) HTU21D و نمایشگر LCD، ابتدا با اتصالات برق شروع کنید. پایه سمت چپ HTU21D را به منبع تغذیه 3.3V وصل کنید و پایه دوم (که معمولاً قرمز است) را به زمین متصل کنید. سپس، پایه SDA حساس(حس کننده) HTU21D را به پایه آنالوگ A4 آردوینو وصل کنید و پایه SCL را به پایه آنالوگ A5 وصل کنید. برای نمایشگر LCD1602، پایه VCC را به همان منبع تغذیه 3.3V وصل کنید و پایه GND را به زمین متصل کنید. پایه SDA روی LCD نیز باید به A4 متصل شود و پایه SCL باید به A5 متصل شود تا هر دو مؤلفه بتوانند از باس I2C استفاده کنند. اطمینان حاصل کنید که تمام اتصالات ایمن هستند تا ارتباط صحیح بین آردوینو، حساس(حس کننده) و نمایشگر تسهیل شود.

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

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

void setup() {
  lcd.begin();
  lcd.backlight();
  if (!htu.begin()) {
      lcd.print("Robojax HTUD1DF");
      lcd.setCursor(0,1);
      lcd.print("sensor missing"); 
      while (1);
  } else {
      lcd.print("Robojax HTUD1DF");
      lcd.setCursor(0,1);
      lcd.print("Demo"); 
  }
  delay(2000);   
}

این بخش بررسی می‌کند که آیا حساس(حس کننده) به درستی متصل شده است یا خیر. اگر نه، یک پیام خطا روی صفحه LCD نمایش داده می‌شود و برنامه متوقف می‌شود. اگر حساس(حس کننده) به درستی کار کند، یک پیام نمایشی به مدت دو ثانیه نشان داده می‌شود. تابع حلقه جایی است که خواندن و نمایش اصلی انجام می‌شود. در اینجا، ما تابع `lcdDisplay` را برای نمایش دما در واحدهای مختلف فراخوانی می‌کنیم:

void loop() {
   lcd.clear(); // clear previous values from screen
   lcdDisplay(0, 0, "Celsius: ", 10, 0, getHTU('C'), 'd');  
   lcdDisplay(0, 1, "Fahrenheit: ", 10, 1, getHTU('F'), 'd');     
   delay(5000);
}

در این حلقه، صفحه نمایش ال سی دی پاک می‌شود و دما به درجه سلسیوس و فارنهایت نمایش داده می‌شود. تابع `getHTU` با خصیصه 'C' برای سلسیوس و 'F' برای فارنهایت به ترتیب فراخوانی می‌شود. در نهایت، تابع `getHTU` تعریف شده است تا دما یا رطوبت را بر اساس خصیصه ورودی بخواند:

float getHTU(char type) {
   float temp = htu.readTemperature();
   float rel_hum = htu.readHumidity();
   if(type =='F') {
       return temp * 9/5 + 32; // convert to Fahrenheit 
   } else if(type =='K') {
       return temp + 273.15; // convert to Kelvin
   } else if(type =='H') {
       return rel_hum; // return relative humidity
   } else {
       return temp; // return Celsius
   }
}

این تابع دما و رطوبت را از حساس(حس کننده) می‌خواند و دما را به واحد درخواستی تبدیل می‌کند. حتماً شِفر (کود) کامل بارگذاری شده در زیر مقاله را برای جزئیات بیشتر بررسی کنید.

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

پس از اتمام سیم‌کشی و بارگذاری شِفر (کود)، باید مقادیر دما و رطوبت را بر روی LCD مشاهده کنید. خوانش‌ها هر چند ثانیه یک بار به‌روز می‌شوند و شرایط کنونی را منعکس می‌کنند. اگر به حساس(حس کننده) گرما اعمال کنید، باید شاهد افزایش دما باشید در حالی که رطوبت باید کمی کاهش یابد. توجه داشته باشید که حداکثر حد دما برای حساس(حس کننده) وجود دارد؛ فراتر رفتن از این مقدار ممکن است به خوانش‌های نادرست یا خرابی حساس(حس کننده) منجر شود (در ویدیو در mm:ss).

زمان‌سنجی ویدیو

  • :00- مقدمه‌ای بر پروژه
  • ۰۱:۱۵- دستورالعمل‌های سیم‌کشی
  • ۰۳:۳۰- مرور شِفر (کود)
  • ۱۰:۰۰- نمایش تنظیمات
511-Lesson 36: Using the HTU21D Temperature Sensor with an LCD and Arduino: A Step-by-Step Course
زبان: C++
کپی شد!

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

فایل‌ها📁

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