مستشعر DHT-22 هو مستشعر رقمي يوفر لنا معلومات عن درجة الحرارة والرطوبة. في داخل هذا المتسشعر حساسات صغيره لكل من الحرارة والرطوبة، خانة المعلومات الرقمية في المستشعر تتيح لنا هذه المعلومات.
في هذا الدرس، سوف نتعلم كيف نوصل DHT-22 للاردوينو
مقدمة عن سلسة مستشعرات DHT
تتكون عائلة مستشعرات DHT من مستشعرات رقمية ميسورة التكلفة وشائعة الاستخدام، مصممة لقياس درجة الحرارة والرطوبة بدقة موثوقة. تشمل هذه المستشعرات نماذج شهيرة مثل DHT11 وDHT22 (AM2302) وDHT21، وهي مثالية لكل من المشاريع الهواية والاحترافية نظرًا لـسهولة استخدامها وتوافقها مع المتحكمات الدقيقة مثل أردوينو وراسبيري باي. يوفر DHT11 دقة أساسية وتكلفة منخفضة، مما يجعله مناسبًا للتطبيقات الداخلية البسيطة، بينما يتميز DHT22 بدقة أعلى ونطاق قياس أوسع، مما يجعله مثاليًا للبيئات الأكثر تطلبًا. وبفضل وجود محوّل تناظري إلى رقمي مدمج، توفر هذه المستشعرات خرجًا رقميًا يقلل من تداخل الضوضاء ويسهّل معالجة البيانات. سواء كنت تبني نظام منزل ذكي أو محطة طقس أو جهاز مراقبة بيئي عبر إنترنت الأشياء، توفر عائلة DHT حلاً عمليًا وفعّالًا لقياس درجة الحرارة والرطوبة.
في هذا الدرس، سوف نقوم بدرس مستشعر DHT-22، ترقبوا التعديلات والحثلنات حتى ترون كيف نستعمل مستشعارات اخرى
خانات مستشعر DHT-22

الخانات بالترتيب من اليسار لليمين عند مواجهة المستشعر
- خانة الطاقة (Vin)
- خانة اشارة المستشعر (signal)
- ليست للاستعمال
- خانة الارض (gnd)
احتياجات الدرس
- مستشعر DHT-22
- اردوينو اونو (Arduino Uno)
- لوحة توصيل (Breadboard)
- مقام تيار 10k ohm (10K ohm resistor)
ملاحظة: من الممكن استعمال لوحة تحكم كالاردوينو نانو او الميني، ولكن في هذا الدرس سوف نستعمل الاردوينو اونو
اللوحة الكهربائية:

تنويه: من المهم استعمال مقام التيار من اجل الحفاظ على سلامة المستشعر
برمجة الاردوينو حتى يعمل مع المستشعر
الخطوة الاولى في برمجة الاردوينو هي تحميل برنامج اردوينو وتوصيله بالاردوينو البيتي، بعد فتح البرنامج، يجب علينا تحميل المكتبة (وهي تتكون من كود شخص بناه من قبل كي تسهل علينا برمجة المستشعر) الخاصة بسلسة مستشعرات DHT، وذلك عن طريق بحث "dhtlib"في قسم "library manager" وتحميل النتيجة الاولى كما موضوع في الصورة التالية:
تنويه: يرجى الانتباه الى اسم كاتب المكتبة لضمان تحميل نفس الكود

بعد ان نحمل المكتبة قومو بنسخ الكود التالي الى البرنامج:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
#include <dht.h> dht DHT; #define DHT22_PIN 2 struct { uint32_t total; uint32_t ok; uint32_t crc_error; uint32_t time_out; uint32_t connect; uint32_t ack_l; uint32_t ack_h; uint32_t unknown; } stat = { 0,0,0,0,0,0,0,0}; void setup() { Serial.begin(9600); Serial.println("dht22_test.ino"); Serial.print("LIBRARY VERSION: "); Serial.println(DHT_LIB_VERSION); Serial.println(); Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)\tTime (us)"); } void loop() { // READ DATA Serial.print("DHT22, \t"); uint32_t start = micros(); int chk = DHT.read22(DHT22_PIN); uint32_t stop = micros(); stat.total++; switch (chk) { case DHTLIB_OK: stat.ok++; Serial.print("OK,\t"); break; case DHTLIB_ERROR_CHECKSUM: stat.crc_error++; Serial.print("Checksum error,\t"); break; case DHTLIB_ERROR_TIMEOUT: stat.time_out++; Serial.print("Time out error,\t"); break; case DHTLIB_ERROR_CONNECT: stat.connect++; Serial.print("Connect error,\t"); break; case DHTLIB_ERROR_ACK_L: stat.ack_l++; Serial.print("Ack Low error,\t"); break; case DHTLIB_ERROR_ACK_H: stat.ack_h++; Serial.print("Ack High error,\t"); break; default: stat.unknown++; Serial.print("Unknown error,\t"); break; } // DISPLAY DATA Serial.print(DHT.humidity, 1); Serial.print(",\t"); Serial.print(DHT.temperature, 1); Serial.println(); delay(2000); } |
بعد تحميل البرنامج، يجب فتح خانة "Serial Output" من اجل رؤية النتيجة، ومن المفترض ان نرى شيئأ شبيه لما في الصورة التالية:
