- المكونات المطلوبة:
- مخطط الرسم البياني:
- قياس درجة الحرارة باستخدام LM35 باستخدام 8051:
- شاشة LCD مقاس 16 × 2:
- ADC0804 إيك:
- مستشعر درجة الحرارة LM35:
- شرح الكود:
أحيانًا يجد الناس صعوبة في قراءة درجة الحرارة من مقياس الحرارة التناظري بسبب التقلبات. لذلك سنقوم ببناء مقياس حرارة رقمي بسيط باستخدام متحكم 8051 يستخدم فيه مستشعر LM35 لقياس درجة الحرارة. لقد استخدمنا أيضًا LM35 لبناء مقياس حرارة رقمي باستخدام Arduino و NodeMCU و PIC و Raspberry Pi وأجهزة التحكم الدقيقة الأخرى.
سيكون هذا المشروع أيضًا بمثابة واجهة مناسبة لـ ADC0804 مع 8051 و 16 * 2 LCD مع 8051 متحكم دقيق.
المكونات المطلوبة:
- 8051 مجلس التنمية
- مجلس ADC0804
- شاشة عرض LCD مقاس 16 * 2
- مستشعر LM35
- مقياس فرق الجهد
- أسلاك توصيل
مخطط الرسم البياني:
يرد أدناه مخطط الدائرة لدائرة ميزان الحرارة الرقمي باستخدام LM35:
قياس درجة الحرارة باستخدام LM35 باستخدام 8051:
8051 microcontroller عبارة عن متحكم 8 بت يحتوي على 128 بايت من ذاكرة الوصول العشوائي (RAM) ، و 4 K بايت على ذاكرة ROM ذات الرقاقة ، وجهازي توقيت ، ومنفذ تسلسلي واحد وأربعة منافذ 8 بت. 8052 متحكم هو امتداد لميكروكونترولر. يوضح الجدول أدناه مقارنة 8051 من أفراد الأسرة.
خاصية |
8051 |
8052 |
ROM (بالبايت) |
4K |
8 كيلو |
ذاكرة الوصول العشوائي (بايت) |
128 |
256 |
الموقتات |
2 |
3 |
دبابيس I / O |
32 |
32 |
منفذ تسلسلي |
1 |
1 |
مصادر المقاطعة |
6 |
8 |
شاشة LCD مقاس 16 × 2:
شاشة LCD مقاس 16 * 2 تستخدم على نطاق واسع للتطبيقات المضمنة. فيما يلي شرح موجز حول المسامير وعمل شاشة LCD مقاس 16 * 2. هناك نوعان من السجلات الهامة للغاية داخل شاشة LCD. هم سجل البيانات وسجل الأوامر. يستخدم سجل الأوامر لإرسال أوامر مثل العرض الواضح ، المؤشر في المنزل وما إلى ذلك ، يتم استخدام سجل البيانات لإرسال البيانات التي سيتم عرضها على شاشة LCD مقاس 16 * 2. يوضح الجدول أدناه وصف دبوس شاشة LCD مقاس 16 * 2.
دبوس |
رمز |
I / O |
وصف |
1 |
Vss |
- |
أرض |
2 |
Vdd |
- |
+ 5V امدادات الطاقة |
3 |
في |
- |
مزود الطاقة للتحكم في التباين |
4 |
RS |
أنا |
RS = 0 لتسجيل الأوامر ، RS = 1 لتسجيل البيانات |
5 |
RW |
أنا |
R / W = 0 للكتابة ، R / W = 1 للقراءة |
6 |
ه |
I / O |
ممكن |
7 |
د 0 |
I / O |
ناقل بيانات 8 بت (LSB) |
8 |
D1 |
I / O |
ناقل بيانات 8 بت |
9 |
د 2 |
I / O |
ناقل بيانات 8 بت |
10 |
د 3 |
I / O |
ناقل بيانات 8 بت |
11 |
د 4 |
I / O |
ناقل بيانات 8 بت |
12 |
د 5 |
I / O |
ناقل بيانات 8 بت |
13 |
د 6 |
I / O |
ناقل بيانات 8 بت |
14 |
د 7 |
I / O |
ناقل بيانات 8 بت (MSB) |
15 |
أ |
- |
+ 5V للإضاءة الخلفية |
16 |
ك |
- |
أرض |
يوضح الجدول أدناه رموز أوامر LCD المستخدمة بشكل متكرر.
الكود (ست عشري) |
وصف |
01 |
شاشة عرض واضحة |
06 |
زيادة المؤشر (إزاحة لليمين) |
0 أ |
العرض متوقف ، المؤشر قيد التشغيل |
0 ج |
العرض قيد التشغيل ، المؤشر مغلق |
0F |
العرض قيد التشغيل ، المؤشر يومض |
80 |
قوة المؤشر إلى بداية 1 شارع خط |
C0 |
فرض المؤشر على بداية السطر الثاني |
38 |
سطرين ومصفوفة 5 * 7 |
ADC0804 إيك:
و ADC0804 IC هو ADC موازية 8 بت في الأسرة من سلسلة ADC0800 من اشباه الموصلات وطنية. يعمل مع +5 فولت ودقة 8 بت. يختلف حجم الخطوة ونطاق Vin لقيم مختلفة لـ Vref / 2. يوضح الجدول أدناه العلاقة بين Vref / 2 ومجموعة Vin.
Vref / 2 (V) |
فين (الخامس) |
حجم الخطوة (بالسيارات) |
افتح |
0 إلى 5 |
19.53 |
2.0 |
0 إلى 4 |
15.62 |
1.5 |
0 إلى 3 |
11.71 |
1.28 |
0 إلى 2.56 |
10 |
في حالتنا Vref / 2 متصل بـ 1.28 فولت ، لذا فإن حجم الخطوة هو 10mV. بالنسبة إلى ADC0804 ، يتم حساب حجم الخطوة على أنه (2 * Vref / 2) / 256.
تستخدم الصيغة التالية لحساب جهد الخرج:
Dout = حجم Vin / الخطوة
حيث Dout هو إخراج البيانات الرقمية في النظام العشري ، Vin = جهد الإدخال التناظري وحجم الخطوة (الدقة) هو أصغر تغيير. تعرف على المزيد حول ADC0804 هنا ، وتحقق أيضًا من واجهة ADC0808 مع 8051.
مستشعر درجة الحرارة LM35:
LM35 عبارة عن مستشعر درجة حرارة يتناسب جهده الناتج خطيًا مع درجة الحرارة المئوية. يأتي الطراز LM35 مُعايرًا بالفعل وبالتالي لا يتطلب أي معايرة خارجية. ينتج 10mV لكل درجة حرارة مئوية.
ينتج مستشعر LM35 جهدًا يتوافق مع درجة الحرارة. يتم تحويل هذا الجهد إلى رقمي (0 إلى 256) بواسطة ADC0804 ويتم تغذيته إلى متحكم 8051. متحكم 8051 يحول هذه القيمة الرقمية إلى درجة حرارة بالدرجة المئوية. ثم يتم تحويل درجة الحرارة هذه إلى شكل أسكي مناسب للعرض. يتم تغذية قيم ascii هذه إلى شاشة LCD مقاس 16 * 2 والتي تعرض درجة الحرارة على شاشتها. تتكرر هذه العملية بعد فترة زمنية محددة.
فيما يلي صورة الإعداد لميزان الحرارة الرقمي LM35 باستخدام 8051:
يمكنك العثور على جميع موازين الحرارة الرقمية القائمة على LM35 هنا.
شرح الكود:
يتم تقديم برنامج C الكامل لميزان الحرارة الرقمي هذا باستخدام LM35 في نهاية هذا المشروع. يتم تقسيم الكود إلى أجزاء صغيرة ذات معنى وموضح أدناه.
بالنسبة لواجهة LCD مقاس 16 * 2 مع متحكم 8051 ، يتعين علينا تحديد المسامير التي يتم توصيل شاشة LCD مقاس 16 * 2 بها بمتحكم دقيق 8051. دبوس RS 16 * 2 LCD متصل بـ P2.7 ، دبوس RW 16 * 2 LCD متصل بـ P2.6 و E pin من 16 * 2 LCD متصل بـ P2.5. تتصل دبابيس البيانات بالمنفذ 0 من متحكم 8051.
sbit rs = P2 ^ 7 ؛ // تسجيل حدد (RS) دبوس 16 * 2 lcd sbit rw = P2 ^ 6 ؛ // قراءة / كتابة (RW) دبوس 16 * 2 lcd sbit en = P2 ^ 5 ؛ // تمكين دبوس (E) من 16 * 2 LCD
وبالمثل ، بالنسبة للتفاعل ADC0804 مع متحكم 8051 ، يتعين علينا تحديد المسامير التي يتصل بها ADC0804 بمتحكم 8051. تم توصيل دبوس RD الخاص بـ ADC0804 بـ P3.0 ، وموصل WR الخاص بـ ADC0804 متصل بـ P3.1 ودبوس INTR الخاص بـ ADC0804 متصل بـ P3.2. تتصل دبابيس البيانات بالمنفذ 1 من متحكم 8051.
sbit rd_adc = P3 ^ 0 ؛ // قراءة (RD) دبوس ADC0804 sbit wr_adc = P3 ^ 1 ؛ // اكتب (WR) دبوس ADC0804 sbit intr_adc = P3 ^ 2 ؛ // المقاطعة (INTR) دبوس من ADC0804
بعد ذلك علينا تحديد بعض الوظائف التي يتم استخدامها في البرنامج. يتم استخدام وظيفة التأخير لإنشاء تأخير زمني محدد ، ويتم استخدام وظيفة c mdwrt لإرسال أوامر إلى شاشة LCD مقاس 16 * 2 ، ويتم استخدام وظيفة datawrt لإرسال البيانات إلى شاشة LCD مقاس 16 * 2 وتستخدم وظيفة convert_display لتحويل بيانات ADC إلى درجة حرارة وعرضه على شاشة LCD مقاس 16 * 2.
تأخير باطل (غير موقع int) ؛ // وظيفة لإنشاء تأخير باطل cmdwrt (حرف غير موقّع) ؛ // وظيفة لإرسال الأوامر إلى شاشة عرض LCD مقاس 16 * 2 باطلة (حرف غير موقعة) ؛ // وظيفة لإرسال البيانات إلى شاشة عرض LCD مقاس 16 * 2 باطلة convert_display (حرف غير موقعة) ؛ // وظيفة لتحويل قيمة ADC إلى درجة حرارة وعرضها على شاشة LCD مقاس 16 * 2
في الجزء أدناه من الكود ، نرسل أوامر إلى شاشة LCD مقاس 16 * 2. أوامر مثل عرض واضح، المؤشر الاضافة، وقوة المؤشر إلى بداية 1 شارع خط يتم إرسالها إلى عرض 16 * 2 شاشات الكريستال السائل واحدا تلو الآخر بعد بعض التأخير الزمني المحدد.
لـ (i = 0 ؛ i <5 ؛ i ++) // أرسل الأوامر إلى شاشة عرض LCD مقاس 16 * 2 أمرًا واحدًا في كل مرة {cmdwrt (cmd) ؛ // استدعاء وظيفة لإرسال أوامر إلى تأخير عرض شاشة LCD 16 * 2 (1) ؛ }
في هذا الجزء من الكود ، نرسل البيانات إلى شاشة LCD مقاس 16 * 2. يتم إرسال البيانات التي سيتم عرضها على شاشة LCD مقاس 16 * 2 لعرضها واحدة تلو الأخرى بعد تأخير زمني محدد.
لـ (i = 0؛ i <12؛ i ++) // إرسال البيانات إلى شاشة LCD مقاس 16 * 2 حرف واحد في كل مرة {datawrt (data1) // استدعاء وظيفة لإرسال البيانات إلى تأخير عرض شاشة LCD 16 * 2 (1) ؛ } في هذا الجزء من الكود نقوم بتحويل الجهد التناظري الناتج عن مستشعر LM35 إلى بيانات رقمية ثم يتم تحويله إلى درجة حرارة وعرضه على شاشة عرض LCD مقاس 16 * 2. لكي يبدأ ADC0804 التحويل ، يتعين علينا إرسال نبضة منخفضة إلى عالية على WR pin من ADC0804 ، ثم يتعين علينا انتظار نهاية التحويل. يصبح INTR منخفضًا في نهاية التحويل. بمجرد انخفاض INTR ، يتم خفض RD لنسخ البيانات الرقمية إلى المنفذ 0 من متحكم 8051. بعد تأخير زمني محدد ، تبدأ الدورة التالية. تتكرر هذه العملية إلى الأبد.
while (1) // كرر إلى الأبد {wr_adc = 0 ؛ // إرسال نبضة منخفضة إلى عالية على تأخير دبوس WR (1) ؛ wr_adc = 1 ؛ بينما (intr_adc == 1) ؛ // انتظر حتى نهاية التحويل rd_adc = 0 ؛ // اجعل RD = 0 لقراءة البيانات من قيمة ADC0804 = P1 ؛ // نسخ بيانات ADC convert_display (القيمة) ؛ // استدعاء وظيفة لتحويل بيانات ADC إلى درجة حرارة وعرضها على تأخير عرض شاشة LCD 16 * 2 (1000) ؛ // الفاصل الزمني بين كل دورات rd_adc = 1 ؛ // اجعل RD = 1 للدورة التالية}
في الجزء أدناه من الكود ، نرسل أوامر إلى شاشة LCD مقاس 16 * 2. يتم نسخ الأمر إلى المنفذ 0 من متحكم 8051. تم جعل RS منخفضة لكتابة الأمر. تم جعل RW منخفضًا لعملية الكتابة. يتم تطبيق نبضة عالية إلى منخفضة على دبوس التمكين (E) لبدء عملية كتابة الأمر.
cmdwrt باطلة (حرف x بدون إشارة) {P0 = x ؛ // أرسل الأمر إلى المنفذ 0 حيث تم توصيل 16 * 2 lcd rs = 0 ؛ // اجعل RS = 0 للأمر rw = 0 ؛ // اجعل RW = 0 لعملية الكتابة ar = 1 ؛ // أرسل نبضة عالية إلى منخفضة على دبوس تمكين (E) لبدء تأخير عملية كتابة الأوامر (1) ؛ أون = 0 ؛ }
في هذا الجزء من الكود ، نرسل البيانات إلى شاشة LCD مقاس 16 * 2. يتم نسخ البيانات إلى المنفذ 0 من متحكم 8051. تم جعل RS عالية لكتابة الأوامر. تم جعل RW منخفضًا لعملية الكتابة. يتم تطبيق نبضة عالية إلى منخفضة على دبوس التمكين (E) لبدء عملية كتابة البيانات.
datawrt باطلة (حرف ص غير موقع) {P0 = y ؛ // أرسل البيانات إلى المنفذ 0 حيث تم توصيل 16 * 2 lcd rs = 1 ؛ // اجعل RS = 1 للأمر rw = 0 ؛ // اجعل RW = 0 لعملية الكتابة ar = 1 ؛ // أرسل نبضة عالية إلى منخفضة على دبوس تمكين (E) لبدء تأخير عملية كتابة البيانات (1) ؛ أون = 0 ؛ }
في هذا الجزء من الكود ، نقوم بتحويل البيانات الرقمية إلى درجة حرارة وعرضها على شاشة LCD مقاس 16 * 2.
convert_display باطلة (قيمة حرف غير موقعة) {unsigned char x1، x2، x3؛ cmdwrt (0xc6) ؛ // أمر لضبط المؤشر على الموضع السادس من السطر الثاني على 16 * 2 lcd x1 = (القيمة / 10) ؛ // قسّم القيمة على 10 وتخزين الحاصل في المتغير x1 x1 = x1 + (0x30) ؛ // تحويل المتغير x1 إلى ascii عن طريق إضافة 0x30 x2 = القيمة٪ 10 ؛ // قسّم القيمة على 10 وتخزين الباقي في المتغير x2 x2 = x2 + (0x30) ؛ // تحويل المتغير x2 إلى ascii عن طريق إضافة 0x30 x3 = 0xDF ؛ // قيمة ascii لدرجة (°) رمز datawrt (x1) ؛ // عرض درجة الحرارة على شاشة عرض LCD مقاس 16 * 2 datawrt (x2) ؛ datawrt (x3) ؛ datawrt ("C") ؛ }
تحقق أيضًا من موازين الحرارة الأخرى باستخدام LM35 مع وحدات تحكم دقيقة مختلفة:
- ميزان حرارة رقمي باستخدام اردوينو و LM35
- قياس درجة الحرارة باستخدام متحكم LM35 و AVR
- قياس درجة حرارة الغرفة باستخدام Raspberry Pi