كود أرْدُوينو وفيديو لمستشعر درجة الحرارة والرطوبة DHT22
في هذا الدرس، سنتعلم كيفية استخدام مستشعر الحرارة والرطوبة DHT22 مع لوحة أردوينو. يستطيع DHT22، المعروف أيضًا باسم AM2302، قياس درجات حرارة تتراوح من -40 إلى 80 درجة مئوية ورطوبة تتراوح من 0 إلى 99 بالمئة. باتباع هذا الدليل، ستتمكن من عرض درجة الحرارة بالدرجات المئوية أو الفهرنهايت أو الكلفن، بالإضافة إلى مستوى الرطوبة.

سنستخدم مكتبة مستشعر DHT لقراءة البيانات من الحساس بسهولة. تبسط هذه المكتبة عملية التواصل مع DHT22 وتتيح لنا الوصول إلى قيم درجة الحرارة والرطوبة بعدة أسطر قليلة من التعليمات البرمجية. لمزيد من الشرح المتعمق، أشجّعك على مشاهدة الفيديو المرافق (في الفيديو عند 00:00).
شرح الأجهزة
المكون الرئيسي في هذا المشروع هو وحدة المستشعر DHT22، وهو حساس رقمي لدرجة الحرارة والرطوبة. يستخدم عنصر استشعار سعوي للرطوبة وثرمستور لقياس الهواء المحيط. الإخراج إشارة رقمية يمكن قراءتها بواسطة أردوينو.
يعمل حساس DHT22 ضمن نطاق جهد من 3.3 إلى 5 فولت ويتواصل عبر واجهة ذات سلك واحد، مما يجعله سهلاً للدمج في مشاريعك. كما يتميز بمسافة نقل طويلة تصل إلى 20 مترًا، مما يتيح مرونة في وضع المستشعر.
تفاصيل ورقة البيانات
| الشركة المصنعة | أوسونغ |
|---|---|
| رقم القطعة | DHT22 (AM2302) |
| جهد المنطق/الإدخال والإخراج | 3.3 - 5 فولت |
| جهد التغذية | 3.3 - 5 فولت |
| نطاق القياس (درجة الحرارة) | -40 إلى +80 °C |
| نطاق القياس (الرطوبة) | 0 إلى 99٪ |
| الدقة (درجة الحرارة) | ±0.5 درجة مئوية |
| الدقة (الرطوبة) | ±2 % عند 25 °C |
| قرار | 0.1 °م / 0.1 % |
| مسافة الإرسال | حتى 20 م |
| حزمة | وحدة ذات 4 دبابيس |
- تأكد من وجود مصدر طاقة مناسب بجهد بين 3.3 فولت و5 فولت.
- استخدم مقاوم سحب إلى الأعلى بقيمة 10K بين دبوس البيانات ومصدر الطاقة.
- اجعل أسلاك المجمّس قصيرة للحصول على قراءات دقيقة.
- تجنّب الاستطلاع السريع؛ اسمح بفترات تأخير بين القراءات.
- كن حذرًا من العوامل البيئية التي تؤثر على القراءات.
تعليمات التوصيل الكهربائي

لبدء توصيل حساس DHT22، ابدأ بتوصيل دبوس الطاقة (الدبوس 1) للحساس بمخرج 5V على الأردوينو. بعد ذلك، وصل دبوس الأرضي (الدبوس 4) إلى أحد مداخل GND على الأردوينو. يجب توصيل دبوس البيانات (الدبوس 2) بالدبوس الرقمي 2 في الأردوينو للتواصل. بالإضافة إلى ذلك، ضع مقاومًا 10K بين دبوس البيانات ودبوس الطاقة لضمان قراءات مستقرة.
إذا كنت تستخدم دبوسًا مختلفًا للبيانات، فتذكر تحديث الكود وفقًا لذلك عن طريق تغيير الـ#define DHTPINالقيمة لتتناسب مع الدبوس المختار. يجب أن تكون عملية الإعداد بسيطة، فاتباع هذه التوصيلات سيضمن أن يعمل المستشعر بشكل صحيح.
أمثلة على الكود ودليل خطوة بخطوة
يقوم الكود التالي بتهيئة مستشعر DHT22 وقراءة قيم درجة الحرارة والرطوبة. أولاً، نقوم بإدراج مكتبة DHT وتحديد الدبوس الذي يتصل به المستشعر:
#include "DHT.h"
#define DHTPIN 2 // what digital pin we're connected to
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);هنا، المتغيرDHTPINتم تعيينه إلى 2، مما يشير إلى أن دبوس بيانات المستشعر متصل بالدبوس الرقمي 2 في لوحة أردوينو. الـDHTTYPEيحدد نوع المستشعر المستخدم، والذي في هذه الحالة هو DHT22.
بعد ذلك، فيsetup()في الدالة، نقوم بتهيئة المستشعر ومراقب السيريال:
void setup() {
Serial.begin(9600);
dht.begin();
}يقوم مقتطف الشيفرة هذا بتهيئة الاتصال التسلسلي وتجهيز حساس DHT للقراءة. الـSerial.begin(9600)يضبط معدل البود في الاتصال التسلسلي.
في الـloop()في الدالة، يمكننا قراءة وعرض قيم درجة الحرارة والرطوبة:
Serial.print("Temperature: ");
Serial.print(getTemp("c")); // Celsius
Serial.print(" *C ");
Serial.print(getTemp("h")); // Humidity
Serial.println(" % ");هذا الجزء من الشيفرة يطبع درجة الحرارة بوحدة Celsius ونسبة الرطوبة المئوية إلى نافذة المراقبة التسلسلية. الدالةgetTemp()يستخدم لاسترجاع البيانات المطلوبة بناءً على المعامل الممرر.
عرض توضيحي / ما الذي تتوقعه
بمجرد إعداد كل شيء ورفع الشيفرة، يجب أن ترى قراءات درجة الحرارة والرطوبة معروضة على المراقب التسلسلي. قد يحتاج مستشعر DHT22 إلى لحظة حتى يستقر، لذا تأكد من السماح ببضع ثوانٍ بين القراءات (في الفيديو عند 15:00). إذا واجهت أي مشاكل في القراءات، فتحقق من الأسلاك وتأكد من أن الاتصالات محكمة. من الأخطاء الشائعة وجود تعيينات دبابيس خاطئة أو مشاكل في مصدر الطاقة.
الطوابع الزمنية للفيديو
- 00:00- مقدمة عن مستشعر DHT22
- 01:30- توصيل المستشعر
- 03:00- شرح الكود
- 04:30- عرض توضيحي للكود
- 06:00- الخاتمة
++
/*
* This is the Arduino code for the DHT22 module to read temperature and humidity.
* This code can display temperature in:
* getTemp("c") is used to get Celsius.
* getTemp("f") is used to get Fahrenheit.
* getTemp("k") is used for Kelvin.
* getTemp("hif") is used to get Fahrenheit.
* getTemp("hic") is used to get Celsius.
* getTemp("h") is used to get humidity.
* Watch the video https://youtu.be/oi_GPSLjgBY
* Other Arduino library and videos https://robojax.com
*
* Written/updated by Ahmad Shamshiri for Robojax.com Video
* Date: Jan 08, 2018, in Ajax, Ontario, Canada
* Permission granted to share this code given that this
* note is kept with the code.
* Disclaimer: This code is "AS IS" and for educational purposes only.
*
* original source code : https://github.com/adafruit/DHT-sensor-library
*/
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
#include "DHT.h"
#define DHTPIN 2 // 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)
// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors. This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster processors.
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("DHTxx Robojax test!");
dht.begin();
}
void loop() {
// Wait a few seconds between measurements.
delay(2000);
// Robojax.com test video
Serial.print("Temperature: ");
Serial.print(getTemp("c"));
Serial.print(" *C ");
Serial.print(getTemp("f"));
Serial.println (" *F");
Serial.println("-----------------");
Serial.print("Heat index: ");
Serial.print(getTemp("hic"));
Serial.print(" *C ");
Serial.print(getTemp("hif"));
Serial.println(" *F");
Serial.print(getTemp("k"));
Serial.println(" *K");
Serial.println("-----------------");
Serial.print("Humidity: ");
Serial.print(getTemp("h"));
Serial.println(" % ");
Serial.println("===========================");
}
/*
* getTemp(String req)
* returns the temperature related parameters
* req is string request
* This code can display temperature in:
* getTemp("c") is used to get Celsius.
* getTemp("f") is used to get Fahrenheit.
* getTemp("k") is used for Kelvin.
* getTemp("hif") is used to get Fahrenheit.
* getTemp("hic") is used to get Celsius.
* getTemp("h") is used to get humidity.
*/
float getTemp(String req)
{
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (it's 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
}
}
الموارد والمراجع
ملفات📁
مكتبات أردوينو (ملف مضغوط)
-
وحدة PCB DHT22 حمراء
DHT22-module-red.fzpz0.01 MB
Fritzing File
-
مستشعر الرطوبة ودرجة الحرارة DHT22
DHT22 Humidity and Temperature Sensor.fzpz0.01 MB -
وحدة PCB DHT22 حمراء
DHT22-module-red.fzpz0.01 MB
دليل المستخدم
-
دليل مستخدم حساس درجة الحرارة والرطوبة DHT22
robojax-DHT22_manual.pdf0.36 MB