كود البحث

الدرس 35-2: استخدام مستشعر درجة الحرارة HTU21D - كود مخصص

الدرس 35-2: استخدام مستشعر درجة الحرارة HTU21D - كود مخصص

في هذا الدرس، سنستكشف كيفية استخدام مستشعر الحرارة والرطوبة HTU21D مع الأردوينو لقياس درجة الحرارة والرطوبة. HTU21D هو مستشعر موثوق ومنخفض الطاقة يتواصل عبر I2C، مما يجعله سهل الدمج في مشاريعك. بنهاية هذا الدرس، سيكون لديك كود يعمل يقيس درجة الحرارة بالسيلسيوس والفهرنهايت والكلفن، بالإضافة إلى الرطوبة النسبية.

HTU21D module

قبل أن نغوص في الأسلاك والبرمجة، من الضروري فهم المكونات المعنية. يتطلب حساس HTU21D اتصالات بسيطة: الطاقة، والأرضي، وسلكين I2C لنقل البيانات. تجعل هذه البساطة منه خيارًا ممتازًا لمجموعة متنوعة من التطبيقات، بدءًا من محطات الطقس إلى أجهزة المنزل الذكي. للحصول على دليل بصري، يرجى الرجوع إلى الفيديو عند النقطة الزمنية :45.

شرح الأجهزة

المكون الرئيسي في هذا المشروع هو مستشعر HTU21D، الذي يقيس درجة الحرارة والرطوبة. يمكن لهذا المستشعر العمل بجهود تتراوح من 1.5 فولت إلى 3.6 فولت، مما يجعله متعدد الاستخدامات لتطبيقات مختلفة. يوفر قراءات عالية الدقة، حيث تتراوح قياسات درجة الحرارة من -40 درجة مئوية إلى +125 درجة مئوية وقياسات الرطوبة بدقة 0.04%.

بالإضافة إلى ذلك، يستخدم المستشعر اتصال I2C، الذي يتطلب سلكين: SDA (خط البيانات) وSCL (خط الساعة). هذا يسمح بالتكامل بسهولة مع الأردوينو ووحدات التحكم الدقيقة الأخرى دون الحاجة لتوصيلات معقدة. تسهل مكتبة Adafruit التفاعل مع المستشعر، حيث تتولى استرداد البيانات وبروتوكولات الاتصال بسلاسة.

تفاصيل ورقة البيانات

صانعتي إي كونيكتيفيتي
رقم الجزءHTU21D-F
جهد المنطق/إدخال/إخراج١.٥ - ٣.٦ ف
جهد الإمداد3.3 فولت
الاستهلاك الحالي (الخمول)٠٫٠٢ ميكرو أمبير (نموذجي)
الاستهلاك الحالي (الفعّال)٤٥٠ ميكروأمبير (تقريباً)
نطاق درجة الحرارة-40 إلى +125 درجة مئوية
نطاق الرطوبة0 إلى 100 %رطوبة نسبية
قرار0.04 %RH; 0.01 °C
حزمة6-pin DFN

  • تأكد من توفير مصدر طاقة صحيح لتجنب تلف المستشعر.
  • استخدم المقاومات السحب على خطوط SDA و SCL إذا لم تكن مدمجة.
  • تأكد من أن توصيلات المستشعر قصيرة لتقليل الضوضاء.
  • راقب الجهد أثناء التشغيل للحفاظ على الاستقرار.
  • نظر في استخدام مكثف لفصل الدوائر بالقرب من دبابيس الطاقة.

تعليمات التوصيل

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

لربط حساس درجة الحرارة HTU21D، ابدأ بتوصيل الطاقة والأرضي. قم بتوصيل السلك الأيسر للحساس بمصدر 3.3V، مع التأكد من قدرته على تحمل الجهد المطلوب. يجب توصيل السلك الثاني، الذي يكون عادةً ملوناً بالأحمر، بالأرضي.

التالي، قم بتوصيل دبوس SDA من الحساس بالدبوسA4على لوحة Arduino، التي تعمل كخط بيانات للتواصل عبر 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()يتم استدعاؤه بمعلمات مختلفة لاسترجاع درجة الحرارة بالدرجة المئوية والرطوبة. الضمان يضمن أخذ القراءات كل ثانية، مما يوفر مخرجات سلسة على شاشة التسلسلات. الكود الكامل متاح للرجوع إليه أدناه المقال.

عرض / ماذا تتوقع

بمجرد توصيل كل شيء بشكل صحيح وتحميل الكود، يجب أن ترى قراءات درجة الحرارة والرطوبة مطبوعة في وحدة المراقبة التسلسلية. ستُعرض درجة الحرارة بالدرجة المئوية، تليها نسبة الرطوبة المقابلة. إذا قمت بتطبيق الحرارة على المستشعر، يجب أن تلاحظ ارتفاع درجة الحرارة وفقًا لذلك (في الفيديو عند 10:15).

كن حذرًا من حدود المستشعر؛ إذا تجاوزت درجة الحرارة 125 درجة مئوية، فقد يعطي قراءة غير صحيحة أو يظهر صفرًا. تأكد دائمًا من أن الاتصالات الخاصة بك آمنة وأن المستشعر يعمل بالطاقة بشكل صحيح لتجنب أي مشاكل أثناء التشغيل.

طوابع زمنية للفيديو

  • 00:00مقدمة
  • ٠٣:٤٥توصيل المستشعر
  • ٠٥:٣٠جولة في الكود
  • 10:15تظاهرة
  • 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
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)