قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 05-11-2015, 11:28 AM المشاركة 1   
افتراضي مشروع قياس درجة الحرارة بالحساس LM35 وعرضها على وحدات 7-segment وإنشاء نظام تحكم : Twitter FaceBook Google+



مشروع قياس درجة الحرارة بالحساس LM35 وعرضها على وحدات 7-segment وإنشاء نظام تحكم :

الحساس LM35 شائع الاستخدام وهو حساس دقيق لدرجة الحرارة بالدرجات المئوية ، ويمكن استخدامه لقياس درجة الحرارة بدقة نصف 0.5 درجة مئوية . يمكن ربط هذا الحساس بسهولة بالميكروكونترولر PIC وإنشاء مقاييس لدرجة الحرارة ومتحكمات فى درجة الحرارة وأجهزة إنذار بالحريق و...
الحساس LM35 :



هذا الحساس له ثلاثة أطراف كما فى الشكل أعلاه . جهد التغذية Vcc يمكن أن يكون من 4V إلى 20V . لاستخدام الحساس ، ببساطة قم بتوصيل الطرف Vcc بالجهد +5V وطرف الأرضى (المشترك) GND بالأرضى وطرف الخرج Out بأحد أطراف المداخل التناظرية للميكروكونترولر . هذا الخرج يتغير خطيا مع درجة الحرارة وهو يساوى 10 ملى فولت لكل درجة مئوية . إذا كان الخرج 310 mV ، على سبيل المثال ، فإن درجة الحرارة تكون 31 درجة مئوية .
المحول ADC بالميكروكونترولر PIC بسعة 10 بتات . إذا كان جهد المرجع المستخدم هو 5V فإن دقة التحويل (أقل جهد يمكن قياسه) تكون :
5/1024 = 5mV approx
بمعنى آخر : أقل نتيجة تحويل ADC هى البت أو الوحدة "1" ، عندئذ يكون أقل جهد يمكن قياسه هو 5mV وهو يناظر درجة حرارة تساوى 0.5 درجة مئوية وهى دقة القياس .
ملحوظة :
القيمة الدقيقة هى 4.88mv .
مثال :
إذا كانت نتيجة التحويل ADC هى العدد 10 فهذا يعنى أن جهد الدخل :
10 x 5mV = 50mV
وهو يناظر 5 درجة مئوية ( كل درجة مئوية تناظر 10 ملى فولت) .
يمكننا قراءة قيمة أى قناة تحويل ADC باستخدام الدالة ADC_Read(ch)" " حيث ch هى رقم القناة . إذا قمت بتوصيل الحساس LM35 إلى القناة RA0/AN0 عندئذ تصبح الدالة ADC_Read(0)" " . هذه القراءة يجب حفظها فى متغير ليصبح شكل العبارة:
كود:
result = ADC_Read(0);


هذه العبارة تعنى تخزين القراءة الحالية لنتيجة التحويل ADC فى المتغير result . بيانات هذا المتغير يجب أن تكون من نوع 0 .. 65535" unsigned (int)" حيث أن مدى قيمة نتيجة التحويل هو 0-1023 .
كما ذكرنا : قيمة نتيجة التحويل ADC تكون نتيجة "لمضاعفات" القيمة 5mV ونظرا لأن كل واحد درجة مئوية تنتج 10mV فى خرج الحساس ، نتيجة لذلك يمكننا القول " كل وحدتين من وحدات نتيجة التحويل ADC تساوى واحد درجة مئوية" . لذلك ، للحصول على درجة الحرارة يتم قسمة قيمة المتغير result على 2 أى :

كود:
result = result /2;
ملحوظة :

معامل القسمة الدقيق هو 2.05 , أى :

كود:
result = result /2.05;
فى النهاية يمكنك عرض هذه القيمة على وحدات العرض المختلفة .
فى هذا المشروع سوف نستخدم وحدتين 7 segment لعرض درجة الحرارة

الدائرة الكهربية :





البرنامج :

كود:
/*Project:
Temperature display and controller using two 7 segment and LM35
Connection as in QL200 :
segments connected to PORTD-Common Anodes :RA4>tens & RA5>ones
LED : connected to RB0
Buzzer :connected to RC2
MCU : PIC16F877A 
MikroC PRO
ENG.F.ABDELAZIZ
http://www.eeecb.com/vb/index.php
*/
//----------------------------------------------------------------------------------------------------------
//define the table of constant 0-9 (mask) 
const char TABLE[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsigned int  result=0x00;                            //define ADC convert result register
unsigned short i;                                // for loop counter
 
 void  init();                                         //I/O PORT initialize function declare
 void  display(int result);                               //display function declare
 
//---------------------------------------------------------------------------------------------------------------
 //main program
 void  main()
 {
  init();                                                  //call initialize function
    while(1)                 
   {
   result=0x00;                                    //clear the convert result
   result = ADC_Read(0);// read and stor ADCresult as "0-1023"
   //result=result/2;  // covert from "0-1023" to "temperature in degree
result=result/2.05;  // exact conversion from "0-1023" to "temperature in degree
   display(result);                                //call display function
// Temperature controller part
if(result>75) PORTB.B0=1; else PORTB.B0=0; // LED
if(result>85) PORTC.B2=1; else PORTC.B2=0;//Buzzer
   }
  }
//-----------------------------------------------
 //initialize function
 
 void  init()
  {
    ADCON1=0x8E;              //set RA0 pin > ADC input ,the others general I/O
   TRISA=0x01;                //set RA0 INPUT,the others OUTPUT
   TRISD=0x00;                     //set D PORT all OUTPUT 
   TRISB.B0=0;                      //For LED
   TRISC.B2=0;                     //For Buzzer 
   PORTD=0xFF;                  //close all display
     }
//-----------------------------------------------
//display function
void display(int result)
   {
    int  TEN,ONE,temp;   //define 3 temporary variable
     temp=result;                                              //temporary keep AD convert result
     TEN = temp/10 ;                           //get display tens bit
     ONE = (temp % 10) ;                   //get display ones bit
     //-----------------------------
for (i = 0; i<=50; i++) {
    
     PORTD=TABLE[TEN];                        //get the display tens bit code from table
     PORTA=0x2F;                             //RA4 OUTPUT low,light tens bit display
     Delay_ms(1);                                 //delay some time,ensure display brightness
    
     PORTD=TABLE[ONE];            //get the display ones bit code from table
     PORTA=0x1F;                             //RA5 OUTPUT low,light ones bit display
     Delay_ms(1);                                 //delay some time,ensure display brightness
   }
//-------------------------------------------
}



اعلانات

ah-22
:: مهندس متميز ::
تاريخ التسجيل: Apr 2007
المشاركات: 440
نشاط [ ah-22 ]
قوة السمعة:0
قديم 05-11-2015, 11:58 AM المشاركة 2   
افتراضي رد


شكراً أستاذ هل يمكن إعادة رفع مخطط الدائرة حيث انه لا يمكن تكبيرها وهي غير واضحة

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 05-11-2015, 01:10 PM المشاركة 3   
افتراضي


شكراً أستاذ هل يمكن إعادة رفع مخطط الدائرة حيث انه لا يمكن تكبيرها وهي غير واضحة
http://www.qariya.info/vb/showthread.php?t=106005


ah-22
:: مهندس متميز ::
تاريخ التسجيل: Apr 2007
المشاركات: 440
نشاط [ ah-22 ]
قوة السمعة:0
قديم 05-11-2015, 01:49 PM المشاركة 4   
افتراضي رد


شكراً أستاذ وجزاك الله كل خير وكفاك كل شر


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 05-11-2015, 05:59 PM المشاركة 5   
افتراضي


شكراً أستاذ وجزاك الله كل خير وكفاك كل شر
أخى الكريم

شكرا جزيلا لك .

ملف المشروع على الرابط :

http://www.micro-es.com/up2//view.php?file=1d7a557bad


http://micro-es.com/vb4/forum.php

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 01:29 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2024