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



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

شاطر | 
 

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

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


مُساهمةموضوع: تحكم في الحرارة بدقة عالية جدا 'تيرمومتر رقمي'   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

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