الدرس 20/31: عرض درجة الحرارة والرطوبة من DHT11 على شاشة LCD
يشرح هذا البرنامج التعليمي كيفية دمج مستشعر درجة الحرارة والرطوبة DHT11 مع شاشة LCD1602 التي تدعم I2C لإنشاء محطة مراقبة بيئية مدمجة. بدلاً من قراءة بيانات المستشعر الخام من الشاشة التسلسلية، ستتعلم عرض قراءات درجة الحرارة والرطوبة الحية على شاشة أحرف 16x2. هذا المشروع مثالي لبناء محطة طقس مكتبية، أو مراقب دفيئة صغير، أو إضافة قراءة محلية لأي مشروع أتمتة منزلية. تعمل واجهة I2C على تبسيط التوصيلات، مما يجعل هذا المشروع سهل الوصول للمبتدئين وإضافة سريعة للصنّاع ذوي الخبرة.
إليك بعض الأفكار العملية لما يمكنك بناؤه بهذه المعرفة:
- محطة طقس مكتبية تعرض ظروف الغرفة الحالية.
- شاشة مدمجة لتررم الزواحف أو النباتات.
- قراءة محلية لبيئة غرفة الخوادم أو ورشة العمل.
- وحدة أساسية لنظام أتمتة منزلية أكثر تعقيدًا.
المكونات والأجهزة
لبناء هذا المشروع، ستحتاج إلى المكونات التالية:
- Arduino Uno (أو لوحة متوافقة)
- شاشة LCD1602 مع وحدة واجهة I2C
- مستشعر درجة الحرارة والرطوبة DHT11
- مقاوم سحب 4.7kΩ أو 10kΩ (إذا كنت تستخدم مستشعر DHT11 مكشوف)
- أسلاك توصيل
- لوحة تجارب (اختيارية، لتسهيل التوصيلات)
فهم شاشة LCD1602 مع I2C
شاشة LCD1602 هي شاشة أحرف شائعة تحتوي على 16 عمودًا وصفين. وحدة "I2C" الملحومة على الجزء الخلفي من الشاشة هي مفتاح البساطة. تحول هذه الوحدة الواجهة المتوازية للشاشة إلى واجهة I2C تسلسلية، والتي تتطلب سلكين فقط للبيانات (SDA وSCL) وسلكين للطاقة (VCC وGND). هذا يقلل بشكل كبير من عدد الدبابيس المطلوبة على لوحة Arduino، مما يترك المزيد متاحًا لأجهزة الاستشعار والمحركات الأخرى. تتضمن الوحدة أيضًا مقياس جهد صغير لضبط تباين الشاشة، وهو أمر بالغ الأهمية لضمان وضوح النص. يمكن تغيير عنوان I2C للوحدة باستخدام وصلات اللحام الصغيرة (A0 وA1 وA2) على اللوحة، مما يسمح لأجهزة I2C متعددة بالعمل معًا على نفس الناقل.
دليل التوصيلات
قم بتوصيل المكونات كما هو موضح في الرسم البياني أدناه. تستخدم شاشة LCD مع I2C دبابيس I2C الخاصة بـ Arduino، بينما يستخدم مستشعر DHT11 دبوسًا رقميًا.
بالنسبة لشاشة LCD1602-I2C:
- VCC إلى Arduino 5V
- GND إلى Arduino GND
- SDA إلى Arduino A4
- SCL إلى Arduino A5
بالنسبة لمستشعر DHT11:
- VCC (الطرف 1) إلى Arduino 5V
- Data (الطرف 2) إلى Arduino الطرف الرقمي 2 (مع مقاوم سحب 10kΩ إلى 5V)
- NC (الطرف 3) - غير متصل
- GND (الطرف 4) إلى Arduino GND
(في الفيديو عند 25:16)
إعداد المكتبات
يتطلب هذا المشروع مكتبتين. مكتبة Wire.h جزء من تثبيت Arduino القياسي. ستحتاج إلى تثبيت مكتبة LiquidCrystal_I2C ومكتبة dht11. يوضح الفيديو كيفية تثبيتها. يمكنك تنزيل المكتبات من الروابط المتوفرة في وصف الفيديو أو من موقع Robojax. بمجرد التنزيل، يمكنك تثبيتها عبر Arduino IDE بالانتقال إلى Sketch > Include Library > Add .ZIP Library... وتحديد الملفات التي تم تنزيلها. (في الفيديو عند 06:16)
العثور على عنوان I2C لشاشتك
قبل أن تتمكن من استخدام الشاشة، يجب تحديد عنوان I2C الخاص بها. العنوان الأكثر شيوعًا هو 0x27 أو 0x3F، لكنه قد يختلف. للعثور عليه، يمكنك استخدام رسم ماسح I2C. هذا برنامج بسيط يفحص ناقل I2C ويبلغ عن أي عناوين يجدها إلى الشاشة التسلسلية. ارفع رمز الماسح، وافتح الشاشة التسلسلية بمعدل 9600 باود، وسيعرض عنوان شاشتك. (في الفيديو عند 08:11)
شرح الكود
يشرح هذا القسم الأجزاء الرئيسية القابلة للتخصيص من الكود. البرنامج الكامل متاح للتنزيل أسفل المقال.
يبدأ الكود بتضمين المكتبات اللازمة وتحديد الدبابيس والكائنات المستخدمة.
// ملف الرأس من GetHub: https://github.com/adidax/dht11
#include <dht11.h>
dht11 DHT11; // إنشاء كائن من DHT11
#define dhtpin 2 // تعيين الدبوس المتصل بـ DHT11
// بداية إعدادات LCD1602-I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// تعيين عنوان LCD إلى 0x3F لشاشة 16 حرفًا وسطرين
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// نهاية إعدادات LCD1602-I2C
هذه هي أهم الأسطر لتكوين إعداداتك:
#define dhtpin 2: يحدد هذا الدبوس المتصل بمنفذ بيانات مستشعر DHT11. غيّر الرقم2إذا كنت تستخدم دبوسًا مختلفًا.LiquidCrystal_I2C lcd(0x3F, 16, 2);: ينشئ هذا السطر كائن الشاشة. المعامل الأول،0x3F، هو عنوان I2C الذي وجدته في الخطوة السابقة.16و2يحددان عدد الأعمدة والصفوف في شاشتك. حدّث العنوان إذا وجد الماسح عنوانًا مختلفًا (مثل0x27).
يستخدم الكود دالة مخصصة، getTemp()، لقراءة درجة الحرارة وتحويلها إلى وحدات مختلفة. هذه ميزة قوية تجعل الكود قابلاً لإعادة الاستخدام لتطبيقات مختلفة.
float getTemp(char type) {
float temp = (float)DHT11.temperature;//الحصول على درجة الحرارة
if(type =='F')
{
return temp * 1.8 + 32;// التحويل إلى فهرنهايت
}else if(type =='K')
{
return temp + 274.15;// التحويل إلى كلفن
}else{
return temp;
}
}
لاستخدام هذه الدالة، يمكنك استدعاؤها بوسيط حرف واحد يمثل الوحدة المطلوبة. على سبيل المثال، getTemp('C') يُرجع درجة الحرارة بالسيليسيوس، getTemp('F') يُرجعها بالفهرنهايت، وgetTemp('K') يُرجعها بالكلفن. تقرأ الدالة درجة الحرارة الخام من مستشعر DHT11 وتطبق معادلة التحويل اللازمة. يتيح لك هذا تغيير الوحدة المعروضة بسهولة في الدالة الرئيسية loop() دون إعادة كتابة منطق قراءة المستشعر. تطبع الحلقة الرئيسية درجة الحرارة والرطوبة على شاشة LCD باستخدام الدالتين lcd.setCursor() وlcd.print() للتحكم في مكان ظهور القيم على الشاشة.
عرض رمز الدرجة
مجموعة الأحرف القياسية لشاشة HD44780 LCD لا تتضمن رمز درجة مخصصًا (°). لعرضه، يجب استخدام الدالة lcd.write() مع القيمة العشرية للحرف من ذاكرة ROM الخاصة بالشاشة. بالنسبة لرمز الدرجة، هذه القيمة هي 223. يوضح الكود ذلك باستخدام lcd.print((char)223); لطباعة الرمز بعد قيمة درجة الحرارة. (في الفيديو عند 30:16)
عرض توضيحي مباشر للمشروع
بمجرد رفع الكود، ستعرض الشاشة رسالة بدء التشغيل قبل مسحها وعرض درجة الحرارة والرطوبة الحالية. يعرض السطر الأول من الشاشة النص "LCD1602 DHT11"، بينما يعرض السطر الثاني درجة الحرارة بالسيليسيوس، متبوعة برمز الدرجة و"C"، ثم درجة الحرارة بالفهرنهايت، متبوعة برمز الدرجة و"F". تُطبع قيمة الرطوبة على الشاشة التسلسلية. يوضح العرض في الفيديو تحديث الشاشة كل نصف ثانية أثناء حمل المستشعر، مما يعكس بدقة الظروف المحيطة. (في الفيديو عند 29:42)
عرض الجهد من مقياس الجهد على شاشة LCD مغطى في الدرس 20/31: عرض الجهد على LCD1602.
استخدام نفس شاشة LCD لعرض المسافة من مستشعر الموجات فوق الصوتية مغطى في الدرس 20/31: استخدام LCD1602 مع Arduino لعرض درجة الحرارة والجهد والمسافة | Robojax.
مشاريع ذات صلة من هذا الفيديو
- الدرس 20/31: استخدام LCD1602 مع Arduino لعرض درجة الحرارة والجهد والمسافة | Robojax
- الدرس 20/31: عرض الجهد على LCD1602
الفصول
- [00:00] مقدمة إلى LCD1602 ونظرة عامة على المشروع
- [01:30] شرح أجهزة LCD1602 ووحدة I2C
- [02:47] ضبط تباين شاشة LCD
- [03:14] تكوين دبابيس LCD وعنوان I2C
- [05:28] مخطط توصيل الأسلاك لـ LCD1602
- [06:16] تثبيت مكتبة LiquidCrystal_I2C
- [08:11] العثور على عنوان I2C باستخدام ماسح ضوئي
- [09:28] كود أساسي لطباعة النص على شاشة LCD
- [11:10] أمثلة: مؤشر وامض وأحرف مخصصة
- [13:46] إنشاء واستخدام الأحرف المخصصة
- [18:51] مثال العرض التسلسلي
- [23:16] تمرير النص على شاشة LCD
- [24:36] دمج كود مستشعر DHT11 مع شاشة LCD
- [30:16] عرض رمز الدرجة
- [32:03] إزالة النقاط العشرية من درجة الحرارة
- [33:00] عرض الجهد من مقياس الجهد على شاشة LCD
- [35:56] عرض المسافة من مستشعر الموجات فوق الصوتية
/*
Lesson 20/31: Displaying Temperature and humidity from DHT11 on LCD screen
Get this code and watch video Download and resource page https://robojax.com/RJT603
YouTube video https://www.youtube.com/watch?v=NXAswOc_2zg
* This is the Arduino code for DHT11 module to read temperature and humidity
* This code can display temperature in:
* C is used to get Celsius
* F is used to get Fahrenheit
* K is used for Kelvin
* *
* Written by Ahmad Shamshiri for Robojax
* on Jan 04, 2018
* Robojax.com
Please watch video instruction here https://youtu.be/0XMLnCYkvbE
This code is available at http://robojax.com/course1/?vid=lecture11
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
* 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 download 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/>.
*/
// header file from GetHub: https://github.com/adidax/dht11
#include <dht11.h>
dht11 DHT11; // create object of DHT11
#define dhtpin 2 // set the pin to connect to DHT11
// start of settings for LCD1602-I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x3F for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// end of settings for LCD1602-I2C
void setup() {
Serial.begin(9600);// setting up serial monitor
// initialize the LCD,
lcd.begin();
// Turn on the blacklight and print a message.
lcd.backlight();
lcd.clear();
lcd.setCursor (0,0); //
lcd.print("DHT11 Sensor");
delay(2000);
}
void loop() {
//Robojax Step By Step Arduino Course YouTube Watch it here http://robojax.com/L/?id=338
DHT11.read(dhtpin);// initialize the reading
int humidity = DHT11.humidity;// get humidity
lcd.clear();// clear previous values from screen
lcd.setCursor (0,0); //character zero, line 1
lcd.print("LCD1602 DHT11"); // print text
// print distance in degrees C
lcd.setCursor (0,1); //character 0, line 2
lcd.print(getTemp('C'));// print Temperature Celsius
lcd.setCursor (4,1); //character 5, line 2
lcd.print((char)223);// print degree
lcd.setCursor (5,1); //character 6, line 2
lcd.print("C");// print C
// print distance degrees F
lcd.setCursor (7,1); //character 8, line 2
lcd.print(getTemp('F'));// print distance in cm
lcd.setCursor (13,1); //character 14, line 2
lcd.print((char)223);// print degree
lcd.setCursor (14,1); //character 16, line 2
lcd.print("F");// print F
//code for Robojax.com video
Serial.print(getTemp('C'));
Serial.print("C ");
Serial.print(getTemp('F'));
Serial.print("F ");
Serial.print(getTemp('K'));
Serial.print("K ");
Serial.print(" humidity:");
Serial.print (humidity);
Serial.print("% ");
Serial.println();
delay(500);
}
/*
* getTemp(char type)
* type character of upper case
* C is used to get Celsius
* F is used to get Fahrenheit
* K is used for Kelvin
*/
float getTemp(char type) {
//Robojax Step By Step Arduino Course YouTube Watch it here http://robojax.com/L/?id=338
float temp = (float)DHT11.temperature;//get temp
if(type =='F')
{
return temp * 1.8 + 32;// convert to Fahrenheit
}else if(type =='K')
{
return temp + 274.15;// convert to Kelvin
}else{
return temp;
}
}
الأشياء التي قد تحتاجها
-
أمازونSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
أمازون
-
أمازون
-
أمازون
-
أمازون
الموارد والمراجع
-
توثيقوثائق لمجموعة SunFounder 3 في 1 لإنترنت الأشياء/السيارات الذكية/التعلمdocs.sunfounder.com
-
خارجياشترِ مجموعة التعلم الذكية 3 في 1 من سن فاونديرsunfounder.com
ملفات📁
مكتبات أردوينو (ملف مضغوط)
-
شفرة المصدر لمجموعة تعلم السيارة الذكية 3 في 1 من صن فاوندر
3in1-kit-main-v2.zip12.80 MB
دليل المستخدم
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB