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

   

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 24-07-2014, 11:54 AM المشاركة 17   
افتراضي



المشاريع الجماعيه تصل الى الابداع دائما ولكن اخي ما هي لغه البرمجه التي تقوم بالبرمجه على الاندرويد وما اسم البرنامج؟؟؟
شكرا لك اخي hamzazayyad وان شالله نستفد كلنا من افكار مشروع وأكيد اخي سوف احتاجك في #C بعد أذنك طبعا

اعلانات

hamzazayyad
:: مهندس متميز ::
تاريخ التسجيل: Aug 2005
الدولة: موزنبيق
المشاركات: 696
نشاط [ hamzazayyad ]
قوة السمعة:
قديم 24-07-2014, 01:11 PM المشاركة 18   
افتراضي


شكرا لك اخي hamzazayyad وان شالله نستفد كلنا من افكار مشروع وأكيد اخي سوف احتاجك في #C بعد أذنك طبعا
كلنا معك اخي حسن لكن لا تنسى ان تحاول تخفيض تكاليف المشروع قدر الامكان حتى يصبح دو جدوى ومشروع حقيقي.

اضافه برمجه الهاتف الاندرويد اصبح شي مهم واساسي في اي مشروع .

بالتوفيق

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

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 24-07-2014, 02:28 PM المشاركة 19   
افتراضي


كلنا معك اخي حسن لكن لا تنسى ان تحاول تخفيض تكاليف المشروع قدر الامكان حتى يصبح دو جدوى ومشروع حقيقي.

اضافه برمجه الهاتف الاندرويد اصبح شي مهم واساسي في اي مشروع .

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





هذه برنامج #C حيث من خلاله استطيع تشغيل اي حمل في اي غرفه وكذلك لون ارزق يعني حمل طافي واخضر شغال وهذه علامه تعتمد على حمل ومجرد ربط البرنامج مع كمبيوتر سوف يعرف مستخدم اي حمل شغال او طافي
طبعا LED اسم افتراضي يمكن تغيره حسب تطبيق الصحيح
انا لم أبرمج بعد ولكن بتاكيد سحتاج مساعده في أكمال مشروع بسيط ومنها نبدء مشروع على مراحل متقدمه


eng.taha
:: مهندس جيد ::
تاريخ التسجيل: Dec 2013
الدولة: baghdad
المشاركات: 281
نشاط [ eng.taha ]
قوة السمعة:
قديم 25-07-2014, 03:39 AM المشاركة 20   
افتراضي


السلام عليكم اخواني..الصراحه انا لا افقه شيء في عالم المايكروكونترولر ولكني اعجبتني الفكره جدا..بأستطاعتي مساعدتكم في تصميم pcb للدوائر..


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 25-07-2014, 10:57 AM المشاركة 21   
x4 الجزء الاول من مشروع smart house


بسم الله الرحمن الرحيم
السلام عليكم ورحمه الله وبركاته
هذا جزء الاول من مشروع متكون من كارت الرئيسي يستطيع بالتحكم بعد غرف عن طريق كمبيوتر او GSM او اندرويد او .... يعني نقول عنه معالج الرئيسي

اما كارت الثاني سمه room1 وهذا يتم التحكم بالغرفه الرقم 1 ومتصل بكارت الرئيسي عبر RS485
اما كارت الثالث سمه room2 وهذا يتم التحكم بالغرفه الرقم 2 ومتصل بكارت الرئيسي عبر RS485

http://up.top4top.net/downloadf-top4...5b711-rar.html
سأقوم بشرح الكود ومشاكل الي واجهتني لكي نحلها لنبدأ بعد بتطوير كارت كارت وكلا على حدا


مشكله هي كيفيه ربط RS232 مع RS485 في كارت الرئيسي لكونهما يعملان بنفس البروتوكول وهاردوير
طبعا يوجد حل بأستخدام 74ALS241 وهذه تعمل مثل select switch معتمده على الاطراف 1oE و 2oE ولكن لاسف لايمكن محاكاتها على البروتيس مما اضطرني الى استخدام سويجات
كان يمكن أستخدام العائله 18F ولكن لم أتمن من حل مشكله التي ذكرتها في هذا الرابط
http://www.qariya.info/vb/showthread.php?t=150559
تحياتي


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 25-07-2014, 11:33 AM المشاركة 22   
افتراضي الكارت الرئيسي


السلام عليكم
كود:
char dat[10];  // buffer for receving/sending messages
char kk[10];

sbit  rs485_rxtx_pin  at RC0_bit;               // set transcieve pin
sbit  rs485_rxtx_pin_direction at TRISC0_bit;   // set transcieve pin direction

sbit computer_Rs485 at RB0_bit;
sbit computer_Rs485_dir at TRISB0_bit;
unsigned char recive_data=0 , cont=0,cont1=0 ;
char data1[2];
// Interrupt routine
void interrupt()
{
 char temp=0;

 if(RCIF_bit==1 )
             {
              if(computer_Rs485==0) RS485Master_Receive(kk);
               else{

                   temp=UART1_Read();
                    switch(cont)
                               {
                                case 0: if(temp=='S')cont=1;
                                        break;
                                case 1: data1[cont1]=temp-'0';
                                        cont1++;
                                        if(cont1==2){ cont1=0;cont=2;}
                                        break;
                                case 2: if(temp=='T')recive_data=1;
                                        else cont=0;
                                        break;
                                default : cont=0; break;
                               }
                  }
              }
 
 
}
//******************************************************//
void main()
{

  adcon1=6;
  cmcon=7;
  TRISB1_bit=0; RB1_bit=0;
  TRISB2_bit=0;RB2_bit=0;
  computer_Rs485_dir=1;
  RS485Master_Init();                  // initialize MCU as Master
  dat[4] = 0;                          // ensure that message received flag is 0
  dat[5] = 0;                          // ensure that error flag is 0
  dat[6] = 0;
 // INTE_bit=1;//Enables the RB0/INT external interrupt
 // INTF_bit=0;//RB0/INT External Interrupt Flag bit
 // INTEDG_bit=1;//Interrupt on rising edge of RB0/INT pin
  RCIE_bit=1;     // enable interrupt on UART1 receive
  TXIE_bit = 0;                        // disable interrupt on UART1 transmit
  PEIE_bit = 1;                        // enable peripheral interrupts
  GIE_bit = 1;                         // enable all interrupts
  UART1_Init(9600);                    // initialize UART1 module
  Delay_ms(100);

  while(1)
         {
          if(kk[4]){
                      RC1_bit=~RC1_bit;
                      kk[4]=0;
                      if(kk[0]==1)RB1_bit=~RB1_bit;
                      if(kk[0]==2)RB2_bit=~RB2_bit;

                     }
           else if(recive_data==1 && computer_Rs485==0)
               {
                recive_data=0;
                if(data1[0]==1)
                              {
                               dat[0]=0;
                               dat[1]=0;
                               dat[2]=data1[1];
                               while(RCIF_bit ==1);
                               RS485Master_Send(dat,3,1);
                               delay_ms(10);
                              }
                 else if(data1[0]==2)
                              {
                                dat[0]=0;
                               dat[1]=0;
                               dat[2]=data1[1];
                               while(RCIF_bit ==1);
                               RS485Master_Send(dat,3,2);
                               delay_ms(10);
                              }
               }
           


         }
}
طبعا مهمه الكارت الرئيسي هو الاتصال بكل كارتات والتحكم بها ومنه يمكن الربط عده وسائل التحكم مثل GSM او اندرويد او كمبيوتر ولكن لابد من أستخدام وسيله اتصال واحده وهذا موضوع نرجو من أخوه تقديم حلول لكون كل هذه وسائل الاتصال تحتاج الى هاردوير RX, TX

هذا الكود تعريف مداخل ومخارج وتهيئه uart وكذلك RS485
كود:
adcon1=6;
  cmcon=7;
  TRISB1_bit=0; RB1_bit=0;
  TRISB2_bit=0;RB2_bit=0;
  computer_Rs485_dir=1;
  RS485Master_Init();                  // initialize MCU as Master
  dat[4] = 0;                          // ensure that message received flag is 0
  dat[5] = 0;                          // ensure that error flag is 0
  dat[6] = 0;
 // INTE_bit=1;//Enables the RB0/INT external interrupt
 // INTF_bit=0;//RB0/INT External Interrupt Flag bit
 // INTEDG_bit=1;//Interrupt on rising edge of RB0/INT pin
  RCIE_bit=1;     // enable interrupt on UART1 receive
  TXIE_bit = 0;                        // disable interrupt on UART1 transmit
  PEIE_bit = 1;                        // enable peripheral interrupts
  GIE_bit = 1;                         // enable all interrupts
  UART1_Init(9600);                    // initialize UART1 module
  Delay_ms(100);
طبعا في حاله اي slave (( كارت )) يقوم بارسال بياناته الى ماستر لتحديث حاله الاحمال الي عنده حيث يتم استقبال البيانات عن طريق الانتربت وتخزن في مصفوفه kk
كود:
if(computer_Rs485==0) RS485Master_Receive(kk);
عندها يصبح [kk[4 تساوي 255 (( راجع مكتبه rs485)) وعندها يقوم بتنفيذ الاوامر
طبعا المفروض يقوم بأرسال البيانات الى كمبيوتر لتحديث حاله الاحمال ولكن وضعت كود بسيط لغرض فقط معرفه انه يستقبل البيانات بشكل صحيح ولم يتم أكمال الكود بعد
كود:
if(kk[4]){
                      RC1_bit=~RC1_bit;
                      kk[4]=0;
                      if(kk[0]==1)RB1_bit=~RB1_bit;
                      if(kk[0]==2)RB2_bit=~RB2_bit;

                     }
==========================================
اما الكود التالي فتمثل البيانات الي أستقبلت من كمبيوتر
كود:
else if(recive_data==1 && computer_Rs485==0)
               {
                recive_data=0;
                if(data1[0]==1)
                              {
                               dat[0]=0;
                               dat[1]=0;
                               dat[2]=data1[1];
                               while(RCIF_bit ==1);
                               RS485Master_Send(dat,3,1);
                               delay_ms(10);
                              }
                 else if(data1[0]==2)
                              {
                                dat[0]=0;
                               dat[1]=0;
                               dat[2]=data1[1];
                               while(RCIF_bit ==1);
                               RS485Master_Send(dat,3,2);
                               delay_ms(10);
                              }
               }
وطبعا ترسل البيانات من كمبيوتر بهذه الصيغه SmnT حيث S تعني start و T تعني STOP اما m تعني رقم غرفه وبالطبع نستطيع التحكم بــ 10 غرف اما n فيعني رقم الحمل الي نريد تشغيله على سبيل مثال
S13T فهذا يعني ارسل البيانات الى غرفه 1 لتشغيل او أطفاء حمل رقم 3


اما بالنسبه لانتربت
هذا هو كود الاستقبال من كمبيوتر
كود:
temp=UART1_Read();
                    switch(cont)
                               {
                                case 0: if(temp=='S')cont=1;
                                        break;
                                case 1: data1[cont1]=temp-'0';
                                        cont1++;
                                        if(cont1==2){ cont1=0;cont=2;}
                                        break;
                                case 2: if(temp=='T')recive_data=1;
                                        else cont=0;
                                        break;
                                default : cont=0; break;
                               }


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 25-07-2014, 11:49 AM المشاركة 23   
افتراضي كارت 1 (room1) و كارت 2 (room2)


تهيئه مداخل ومخارج وتفعيل الانتربت عن طريق uart وكذلك تهيئه uart و RS485
كود:
TRISA=0xFF;
  load1_dir=0; load2_dir=0;load3_dir=0;load4_dir=0;load5_dir=0;
  load1=0;load2=0;load3=0;load4=0;load5=0;

  UART1_Init(9600);                  // initialize UART1 module
  Delay_ms(100);
  RS485Slave_Init(1);              // Intialize MCU as slave, address 1

  dat[4] = 0;                        // ensure that message received flag is 0
  dat[5] = 0;                        // ensure that message received flag is 0
  dat[6] = 0;                        // ensure that error flag is 0

  RCIE_bit = 1;                      // enable interrupt on UART1 receive
  TXIE_bit = 0;                      // disable interrupt on UART1 transmit
  PEIE_bit = 1;                      // enable peripheral interrupts
  GIE_bit = 1;                       // enable all interrupts
طبعا يتم استقبال البيانات من ماستر او كارت الرئيسي عن طريق الانتربت وطبعا داتا تخزن في مصفوفه dat
كود:
void interrupt() 
{
 RS485Slave_Receive(dat);
}
==============================================
طبعا يتم التحكم بالاحمال عن طريق سويجات
كود:
if(sw_load1==0)
                        {
                         codeing=1;
                         
                         delay_ms(250);
                        }
          if(sw_load2==0)
                        {
                         codeing=2;
                         delay_ms(250);
                        }
          if(sw_load3==0)
                        {
                         codeing=3;
                         delay_ms(250);
                        }
          if(sw_load4==0)
                        {
                         codeing=4;
                         delay_ms(250);
                        }
          if(sw_load5==0)
                        {
                         codeing=5;
                         delay_ms(250);
                        }
طبعا codeing هو ان لكل حمل له كود نحن نضعه فهذه أفضل طريقه لتحكم بالحمل من اكثر من طريقه مثلا عن طريق ريموت كنترول او اي طريقه فأذا وضعنا كود لكل حمل فعندها يصبح الكود عام

لاحظ الشرح ادناه
كود:
check_load();
كود:
void check_load()
{
 char state_load=0;
 if(codeing !=0)
                      {
                       state_load=codeing;
                       codeing=0;
                      }
                      
 else 
      {
        if (dat[5])  {                   // if an error detected, signal it by
                     dat[5] = 0;
                    }
        if (dat[4]) {                    // upon completed valid message receive
                dat[4] = 0;                    //   data[4] is set to 0xFF
                  state_load=dat[2];
               }
      }
      
  switch(state_load)
                 {
                  case 1: load1=~load1;send_data(1);break;
                  case 2: load2=~load2;send_data(2);break;
                  case 3: load3=~load3;send_data(3);break;
                  case 4: load4=~load4;send_data(4);break;
                  case 5: load5=~load5;send_data(5);break;
                 default: break;
                 }
  codeing=0;
}
نلاحظ مايلي اذا كان codeing =0 معناها انه لم نضغط على سويج ام اذا كانت له قيمه غير 0 منعناه ضغطنا على سويج وهنا تأتي مهمه هذا الكود
كود:
if(codeing !=0)
                      {
                       state_load=codeing;
                       codeing=0;
                      }
اذن نخزن البياتات في متغير سميته state_load
وبعدها
كود:
 switch(state_load)
                 {
                  case 1: load1=~load1;send_data(1);break;
                  case 2: load2=~load2;send_data(2);break;
                  case 3: load3=~load3;send_data(3);break;
                  case 4: load4=~load4;send_data(4);break;
                  case 5: load5=~load5;send_data(5);break;
                 default: break;
                 }
كود اعلاه واضح فهو يتحكم بالحمل اما تشغيل او أطفاء تلاحظون كل حمل له شفره
يعني 1 للحمل رقم 1 و2 للحمل رقم 2 وهكذا

اما اذا كان codeing =0 معناها لم يتم الضغط على سويج ولكن لربما تم ارسال البيانات من ماستر
كود:
 {
        if (dat[5])  {                   // if an error detected, signal it by
                     dat[5] = 0;
                    }
        if (dat[4]) {                    // upon completed valid message receive
                dat[4] = 0;                    //   data[4] is set to 0xFF
                  state_load=dat[2];
               }
      }
تلاحظون الكود بلون احمر يعني أخزن شفره في state_load طبعا لو ترجعون الى ماستر ستجدون ان الشفره ارسلت في [dat[2 وطبعا الشفره في هذا مشروع هي من 1 الى 5 لكونه عندنا فقط 5 أحمال

هذه داله ترسل البيانات لتحديث معلومات الى ماستر عند كل ضغطه سويج
كود:
 dat[0]=1;
 dat[1]=0;
 dat[2]= data1;
 RS485Slave_Send(dat,3);
 delay_ms(20);


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 25-07-2014, 12:06 PM المشاركة 24   
x4


منتظرين ارائكم ومقتراحاتكم ولي مقترح هو ان كارت room هو ثابت فأذا رتبنا الكود لاي كارت سيكون لاكثر من غرفه (( طبعا اذا كنا نريد التحكم بكل غرفه على حدا ))
ولدينا كارت ماستر فهذا يحتاج الكثير من التعديلات لانه هو يسيطر على منزل بالكامل لانك من غير معقول تضع مثلا لكل واحد GSM

المرحله الثانيه هو كتابه الكود لبرنامج #C
اتمنى من يستطيع بناء برنامج #C كشكل وطريقه فسيكون أفضل لان هذا البرنامج هو جزء كبير من مشروع وبالطبع يحتاج الى من يتكفل بالموضوع

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

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

ولكم جزيل الشكر والتقدير


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 25-07-2014 الساعة 12:54 PM


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