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

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

valion
:: مهندس ::
تاريخ التسجيل: May 2013
الدولة: Algeria
المشاركات: 46
نشاط [ valion ]
قوة السمعة:0
قديم 21-08-2013, 03:10 PM المشاركة 1   
افتراضي قياس درجة الحرارة و التحكم فيها عن طريق مبرد + فيديو التجربة Twitter FaceBook Google+



السلام عليكم و رحمة الله تعالى و بركاته
الحمد لله بمساعدة الاخوان اتممت مشروع قياس درجة الحرارة و التحكم بها
هاد النوع من السيستامات يستعمل في المحركات الكبرى لتبريدها باستمرار كي لا تتلف ساشرح لكم المشروع ان شاء الله و اقدم الكود في الميكروسي و الدارة في البروتوز و اخيرا ساقدم فيديو للمونتاج في الحقيقة

ملاحضة : امشروع لا يكلف اكثر من 8 اورو

نبدا على بركة الله

اولا الادوات المستعملة للمونتاج "الدارة" :
1 _ CTN coefficient de température négatif معامل حرارة سالب و هي عبارة عن مقاومة تتغير قيمتها بتغير درجة الحرارة حيث ادا زادة الحرارة نقصت المقاومة و ادا نقصت الحرارة زادت المقاومة لهدا قلنا سالبة
2 _ NE555 عبارة عن اسيلاتور "ASTABLE" ليحول لنا قيمة مقاومة ال CTN الى اشارة مربعة يتغير تردده "FREQUENCE"
3 _ PIC16F88
4 _ 7 SEGMENTS
5 _ 7805
6 _ ترنزستر BC547
8 _ ريلاي 6V
9 _ بعض المقاومات و الليدات و المكثفات

ثانيا شرح موجز لمبدا عمل الدارة :
الدارة تقيس درجة الحرارة و تعرضها على الفن سقمنت
و تتحكم بها حيث : في البرنامج هنااك معاملين هما Tmin و Tmax ادا زادت درجة الحرارة عن Tmax يامر البيك المبرد بالدوران و ادا نقصت درجة الحرارة عن Tmin يامر البيك المبرد بالتوقف و منه ستبقى درجة الحرارة محصورة في المجال [Tmin,Tmax] في البرنامج واضع Tmin=20° و Tmax=30° و لاكن المستعمل يستطيع تغيير هادين القيمتين كما يريد حيث

اذا ضغط على القاطعة "MODE" ستشتعل الليد الخضراء دالة على انه دخلنا للمكان تغيير ال Tmin و السفن سقمنت سيضهر قيمتها و منه نستطيع تغيير هذه القيمة باستعمال القاطعتان الاخرتان

و اذا ضغطنا مرة ثانية على البوتن مود سندخل لل Tmax و ستشتعل الليد الصفراء و نفش الشيء نغير قيمتها بالقاطعتين الاخرتان و تعرض النتيجة على الفن سقمنت

و اذا ضغطنا للمرة الثالة على البوتون مود سنرجع لقياس درجة الحرارة و مقارنتها مع قيمتا ال Tmin و Tmax

الليد الحمراء تدل على حالة المبرد ادا كان المبر مشتغل اليد تكون مضيئة و العكس صحيح

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



رابعا : الكود على الميكرو سي

كود:
int temperature()
{
int fm,Rctn;
int T;
TMR0=0;
delay_ms(500);
fm=2*TMR0;
if (fm<100) T=0;
else if (fm>=100 && fm<110) T=3;
else if (fm>=110 && fm<120) T=7;
else if (fm>=120 && fm<130) T=11;
else if (fm>=130 && fm<140) T=15;
else if (fm>=140 && fm<150) T=19;
else if (fm>=150 && fm<160) T=23;
else if (fm>=160 && fm<165) T=26;
else if (fm>=165 && fm<170) T=29;
else if (fm>=170 && fm<180) T=32;
else if (fm>=180 && fm<185) T=35;
else if (fm>=185 && fm<190) T=38;
else if (fm>=190 && fm<195) T=41;
else if (fm>=195 && fm<200) T=44;
else if (fm>=200 && fm<205) T=46;
else if (fm>=205 && fm<210) T=49;
else if (fm>=210 && fm<220) T=53;
else if (fm>=220 && fm<230) T=59;
else if (fm>=230 && fm<240) T=67;
else if (fm>=240 && fm<250) T=76;
else if (fm>=250 && fm<260) T=84;
else if (fm>=270 && fm<280) T=92;
else if (fm>=280 && fm<290) T=100;
else if (fm>=290 && fm<300) T=108;
else if (fm>=300 && fm<310) T=116;
else if (fm>=310 && fm<320) T=124;
else if (fm>=320 && fm<330) T=132;
else if (fm>=330 && fm<340) T=140;
else if (fm>=340 && fm<350) T=148;
else T=156;
return T;
}

void segments(char i,char por)
{
   if( por==1 ) {  porta=porta&0b11111100; RA1_bit=1;}
   if( por==2 ) {  porta=porta&0b11111100; RA0_bit=1;}
   if ( i== 0 ) {  portb=0x3F; }
   if ( i== 1 ) {  portb=0x06; }
   if ( i== 2 ) {  portb=0x5B; }
   if ( i== 3 ) {  portb=0x4F; }
   if ( i== 4 ) {  portb=0x66; }
   if ( i== 5 ) {  portb=0x6D; }
   if ( i== 6 ) {  portb=0x7D; }
   if ( i== 7 ) {  portb=0x07; }
   if ( i== 8 ) {  portb=0x7F; }
   if ( i== 9 ) {  portb=0x67; }
}


char Tmin=20,Tmax=30,c1,c2;
int T,i;
void main()
{
trisa=0B10110000;     porta=0;
trisb=0B10000000;     portb=0;
ANSEL = 0B00011;
OSCCON = 0B11111010;  Adcon1=0x06 ;


returne :

porta=porta&0b10111000;
porta=porta+0b00000011;
T=temperature();
                                         // RA3= DECLENCHEUR
if(T>=Tmax) {  RA3_bit=1; }              // RA5=CHANGEMENT D'ETAT
if(T<=Tmin)  { RA3_bit=0; }


     c2=(T%100)/10;
     c1= T%10;
     for(i=0;i<150;i++)
     {
     segments(c1,2) ;
     delay_ms(10);
     segments(c2,1);
     delay_ms(10);
     }

     
     
if ( RA5_bit==0)
{
    portb=0b0000000; delay_ms(1000);                      //RA6=TMIN RA2=TMAX
    porta=porta&0b10111011;                              // RA7= PLUS , RB7=MOINS
    porta=porta+0b01000000;
    

    while(1)                           // Tmin
    {
    c2=(Tmin%100)/10;
    c1= Tmin%10;
    segments(c1,2) ;
    delay_ms(10);
    segments(c2,1);
    delay_ms(10);
    
      if ( RB7_bit==0 )
      {
Tminn :    Tmin--;    portb=0b0000000; delay_ms(500);
           c2=(Tmin%100)/10;
           c1= Tmin%10;
afichmm :  segments(c1,2) ;
           delay_ms(10);
           segments(c2,1);
           delay_ms(10);
           if ( RA5_bit==0 ) {  goto Tmax;  }
           if ( RA7_bit==0 ) {  goto Tminx;  }
           if ( rB7_bit==0 ) {  goto Tminn;  }
           goto afichmm ;
      }
      if ( RA7_bit==0 )
      {
Tminx :    Tmin++;    portb=0b0000000; delay_ms(500);
           c2=(Tmin%100)/10;
           c1= Tmin%10;
afichmx :  segments(c1,2) ;
           delay_ms(10);
           segments(c2,1);
           delay_ms(10);
           if ( RA5_bit==0 ) {  goto Tmax;  }
           if ( RA7_bit==0 ) {  goto Tminx; }
           if ( rB7_bit==0 ) {  goto Tminn;  }
           goto afichmx ;
      }
      if ( RA5_bit==0 ) {  goto Tmax;}
    }
    
    
Tmax :
portb=0b0000000; delay_ms(500);                      //RA6=TMIN RA2=TMAX
porta=porta&0b10111011;                              // RA7= PLUS , RB7=MOINS
porta=porta+0b00000100;
 
while(1)                           // Tmax
    {
    c2=(Tmax%100)/10;
    c1= Tmax%10;
    segments(c1,2) ;
    delay_ms(10);
    segments(c2,1);
    delay_ms(10);
           
      if ( RB7_bit==0 )
      {
Tmaxn :    Tmax--;    portb=0b0000000; delay_ms(500);
           c2=(Tmax%100)/10;
           c1= Tmax%10;
afichxm :  segments(c1,2) ;
           delay_ms(10);
           segments(c2,1);
           delay_ms(10);
           if ( RA5_bit==0 ) {  goto returne;  }
           if ( RA7_bit==0 ) {  goto Tmaxx;  }
           if ( RB7_bit==0 ) {  goto Tmaxn;  }
           goto afichxm ;
      }
      if ( RA7_bit==0 )
      {
Tmaxx :    Tmax++;    portb=0b0000000; delay_ms(500);
           c2=(Tmax%100)/10;
           c1= Tmax%10;
afichxx :  segments(c1,2) ;
           delay_ms(10);
           segments(c2,1);
           delay_ms(10);
           if ( RA5_bit==0 ) {  goto returne;  }
           if ( RA7_bit==0 ) {  goto Tmaxx; }
           if ( rB7_bit==0 ) {  goto Tmaxn;  }
           goto afichxx ;
      }
      if ( RA5_bit==0 ) {  goto returne;  }
    }
}
goto returne ;
}
خامسا : فيديو التجربة في الحقيقة



سادسا : ملاحضات
1 عذرا على الشرح باللغة الفرنسية فانا طالب جامعي ادرس بالفرنسية و الانجليزية فقط و عذرا علة كل الاخطاء النصية الموجودة

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

3 مذا تنصحوني اكمل دراستي اوتومات او روبوتيك او تيليكوم

شكرا لكم جمييعا

اعلانات

الصورة الرمزية المخترع01
المخترع01
:: مهندس متميز ::
تاريخ التسجيل: Dec 2009
المشاركات: 397
نشاط [ المخترع01 ]
قوة السمعة:0
قديم 22-08-2013, 10:45 AM المشاركة 2   
افتراضي


1000 شكر اخي
انا ابحث عن مشروع بالمقاومة المتغير من زماااااااااان
ارجو الرسم البياني عللى البورتوس و ان امكن شرح الكود

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية المخترع01
المخترع01
:: مهندس متميز ::
تاريخ التسجيل: Dec 2009
المشاركات: 397
نشاط [ المخترع01 ]
قوة السمعة:0
قديم 22-08-2013, 12:14 PM المشاركة 3   
افتراضي


ماهيا قيمة الكريستال


valion
:: مهندس ::
تاريخ التسجيل: May 2013
الدولة: Algeria
المشاركات: 46
نشاط [ valion ]
قوة السمعة:0
قديم 22-08-2013, 12:16 PM المشاركة 4   
افتراضي


1000 شكر اخي
انا ابحث عن مشروع بالمقاومة المتغير من زماااااااااان
ارجو الرسم البياني عللى البورتوس و ان امكن شرح الكود
العفو اخوي

بالنسبة للشيما على البروتوز تفضل صورة السيركوي
http://www5.0zz0.com/2013/08/21/14/273441235.jpg

ساشرح لك الكود بالتجزئة
في البداية اعلنت الدالة " temperature"
كود:
int temperature() { int fm,Rctn; int T; TMR0=0; delay_ms(500); fm=2*TMR0; if (fm<100) T=0; else if (fm>=100 && fm<110) T=3; else if (fm>=110 && fm<120) T=7; else if (fm>=120 && fm<130) T=11; else if (fm>=130 && fm<140) T=15; else if (fm>=140 && fm<150) T=19; else if (fm>=150 && fm<160) T=23; else if (fm>=160 && fm<165) T=26; else if (fm>=165 && fm<170) T=29; else if (fm>=170 && fm<180) T=32; else if (fm>=180 && fm<185) T=35; else if (fm>=185 && fm<190) T=38; else if (fm>=190 && fm<195) T=41; else if (fm>=195 && fm<200) T=44; else if (fm>=200 && fm<205) T=46; else if (fm>=205 && fm<210) T=49; else if (fm>=210 && fm<220) T=53; else if (fm>=220 && fm<230) T=59; else if (fm>=230 && fm<240) T=67; else if (fm>=240 && fm<250) T=76; else if (fm>=250 && fm<260) T=84; else if (fm>=270 && fm<280) T=92; else if (fm>=280 && fm<290) T=100; else if (fm>=290 && fm<300) T=108; else if (fm>=300 && fm<310) T=116; else if (fm>=310 && fm<320) T=124; else if (fm>=320 && fm<330) T=132; else if (fm>=330 && fm<340) T=140; else if (fm>=340 && fm<350) T=148; else T=156; return T; }
ربطت خرج ال NE555 بالرجل RA4 لاستعمال الريجستر tmr0 لحساب تردد "الفريكونسي" الاشارة
المهم نرجع للكود
اولا صفرت ال tmr0
بعدين انتضرت نصف ثانية
بعدين محتوى ال tmr0 وضعته في fm
ثم ضربت ال tmr0 في 2 لاننا لما تركنا العداد tmr0 يحسب كل front montant امهلناه نصف ثانية برك و كما نعلم التردد هو عدد front montant في ثانية واحدة
لهذا قمنا بالضرب في 2
اما كل اومر ال if الي من بعد, كنت حسبت درجة الحرارة بالنسبة لكل فركونسي داخل ال if بواسطت دالة ال ctn و دالة ال ne555
و في الاخير ارجعة قيمة ال T بالروتورن

بعدين قمت باعلان الدالة segment
كود:
void segments(char i,char por) { if( por==1 ) { porta=porta&0b11111100; RA1_bit=1;} if( por==2 ) { porta=porta&0b11111100; RA0_bit=1;} if ( i== 0 ) { portb=0x3F; } if ( i== 1 ) { portb=0x06; } if ( i== 2 ) { portb=0x5B; } if ( i== 3 ) { portb=0x4F; } if ( i== 4 ) { portb=0x66; } if ( i== 5 ) { portb=0x6D; } if ( i== 6 ) { portb=0x7D; } if ( i== 7 ) { portb=0x07; } if ( i== 8 ) { portb=0x7F; } if ( i== 9 ) { portb=0x67; } }
هادي الدالة لاضهار النتيجة على السفن سقمنت فقط
اضن كل شيئ بها واضح

بعدين ندخل للدالة الرئيسية ماين
مع الاول قمت بضبط الاعدادات للريجيسترات فقط

ثم كتبت الكود
كود:
if(T>=Tmax) { RA3_bit=1; } // RA5=CHANGEMENT D'ETAT if(T<=Tmin) { RA3_bit=0; }
هدا الكود هو المسؤول عن اطفاء و اشعال المبرد

ثم كتبت
كود:
c2=(T%100)/10; c1= T%10; for(i=0;i<150;i++) { segments(c1,2) ; delay_ms(10); segments(c2,1); delay_ms(10); }
حيث لنفرض T=30 فيكون C2=3 و C1=0
ثم عرضناهم عل شاشة ال سفن سقمنت
و هنا ينتهي العمل الرئيسي للبرنامج
كل اللي ياتي من بعد هو خاص بتغيير الحديين Tmax و Tmin

اذا كان هناك استفسار آخر فانا في الخدمة اخوي


valion
:: مهندس ::
تاريخ التسجيل: May 2013
الدولة: Algeria
المشاركات: 46
نشاط [ valion ]
قوة السمعة:0
قديم 22-08-2013, 12:19 PM المشاركة 5   
افتراضي


البك 16f88 له ميزة كريستل داخلي
انا استعملته حيث تجد في الاعدادات الولى اللي قمت بها للريجسترات كتبت

كود:
OSCCON = 0B11111010;
حيث اخترت الكريستال الداخلي و كمان ضبطتو على تردد 8Mhz


الصورة الرمزية المخترع01
المخترع01
:: مهندس متميز ::
تاريخ التسجيل: Dec 2009
المشاركات: 397
نشاط [ المخترع01 ]
قوة السمعة:0
قديم 22-08-2013, 12:31 PM المشاركة 6   
افتراضي


الله يرحم والديك
اخي ان امكن البرنامج على البورتوس
انا املك ctn سالب
فها 2 بورن واحد سالب و الاخر مقاومة متغير هل ممكن ان اغير 2.2k
= 22 درجة
500 =
درجة 99


valion
:: مهندس ::
تاريخ التسجيل: May 2013
الدولة: Algeria
المشاركات: 46
نشاط [ valion ]
قوة السمعة:0
قديم 22-08-2013, 12:48 PM المشاركة 7   
افتراضي


الله يرحم والديك
اخي ان امكن البرنامج على البورتوس
انا املك ctn سالب
فها 2 بورن واحد سالب و الاخر مقاومة متغير هل ممكن ان اغير 2.2k
= 22 درجة
500 =
درجة 99
نعم اخوييمكنك تغيير ال CTN ولاكن يجب ان تعيد حساب درجة الحرارة بالنسبة للفريكونسي لان قيمة مقاومة ال CTN تختلف باختلاف نوعها و بهذا سيختلف تردد الاشارة مربع اللي راح تنتج عن ال NE555
استعمل هذان الدالتان لاعادة الحساب





ملف البروتوز سارفعه انشاء الله حوالي ساعتيين و ارفعه ستجده هنا في الردود ان شاء الله اخوي


valion
:: مهندس ::
تاريخ التسجيل: May 2013
الدولة: Algeria
المشاركات: 46
نشاط [ valion ]
قوة السمعة:0
قديم 22-08-2013, 01:11 PM المشاركة 8   
افتراضي


تفضل اعخوي ملف البروتوز

http://www.4shared.com/rar/XcErAkQT/isis.html

إضافة رد

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

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

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


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

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