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

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 06-06-2015, 11:22 AM المشاركة 1   
افتراضي مشروع متحكم فى درجة حرارة (بيان وتحكم) مع استخدام موديول ADC والحساس LM35 و LCD و RS Twitter FaceBook Google+



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


احصائية الشكر والاعجاب - 2 شكراً, 0 عدم اعجاب, 2 اعجاب
شكراً حسن هادي محمود, Omar Mekkawy ( شكر العضو على هذه المشاركة )
اعجاب حسن هادي محمود, Omar Mekkawy ( أعجبته المشاركة )
اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 06-06-2015, 11:30 AM المشاركة 2   
افتراضي تدريب تمهيدى : قراءة درجة الحرارة وإرسالها خلال المنفذ RS232 إلى الكمبيوتر :


تدريب تمهيدى : قراءة درجة الحرارة وإرسالها خلال المنفذ 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>
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); 
   } 
}

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

احصائية الشكر والاعجاب - 2 شكراً, 0 عدم اعجاب, 2 اعجاب
شكراً حسن هادي محمود, Omar Mekkawy ( شكر العضو على هذه المشاركة )
اعجاب حسن هادي محمود, Omar Mekkawy ( أعجبته المشاركة )
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 06-06-2015, 11:32 AM المشاركة 3   
افتراضي برنامج المتحكم :


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

كود:
///////////////////////////////////////////////////////////////////////////////////////////////////////
/* 
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
   } 
}


http://fathallaabdelaziz.forumarabia.com/
//////////////////////////////////////////////////////////////////////////////////////////////////////////

احصائية الشكر والاعجاب - 2 شكراً, 0 عدم اعجاب, 2 اعجاب
شكراً حسن هادي محمود, Omar Mekkawy ( شكر العضو على هذه المشاركة )
اعجاب حسن هادي محمود, Omar Mekkawy ( أعجبته المشاركة )
إضافة رد

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

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

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


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

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