الدرس 28: مستشعر درجة الحرارة DHT11 مع شاشة TM1637 | دورة الأردوينو خطوة بخطوة
في هذا الدرس من دورة الأردوينو خطوة بخطوة، نستكشف كيفية إنشاء شاشة عرض حرارة مدمجة وقائمة بذاتها من خلال دمج مستشعر درجة الحرارة والرطوبة DHT11 مع شاشة TM1637 ذات الأرقام السبعة المكونة من 4 خانات. بدلاً من الاعتماد على الشاشة التسلسلية لعرض القراءات، يبني هذا المشروع وحدة صغيرة مكتفية بذاتها تعرض درجة الحرارة المحيطة بصريًا بالدرجات المئوية والفهرنهايت. هذه مهارة أساسية لإنشاء واجهات سهلة الاستخدام لمشاريع الإلكترونيات الخاصة بك، ونقل البيانات من العالم الرقمي إلى شاشة فيزيائية.هذا المشروع هو لبنة عملية لمجموعة متنوعة من التطبيقات التي تحتاج إلى قراءة سريعة لدرجة الحرارة بنظرة واحدة. إليك بعض الأفكار لإلهامك:
- محطة طقس مكتبية: قم ببناء شاشة صغيرة تعمل دائمًا لمراقبة درجة الحرارة في مكتبك أو غرفة الهوايات.
- مراقب منظم الحرارة: أنشئ شاشة مخصصة للتحقق من درجة الحرارة بالقرب من منظم الحرارة في منزلك أو فتحة التهوية.
- مقياس حاضنة أو تررم: راقب درجة الحرارة داخل تررم الزواحف أو غرفة تكاثر النباتات أو حاضنة DIY دون الحاجة إلى فتحها.
- ميزان حرارة ورشة أو مرآب: شاشة واضحة ومشرقة مثالية للتحقق من درجة الحرارة في ورشة قد تكون متربة أو ضعيفة الإضاءة.
- طقم تعليمي: مشروع مبتدئ ممتاز لتعلم كيفية ربط أنواع مختلفة من المستشعرات ووحدات الإخراج مع الأردوينو.
المكونات المطلوبة
لمتابعة هذا المشروع، ستحتاج إلى المكونات التالية:
- أردوينو أونو (أو أي لوحة متوافقة)
- مستشعر درجة الحرارة والرطوبة DHT11 (يتم عرض كل من إصدارات PCB ذات 3 دبابيس و4 دبابيس)
- وحدة شاشة TM1637 ذات الأرقام السبعة المكونة من 4 خانات
- لوحة تجارب
- أسلاك توصيل
دليل التوصيل
التوصيل لهذا المشروع بسيط، ويتطلب اتصالات لكل من المستشعر والشاشة. يوضح الفيديو الإعداد مع نسختين مختلفتين من مستشعر DHT11 وحجمين من شاشة TM1637، لكن التوصيلات الأساسية تبقى كما هي.
إليك توصيل مستشعر DHT11 وشاشة TM1637، كما هو موضح في الفيديو (في الفيديو عند 05:06).



بالنسبة لوحدة شاشة TM1637، تكون التوصيلات كما يلي:
- VCC إلى 5V على الأردوينو.
- GND إلى GND على الأردوينو.
- CLK (الساعة) إلى دبوس رقمي، على سبيل المثال، D2.
- DIO (إدخال/إخراج البيانات) إلى دبوس رقمي آخر، على سبيل المثال، D3.
بالنسبة لمستشعر DHT11، تكون التوصيلات:
- VCC (أو الدبوس +) إلى 5V.
- GND (أو الدبوس -) إلى GND.
- Data (أو الدبوس S) إلى دبوس رقمي، على سبيل المثال، D2. (ملاحظة: في الفيديو، يتم توصيل دبوس بيانات المستشعر بالدبوس 2، لكن مقتطف الكود يظهره أيضًا على الدبوس 2. دبابيس CLK وDIO للشاشة موجودة على الدبابيس 2 و3 في مقتطف الكود، وهذا تعارض. يذكر نص الفيديو الدبابيس 5 و6 للشاشة، لذا سنستخدمها لتجنب أي تداخل.)
يرجى ملاحظة: يُظهر النص ومقتطف الكود تعارضًا محتملاً في الدبابيس. يعرّف الكود دبوس بيانات DHT11 ودبوس CLK الخاص بـ TM1637 كلاهما على الدبوس الرقمي 2. لتجنب ذلك، يُنصح باستخدام دبابيس منفصلة، مثل توصيل DHT11 بالدبوس 2 وCLK الخاص بـ TM1637 بالدبوس 5 وDIO بالدبوس 6، كما ذكر في الفيديو.
شرح الكود
يجمع كود هذا المشروع بين مكتبات كل من مستشعر DHT11 وشاشة TM1637. الأجزاء الرئيسية القابلة للتخصيص من قبل المستخدم هي تعريفات الدبابيس وإعداد سطوع الشاشة. يمكنك تعديلها لتناسب توصيلاتك وتفضيلاتك المحددة.
أولاً، يتم تعريف دبوس بيانات مستشعر DHT11. يمكنك تغيير هذا الرقم إذا قمت بتوصيل المستشعر بدبوس رقمي مختلف على الأردوينو الخاص بك.
#define dhtpin 2 // تعيين الدبوس للاتصال بـ DHT11
بعد ذلك، يتم تعريف دبابيس وحدة شاشة TM1637. دبوس CLK مخصص لإشارة الساعة ودبوس DIO للبيانات. يجب أن تتطابق هذه مع توصيلاتك الفيزيائية.
// دبابيس اتصال الوحدة (دبابيس رقمية)
#define CLK 5
#define DIO 6
ثم يتم إنشاء كائن من فئة TM1637Display، والذي يأخذ أرقام دبابيس CLK وDIO كوسائط. يوفر هذا الكائن جميع الوظائف اللازمة للتحكم في الشاشة.
TM1637Display display(CLK, DIO);
يتم تعيين سطوع الشاشة في دالة setup(). تمثل القيمة 0x0f أقصى سطوع. يمكنك استخدام قيمة من 0x00 (إيقاف) إلى 0x0f (الحد الأقصى) لضبط شدة الشاشة لتناسب بيئتك.
display.setBrightness(0x0f);
المنطق الرئيسي في دالة loop() يقرأ درجة الحرارة من مستشعر DHT11 ويعرضها. يتم استخدام دالة showNumberDec() لإرسال قيمة درجة الحرارة إلى الشاشة. تسمح لك معاملاتها بالتحكم في كيفية عرض الرقم. على سبيل المثال، يعرض السطر التالي درجة الحرارة بالدرجات المئوية، بدءًا من الرقم الثاني (الموضع 1).
display.showNumberDec(23, false, 2, 1);
في هذا المثال، 23 هو الرقم الذي سيتم عرضه، false يعني عدم وجود أصفار بادئة، 2 هو عدد الأرقام المستخدمة، و1 هو موضع البداية (يبدأ من 0) على الشاشة.
عرض توضيحي مباشر للمشروع
في الفيديو، يتم عرض المشروع مباشرة. يعرض المقدم قراءات درجة الحرارة على شاشتي TM1637 الأكبر والأصغر. ولإثبات أن المستشعر يعمل، يتم تطبيق حرارة على DHT11 باستخدام مسدس حراري.
في البداية، تعرض الشاشة درجة حرارة الغرفة بالدرجة المئوية والفهرنهايت. ومع قيام مسدس الحرارة بتسخين المستشعر، يمكنك رؤية قراءات درجة الحرارة ترتفع بسرعة. يوضح العرض ارتفاع درجة الحرارة من درجة حرارة الغرفة العادية إلى أكثر من 50 درجة مئوية (123 درجة فهرنهايت)، مما يؤكد أن المستشعر يقرأ التغير في درجة الحرارة بدقة وأن الشاشة تعرض البيانات بشكل صحيح. هذا الاختبار طريقة رائعة للتحقق من أن جميع توصيلاتك ورمزك يعملان بشكل صحيح.
فصول الفيديو
- [00:00] مقدمة عن المشروع
- [00:28] فهم الكود الخاص بشاشة TM1637
- [03:04] عرض درجة الحرارة بالدرجة المئوية والفهرنهايت
- [05:06] توصيل DHT11 بشاشة TM1637
- [06:42] عرض مباشر لشاشة درجة الحرارة
- [08:23] اختبار باستخدام وحدة شاشة أصغر
- [08:35] الخاتمة وملخص المشروع
/*
* Robojax Arduino Step-by-Step Course
* Lesson 28: DHT11 with TM1637
* This is the Arduino code for TM1637 4-digit display.
*
* Please watch video instructions here: https://youtu.be/C-1iaCPzNtU
* 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
*
* Date: December 6, 2017, in Ajax, Ontario, Canada
*
* Original code from: https://github.com/avishorp/TM1637
* Modified for Robojax video on December 6, 2017
*/
#include <dht11.h>
dht11 DHT11; // create object of DHT11
#define dhtpin 2 // set the pin to connect to DHT11
// start of settings of TM1637 LED display
#include <Arduino.h>
#include <TM1637Display.h>
// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3
TM1637Display display(CLK, DIO);
uint8_t blank[] = { 0x0, 0x0, 0x0, 0x0 };// blank value for all digits
// The amount of time (in milliseconds) between tests
#define TEST_DELAY 2000
// start of settings of TM1637 LED display
void setup()
{
//Robojax Step-by-Step Arduino Course YouTube Watch it here: http://robojax.com/L/?id=338
Serial.begin(9600);// setting up serial monitor
display.setBrightness(0x0f);
}
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
//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);
display.setSegments(blank);
display.showNumberDec(23, false, 2,1);
delay(TEST_DELAY);
display.setSegments(data);
display.showNumberDec(153, false, 3, 1);
delay(TEST_DELAY);
display.setSegments(data);
for(int i=0; i<=500; i++)
{
display.showNumberDec(i);
}
}
الأشياء التي قد تحتاجها
-
إي باي
-
علي إكسبريسTM1637 4-digit 7-segment display on AliExpresss.click.aliexpress.com
الموارد والمراجع
-
خارجيدليل DHT11 (PDF)robojax.com
-
خارجيمكتبة DHT11 على جيت هابgithub.com
-
داخلي
ملفات📁
مكتبات أردوينو (ملف مضغوط)
-
مكتبة Arduino TM1637
TM1637_library.zip1.36 MB
Fritzing File
-
نموذج سبعةSegments TM1637
TM1637.fzpz0.01 MB -
شاشة سبعة أجزاء رباعية الأرقام TM1637
TM1637-1.fzpz0.01 MB
ملفات أخرى
-
XY-T01 مؤقت ريلاي: تركيب تحميل تيار مستمر
/download/datasheet/robojax_TM1637_datasheet.pdf