السلام عليكم و رحمة الله تعالى و بركاته
الحمد لله بمساعدة الاخوان اتممت مشروع قياس درجة الحرارة و التحكم بها
هاد النوع من السيستامات يستعمل في المحركات الكبرى لتبريدها باستمرار كي لا تتلف ساشرح لكم المشروع ان شاء الله و اقدم الكود في الميكروسي و الدارة في البروتوز و اخيرا ساقدم فيديو للمونتاج في الحقيقة
ملاحضة : امشروع لا يكلف اكثر من 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 مذا تنصحوني اكمل دراستي اوتومات او روبوتيك او تيليكوم
شكرا لكم جمييعا