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

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

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 05-06-2020, 01:47 AM المشاركة 1   
افتراضي دائرة سيطرة وتحكم في الحرارة وتوزيع الأحمال علي الشبكة الكهربية Twitter FaceBook Google+



السلام عليكم ورحمه الله

في هذة المشاركة اقدم لكم دائرة الكترونيه لمراقبة درجة الحرارة
وحماية التطبيقات المختلفة من الحرارة الذائدة وتوزيع الأحمال
مثل المحركات والأجهزة والماكينات ..

تعتمد هذة الدائرة في قياس الحرارة علي الحساس LM35
مدي قرأة الحرارة من ( 0 الي 150 درجة مئوية)



امكانيات الدائرة..

تستطيع اختيار ثلاث قيم للحرارة
القيمة الأولي تسمي قيمة التشغيل وسوف نتعرف عليها بالتفاصيل
القيمه الثانيه تسمي قيمة الوسط
القيمه الثالثه تسمي قيمة الفصل
جميع القيم المدخلة تحفظ في حالة انقطاع التيار وعودته
تحتوي الدائرة علي ثلاث شاشات رقمية لإظهار درجة الحرارة
توزيع الأحمال عند بداية التشغيل

شرح الدائرة واستخدامتها

هذة الدائرة تعمل علي تخفيف تحميل الأحمال الثقيله علي القواطع الكهربيه
بحيث لو يوجد عندنا 10 أجهزة قدرة كل جهاز 1800 واط بمجموع 18000 الف واط
وهذه الأحمال لو تم دخولها علي الشبكه الكهربائيه دفعه واحدة تتسبب في
سحب تيار عالي ومفاجئ لمفاتيح القواطع وتسبب مع مرور الوقت في تلف
هذة القواطع
وتعمل هذة الدائرة علي تخفيف ادخال الأحمال عند بداية التشغيل
حيث يبدأ برنامج الدائرة في ادخال أول حمل علي الشبكة الكهربية وينتظر
الي 2 سانيه ويدخل الجهاز الثاني وينتظر 2 سانيه ويدخل الجهاز الثالث
الي أن يتم تحميل ال 10 أجهزة علي الشبكة الكهربية وهذا لتفادي
التحميل العالي والمفاجئ علي الشبكه مما قد يتلف عداد الكهرباء
ويتلف القواطع الكهربيه

ايضا بيتم اختيار قيمه حرارة القصوي لحمايه الأجهزة
مثال لو عندنا جهاز كهربي أقصي قيمه لدرجة الحرارة اللتي يتحملها هي 80 درجه
هنا بيتم ضبط واختيار هذة القيمة في الدائرة وهي درجة الفصل
ايضا توجد درجة الوسط وهي لكي تتحكم في تشغيل وفصل مراوح للتبريد
وتوجد درجة حرارة للتشغيل
حيث لو تم فصل الجهاز علي درجة حرارة 80 درجة الدائرة تنتظر نزول درجة
حرارة الجهاز الي درجه التشغيل اللتي ادخلناها

كود:
  


      //   TEMP  CONTROL          //
     //    LM35                   //
     //    ENG ABDALLA  HYGAZY    //
    //    DATA  2020/5/31         //
    //    Frequency  4  MHz       //
    
    #define  seg_data1   PORTB
    #define  seg_data2   PORTB
    #define  seg_data3   PORTB
    #define  seg_data4   PORTB
    #define  DP         PORTB.f7
    #define  BUZ      PORTA.F5=1;  delay_ms(250);  PORTA.F5=0;  delay_ms(80);
    #define  DDS4    delay_ms(2000);
    #define  DDS5    delay_ms(800);
  

  
   //********************========************************//
     unsigned int adc_rd,DATA,DATA_X,STOP=0,NEXT;
     unsigned int DATA_LOW,DATA_MEDEM,DATA_HAY;
     unsigned int RD_DATA=0,RD_DATA1=0,RD_DATA2=0;
     unsigned int AA1=0,AA2,AA3,AA4=0,AA5=0,AA6=0 ;
     long tlong;
     unsigned short mask(unsigned short num);
     unsigned int  a1=0,m1=0,e1=0,w1=0,k1=0;
  //********************========************************//

  //======================= show_adc ==========================================//
      void show_adc() {
      adc_rd = ADC_Read(0);
      tlong = (long)adc_rd * 5000;
     tlong = tlong / 1023;
 }
  //=============== show_adc === END ========================================//
 
 
   //=========================== void SETENG ================================//
         void SETENG(){

         while (NEXT==0) {
              DATA_LOW = RD_DATA / 1000;
         PORTE=1;
         PORTB=mask(DATA_LOW); DATA_LOW=0;
         delay_ms(1);

        DATA_LOW = (RD_DATA % 1000)/100;
        PORTE=2;
        PORTB=mask(DATA_LOW);  DATA_LOW=0;
        delay_ms(1);

       DATA_LOW   = (RD_DATA % 1000)%100/10;
       PORTE=4;
       PORTB=mask(DATA_LOW); DATA_LOW=0;
       delay_ms(1);

       DATA_LOW  = (RD_DATA % 1000)%100%10;
       PORTE=8;
       PORTB=mask(DATA_LOW); DATA_LOW=0;
       delay_ms(1);
     //********************************************************//

         if(PORTC.F0==1){ RD_DATA++;  delay_ms(20);}
         if(PORTC.F1==1){ RD_DATA--;  delay_ms(20);}
         if(RD_DATA>1500){ RD_DATA =1500; delay_ms(20);}
         if(RD_DATA<0){ RD_DATA =0; delay_ms(20);}
         if(PORTC.F2==1){BUZ BUZ NEXT=1; delay_ms(500);}
      //********************************************************//

      } RD_DATA = RD_DATA/10;
        EEPROM_Write(0, RD_DATA); delay_ms(10);
        RD_DATA = RD_DATA*10;
        NEXT=0; PORTD.F7=0;  PORTD.F6=1;

      //-----------------------------------------------------------//
        while (NEXT==0) {
           DATA_MEDEM = RD_DATA1 / 1000;
         PORTE=1;
         PORTB=mask(DATA_MEDEM); DATA_MEDEM=0;
         delay_ms(1);

        DATA_MEDEM = (RD_DATA1 % 1000)/100;
        PORTE=2;
        PORTB=mask(DATA_MEDEM);  DATA_MEDEM=0;
        delay_ms(1);

       DATA_MEDEM   = (RD_DATA1 % 1000)%100/10;
       PORTE=4;
       PORTB=mask(DATA_MEDEM); DATA_MEDEM=0;
       delay_ms(1);

       DATA_MEDEM  = (RD_DATA1 % 1000)%100%10;
       PORTE=8;
       PORTB=mask(DATA_MEDEM); DATA_MEDEM=0;
       delay_ms(1);
     //********************************************************//

         if(PORTC.F0==1){ RD_DATA1++; delay_ms(20);}
         if(PORTC.F1==1){ RD_DATA1--; delay_ms(20);}
         if(RD_DATA1>1500){ RD_DATA1 =1500; delay_ms(20);}
         if(RD_DATA1<0){ RD_DATA1 =0; delay_ms(20);}

         if(PORTC.F2==1){BUZ BUZ NEXT=1; delay_ms(500);}
      //********************************************************//

      } RD_DATA1 = RD_DATA1/10;
        EEPROM_Write(1, RD_DATA1); delay_ms(10);
        RD_DATA1 = RD_DATA1*10;
        PORTD.F6=0;  PORTD.F7=0; STOP=0; NEXT=0;

       
      //=================================================================//


     //===========================  ALARM  =============================//
       while (NEXT==0) {
         DATA_HAY = RD_DATA2 / 1000;
         PORTE=1;
         PORTB=mask(DATA_HAY); DATA_HAY=0;
         delay_ms(1);

        DATA_HAY = (RD_DATA2 % 1000)/100;
        PORTE=2;
        PORTB=mask(DATA_HAY);  DATA_HAY=0;
        delay_ms(1);

       DATA_HAY   = (RD_DATA2 % 1000)%100/10;
       PORTE=4;
       PORTB=mask(DATA_HAY); DATA_HAY=0;
       delay_ms(1);

       DATA_HAY  = (RD_DATA2 % 1000)%100%10;
       PORTE=8;
       PORTB=mask(DATA_HAY); DATA_HAY=0;
       delay_ms(1);

     //*******************************************************

       if(PORTC.F0==1){ RD_DATA2++; delay_ms(20);}
        if(PORTC.F1==1){ RD_DATA2--; delay_ms(20);}
        if(RD_DATA2>1500){ RD_DATA2 =1500; delay_ms(20);}
        if(RD_DATA2<0){ RD_DATA2 =0; delay_ms(20);}

        if(PORTC.F2==1){BUZ BUZ NEXT=1; delay_ms(500);}
      //*******************************************************

     }  RD_DATA2   = RD_DATA2/10;
        EEPROM_Write(2, RD_DATA2); delay_ms(10);
        RD_DATA2   = RD_DATA2*10;
        PORTD.F5=0; PORTD.F6=0;  PORTD.F7=0; NEXT=0;  STOP=0;

  }
  //=============== void SETENG ===== END ==============================//

  
  //============ Timer0 =========== InitTimer0 ========================//
    //Timer0
   //Prescaler 1:8; TMR0 Preload = 6; Actual Interrupt Time : 1 ms
   //Place/Copy this part in declaration section
   void InitTimer0(){
   OPTION_REG         = 0x82;
   TMR0                 = 6;
   INTCON         = 0xA0;
 }
 //========================      END    ===============================//
 
 //========================  Interrupt ===============================//
    void Interrupt(){
    if (TMR0IF_bit){
    TMR0IF_bit         = 0;
    TMR0         = 6;
    //Enter your code here
    
         AA4++;  AA5++; AA6++;
         if( AA4==1 ) { show_adc(); }
         if( AA4==1000 ) { AA4=0;   }


      if(STOP==0)
    {
    
       if(AA5==1)
      {
       a1 = tlong / 1000;
      if(a1==0){ PORTE=0;}
      else  PORTE=1;

       PORTB=mask(a1); a1=0;

      }
      
      if(AA5==2)
      {
       a1 = (tlong % 1000)/100;
       PORTE=2;
       PORTB=mask(a1);  a1=0;

      }
      
      if(AA5==3)
      {
       a1   = (tlong % 1000)%100/10;
       PORTE=4;
       PORTB=mask(a1); a1=0;

     }
     
      if(AA5==5)
      {
       a1  = (tlong % 1000)%100%10;
       PORTE=8;
       PORTB=mask(a1); a1=0;

      }
      
     if(AA5==6){ AA5=0;}
     
  }
         if(AA6==1   ){ PORTD.F7=1;}
         if(AA6==400 ){ PORTD.F7=0;}
         if(AA6==800){ AA6=0;     }
    
       if( tlong  >  RD_DATA   ){ DATA_LOW=1;   PORTD.F6=1; }
       if( tlong  <  RD_DATA   ){ DATA_LOW=0;   PORTD.F6=0; }
       if( tlong  >  RD_DATA1  ){ DATA_MEDEM=1; PORTD.F5=1; }
       if( tlong  <  RD_DATA1  ){ DATA_MEDEM=0; PORTD.F5=0; }
       if(PORTC.F3==1){ BUZ BUZ STOP=1; PORTE=0; SETENG();}

  }
}

 //===================  Interrupt == END  ===============================//
 
 //========================  void START ================================//
      void START()
   {  delay_ms(250);  AA2=1;  AA3=0;
     PORTC.F6=1; DDS4
     PORTC.F5=1; DDS4
     PORTC.F4=1; DDS4
     PORTD.F3=1; DDS4
     PORTD.F2=1; DDS4
     PORTC.F7=1; DDS4
     PORTD.F4=1; DDS4
     PORTD.F0=1; DDS4
     PORTD.F1=1; DDS4

   }
 //========================      END    ============================//

  //========================  void OFF_ALL  =======================//
       void OFF_ALL()
   {  delay_ms(250);  AA3=1; AA2=0;
     PORTC.F6=0; DDS5
     PORTC.F5=0; DDS5
     PORTC.F4=0; DDS5
     PORTD.F3=0; DDS5
     PORTD.F2=0; DDS5
     PORTC.F7=0; DDS5
     PORTD.F4=0; DDS5
     PORTD.F0=0; DDS5
     PORTD.F1=0; DDS5
   }
 //========================      END    ==========================//
 
 //========================   void OF_ALL  ======================//
     void OF_ALL()
   {
     PORTC.F6=0;
     PORTC.F5=0;
     PORTC.F4=0;
     PORTD.F3=0;
     PORTD.F2=0;
     PORTC.F7=0;
     PORTD.F4=0;
     PORTD.F0=0;
     PORTD.F1=0;

   }
 //========================      END    ==========================//
 
 
 //========================   void main  ==========================//
   
      void main() {
      TRISB=0;  PORTB=0;
      TRISD=0;  PORTD=0;
      TRISC=15; PORTC=0;
      TRISE=0;  PORTE=0;
      TRISA=1;  PORTA=0;
      ADCON0=0x00;
      CMCON=0;
      InitTimer0();

      RD_DATA  = EEPROM_Read(0); delay_ms(10);
      RD_DATA  = RD_DATA  *10;
      
      RD_DATA1 = EEPROM_Read(1); delay_ms(10);
      RD_DATA1 = RD_DATA1 *10;
       
      RD_DATA2 = EEPROM_Read(2); delay_ms(10);
      RD_DATA2 = RD_DATA2 *10;

      delay_ms(1000);
      BUZ   BUZ
      OF_ALL();
        
       if( tlong <=15 )
       { 
        
            while(AA1==0)
          {
           delay_ms(3000);  BUZ   
           if( tlong >=15 ){ AA1=1;  }
          }
      }
        
       if( tlong >=15 ){  START();  }
       
       
      while(1){
      if( DATA_LOW==0 && DATA_MEDEM==0 && tlong >=15 && AA2==0 ){   START();  }
      if( DATA_MEDEM==1 && AA3==0){  OFF_ALL();   }
      if( tlong <=15   )          { OFF_ALL();     }

 }
}

 //====================== void main === END  ==========================//
 
 
 //========================   switch (num)  ==========================//
unsigned short mask(unsigned short num){
switch (num){

case 0 : return 0xC0;
case 1 : return 0xF9;
case 2 : return 0xA4;
case 3 : return 0xB0;
case 4 : return 0x99;
case 5 : return 0x92;
case 6 : return 0x82;
case 7 : return 0xF8;
case 8 : return 0x80;
case 9 : return 0x90;

}
}

//========================      END    ==========================//

مخطط الدائرة المطبوعه







لتحميل المشروع كامل
كود / ملف محكاة / دائرة مطبوعه /
https://drive.google.com/drive/folde...U0?usp=sharing


بالتوفيق للجميع





..


التعديل الأخير تم بواسطة : عبدالله حجازى بتاريخ 05-06-2020 الساعة 02:05 AM
اعلانات
إضافة رد

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

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

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


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

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