مشروع قياس درجة الحرارة بالحساس LM35 وعرضها على وحدات 7-segment وإنشاء نظام تحكم :
الحساس LM35 شائع الاستخدام وهو حساس دقيق لدرجة الحرارة بالدرجات المئوية , يمكن استخدامه لقياس درجة الحرارة بدقة نصف 0.5 درجة مئوية . يمكن ربط هذا الحساس بسهولة بالميكروكونترولر PIC وإنشاء مقاييس لدرجة الحرارة و متحكمات فى درجة الحرارة وأجهزة إنذار بالحريق و...
الحساس LM35 :
هذا الحساس له ثلاثة أطراف كما فى الشكل . جهد التغذية Vcc يمكن أن يكون من 4V إلى 20V .
لاستخدام الحساس ببساطة قم بتوصيل الطرف Vcc بالجهد +5V وطرف الأرضى (المشترك) GND بالأرضى وطرف الخرج Out بأحد أطراف المداخل التناظرية للميكروكونترولر . هذا الخرج يتغير خطيا مع درجة الحرارة وهو يساوى 10 ملى فولت لكل درجة مئوية . إذا كان الخرج 310 mV , على سبيل المثال , فإن درجة الحرارة تكون 31 درجة مئوية .
المحول ADC بالميكروكونترولر PIC بسعة 10 بت . إذا كان جهد المرجع المستخدم هو 5V فإن دقة التحويل (أقل جهد يمكن قياسه) تكون :
ملحوظة :
القيمة الدقيقة هى 4.88mv .
مثال :
إذا كانت نتيجة التحويل ADC هى 10 فهذا يعنى أن جهد الدخل :
يمكننا قراءة قيمة أى قناة تحويل ADC باستخدام الدالة ADC_Read(ch)" " حيث ch هى رقم القناة . إذا قمت بتوصيل الحساس LM35 إلى القناة RA0/AN0 عندئذ تصبح الدالة ADC_Read(0)" " . هذه القراءة يجب حفظها فى متغير ليصبح شكل العبارة:
كما ذكرنا : قيمة نتيجة التحويل ADC تكون نتيجة "لمضاعفات" القيمة 5mV ونظرا لأن كل واحد درجة مئوية تنتج 10mV فى خرج الحساس , نتيجة لذلك يمكننا القول " كل وحدتين من وحدات نتيجة التحويل ADC تساوى واحد درجة مئوية" . لذلك , للحصول على درجة الحرارة يتم قسمة قيمة المتغير result على 2 أى :
معامل القسمة الدقيق هو 2.05 , أى :
فى هذا المشروع سوف نستخدم وحدتين 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 لعرض درجة الحرارة
الدائرة الكهربية :
البرنامج وبه جميع التعليقات :
Code:
/*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
}
//-------------------------------------------
}
خارج الموضوع تحويل الاكوادإخفاء الابتساماتإخفاء