كود البحث

عرض درجة الحرارة من HTU21D على شاشة LCD

عرض درجة الحرارة من HTU21D على شاشة LCD

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

HTU21D module

شرح الأجهزة

المكونات الرئيسية لهذا المشروع تشمل مستشعر HTU21D وشاشة LCD. مستشعر HTU21D هو مستشعر رقمي للرطوبة ودرجة الحرارة يقوم بالتواصل عبر بروتوكول I2C. يوفر قياسات دقيقة لدرجة الحرارة بالدرجات المئوية أو الفهرنهايت ورطوبة نسبية كنسبة مئوية. يعمل المستشعر عادةً عند جهد 3.3 فولت ولكنه يمكن أيضًا أن يعمل مع أنظمة 5 فولت. شاشة LCD التي سنستخدمها هي شاشة LCD بحجم 16x2 مع واجهة I2C. هذا النوع من الشاشات يتطلب فقط سلكين لتواصل البيانات، مما يسهل الاتصال بوحدات التحكم الدقيقة مثل أردوينو. تتيح واجهة I2C توصيل عدة أجهزة على نفس الناقل، مما يبسط الأسلاك ويقلل من عدد الدبابيس المستخدمة.

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

الصانعأدافruits
رقم الجزءHTU21D-F
جهد المنطق/المدخلات والمخرجات3.3 فولت (تقريباً)
جهد الإمداد1.5 فولت إلى 3.6 فولت
التيار الكهربائي0.5 مللي أمبير (تقريباً)
التيار الذروي1.5 مللي أمبير (كحد أقصى)
نطاق درجات الحرارة-40 إلى 125 °م
نطاق الرطوبة0 إلى 100 %رطوبة نسبية
حزمةDFN-6
ملاحظات / تغييراتNone

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

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

Arduino wiring for HTU21DF light intesity sensor with LCD
Arduino wiring for HTU21DF light intesity sensor with LCD

لتوصيل مستشعر HTU21D بلوحة أردوينو، قم بتوصيل الدبوس VCC للمستشعر بمخرج 3.3 فولت على الأردوينو. بعد ذلك، قم بتوصيل دبوس GND للمستشعر بالأرضي (GND) للأردوينو. ينبغي توصيل دبوس SDA، الذي يُستخدم لنقل البيانات، بدبوس A4 على الأردوينو. بالمثل، قم بتوصيل دبوس SCL، الذي يُستخدم لإشارة الساعة، بدبوس A5 على الأردوينو. تأكد أيضًا من توصيل شاشة LCD بشكل صحيح؛ عنوان I2C لشاشة LCD في هذا الإعداد عادةً هو 0x3F. إذا كنت تستخدم نوعًا مختلفًا من شاشة LCD أو عنوان I2C مختلف، تأكد من تعديل الكود وفقًا لذلك. بعد التوصيل، تأكد من التحقق من أي اتصالات مفكوكة قبل تشغيل الأردوينو.

أمثلة الكود والدليل العملي

في الكود، نبدأ بإدراج المكتبات الضرورية لمستشعر HTU21D و LCD:

#include 
#include "Adafruit_HTU21DF.h"
#include 

هذا يهيئ البيئة لاستخدام كل من المستشعر والعرض. مكتبة `Adafruit_HTU21DF` تدير وظيفة المستشعر، بينما مكتبة `LiquidCrystal_I2C` تدير شاشة LCD. ثم نقوم بإنشاء مثيل لكل من المستشعر وشاشة LCD:

Adafruit_HTU21DF htu = Adafruit_HTU21DF();
LiquidCrystal_I2C lcd(0x3F, 16, 2);

هنا،htuهو الهدف من مستشعر HTU21D، وlcdهو الجسم الخاص بشاشة LCD. عنوان I2C لشاشة LCD مضبوط على 0x3F، والذي قد تحتاج إلى التحقق منه بناءً على إعدادك.setup()نقوم بتهيئة شاشة LCD ونتحقق مما إذا كان المستشعر يعمل:

void setup() {
  lcd.begin();  
  lcd.backlight();
  if (!htu.begin()) {
      lcd.print("Sensor missing"); 
      while (1);
  }
  lcd.print("HTU21D Ready");
}

هذا الكود يقوم بتهيئة شاشة LCD ويتحقق من وجود الحساس. إذا لم يتم اكتشاف الحساس، سيعرض "الحساس مفقود" ويتوقف البرنامج.loop()نقوم باستمرار بقراءة قيم درجة الحرارة والرطوبة وعرضها:

void loop() {
   lcd.clear();
   lcdDisplay(0, 0, "Celsius: ", 10, 0, getHTU('C'), 'd');  
   lcdDisplay(0, 1, "Humidity: ", 10, 1, getHTU('H'), '%');  
   delay(5000);
}

في هذا المقتطف، نقوم بمسح شاشة LCD، ثم نستدعي الـlcdDisplay()وظيفة لعرض درجة الحرارة بالدرجة المئوية والرطوبة.getHTU()تقوم الدالة باسترجاع درجة الحرارة أو الرطوبة بناءً على الحرف المُمرر.

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

عند اكتمال الإعداد وتحميل الكود إلى الأردوينو، يجب أن تعرض شاشة LCD درجة الحرارة الحالية بالدرجات المئوية ورطوبة الهواء النسبية. إذا كانت جميع الوصلات متصلة بشكل صحيح، سترى القيم تتحدث كل بضع ثوانٍ. احذر من الأخطاء الشائعة، مثل الوصلات المعكوسة أو عناوين I2C غير الصحيحة، والتي يمكن أن تؤدي إلى فشل في التواصل مع المستشعرات (في الفيديو عند 05:00).

توقيتات الفيديو

  • 00:00- المقدمة
  • 01:30- تعليمات الأسلاك
  • 03:15- شرح الكود
  • ٠٤:٥٠- عرض
  • 05:٤٠- استنتاج

الصور

LCD1602 أو LCD2004 مع مستشعر الرطوبة ودرجة الحرارة HTU21DF مع أردوينو
LCD1602 أو LCD2004 مع مستشعر الرطوبة ودرجة الحرارة HTU21DF مع أردوينو
Arduino wiring for HTU21DF light intesity sensor with LCD
Arduino wiring for HTU21DF light intesity sensor with LCD
HTU21D module
HTU21D module
HTU21D module-back
HTU21D module-back
213-Display Temperature from HTU21DF on LCD1602-I2C or LCD2004
اللغة: C++
/*
 * عرض درجة الحرارة من HTU21DF على LCD1602-I2C أو LCD2004
 * تم التحديث بواسطة أحمد شمشيري في 13 يوليو 2019
 * في أجاكس، أونتاريو، كندا
 * شاهد تعليمات الفيديو لهذا الرسم التخطيطي:
 * 
 * هذا مثال لمستشعر الرطوبة ودرجة الحرارة HTU21D-F
 * 
 * مصمم خصيصًا للعمل مع مستشعر HTU21D-F من Adafruit
 * ----> https://www.adafruit.com/products/1899
 * 
 * تستخدم هذه الشاشات تقنية I2C للتواصل؛ يتطلب التوصيل دبوسين.
 * 
 * شاهد فيديو مقدمة عن سيرفو 360 مع الكود: https://youtu.be/b_xvu6wWafA
 * يمكنك الحصول على مخطط الأسلاك من دورة أردوينو على Udemy.com
 * تعلم أردوينو خطوة بخطوة مع جميع المكتبات والأكواد ومخططات الأسلاك، كل ذلك في مكان واحد.
 * تفضل بزيارة دورتي الآن http://robojax.com/L/?id=62
 * 
 * إذا وجدت هذا البرنامج التعليمي مفيدًا، فيرجى دعمي لأستمر في إنشاء محتوى مماثل.
 * 
 * أو تبرع عبر باي بال http://robojax.com/L/?id=64
 * 
 * الكود متاح على http://robojax.com/learn/arduino
 * 
 * هذا الكود "كما هو" بدون أي ضمان أو مسؤولية. استخدامه مجاني طالما أنك تحافظ على هذه الملاحظة سليمة. تم تنزيل هذا الكود من موقع Robojax.com.
 * 
 * هذا البرنامج حر: يمكنك إعادة توزيعه و/أو تعديله بموجب شروط رخصة جنو العمومية كما نشرتها مؤسسة البرمجيات الحرة، سواءً الإصدار الثالث منها، أو (حسب رغبتك) أي إصدار لاحق.
 * 
 * يُوزع هذا البرنامج على أمل أن يكون مفيدًا، ولكن دون أي ضمان؛ حتى دون الضمان الضمني لقابلية التسويق أو الملاءمة لغرض معين. راجع رخصة جنو العمومية لمزيد من التفاصيل.
 * 
 * من المفترض أنك استلمت نسخة من رخصة جنو العمومية مع هذا البرنامج. إذا لم تكن قد استلمتها، فراجع <https://www.gnu.org/licenses/>.
 */
#include <Wire.h>
#include "Adafruit_HTU21DF.h"

 // توصيل Vin إلى 3-5VDC
 // توصيل GND بالأرض
 // توصيل SCL بدبوس ساعة I2C (A5 على UNO)
 // توصيل SDA بدبوس بيانات I2C (A4 على UNO)

Adafruit_HTU21DF htu = Adafruit_HTU21DF();

 // بدء الإعدادات لـ LCD1602 باستخدام I2C
#include <LiquidCrystal_I2C.h>
 // اضبط عنوان LCD على 0x27 لعرض مكون من 16 حرفًا وسطرين
LiquidCrystal_I2C lcd(0x3F, 16, 2);
 // نهاية الإعدادات لـ LCD1602 مع I2C

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

  lcd.print("Robojax HTUD1DF");
  lcd.setCursor(0,1);
  lcd.print("Demo");
  }
  delay(2000);
}

void loop() {
   lcd.clear(); // مسح القيم السابقة من الشاشة
lcdDisplay(
 // لطباعة درجة مئوية:
             0, // الحرف 0
             0, // الخط 0
             "Celsius: ",

 // لطباعة درجة مئوية
             10, // الحرف 10
             0, // الخط 0
             getHTU('C'),
             'd'
             );

  lcdDisplay(
 // لطباعة فهرنهايت:
             0, // الحرف 0
             1, // الخط 1
             "Fahrenheit: ",

 // لطباعة فهرنهايت
             10, // الحرف 9
             1, // الخط 0
             getHTU('F'),
             'd'
             );
    delay(5000);
lcdDisplay(
 // لطباعة كلفن:
             0, // الحرف 0
             0, // الخط 0
             "Kelvin: ",

 // لطباعة درجة مئوية
             9, // الحرف 10
             0, // الخط 0
             getHTU('K'),
             'k'
             );
  lcdDisplay(
 // لطباعة نص الرطوبة
             0, // الحرف 0
             1, // الخط 1
             "Humidity: ",

 // لطباعة الرطوبة
             10, // الحرف 9
             1, // الخط 1
             getHTU('H'),
             '%'
             );

        delay(5000);
}

/*
 * @brief تُرجع درجة الحرارة أو الرطوبة النسبية
 * @param "type" هو حرف
 * C = سيلسيوس
 * K = كلفن
 * F = فهرنهايت
 * H = رطوبة
 * @return تُرجع إحدى القيم المذكورة أعلاه
 * الاستخدام: للحصول على نوع فهرنهايت: getHTU('F')
 * لطباعتها على شاشة تسلسلية Serial.println(getHTU('F'));
 * كتبه أحمد شمشيري في ١٣ يوليو ٢٠١٩
 * في أجاكس، أونتاريو، كندا
 * www.Robojax.com
 */
float getHTU(char type)
{
  float value;
    float temp = htu.readTemperature();
    float rel_hum = htu.readHumidity();
   if(type =='F')
   {
    value = temp *9/5 + 32; // تحويل إلى فهرنهايت
   }else if(type =='K')
   {
    value = temp + 273.15; // تحويل إلى كلفن
   }else if(type =='H')
   {
    value = rel_hum; // عودة الرطوبة النسبية
   }else{
    value = temp; // عودة مئوية
   }
   return value;
}


/*
 * شاشة LCD (int tc، int tr، String title، int vc، int vr، float value)
 * تعرض القيمة والعنوان على شاشة LCD1602.
 * كيفية الاستخدام:
 * إذا أردت عرض "الجهد: 13.56 ملي فولت" بدءًا من الحرف الأول في الصف الثاني، استخدم:
 * lcdDisplay(0، 1، "الجهد: "، 13.56،'d')
 * 
 * 'd' رمز الدرجة
 * tc رقم الحرف (0)
 * tr صف في شاشة LCD (1)
 * title نص (الجهد:)
 * قيمة vc للحرف
 * قيمة vr للصف أو السطر
 * value قيمة (13.56)
 */
void lcdDisplay(int tc, int tr, String title, int vc, int vr, float value,char symbol)
{
 // Robojax.com LCD1602 لـ HTU21D Demo
   lcd.setCursor (tc,tr);
   lcd.print(title);

   lcd.setCursor (vc,vr);
   lcd.print(value);
   if(symbol == 'd')
   {
    lcd.print((char)223);
   }else if(symbol =='%')
   {
    lcd.print("%");
   }else if(symbol =='k')
   {
    lcd.print("K");
   }
 // Robojax.com LCD1602 لـ HTU21D Demo
}

الأشياء التي قد تحتاجها

الموارد والمراجع

ملفات📁

ورقة البيانات (pdf)