- DHT11 - المواصفات والعمل
- التواصل مع مستشعر DHT11
- المكونات المطلوبة
- تخطيطي
- DHT11 مع شرح كود PIC MPLABX
غالبًا ما يكون قياس درجة الحرارة والرطوبة مفيدًا في العديد من التطبيقات مثل أتمتة المنزل ، ومراقبة البيئة ، ومحطة الطقس ، وما إلى ذلك. يعد مستشعر درجة الحرارة الأكثر استخدامًا بجوار LM35 هو DHT11 ، وقد قمنا سابقًا ببناء العديد من مشاريع DHT11 من خلال ربطه بـ Arduino ، مع Raspberry Pi والعديد من مجالس التطوير الأخرى. في هذه المقالة ، سوف نتعلم كيفية ربط DHT11 مع PIC16F87A وهو متحكم PIC 8 بت. سنستخدم هذا المتحكم الدقيق لقراءة قيم درجة الحرارة والرطوبة باستخدام DHT11 وعرضها على شاشة LCD. إذا كنت جديدًا تمامًا في استخدام الميكروكونترولر PIC ، فيمكنك الاستفادة من سلسلة دروس PIC لتتعلم كيفية برمجة واستخدام متحكم PIC ، ومع ذلك ، فلنبدأ.
DHT11 - المواصفات والعمل
يتوفر مستشعر DHT11 إما في شكل وحدة أو في شكل مستشعر. في هذا البرنامج التعليمي ، نستخدم المستشعر ، والفرق الوحيد بينهما هو أنه في شكل وحدة ، يحتوي المستشعر على مكثف ترشيح ومقاوم سحب متصل بدبوس إخراج المستشعر. لذلك إذا كنت تستخدم الوحدة ، فلا داعي لإضافتها خارجيًا. يتم عرض DHT11 في شكل جهاز استشعار أدناه.
يأتي مستشعر DHT11 مع غلاف بلون أزرق أو أبيض. داخل هذا الغلاف ، لدينا مكونان مهمان يساعداننا على الشعور بالرطوبة النسبية ودرجة الحرارة. المكون الأول هو زوج من الأقطاب الكهربائية ؛ يتم تحديد المقاومة الكهربائية بين هذين القطبين بواسطة الركيزة التي تحافظ على الرطوبة. لذا فإن المقاومة المقاسة تتناسب عكسياً مع الرطوبة النسبية للبيئة. كلما زادت الرطوبة النسبية الأقل ستكون قيمة المقاومة والعكس صحيح. لاحظ أيضًا أن الرطوبة النسبية تختلف عن الرطوبة الفعلية. الرطوبة النسبية تقيس محتوى الماء في الهواء بالنسبة لدرجة الحرارة في الهواء.
المكون الآخر هو الثرمستور NTC المركب على السطح. يشير مصطلح NTC إلى معامل درجة الحرارة السالبة ، لأن الزيادة في درجة الحرارة ستنخفض قيمة المقاومة. يتم معايرة خرج المستشعر في المصنع ، وبالتالي ، بصفتنا مبرمجًا ، لا داعي للقلق بشأن معايرة المستشعر. ناتج المستشعر الناتج عن اتصال بسلك واحد ، دعنا نرى الرسم التخطيطي للدبوس والتوصيل لهذا المستشعر.
المنتج في حزمة صف واحد 4pin. يتم توصيل الدبوس الأول عبر VDD والدبوس الرابع متصل عبر GND. الدبوس الثاني هو دبوس البيانات ، يستخدم لأغراض الاتصال. يحتاج دبوس البيانات هذا إلى مقاومة سحب تبلغ 5 كيلو. ومع ذلك ، يمكن أيضًا استخدام مقاومات أخرى مثل 4.7k إلى 10k. الدبوس الثالث غير متصل بأي شيء. لذلك يتم تجاهله.
توفر ورقة البيانات المواصفات الفنية بالإضافة إلى المعلومات البينية التي يمكن رؤيتها في الجدول أدناه-
يوضح الجدول أعلاه مدى ودقة قياس درجة الحرارة والرطوبة. يمكنه قياس درجة الحرارة من 0-50 درجة مئوية بدقة +/- 2 درجة مئوية والرطوبة النسبية من 20-90٪ RH بدقة +/- 5٪ RH. يمكن رؤية المواصفات التفصيلية في الجدول أدناه.
التواصل مع مستشعر DHT11
كما ذكرنا سابقًا ، من أجل قراءة البيانات من DHT11 مع PIC ، يتعين علينا استخدام بروتوكول PIC one wire Communication Protocol. يمكن فهم التفاصيل حول كيفية القيام بذلك من الرسم التخطيطي البيني لـ DHT 11 والذي يمكن العثور عليه في ورقة البيانات الخاصة به ، كما هو موضح أدناه.
يحتاج DHT11 إلى إشارة بدء من MCU لبدء الاتصال. لذلك ، في كل مرة تحتاج وحدة MCU إلى إرسال إشارة بدء إلى مستشعر DHT11 لتطلب منه إرسال قيم درجة الحرارة والرطوبة. بعد إكمال إشارة البدء ، يرسل DHT11 إشارة استجابة تتضمن معلومات درجة الحرارة والرطوبة. يتم إجراء اتصال البيانات بواسطة بروتوكول اتصال بيانات ناقل واحد. يبلغ طول البيانات الكامل 40 بت ويرسل المستشعر بت بيانات أعلى أولاً.
نظرًا لمقاومة السحب ، يظل خط البيانات دائمًا عند مستوى VCC أثناء وضع الخمول. يحتاج MCU إلى خفض هذا الجهد العالي إلى المنخفض لمدة لا تقل عن 18 مللي ثانية. خلال هذا الوقت ، يكتشف مستشعر DHT11 إشارة البدء ويقوم المتحكم الدقيق بجعل خط البيانات عالياً لمدة 20-40us. يُطلق على وقت 20-40us فترة انتظار حيث يبدأ DHT11 في الاستجابة. بعد فترة الانتظار هذه ، يرسل DHT11 البيانات إلى وحدة التحكم الدقيقة.
تنسيق بيانات مستشعر DHT11
تتكون البيانات من أجزاء عشرية ومتكاملة معًا. يتبع المستشعر تنسيق البيانات أدناه -
بيانات RH متكاملة 8 بت + بيانات RH عشرية 8 بت + بيانات T متكاملة 8 بت + بيانات T عشرية 8 بت + مجموع اختباري 8 بت.
يمكن للمرء التحقق من البيانات عن طريق التحقق من قيمة المجموع الاختباري مع البيانات المستلمة. يمكن القيام بذلك لأنه ، إذا كان كل شيء على ما يرام وإذا كان المستشعر قد أرسل البيانات المناسبة ، فيجب أن يكون المجموع الاختباري هو مجموع "بيانات RH متكاملة 8 بت + 8bit RHdata + 8bit بيانات T متكاملة + 8bit عشرية T بيانات".
المكونات المطلوبة
لهذا المشروع ، الأشياء التالية مطلوبة -
- إعداد برمجة PIC Microcontroller (8bit).
- اللوح
- 5V 500mA وحدة تزويد الطاقة.
- 4.7 كيلو المقاوم 2 قطع
- 1 كيلو المقاوم
- PIC16F877A
- 20 ميجا هرتز الكريستال
- 33pF مكثف 2 قطعة
- شاشة LCD مقاس 16 × 2 حرف
- مستشعر DHT11
- أسلاك توصيل
تخطيطي
يظهر أدناه مخطط الدائرة لربط DHT11 مع PIC16F877A.
لقد استخدمنا شاشة LCD مقاس 16 × 2 لعرض قيم درجة الحرارة والرطوبة التي نقيسها من DHT11. يتم توصيل شاشة LCD في وضع 4 أسلاك ويتم تشغيل كل من المستشعر وشاشة LCD بواسطة مصدر طاقة خارجي 5 فولت. لقد استخدمت لوحة توصيل لإجراء جميع التوصيلات المطلوبة واستخدمت محولًا خارجيًا بجهد 5 فولت. يمكنك أيضًا استخدام لوحة إمداد طاقة اللوح لتزويد لوحتك بجهد 5 فولت.
بمجرد أن تصبح الدائرة جاهزة ، كل ما علينا فعله هو تحميل الكود الوارد في أسفل هذه الصفحة ويمكننا البدء في قراءة درجة الحرارة والرطوبة كما هو موضح أدناه. إذا كنت تريد معرفة كيفية كتابة الكود وكيف يعمل ، فاقرأ المزيد. كما يمكنك العثور على العمل الكامل لهذا المشروع في الفيديو الموجود أسفل هذه الصفحة.
DHT11 مع شرح كود PIC MPLABX
تمت كتابة الكود باستخدام MPLABX IDE وتم تجميعه باستخدام برنامج التحويل البرمجي XC8 الذي تم توفيره بواسطة Microchip نفسه وهو مجاني للتنزيل والاستخدام. يرجى الرجوع إلى الدروس الأساسية لفهم أساسيات البرمجة ، فقط الوظائف الثلاث الهامة المطلوبة للتواصل مع مستشعر DHT11 تمت مناقشتها أدناه. الوظائف هي -
dht11_init () باطلة ؛ find_response () باطلة ؛ char read_dht11 () ،
يتم استخدام الوظيفة الأولى لإشارة البدء مع dht11. كما تمت مناقشته من قبل ، يبدأ كل اتصال مع DHT11 بإشارة بدء ، وهنا يتم تغيير اتجاه الدبوس في البداية لتكوين دبوس البيانات كإخراج من وحدة التحكم الدقيقة. ثم يتم سحب خط البيانات منخفضًا ويظل ينتظر 18 مللي ثانية. بعد ذلك مرة أخرى ، يتم جعل الخط مرتفعًا بواسطة وحدة التحكم الدقيقة ويظل ينتظر حتى 30us. بعد وقت الانتظار هذا ، تم تعيين دبوس البيانات كمدخل إلى وحدة التحكم الدقيقة لتلقي البيانات.
dht11_init () باطلة { DHT11_Data_Pin_Direction = 0 ؛ // تكوين RD0 كإخراج DHT11_Data_Pin = 0 ؛ // يرسل RD0 0 إلى المستشعر __delay_ms (18) ؛ DHT11_Data_Pin = 1 ، // يرسل RD0 1 إلى المستشعر __delay_us (30) ؛ DHT11_Data_Pin_Direction = 1 ، // تكوين RD0 كمدخل }
يتم استخدام الوظيفة التالية لإعداد بت فحص حسب حالة دبوس البيانات. يتم استخدامه لاكتشاف الاستجابة من مستشعر DHT11.
find_response () باطلة { Check_bit = 0 ؛ __delay_us (40) ؛ إذا (DHT11_Data_Pin == 0) { __delay_us (80) ؛ إذا (DHT11_Data_Pin == 1) { Check_bit = 1 ؛ } __delay_us (50) ؛} }
أخيرًا وظيفة القراءة dht11 ؛ هنا تتم قراءة البيانات في تنسيق 8 بت حيث يتم إرجاع البيانات باستخدام عملية إزاحة البت اعتمادًا على حالة دبوس البيانات.
char read_dht11 () { char data، for_count؛ لـ (for_count = 0 ؛ for_count <8 ؛ for_count ++) { while (! DHT11_Data_Pin) ؛ __delay_us (30) ؛ إذا (DHT11_Data_Pin == 0) { data & = ~ (1 << (7 - for_count)) ؛ // Clear bit (7-b) } else { data- = (1 << (7 - for_count)) ؛ // تعيين بت (7-ب) بينما (DHT11_Data_Pin) ؛ } } إرجاع البيانات ؛ }
بعد ذلك ، يتم عمل كل شيء في الوظيفة الرئيسية. أولاً ، تتم تهيئة النظام حيث تتم تهيئة شاشة LCD وتعيين اتجاه منفذ دبابيس LCD على الإخراج. التطبيق يعمل داخل الوظيفة الرئيسية
void main () { system_init () ؛ بينما (1) { __delay_ms (800) ؛ dht11_init () ، find_response () ، إذا (Check_bit == 1) { RH_byte_1 = read_dht11 () ؛ RH_byte_2 = read_dht11 () ، Temp_byte_1 = read_dht11 () ، Temp_byte_2 = read_dht11 () ، الجمع = read_dht11 () ؛ إذا (الجمع == ((RH_byte_1 + RH_byte_2 + Temp_byte_1 + Temp_byte_2) & 0XFF)) { Humidity = Temp_byte_1 ؛ RH = RH_byte_1 ، lcd_com (0x80) ؛ lcd_puts ("درجة الحرارة:") ؛ // lcd_puts ("") ؛ lcd_data (48 + ((الرطوبة / 10)٪ 10)) ؛ lcd_data (48 + (الرطوبة٪ 10)) ؛ lcd_data (0xDF) ؛ lcd_puts ("C") ؛ lcd_com (0xC0) ؛ lcd_puts ("الرطوبة:") ؛ // lcd_puts ("") ؛ lcd_data (48 + ((RH / 10)٪ 10)) ؛ lcd_data (48 + (RH٪ 10)) ؛ lcd_puts ("٪") ؛ } else { lcd_puts ("خطأ اختباري")؛ } } آخر { clear_screen () ؛ lcd_com (0x80) ؛ lcd_puts ("خطأ !!!") ؛ lcd_com (0xC0) ؛ lcd_puts ("لا يوجد رد.") ؛ } __delay_ms (1000) ؛ } }
يتم الاتصال بمستشعر DHT11 داخل حلقة while حيث يتم إرسال إشارة البدء إلى المستشعر. بعد ذلك ، يتم تشغيل وظيفة find_response . إذا كان Check_bit هو 1 ، فسيتم إجراء الاتصال الإضافي وإلا ستظهر شاشة LCD مربع حوار الخطأ.
اعتمادًا على بيانات 40 بت ، يتم استدعاء read_dht11 5 مرات (5 مرات × 8 بت) ويتم تخزين البيانات وفقًا لتنسيق البيانات المقدم في ورقة البيانات. و يتم فحص الوضع الاختباري أيضا وإذا تم العثور على أخطاء، وسوف تخطر أيضا في LCD. أخيرًا ، يتم تحويل البيانات ونقلها إلى شاشة LCD مقاس 16 × 2 حرفًا.
يمكن تنزيل الكود الكامل لقياس درجة الحرارة والرطوبة PIC من هنا. تحقق أيضًا من فيديو العرض التوضيحي أدناه.
آمل أن تكون قد فهمت المشروع واستمتعت ببناء شيء مفيد. إذا كانت لديك أي أسئلة ، فاتركها في قسم التعليقات أدناه أو استخدم منتدياتنا للأسئلة الفنية الأخرى.