كود وفيديو لأردوينو لمستشعر DHT22 لدرجة الحرارة والرطوبة مع شاشة TM1637 ومرحّل
في هذا الشرح سنستعرض كيفية استخدام حساس DHT22 لقياس الحرارة والرطوبة بالتعاون مع شاشة TM1637 ومرحّل للتحكم في حمل تيار متردد، مثل سخان أو مروحة. الهدف هو تشغيل الحمل عندما تصل درجة الحرارة إلى 50 درجة مئوية وإيقافه عندما تنخفض إلى ما دون هذا الحد. هذا الإعداد مثالي للحفاظ على مستويات الحرارة المرغوبة في بيئة مضبوطة.

لتحقيق ذلك، سنكتب برنامج Arduino يقرأ بيانات درجة الحرارة والرطوبة من حساس DHT22، ويعرض درجة الحرارة على شاشة TM1637، ويتحكم في الريليه بناءً على قراءات الحرارة. لمزيد من الإيضاح، يمكنك مشاهدة الفيديو عند 10:00.
شرح الأجهزة
تشمل المكونات الرئيسية لهذا المشروع مستشعر DHT22، شاشة TM1637، وحدة الترحيل، ولوحة أردوينو. يتولى مستشعر DHT22 قياس درجة الحرارة والرطوبة، موفّرًا إخراجًا رقميًا يمكن للأردوينو قراءته بسهولة. تُستخدم شاشة TM1637 لعرض قراءات درجة الحرارة بشكل ملائم للمستخدم، بينما تتيح وحدة الترحيل التحكم بأجهزة ذات جهد كهربائي عالٍ مثل السخانات والمراوح بأمان.
يحتوي مستشعر DHT22 على ثلاثة دبابيس: VCC (الطاقة)، GND (الأرض)، وDATA (الإخراج). تستخدم شاشة TM1637 أربعة دبابيس للطاقة والأرض والساعة واتصال البيانات. تتصل وحدة الريليه بالأردوينو وتعمل كمفتاح للحمل المتردد (AC)، مما يضمن تشغيلًا آمنًا عند التحكم في الأجهزة التي تتطلب جهدًا أعلى.
تفاصيل ورقة البيانات
| المصنّع | أدافروت |
|---|---|
| رقم القطعة | DHT22 |
| جهد المنطق/المدخلات والمخرجات | 3.3 فولت - 5.5 فولت |
| جهد التغذية | 3.3 فولت - 6 فولت |
| تيار الخرج (لكل قناة) | 0.5 ملي أمبير |
| التيار الأقصى (لكل قناة) | 2.5 ميلي أمبير |
| إرشادات تردد PWM | لا ينطبق |
| عتبات منطق الإدخال | 0.3 فولت - 0.7 فولت |
| هبوط الجهد / Rالمصرف-المصدر (عند التوصيل)/ التشبع | غير متاح |
| الحدود الحرارية | -40°C إلى 80°C |
| حزمة | حزمة 3 دبابيس |
| ملاحظات / متغيرات | المعروف أيضًا باسم AM2302 |
- تأكد من تزويد DHT22 بمصدر طاقة مناسب (3.3 V - 6 V).
- استخدم مقاومات سحب للأعلى على خط البيانات إذا لزم الأمر.
- اسمح لقراءات المستشعر بالاستقرار للحصول على بيانات دقيقة.
- تحقق مرتين من توصيلات الدبابيس لتجنب أخطاء الاتصال.
- كن حذرًا مع أحمال التيار المتردد؛ تأكد من وجود عزل وسلامة مناسبين.
- قم بتركيب مشتت حراري للمرحّل إذا كان يتحكم بأحمال عالية.
- استخدم تقنيات منع الارتداد إذا لزم الأمر عند قراءة بيانات المستشعر.
- حافظ على حساس DHT22 محميًا من أشعة الشمس المباشرة للحصول على قراءات دقيقة.
تعليمات التوصيل الكهربائي

لتوصيل المكونات، ابدأ بتوصيل حساس DHT22. قم بتوصيل دبوس VCC بدبوس 5V على الأردوينو، ودبوس GND بالأرضي (GND)، ودبوس DATA بالدبوس الرقمي 9 على الأردوينو.
بعد ذلك، قم بتوصيل شاشة TM1637. صِل دبوس VCC بدبوس 5V في الأردوينو، ودبوس GND بالأرضي، ودبوس CLK (الساعة) بالدبوس الرقمي 2، ودبوس DIO (البيانات) بالدبوس الرقمي 3. بالنسبة لوحدة المرحل، صِل دبوس VCC بدبوس 5V، ودبوس GND بالأرضي، ودبوس التحكم (الإشارة) بالدبوس الرقمي 7. أخيرًا، تأكد من توصيل الحمل المتردد (AC) بأمان بوحدة المرحل وفقًا لإرشادات الشركة المصنعة.
أمثلة على الشيفرة وشرح تفصيلي
يقوم الكود التالي بتهيئة مستشعر DHT22 وشاشة TM1637. يقوم بضبط الدبابيس اللازمة ويجهز لقراءة بيانات درجة الحرارة.
#include
#define CLK 2
#define DIO 3
#define DHTPIN 9
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
pinMode(RELAY, OUTPUT);
dht.begin();
}
في هذا المقتطف، نقوم بتضمين المكتبات اللازمة وتحديد دبابيس شاشة TM1637 ومستشعر DHT22. تقوم دالة setup بتهيئة الاتصال التسلسلي وتعيين دبوس المرحل كمخرج.

تقوم دالة الحلقة باسترجاع درجة الحرارة وتتحكم في المرحل بناءً على قراءة درجة الحرارة. إذا تجاوزت درجة الحرارة 50 درجة، يتم تفعيل المرحل.
void loop() {
delay(TEST_DELAY);
int temp = round(getTemp("c"));
display.showNumberDec(temp, false, 3, 1);
if(temp > 50) {
digitalWrite(RELAY, LOW);
} else {
digitalWrite(RELAY, HIGH);
}
}
يُظهر هذا المقتطف من الشيفرة كيفية قراءة درجة الحرارة وعرضها والتحكم في المرحّل. يتم تقريب قيمة درجة الحرارة وعرضها على TM1637، ويُشغّل المرحّل أو يُطفأ بناءً على عتبة درجة الحرارة.
للحصول على فهم أكثر شمولًا، يُرجى الرجوع إلى الكود الكامل المرفق أسفل المقال
عرض توضيحي / ما الذي تتوقعه
عند تشغيل البرنامج، يجب أن ترى درجة الحرارة معروضة على TM1637. عندما تتجاوز درجة الحرارة 50 درجة مئوية، سيفعل المرحل ويشغّل الحمل المتصل بالتيار المتردد. وبالمقابل، عندما تنخفض درجة الحرارة إلى أقل من 50 درجة، سيتوقف المرحل عن العمل وسيُطفأ الحمل. احذر من عكس القطبية وتأكد من التوصيلات الصحيحة لتجنب تلف المكونات (في الفيديو عند 12:30).
الطوابع الزمنية للفيديو
- 00:00- المقدمة
- 02:15- شرح الأسلاك
- 05:00- شرح الكود
- 10:00- عرض توضيحي
- ١٢:30- مشاكل شائعة
/*
* Original code from TM1637 https://github.com/avishorp/TM1637
* Original code and library for DHT22 https://github.com/adafruit/DHT-sensor-library
* Watch the video for this code https://youtu.be/xD8wHXDzLkQ
* Other Arduino library and videos https://robojax.com
*/
/*
* Modified for Robojax video on January 10, 2018
* by Ahmad Nejrabi, in Ajax, Ontario, Canada
*/
// ****** Start of TM1637 Display code
#include <Arduino.h>
#include <TM1637Display.h>
// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3
// The amount of time (in milliseconds) between tests
#define TEST_DELAY 1000
TM1637Display display(CLK, DIO);
// ****** end of TM1637 Display code
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
// updated by Ahmad for Robojax.com videos.
// on January 10, 2018 in Ajax, Ontario, Canada
// ****** Start of DHT code
#include "DHT.h"
#define DHTPIN 9 // what digital pin we're connected to
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
// ********** end of DHT22 code
#define RELAY 7 // the pin connected to relay
void setup()
{
Serial.begin(9600);
Serial.println("DHT22 Robojax Test with Display");
pinMode(RELAY,OUTPUT);// set RELAY pin as output
dht.begin();
}
void loop()
{
delay(TEST_DELAY);// wait
// **** TM1637 code start
display.setBrightness(0x0f);// set brightness
uint8_t data[] = { 0x0, 0x0, 0x0, 0x0 };// clear display values
display.setSegments(data);//clear display
// **** TM1637 code end
// Robojax.com test video
Serial.println(getTemp("c"));
int temp = round(getTemp("c"));
display.showNumberDec(temp, false, 3,1);
if(temp >50 )
{
digitalWrite(RELAY, LOW);
}else{
digitalWrite(RELAY, HIGH);
}
}// loop end
/*
* getTemp(String req)
* returns the temperature related parameters
* req is string request
* getTemp("c") will return temperature in Celsius
* getTemp("hic") will return heat index in Celsius
* getTemp("f") will return temperature in Fahrenheit
* getTemp("hif") will return temperature in Fahrenheit
* getTemp("h") will return humidity
*/
float getTemp(String req)
{
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return 0.0;
}
// Compute heat index in Kelvin
float k = t + 273.15;
if(req =="c"){
return t;//return Celsius
}else if(req =="f"){
return f;// return Fahrenheit
}else if(req =="h"){
return h;// return humidity
}else if(req =="hif"){
return hif;// return heat index in Fahrenheit
}else if(req =="hic"){
return hic;// return heat index in Celsius
}else if(req =="k"){
return k;// return temperature in Kelvin
}else{
return 0.000;// if no request found, return 0.000
}
}
الأشياء التي قد تحتاجها
-
أمازونلوحة ريلاي 4 قنوات على أمازونamzn.to
-
علي إكسبريسشراء وحدة ريليه 5 فولت 12 فولت 1 2 4 6 8 قناةs.click.aliexpress.com
الموارد والمراجع
-
خارجي
ملفات📁
مكتبات أردوينو (ملف مضغوط)
-
وحدة PCB DHT22 حمراء
DHT22-module-red.fzpz0.01 MB
Fritzing File
-
جهاز استشعار الحرارة DHT11
Temperature Sensor DHT11.fzpz0.01 MB -
مستشعر الرطوبة ودرجة الحرارة DHT22
DHT22 Humidity and Temperature Sensor.fzpz0.01 MB -
وحدة PCB DHT22 حمراء
DHT22-module-red.fzpz0.01 MB -
وحدة DHT22 البيضاء
DHT22-module-white.fzpz0.01 MB -
نموذج سبعةSegments TM1637
TM1637.fzpz0.01 MB -
حساس الرطوبة ودرجة الحرارة DHT11 (3 دبابيس)
DHT11 Humitidy and Temperature Sensor (3 pins).fzpz0.20 MB
دليل المستخدم
-
دليل مستخدم حساس درجة الحرارة والرطوبة DHT22
robojax-DHT22_manual.pdf0.36 MB