- المكونات المطلوبة: -
- جهاز استشعار درجة الحرارة DS18B20:
- مخطط الرسم البياني:-
- خطوات أو تدفق التعليمات البرمجية: -
- شرح الكود:
- الحصول على البيانات من جهاز استشعار درجة الحرارة DS18B20:
بشكل عام ، يتم استخدام مستشعر درجة الحرارة LM35 مع وحدات التحكم الدقيقة لقياس درجة الحرارة لأنها رخيصة ومتوفرة بسهولة. لكن LM35 يعطي قيمًا تمثيلية ونحتاج إلى تحويلها إلى رقمي باستخدام ADC (محول تناظري إلى رقمي). لكننا اليوم نستخدم مستشعر درجة الحرارة DS18B20 الذي لا نحتاج فيه إلى تحويل ADC للحصول على درجة الحرارة. هنا سوف نستخدم PIC Microcontroller مع DS18B20 لقياس درجة الحرارة.
لذلك نحن هنا بصدد بناء مقياس حرارة بالمواصفات التالية باستخدام وحدة متحكم PIC16F877A من رقاقة دقيقة.
- سيظهر النطاق الكامل لدرجة الحرارة من -55 درجة إلى +125 درجة.
- سيعرض فقط درجة الحرارة إذا تغيرت درجة الحرارة + / -.2 درجة.
المكونات المطلوبة: -
- Pic16F877A - حزمة PDIP40
- مجلس الخبز
- Pickit-3
- محول 5V
- شاشة LCD JHD162A
- جهاز استشعار درجة الحرارة DS18b20
- أسلاك لتوصيل الأجهزة الطرفية.
- 4.7 كيلو مقاومات -2 قطعة
- 10 كيلو وعاء
- 20 ميجا هرتز كريستال
- 2 قطعة 33pF مكثفات السيراميك
جهاز استشعار درجة الحرارة DS18B20:
DS18B20 هو مستشعر ممتاز لاستشعار درجة الحرارة بدقة. يوفر هذا المستشعر دقة 9 بت إلى 12 بت في استشعار درجة الحرارة. يتصل هذا المستشعر بسلك واحد فقط ولا يحتاج إلى أي ADC للحصول على درجات حرارة تناظرية وتحويلها رقميًا.
مواصفات المستشعر هي: -
- يقيس درجات الحرارة من -55 درجة مئوية إلى + 125 درجة مئوية (-67 درجة فهرنهايت إلى + 257 درجة فهرنهايت)
- دقة ± 0.5 درجة مئوية من -10 درجة مئوية إلى +85 درجة مئوية
- دقة قابلة للبرمجة من 9 بت إلى 12 بت
- لا توجد مكونات خارجية مطلوبة
- يستخدم المستشعر 1-Wire® Interface
إذا نظرنا إلى صورة pinout أعلاه من ورقة البيانات ، يمكننا أن نرى أن المستشعر يشبه تمامًا حزمة BC547 أو BC557 ، TO-92. الدبوس الأول هو الأرضي ، والدبوس الثاني هو DQ أو البيانات والدبوس الثالث هو VCC.
فيما يلي المواصفات الكهربائية من ورقة البيانات التي ستكون ضرورية لتصميمنا. جهد الإمداد المقدر للمستشعر هو + 3.0 فولت إلى + 5.5 فولت. إنها تحتاج أيضًا إلى سحب جهد الإمداد وهو نفس جهد الإمداد المذكور أعلاه.
أيضًا ، هناك هامش دقة يبلغ + -0.5 درجة مئوية للمدى من -10 درجة مئوية إلى +85 درجة مئوية ، وتتغير الدقة لهامش النطاق الكامل ، وهو + -2 درجة لـ -55 درجة إلى + نطاق 125 درجة.
إذا نظرنا مرة أخرى إلى ورقة البيانات ، فسنرى مواصفات اتصال المستشعر. يمكننا توصيل المستشعر في وضع الطاقة الطفيلية حيث يلزم وجود سلكين ، DATA و GND ، أو يمكننا توصيل المستشعر باستخدام مصدر طاقة خارجي ، حيث يلزم وجود ثلاثة أسلاك منفصلة. سوف نستخدم التكوين الثاني.
نظرًا لأننا أصبحنا على دراية بتصنيفات طاقة المستشعر والمناطق ذات الصلة بالاتصال ، يمكننا الآن التركيز على عمل التخطيطي.
مخطط الرسم البياني:-
إذا رأينا مخطط الدائرة فسنرى أن
يتم توصيل شاشة LCD مقاس 16 × 2 حرفًا عبر متحكم PIC16F877A ، حيث يتم توصيل RB0 و RB1 و RB2 بدبوس LCD RS و R / W و E. ويتم توصيل RB4 و RB5 و RB6 و RB7 عبر شاشة LCD ذات 4 سنون D4 و D5 و D6 ، د 7. شاشة LCD متصلة في وضع 4 بت أو وضع nibble.
مذبذب بلوري 20 ميجا هرتز مع اثنين من مكثف السيراميك 33pF متصل عبر OSC1 و OSC2 pin. سيوفر ترددًا ثابتًا على مدار الساعة يبلغ 20 ميجا هرتز للميكروكونترولر.
يتم توصيل DS18B20 أيضًا وفقًا لتكوين الدبوس وبمقاوم سحب 4.7 كيلو كما تمت مناقشته من قبل. لقد ربطت كل هذا في اللوح.
إذا كنت جديدًا على PIC Microcontroller ، فاتبع دروس PIC Microcontroller التعليمية التي تنص على بدء استخدام PIC Microcontroller.
خطوات أو تدفق التعليمات البرمجية: -
- اضبط تكوينات الميكروكونترولر التي تتضمن تكوين المذبذب.
- اضبط المنفذ المرغوب لشاشة LCD بما في ذلك سجل TRIS.
- تبدأ كل دورة مع مستشعر ds18b20 بإعادة الضبط ، لذلك سنعيد ضبط ds18b20 وننتظر نبض التواجد.
- اكتب لوحة الرسم واضبط دقة المستشعر 12 بت.
- تخطي قراءة ROM متبوعة بنبض إعادة الضبط.
- إرسال أمر تحويل درجة الحرارة.
- اقرأ درجة الحرارة من لوحة الرسم.
- تحقق من قيمة درجة الحرارة سواء كانت سالبة أو موجبة.
- اطبع درجة الحرارة على شاشة LCD مقاس 16 × 2.
- انتظر تغيرات درجة الحرارة لـ +/-.20 درجة مئوية.
شرح الكود:
يتم تقديم الكود الكامل لميزان الحرارة الرقمي هذا في نهاية هذا البرنامج التعليمي مع فيديو توضيحي. ستحتاج إلى بعض ملفات الرأس لتشغيل هذا البرنامج الذي يمكن تنزيله من هنا.
أولاً ، نحتاج إلى ضبط بتات التكوين في متحكم الموافقة المسبقة عن علم ثم نبدأ بوظيفة رئيسية فارغة .
ثم يتم استخدام أربعة أسطر أدناه لتضمين ملف رأس المكتبة و lcd.h و ds18b20.h . و xc.h لملف رأس متحكم دقيق .
#تضمن
تستخدم هذه التعريفات لإرسال الأمر إلى مستشعر درجة الحرارة. يتم سرد الأوامر في ورقة بيانات المستشعر.
#define skip_rom 0xCC # تعريف convert_temp 0x44 # تعريف write_scratchpad 0x4E # تعريف القرار_12bit 0x7F # تعريف read_scratchpad 0xBE
يعرض هذا الجدول 3 من ورقة بيانات المستشعر جميع الأوامر التي تُستخدم فيها وحدات الماكرو لإرسال الأوامر المعنية.
لن تظهر درجة الحرارة على الشاشة إلا إذا تغيرت درجة الحرارة +/- .20 درجة. يمكننا تغيير فجوة درجة الحرارة هذه من هذا الماكرو temp_gap . عن طريق تغيير القيمة في هذا الماكرو ، سيتم تغيير المواصفات.
متغيران آخران للطفو يستخدمان لتخزين بيانات درجة الحرارة المعروضة وتمييزها مع فجوة درجة الحرارة
#define temp_gap 20 float pre_val = 0، aft_val = 0 ؛
في الوظيفة الرئيسية () الفارغة ، lcd_init () ؛ هي وظيفة لتهيئة LCD. هذا lcd_init () يتم استدعاء الدالة من lcd.h المكتبة.
تُستخدم سجلات TRIS لتحديد دبابيس الإدخال / الإخراج كمدخل أو إخراج. يتم استخدام اثنين من TempL و TempH المتغيرين القصيرين بدون إشارة لتخزين بيانات دقة 12 بت من مستشعر درجة الحرارة.
باطل رئيسي (باطل) {TRISD = 0xFF ؛ TRISA = 0x00 ؛ TRISB = 0x00 ؛ // TRISDbits_t.TRISD6 = 1 ؛ قصيرة غير موقعة TempL ، TempH ؛ int t ، t2 ؛ فرق تعويم 1 = 0 ، فرق 2 = 0 ؛ lcd_init () ،
دعونا نرى حلقة while ، هنا نقوم بتقسيم حلقة while (1) إلى أجزاء صغيرة.
تُستخدم هذه الخطوط للإحساس بأن مستشعر درجة الحرارة متصل أم لا.
بينما (ow_reset ()) {lcd_com (0x80) ، lcd_puts ("الرجاء الاتصال") ؛ lcd_com (0xC0) ؛ lcd_puts ("مسبار درجة الحرارة") ؛ }
باستخدام هذا الجزء من الكود ، نقوم بتهيئة المستشعر وإرسال الأمر لتحويل درجة الحرارة.
lcd_puts ("") ؛ ow_reset () ؛ write_byte (write_scratchpad) ؛ الكتابة_بايت (0) ؛ الكتابة_بايت (0) ؛ الكتابة_بايت (دقة_12 بت) ؛ // دقة 12 بت ow_reset () ؛ write_byte (skip_rom) ؛ write_byte (convert_temp) ؛
هذا الرمز مخصص لتخزين بيانات درجة الحرارة 12 بت في متغيرين قصيرين بدون إشارة.
بينما (read_byte () == 0xff) ؛ __delay_ms (500) ؛ ow_reset () ، write_byte (skip_rom) ؛ write_byte (read_scratchpad) ؛ TempL = read_byte () ، TempH = read_byte () ،
ثم إذا قمت بالتحقق من الكود الكامل أدناه ، فقد أنشأنا شرط if-else لمعرفة علامة درجة الحرارة سواء كانت إيجابية أم سلبية.
باستخدام رمز العبارة If ، نتعامل مع البيانات ونرى ما إذا كانت درجة الحرارة سالبة أم لا ونحدد التغيرات في درجة الحرارة في نطاق +/-.20 درجة أم لا. وفي جزء آخر قمنا بفحص ما إذا كانت درجة الحرارة إيجابية أم لا وكشف التغيرات في درجة الحرارة.
الشفرة
الحصول على البيانات من جهاز استشعار درجة الحرارة DS18B20:
دعونا نرى الفجوة الزمنية لواجهة 1-Wire®. نحن نستخدم كريستال 20 ميجا هرتز. إذا نظرنا داخل ملف ds18b20.c ، فسنرى
#define _XTAL_FREQ 20000000
يستخدم هذا التعريف لروتين تأخير المترجم XC8. تم تعيين 20 ميجا هرتز كتردد بلوري.
لقد صنعنا خمس وظائف
- ow_reset
- read_bit
- قراءة_بايت
- write_bit
- الكتابة_بايت
يحتاج بروتوكول 1-Wire ® إلى مواضع زمنية صارمة للتواصل. داخل ورقة البيانات ، سوف نحصل على معلومات مثالية ذات صلة بالوقت.
داخل الوظيفة أدناه أنشأنا الفترة الزمنية الدقيقة. من المهم إنشاء التأخير الدقيق للتعليق والتحرير والتحكم في بت TRIS لمنفذ المستشعر المعني.
char ow_reset غير الموقعة (باطل) {DQ_TRIS = 0 ؛ // Tris = 0 (الإخراج) DQ = 0 ؛ // تعيين رقم التعريف الشخصي إلى منخفض (0) __delay_us (480) ؛ // 1 سلك يتطلب تأخير زمني DQ_TRIS = 1 ؛ // تريس = 1 (إدخال) __delay_us (60) ؛ // 1 سلك يتطلب تأخيرًا زمنيًا إذا (DQ == 0) // إذا كان هناك تواجد {__delay_us (480) ؛ العودة 0 ؛ // return 0 (1-wire is حضور)} else {__delay_us (480) ؛ العودة 1 ؛ // إرجاع 1 (1-wire ليس حضورًا)}} // 0 = وجود ، 1 = لا يوجد جزء
الآن وفقا لأقل وقت وصف فتحة المستخدمة في القراءة والكتابة، أنشأنا القراءة و الكتابة وظيفة على التوالي.
حرف read_bit بدون علامة (باطل) {unsigned char i؛ DQ_TRIS = 1 ، DQ = 0 ؛ // سحب DQ منخفضًا لبدء الفترة الزمنية DQ_TRIS = 1 ؛ DQ = 1 ؛ // ثم إرجاع عاليًا لـ (i = 0 ؛ i <3 ؛ i ++) ؛ // تأخير 15us من بداية العائد الزمني (DQ) ؛ // إرجاع قيمة خط DQ} write_bit باطلة (char bitval) {DQ_TRIS = 0 ؛ DQ = 0 ؛ // سحب DQ المنخفضة لبدء الفترة الزمنية إذا كانت (bitval == 1) DQ = 1 ؛ // إرجاع DQ مرتفع إذا اكتب 1 __delay_us (5) ؛ // عقد القيمة لبقية الفترة الزمنية DQ_TRIS = 1 ؛ DQ = 1 ؛ } // يوفر Delay 16us لكل حلقة ، بالإضافة إلى 24us. لذلك تأخير (5) = 104us
تحقق كذلك من كافة الرؤوس وملفات c هنا.
هذه هي الطريقة التي يمكننا بها استخدام مستشعر DS18B20 للحصول على درجة الحرارة باستخدام PIC Microcontroller.
إذا كنت ترغب في إنشاء مقياس حرارة رقمي بسيط باستخدام LM35 ، فقم بإلقاء نظرة على المشروعات التالية باستخدام وحدات التحكم الدقيقة الأخرى:
- قياس درجة حرارة الغرفة باستخدام Raspberry Pi
- ميزان حرارة رقمي باستخدام اردوينو و LM35
- ميزان حرارة رقمي باستخدام LM35 و 8051
- قياس درجة الحرارة باستخدام متحكم LM35 و AVR