منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

مشروع متحكم فى درجة حرارة (بيان وتحكم) مع استخدام موديول ADC والحساس LM35 و LCD و RS232 مع المترجم CCS C

اذهب الى الأسفل

مشروع متحكم فى درجة حرارة (بيان وتحكم) مع استخدام موديول  ADC والحساس LM35 و LCD و RS232 مع المترجم CCS C  Empty مشروع متحكم فى درجة حرارة (بيان وتحكم) مع استخدام موديول ADC والحساس LM35 و LCD و RS232 مع المترجم CCS C

مُساهمة من طرف Admin في السبت يونيو 06, 2015 11:20 am

مشروع متحكم فى درجة حرارة (بيان وتحكم) مع استخدام موديول 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 .

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

مشروع متحكم فى درجة حرارة (بيان وتحكم) مع استخدام موديول  ADC والحساس LM35 و LCD و RS232 مع المترجم CCS C  111

مشروع متحكم فى درجة حرارة (بيان وتحكم) مع استخدام موديول  ADC والحساس LM35 و LCD و RS232 مع المترجم CCS C  211

تدريب تمهيدى : قراءة درجة الحرارة وإرسالها خلال المنفذ RS232 إلى الكمبيوتر :



Admin
Admin

عدد المساهمات : 1187
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

مشروع متحكم فى درجة حرارة (بيان وتحكم) مع استخدام موديول  ADC والحساس LM35 و LCD و RS232 مع المترجم CCS C  Empty تدريب تمهيدى : قراءة درجة الحرارة وإرسالها خلال المنفذ RS232 إلى الكمبيوتر :

مُساهمة من طرف Admin في السبت يونيو 06, 2015 11:28 am

تدريب تمهيدى : قراءة درجة الحرارة وإرسالها خلال المنفذ RS232 إلى الكمبيوتر :

مشروع متحكم فى درجة حرارة (بيان وتحكم) مع استخدام موديول  ADC والحساس LM35 و LCD و RS232 مع المترجم CCS C  310


الكود:

#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>
2- تحديد دقة موديول المحول ADC ، لاحظ وجود هذا التحديد قبل تحديد تردد ساعة التأخير :

الكود:

#device ADC=10
3- تحديد تردد الساعة المستخدم مع الميكروكونترولر :

الكود:

#USE DELAY(clock = 4000000)
4- تحديد خصائص الاتصال عبر المنفذ RS232

الكود:

#use RS232(baud = 9600, xmit = PIN_C6, rcv = PIN_C7)

ثانيا : الدالة الرئيسية :

الكود:

void main ()
{

1- إعلان المتغيرات ، لاحظ أن النوع يتناسب مع القيم التى سوف يتم حفظها فى المتغير :

الكود:

Int16 value; 
float value1;
2- تحديد إعدادات المحول ، وطرف المنفذ المستخدم ، والقناة المستخدمة .

الكود:

  setup_adc(ADC_CLOCK_INTERNAL);    // Internal
  setup_adc_ports (AN0);
  set_adc_channel (0);
3- الحلقة الغير منتهية :
الكود:

  while (TRUE)
  {
أ‌- تأخير مقترح لزوم الاستقرار

الكود:

      delay_ms (500);

ب‌- قراءة الجهد التناظرى وتحويله إلى نتيجة رقمية “0-1023” وحفظه فى المتغير value :

الكود:

    value = read_adc ();

ت‌- تحويل القراءة الرقمية إلى ما يقابلها من الدرجات المئوية

الكود:

    value1 = value * 0.4883;

ث‌- إرسال معلومات درجة الحرارة بتشكيل محدد عبر المنفذ RS232 :

الكود:

      printf ("Temp:%5.1fC\n\r", (float)value1);
  }
}



برنامج المتحكم :

Admin
Admin

عدد المساهمات : 1187
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

مشروع متحكم فى درجة حرارة (بيان وتحكم) مع استخدام موديول  ADC والحساس LM35 و LCD و RS232 مع المترجم CCS C  Empty برنامج المتحكم :

مُساهمة من طرف Admin في السبت يونيو 06, 2015 11:30 am

برنامج المتحكم :

الكود:

///////////////////////////////////////////////////////////////////////////////////////////////////////
/*
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
  }
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////


Admin
Admin

عدد المساهمات : 1187
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى