مشروع متحكم فى درجة حرارة (بيان وتحكم) مع استخدام موديول ADC والحساس LM35 و LCD و RS232 مع المترجم CCS C
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: برمجة الميكروكونترولر PIC بلغة السى مع المترجم CCS - C
صفحة 1 من اصل 1
مشروع متحكم فى درجة حرارة (بيان وتحكم) مع استخدام موديول ADC والحساس LM35 و LCD و RS232 مع المترجم CCS C
مشروع متحكم فى درجة حرارة (بيان وتحكم) مع استخدام موديول ADC والحساس LM35 و LCD و RS232 مع المترجم CCS C
الغرض :
هذا البرنامج البسيط يبين لك كيفية قراءة حساس درجة الحرارة LM35 باستخدام الميكروكونترولر بغرض بيان درجة الحرارة ، وبناء على هذا البيان يتم التحكم فى تشغيل وفصل جهاز (حمل) عند درجة حرارة محددة ، أى متحكم فى درجة الحرارة .
الأدوات المستخدمة :
• المترجم CCS PIC-C .
• برمجيات المحاكاة ضمن برنامج PROTEUS .
معلومات مساعدة :
المحول من تناظرى إلى رقمى ADC هو وحدة أو موديول داخل الميكروكونترولر يستخدم لقراءة الجهود التناظرية فى شكل تمثيل رقمى . فى هذا المشروع سوف نستخدم الميكروكونترولر PIC16F877A والذى يمتلك موديول ADC بدقة 10 بت وله 8 قنوات هى A0-A5 , E0-E2 .
أحد البارامترات الهامة لموديول ADC هو جهد مرجعه (Vref) ، وهو أقصى جهد يمكن للموديول ADC قراءته ، فى هذا المشروع سوف يكون Vref = 5V وهو جهد مصدر تغذية الميكروكونترولر .
بارامتر مهم آخر هو دقة التحويل للموديول ADC ، والتى تحدد أدنى قيمة جهد تناظرى يمكن قراءته ( تسمى خطوة التحويل) .
فعلى سبيل المثال ، موديول محول ADC بدقة 10 بت مع جهد مرجع 5V ، يكون مدى الجهود يبدأ من 0V وينتهى عند 5V ويكون مقسما إلى خطوات (أقسام) متساوية تبدأ من “0” وتنتهى عند “1023” (2^10 -1) . وهذا يعنى أنه إذا كان جهد الدخل التناظرى هو 5V ، والذى يمثل أقصى قيمة ، فأن المحول ADC سوف يقرأه فى شكل العدد “1023” ، وإذا كان جهد الدخل التناظرى 2.5V فإن القراءة سوف تكون 512 وهكذا .
يتم حساب خطوة (دقة) المحول ADC ببساطة باستخدام المعادلة Step = Vref/1024 ، وفى هذه الحالة تكون
4.883 mV ، وهذا الجهد هو أدنى جهد يمكن للمحول ADC قراءته ، ومن ثم فإن دخل تناظرى بالقيمة 4.883Mv يجب أن يعطى قراءة “001” ، ودخل بالقيمة 9.766mV يجب أن يعطى قراءة “002” وهكذا .
حساس درجة الحرارة LM35 :
هذا الحساس له 3 أطراف هى طرفى التغذية وطرف الخرج (Vcc,Output,GND) ، وهو حساس لدرجة الحرارة مرتفع الدقة ، حيث تبلغ دقته 10mV/C مبتدءا من عند 0V ، أى أن خرج 0V يمثل درجة حرارة 0C ، ومن ثم يكون :
10mV ---> 1C
20mV ---> 2C
370mV ---> 37.0C.
…………………
تحويل قراءة المحول ADC إلى الدرجات المئوية :
بمعلومية أن خطوة المحول ADC هى 4.883Mv ، فإن تحويل القراءة القمية مرة أخرى إلى جهد تناظرى يكون أمرا من السهل القيام به عن طريق ضرب القراءة الرقمية (عدد الخطوات) فى قيمة الخطوة الواحدة :
Vin (in Volts) = DigitalReading * 0.004883
الآن ، بمعلومية أن حساسية الحساس هى 10mV/C ، يكون من السهل القيام بتحويل هذا الجهد إلى درجات مئوية عن طريق قسمة جهد الدخل على “0.01” ، وبالتالى يكون :
Temperature (C) = Vin/0.01 = DigitalReading * 0.4883
أى ضرب القراءة الرقمية فى معامل الدقة الكلية وهو 0.4883 .
الدائرة الكهربية :
تدريب تمهيدى : قراءة درجة الحرارة وإرسالها خلال المنفذ RS232 إلى الكمبيوتر :
الغرض :
هذا البرنامج البسيط يبين لك كيفية قراءة حساس درجة الحرارة LM35 باستخدام الميكروكونترولر بغرض بيان درجة الحرارة ، وبناء على هذا البيان يتم التحكم فى تشغيل وفصل جهاز (حمل) عند درجة حرارة محددة ، أى متحكم فى درجة الحرارة .
الأدوات المستخدمة :
• المترجم CCS PIC-C .
• برمجيات المحاكاة ضمن برنامج PROTEUS .
معلومات مساعدة :
المحول من تناظرى إلى رقمى ADC هو وحدة أو موديول داخل الميكروكونترولر يستخدم لقراءة الجهود التناظرية فى شكل تمثيل رقمى . فى هذا المشروع سوف نستخدم الميكروكونترولر PIC16F877A والذى يمتلك موديول ADC بدقة 10 بت وله 8 قنوات هى A0-A5 , E0-E2 .
أحد البارامترات الهامة لموديول ADC هو جهد مرجعه (Vref) ، وهو أقصى جهد يمكن للموديول ADC قراءته ، فى هذا المشروع سوف يكون Vref = 5V وهو جهد مصدر تغذية الميكروكونترولر .
بارامتر مهم آخر هو دقة التحويل للموديول ADC ، والتى تحدد أدنى قيمة جهد تناظرى يمكن قراءته ( تسمى خطوة التحويل) .
فعلى سبيل المثال ، موديول محول ADC بدقة 10 بت مع جهد مرجع 5V ، يكون مدى الجهود يبدأ من 0V وينتهى عند 5V ويكون مقسما إلى خطوات (أقسام) متساوية تبدأ من “0” وتنتهى عند “1023” (2^10 -1) . وهذا يعنى أنه إذا كان جهد الدخل التناظرى هو 5V ، والذى يمثل أقصى قيمة ، فأن المحول ADC سوف يقرأه فى شكل العدد “1023” ، وإذا كان جهد الدخل التناظرى 2.5V فإن القراءة سوف تكون 512 وهكذا .
يتم حساب خطوة (دقة) المحول ADC ببساطة باستخدام المعادلة Step = Vref/1024 ، وفى هذه الحالة تكون
4.883 mV ، وهذا الجهد هو أدنى جهد يمكن للمحول ADC قراءته ، ومن ثم فإن دخل تناظرى بالقيمة 4.883Mv يجب أن يعطى قراءة “001” ، ودخل بالقيمة 9.766mV يجب أن يعطى قراءة “002” وهكذا .
حساس درجة الحرارة LM35 :
هذا الحساس له 3 أطراف هى طرفى التغذية وطرف الخرج (Vcc,Output,GND) ، وهو حساس لدرجة الحرارة مرتفع الدقة ، حيث تبلغ دقته 10mV/C مبتدءا من عند 0V ، أى أن خرج 0V يمثل درجة حرارة 0C ، ومن ثم يكون :
10mV ---> 1C
20mV ---> 2C
370mV ---> 37.0C.
…………………
تحويل قراءة المحول ADC إلى الدرجات المئوية :
بمعلومية أن خطوة المحول ADC هى 4.883Mv ، فإن تحويل القراءة القمية مرة أخرى إلى جهد تناظرى يكون أمرا من السهل القيام به عن طريق ضرب القراءة الرقمية (عدد الخطوات) فى قيمة الخطوة الواحدة :
Vin (in Volts) = DigitalReading * 0.004883
الآن ، بمعلومية أن حساسية الحساس هى 10mV/C ، يكون من السهل القيام بتحويل هذا الجهد إلى درجات مئوية عن طريق قسمة جهد الدخل على “0.01” ، وبالتالى يكون :
Temperature (C) = Vin/0.01 = DigitalReading * 0.4883
أى ضرب القراءة الرقمية فى معامل الدقة الكلية وهو 0.4883 .
الدائرة الكهربية :
تدريب تمهيدى : قراءة درجة الحرارة وإرسالها خلال المنفذ RS232 إلى الكمبيوتر :
تدريب تمهيدى : قراءة درجة الحرارة وإرسالها خلال المنفذ RS232 إلى الكمبيوتر :
تدريب تمهيدى : قراءة درجة الحرارة وإرسالها خلال المنفذ RS232 إلى الكمبيوتر :
شرح البرنامج :
أولا :رأس (مقدمة) البرنامج :
1- تحديد الميكروكونترولر المستخدم :
ثانيا : الدالة الرئيسية :
1- إعلان المتغيرات ، لاحظ أن النوع يتناسب مع القيم التى سوف يتم حفظها فى المتغير :
ب- قراءة الجهد التناظرى وتحويله إلى نتيجة رقمية “0-1023” وحفظه فى المتغير value :
ت- تحويل القراءة الرقمية إلى ما يقابلها من الدرجات المئوية
ث- إرسال معلومات درجة الحرارة بتشكيل محدد عبر المنفذ RS232 :
برنامج المتحكم :
- الكود:
#include <16F877A.h>
#device ADC=10
#USE DELAY(clock = 4000000)
#use RS232(baud = 9600, xmit = PIN_C6, rcv = PIN_C7)
void main ()
{
float32 value, value1;
setup_adc(ADC_CLOCK_INTERNAL); // Internal
setup_adc_ports (AN0);
set_adc_channel (0);
while (TRUE)
{
delay_ms (500);
value = read_adc ();
value1 = value * 0.4883;
printf ("Temp:%5.1fC\n\r", (float)value1);
}
}
شرح البرنامج :
أولا :رأس (مقدمة) البرنامج :
1- تحديد الميكروكونترولر المستخدم :
- الكود:
#include <16F877A.h>
- الكود:
#device ADC=10
- الكود:
#USE DELAY(clock = 4000000)
- الكود:
#use RS232(baud = 9600, xmit = PIN_C6, rcv = PIN_C7)
ثانيا : الدالة الرئيسية :
- الكود:
void main ()
{
1- إعلان المتغيرات ، لاحظ أن النوع يتناسب مع القيم التى سوف يتم حفظها فى المتغير :
- الكود:
Int16 value;
float value1;
- الكود:
setup_adc(ADC_CLOCK_INTERNAL); // Internal
setup_adc_ports (AN0);
set_adc_channel (0);
- الكود:
while (TRUE)
{
- الكود:
delay_ms (500);
ب- قراءة الجهد التناظرى وتحويله إلى نتيجة رقمية “0-1023” وحفظه فى المتغير value :
- الكود:
value = read_adc ();
ت- تحويل القراءة الرقمية إلى ما يقابلها من الدرجات المئوية
- الكود:
value1 = value * 0.4883;
ث- إرسال معلومات درجة الحرارة بتشكيل محدد عبر المنفذ RS232 :
- الكود:
printf ("Temp:%5.1fC\n\r", (float)value1);
}
}
برنامج المتحكم :
برنامج المتحكم :
برنامج المتحكم :
- الكود:
///////////////////////////////////////////////////////////////////////////////////////////////////////
/*
PIC16F877A and LM35-LCD Based Temperature Monitor
*/
#include <16f877a.h>
#device adc=10 // Set ADC resolution to 10Bit
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,ERRORS)
#include <lcd.c>
#define LOAD PIN_B7 //Relay
#define THRES 30.0 // load switching threshold in Celsius
int16 digital_reading; // ADC resolution is 10Bit, an 8Bit integer is not enough to hold the reading
float temp;
void main()
{
/* ADC Initialization */
setup_adc(ADC_CLOCK_INTERNAL); // initialize ADC with a sampling rate of Crystal/4 MHz
setup_adc_ports(RA0_ANALOG); // set PIN_A0 as analog input channel
set_adc_channel(0); // point ADC to channel 0 for ADC reading
delay_ms(1); // ADC module is slow, needs some time to adjust.
/* Peripherals Configurations */
lcd_init(); // Turn LCD ON, along with other initialization commands
output_low(LOAD); // the load is initially OFF
lcd_gotoxy(1,1); // point LCD cursor to col1 row1
lcd_putc("Temperature is:"); // print on LCD
while(1) // infinite loop
{
digital_reading = read_adc(); // capture current temperature reading
delay_us(100); // 0.1ms delay for ADC stabilization
temp = digital_reading * 0.4883; // convert reading to Celsius
lcd_gotoxy(1,2); // point LCD cursor to col1 row2
printf(lcd_putc,"%2.1f C",temp); // print value on LCD
printf("Temperature is: %2.1f C\r\n",temp); // print value on RS232
if(temp>=THRES) output_high(LOAD); // if temp.>=30 then Control Load on
else output_low(LOAD); //else off
delay_ms(1000); // 1 second delay between readings
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
مواضيع مماثلة
» شرح مشروع متحكم فى درجة الحرارة الموجبة يصلح نواة للتحكم فى المشاريع الكبرى مثل المكيفات والأفران والسخانات وغيرها باستخدم الحساس LM35 والميكروكونترولر PIC16F88 مع المترجم CCS C :
» تدريب : استخدام المحول ADC لقياس درجة الحرارة بالحساس LM35 مع المترجم CCS C :
» مشروع متحكم رقمى فى درجة الحرارة السالبة والموجبة بالحساس DS18B20 والميكروكونترولر 16F628 والسفن سيجمنت مع المترجم CCS C :
» التدريب الثالث : إنشاء عداد بمفتاح ضاعط أو بحساس لعد الأشياء من “0” إلى “99” باستخدم وحدتى عرض سفن سيجمنت مع استخدام ترانزستورات ومع المترجم CCS C .
» Printf function-constants-RS232-terminal
» تدريب : استخدام المحول ADC لقياس درجة الحرارة بالحساس LM35 مع المترجم CCS C :
» مشروع متحكم رقمى فى درجة الحرارة السالبة والموجبة بالحساس DS18B20 والميكروكونترولر 16F628 والسفن سيجمنت مع المترجم CCS C :
» التدريب الثالث : إنشاء عداد بمفتاح ضاعط أو بحساس لعد الأشياء من “0” إلى “99” باستخدم وحدتى عرض سفن سيجمنت مع استخدام ترانزستورات ومع المترجم CCS C .
» Printf function-constants-RS232-terminal
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: برمجة الميكروكونترولر PIC بلغة السى مع المترجم CCS - C
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى