ملتقى مهندسي كردستان
اهلا بك زائرنا الكريم انت غير مسجل لدينا يشرفنا الانضمام الى اسرتنا بالضغط على ( تسجيل ) او الذهاب الى القسم الذي تريد وتمتع بوقتك معنا



 
المجلةالرئيسيةالتسجيلدخول

شاطر | 
 

 تحكم في الحرارة بدقة عالية جدا 'تيرمومتر رقمي'

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل 
كاتب الموضوعرسالة
مازن علي حاجي
مدير عام
مدير عام



مُساهمةموضوع: تحكم في الحرارة بدقة عالية جدا 'تيرمومتر رقمي'   2015-06-09, 7:19 pm

 تحكم في الحرارة بدقة عالية جدا 








Digital Thermometer


( بداية اريد أن اعبر عن اعتذاري بسبب تأخر الحلقة 2 ، و أود من الاخوة المتابعين ان يتقبلوا اسفي و اعتذاري ، و أتمنى أيضا أن تراسلونا بمشاكلكم التقنية و اقتراحاتكم و بالخصوص ذوي مشاريع التخرج و السلام . )

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


على العموم ، فكل الدوائر التي سنطرحها في هذه السلسلة مضمونة من طرف مهندسين أكفاء في هذا المجال ، و ان واجه أي واحد من الاخوة اي مشكل فلتصل بنا و باذن الله سنجد حلا في اقرب وقت ، و تكريسا لمبدأ نشر المعلومة ، فاننا سنقوم ان شاء الله بوضع دوائرة على فترارت متعددة ، كل واحدة لاستعمال معين ، و ستكون باذن الله من تصميمي الشخصي (زكرياء المغربي) كما هذه الدائرة و سابقتها ، و نرجوا الله العلي ان يوفقنا لما فيه خير و صلاح لامة الاسلام .


دائرة اليوم ، او لنقل الجهاز الذي نحن بصدده اليوم ، متحكم دقيق في درجة الحرارة ، قد يساعد بالاساس اصحاب البيوت البلاستيكية الزراعية ، يحتوى باساس على مايكروكنترولر نوع PIC16F877A ،  الذي يقوم بتحليل المعطيات و التحكم بالاجهزة الثانوية ، و يمكن للمستخدم التواصل مع وحدة المعالجة عن طريق LCD و مفاتيح لادخال المعطيات ،  و القلب النابض لهذه الدائرة هو الحساس LM35 .

مميازات الدائرة أو الجهاز :



هذا الجهاز او هذه الدائرة ، تمكن المستخدم من التحكم في درجة الحرارة بسلاسة ، اذ انها في بداية اشتغالها تطلب من المستخدم اختيار برنامج عمل بين برنامجين ، البرنامج الاول هو برنامج التسخين ، بينما البرنامج الثاني هو برنامج التبريد ، و تطلب منه ايضا تحديد مرجع للحرارة حتى تعمل عليه ،  فان نزلت درجة الحرارة عن المرجع المحدد تعطي انذار بذلك و تبدأ في التسخين بالنسبة للبرنامج الاول ،  و العكس بالنسبة للبرنامج الثاني ، بيحث تتواصل انت مع المتحكم من خلال 3 ازرار ، الرزين A و B للاختيارات و الزر V للتأكيد على الختيار .

القلب النابض للدائرة :

في الحقيقة ، فان هذه الدائرة لها قلب و عقل ، فقلبها هو حساس الحرارة LM35 ، لكن عقلها هو المتحكم PIC16F877A ، الذي بدوره يحتوي على CPU(وحدة معالجة مركزية) ، و كذلك مسجل ADC لتحويل الاشارة الانالوج Analog التي ينتجها الحساس LM35 .

كيف تتصرف الدائرة ؟ :



كي يكون لدينا فهم شامل للدائرة و تصور واضح لتصرف الجهاز ، لابد وأن نفهم سيرورته ولو بشكل مبسط ، فهي فعلا جد جد بسيطة مقارنة بالدائرة الأولى ، لأننا سنعتمد على البرمجة بالاساس ، فالسطور البرمجية ستختزل لنا العديد من التوصيلات و المكونات .

الدائرة بسيطة جدا ، حيث أن الحساس LM35 صمم كي يعطي 10mV لكل درجة حرارية C ° ، هذه الاشارة تدخل الى المتحكم لتتم معالجتها .

نقوم أولا تهيئ المتحكم لتعامل مع اشارة انالوج ، سنستعمل لغة السي و بالخصوص الدالة المبسطة ADC_Read(channel) و نحن نعلم أن هذا المتحكم سجل التحويل فيه ADC به 10 بتات ، أي أن الدقة أو resolution الخاصة بهذا السجل هي خارج قسمة أقصى جهد دخل (5 فولت لان هذه الدالة تضع المرجع الاعلى هو نفسه جهد تغذية المتحكم ) على  1023 تساوي تقريبا 4.88mV، هذه القيمة اذا قمنا بقسة جهد دخل 50 ميللي فولت (تناظر 5 درجات حرارة) عليها نحصل على قيمة 10.24 ، وهذه القيمة تعادل تقريبا ضعف قيمة الجهد لدرجة الحرارة 5 ، لذك سنقوم بقسمتها على 2.045 كي نحصل في الاخير على تحويل جهد الدخل الى درجة حرارة دقيقة و نخزن هذه القيمة في متغير لعرضها .

 عند بدأ عمل الدائرة ، تكتب لك رسالة على الـ LCD فيها : '' SLCT A PROGRAM '' ، أي أن المتحكم يطلب منك اختيار البرنامج الذي تريد (تسخين أم تبيرد) ، اذا طغطت على الزر A يكتب لك على الشاشة : '' PROG 1 CHOSEEN '' ، و يشتعل ليد أحمر ، و ينتظر منك التأكيد أو تبديل الاختيار ، فاذا ضغط على الزر B يكتب لك على الشاشة : '' PROG 2 CHOSEEN '' ، و يشتعل ليد الأخضر و ينتظر تأكيد الاختيار بالضغط على V ، ما عليك انت الا ان تكتب على العلبة التي ستضع عليها الجهاز جوار الليد الأحمر كلمة 'التسخين' و جوار الليد الاخر كلمة 'التبريد' ، حتى اذا مررت على الجهاز اثناء عمله تكون على دراية باي ظام هو يشتغل . أذا لم تختر أي نظام ، فان الجهاز سيبقى مجرد تيرمومتر رقمي فقط .

بعد ضغطك على زر التأكيد V ، تظهر لك رسالة اخرى على الشاشة فيها : '' SLCT A REF TEMP '' ، يعني انه يطلب منك ادخال مرجع الحرارة ، تبقى هذه الرسالة مدة ثانية واحدة ، و بعد ذلك يرسل لك المتحكم رسالة على الشاشة فيها : ''REF =0'' ، ما عليك الآن الا الضغط على الزر A لرفع القيمة او الزر B  لانقاصها ،  بهذا تكون تحدد قيمة مرجع الحرارة ، بعد تحديدك لمرجع الحرارة تضغط على الزر A لتأكيد الاختيار ، بعد ذلك تظهر على الشاشة رسالة كالتالي : ''TEMPERATURE='' ، و يعطيك في كل لحظة درجة الحرارة . اذا تخظت درجة الحرارة المرجع المحدد ، يشغل المحرك في حالة برنامج التبريد أو المسخن في حالة برنامج التسخين و تظهر على الشاشة عبارة : ''TEMP+ RUN.'' أو ''TEMP- RUN.'' على حسب البرنامج الذي حددته في البداية .

سيكون الشكل النهائي للجهاز تقريبا تقريـــــــبا بهذا الشكل : 






  بهذا نكون انهينا  البرمجة ، باقي الاشياء الاخرى سهلة جدا للذين لهم خلفية في الميكروسي ، أما من له لغة اخرى للبرمجة فقد يكون فهم المبدأ ، أما من لم سيبق له التعامل مع اي لغة و لا يعرف عما نتحدث فهذا ليس بمشكل ، يمنه البحث في النت على دروس برمجة المايكروكنترولر بلغة MicroC 



كيف ابني هذا الجهاز ؟




ما تحتاجه لبناء هذا الجهاز :




                                                   مايكروكنترولر PIC16F877A  : 

















                                                                 المتحسس LM35 : 








                                                          شاشة عرض LCD 16x2 : 








                                                                  مكثفين 33 بيكو


 



                                                                               




                                                          4 مفاتيح ضاغظة (BP) : 








                                                      ترانزستورين BC337 : 






                                                   3 ليدات خضراء و واحد أحمر : 




                                                                 

                                                           2   ديود نوع 1n4007 : 





                                                                         



                                                                2 ريلاي 12فولت :









      وحدة تسخين heater coil (اختر بلدها ما تشاء ، ضع حتى انذار بدل التسخين) : 







                          وحدة تبريد ، انا اخترت موتور بسيط فقط و انت اختر ما تشاء : 





كيف اربط المكونات ببعضها :










الرسم يظهر ذلك بوضوح ، و الكود البرمجي الذي صممته ايضا سأرفقه مع المحاكاة ، و هذا فيديو أبسط فيه كيف تتعامل مع الجهاز :



ملاحظة :




يمكنك دمج الدائرة السابقة مع دائرة اليوم لتطورها و تصبح قادرا على التحكم في الحرارة عن بعد مثلا باستعمال المقاطاعت على المايكروكنترولر .

إنتهى الموضوع وترقبو مواضيع أخرى من سلسلة إصنعها بنفسك

  
الكود البرمجي : 

sbit LCD_RS at Rd2_bit;
sbit LCD_EN at Rd3_bit;
sbit LCD_D4 at Rd4_bit;
sbit LCD_D5 at Rd5_bit;
sbit LCD_D6 at Rd6_bit;
sbit LCD_D7 at Rd7_bit;

sbit LCD_RS_Direction at TRISd2_bit;
sbit LCD_EN_Direction at TRISd3_bit;
sbit LCD_D4_Direction at TRISd4_bit;
sbit LCD_D5_Direction at TRISd5_bit;
sbit LCD_D6_Direction at TRISd6_bit;
sbit LCD_D7_Direction at TRISd7_bit;
char str[16];
char ste[8];
unsigned int temp;
float v;
int x,y;
void main(){
TRISA=1 ; TRISD=0; TRISC=1; TRISB=0; TRISE=1;
PORTB=0;
x=0;
Lcd_Init();
delay_ms(800);
Lcd_Cmd(_LCD_CLEAR);
Lcd_out(1,2,"SLCT A PROGRAM");
Lcd_Cmd(_LCD_CURSOR_OFF);
for(;;){  if(PORTC.B0==1){y=5; delay_ms(100); Lcd_out(2,1," PROG 1 CHOSEEN");  PORTE=0; PORTE.B2=1;}         //ÇáÊÓÎíä
          if(PORTC.B1==1){y=10; delay_ms(100); Lcd_out(2,1," PROG 2 CHOSEEN"); PORTE=0; PORTE.B1=1;}
          if(PORTC.B2==1){Lcd_Cmd(_LCD_CLEAR); break;}
       }
Lcd_out(1,1," SLCT A REF TEMP");
delay_ms(1000);
Lcd_Cmd(_LCD_CLEAR);
for(;;)  {
          Lcd_out(1,1,"     REF =");
          if(PORTC.B0==1){x=x+1; delay_ms(500);}
          if(PORTC.B1==1){x=x-1; delay_ms(500);}
          if(PORTC.B2==1){break;}
          inttostr(x,str); Lcd_out(2,3,str);
          }
   Lcd_Cmd(_LCD_CLEAR);
   for(;;)
   {
    temp=ADC_Read(2);
    v=temp/2.045;
    floattostr(v,str);
    Lcd_out(1,13,str);
    Lcd_out(1,1,"TEMPERATURE=");
    delay_ms(500);
    if(y==5) { while(v<x)
              {
              PORTB=0X01;
              temp=ADC_Read(2);
              v=temp/2.045;
              delay_ms(500);
              Lcd_out(2,1,"   TEMP+ RUN.");
              delay_ms(500);
              Lcd_Cmd(_LCD_CLEAR);
              if(v>x) {PORTB=0; break; }
              }
              }
    if(y==10){while(v>x)
              {
              PORTB=0X04;
              delay_ms(500);
              Lcd_Cmd(_LCD_CLEAR);
              Lcd_out(2,1,"   TEMP- RUN.");
              delay_ms(500);
              Lcd_Cmd(_LCD_CLEAR);
              temp=ADC_Read(2);
              v=temp/2.045;
              if(v<x) {PORTB=0; break; }
              }}
        }

   }

_________________
الحمد لله على كل حال
الرجوع الى أعلى الصفحة اذهب الى الأسفل
 
تحكم في الحرارة بدقة عالية جدا 'تيرمومتر رقمي'
استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

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