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

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

الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
نشاط [ funky112233 ]
قوة السمعة:92
قديم 15-09-2012, 08:47 PM المشاركة 1   
افتراضي تعلم كيفية التحكم من خلال ذراع البلايستيشن Playstation controller بالميكروسى Twitter FaceBook Google+



بسم الله الرحمن الرحيم

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

سوف نقوم بشرح كيفية التحكم فيما حولنا من خلال ذراع البلايستيشن Playstation controller

وان شاء الله سيكون الشرح كالاتى

اولا
معرفة الاطراف والهاردوير


ثانيا
نتعرف على البروتوكول وكيف يعمل


ثالثا
خطوات كتابة الكود


رابعا
الكود وشرحة


__________________________________________________ _____________

ولكن فى البداية
شاهد التجربة فى هذا الفديو


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

__________________________________________________ _____________

اولا
معرفة الاطراف والهاردوير


يجب ان نعرف اننا لكى نتحكم من خلال الذراع بشكل كامل نحتاج الى 8 اطراف وهم



وكما نرى بجانب كل طرف اهميتة واهمية استخدامة
وهناك طرف رقم 8 لا فائدة منة بالنسبة لنا

التوصيل اذا كان من الخارج اى من السلك الخاص بالذراع

فسيكون كالتالى
هذه هى اطراف السوكت الخاص بة وكل طرف علية رقم



وهذا الجدول يوضح اسم وفائدة كل طرف ومكانة فى السوكت فرقم 1 هو رقم 1 فى السوكيت وهكذا



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

وهى كالاتى



وكل لون بجانبة اسم الطرف بتاعه كما نرى

وعند التوصيل يجب توصيل مقاومة 10 كيلوا بين الموجب وطرف الداتا Data
اى pull up resistor



__________________________________________________ _____________

ثانيا
نتعرف على البروتوكول وكيف يعمل


البرتوكول يسمى ب Playstation pad protocole

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

وهو يعمل كالاتى
فى البداية يجب ان يعطى الميكرو نبضة سالبة 0 على الطرف ATT
لكى يعرف الذراع اننا نريد ان نتحدث معه ونرسل لة بيانات ونستقبل بيانات

بعد ذلك يكون الذراع جاهز لتلقى المعلومات

والمعلومات تكون على صورة بايت فى كل مرة اى 8 بت اى رقم يقع بين 0 الى 255

ولكن الارسال لا يكون بارسال 8 بت مرة واحدة لا فنحن لا نملك الا طرف 1 فقط للارسال وطرف اخر للاستقبال

وهذا يعنى ارسال بت واحدة فى كل مرة وتكرار هذا 8 مرات فيعطينا 8 بت او بايت

ولهذا نقوم بارسال بت بت الى الذراع
ولكن من اين يعرف الذراع سرعه الارسال التى نتعامل بها
فمن الممكن ان يرسل البك البيانات بسرعه ويمكن ان يرسلها ببطىء
هناك اكثر من حل

ولكن هذا البروتوكول اعطنا حل وهو
اننا نقوم بالتحكم فى سرعه نبضات من خلال الطرف Clock ليحدث تزامن فى الارسال والاستقبال

اى كل نبضة نقوم بارسال قيمة بت والنبضة التى تليها نقوم بارسال بت اخر وهكذا
اى كل بت نعطى نبضة فيعرف الذراع انه تم ارسال بت ويحدث تزامن بين الميكرو والذراع فى استقبال وارسال البيانات
والنبضة ببساطة هى اخراج 0 فولت على الطرف Clock ثم ((انتظار فترة زمنية)) واخراج 5 فولت
وهكذا نكون قمنا بعمل نبضة

والتردد او السرعة التى يعمل عليها الذراع تقع بين 100 كيلواهرتز الى 500 كيلوا هرتز 100khz - 500khz

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

ثم وبعد ارسال اى بايت
يقوم الذراع بارسال نبضة سالبة على الطرف ACK
لكى يُعلم البك انه استلم البايت وهو مستعد لاستقبال البيتات الاخرى

وهذه صورة توضح الامر مرتبا فوق بعضة



فكما نرى فى البداية يكون الطرف clock موجب وعندما نعطية نبضة سالبة
يتم استقبال وارسال اول بت وهو BIT0 سواء على الطرف Command او Data
فالارسال والاستقبال يكونان فى نفس الوقت كما قلت

وعند ارتفاع النبضة على الطرف Clock الى الموجب مرة اخرى ينتظر الذراع منك ان ترسل نبضة سالبة
اخرى لكى يتستقبل او يرسل بت اخر وهكذا 8 مرات ليتم ارسال باايت كامل
اى انك تقوم بكتابة قيمة البت الذى سوف ترسلة سواء ب 0 او 1 وتعطى نبضة فيتم التعرف على البت وهكذاااا

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

وللتحكم فى الذراع يجب اعطائة فى البداية اوامر مكونة من 3 بايت
وهى اوامر تعرفة باى نظام سوف نتعامل وهكذا

اول بايت يجب ان يكون 1 او 0x01 او 00000001 وعندها سيرد الذراع عليك ببايت بقيمة 255 او 0xFF
ثم يعطيك نبضة سالبة على الطرف ACK

فتقوم بارسال البايت الثانى
وهذا البايت يحدد النظام الذى سوف نتعامل بة

النظام الاول الديجتال
وهو يكون للتعامل مع كل ازار الذراع ما عدا البلية او joysticks
لانها تحتاج الى نظام اخر

النظام الثانى وهو انالوج
وهو يكون للتعامل مع كل الازرار بما فيهم البلية او joysticks

وهناك نظم اخرى ولكن هذا ما نحتاجة

وكل نظام لة امر محدد ولكن هناك امر يجمع بين كل هذه الانظمة
وهو الامر 0x42 او 01000010 او 66
والذى يفصل بين نظام الديجتال عن الانالوج هو الزر الذى يضىء الليد الاحمر فى الذراع
ستجد انه مكتوب علية ANALOG وعند الضغط علية يُفعل نظام الانالوج
والذى من خلال يتم التحكم من خلال البلية او joysticks

ولهذا عند اجراء التجربة فى الفديو عملت الليدات بدون الضغط على اى زر
لانها فى الاختبارات IF تعمل على الانالوج ولكنى لم اكن اشغلة لهذا كانت تخرف
وعند تشغيل الليد والضغط على الزر عادت للعمل بشكل جيد

وبعد ارسال 0x42 الى الذراع سيرد عليك ب بايت قيمتة 0x41 او 0x79

ثم نبضة سالبة على الطرف ACK
فنقوم بارسال البايت الثالث وهو 0 او 00000000 او 0x00

وبعد ذلك نبدء فى استقبال البيانات من الذراع
وسنعرف ذلك فيما بعد

انظروا الى هذه الصورة



الصورة تشرح كل ما قلتة بالزبط
.................................................. .................................................. ..........

يبقى سؤال اخير كيف يتم استقبال البيانات وكيف نعرف انه تم الضغط على الزر كذا وكذا

البيانات ببساطة تاتى على شكل 6 بايت
البايت الاول والثانى نعرف من خلالهما اذا كان تم الضغط على اى زر فى الذراع ام لا
وهذا ما يسمى بنظام الديجتال

اما البايت الثالث والرابع والخامس والسادس
فنعرف من خلالهم قيم تحريك البلية او joysticks
.................................................. ..................

البايت الاول والثانى



كما نرى كل بت فى البايت تعبر عن زر من الازرار وفوق كل بت نجد اسم الزر الذى يعبر عنة
اى اذا كان البت يساوى 1 فهذا يعنى انة لم يتم الضغط على اى زر اما اذا ساوى 0 فهذا يعنى انه تم الضغط على هذا الزر

الاسهم هنا تسمى ب UP DOWN وهكذا

مثال

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

سيكون كالاتى 11110111 او 247 فكما نرى كل الازرار تعطى 1 عند عد الضغط عليها
اى البايت كامل عند عدم الضغط على اى زر يعطى 11111111 او 255 او 0xFF
وعند الضغط على اى زر يتحول البت الخاص بة الى 0

وهذه الصورة توضح اكثر



فهنا كل بت من كل بايت فوقة الزر الخاص بة
من اول البايت الرابع 4 الى البايت الخامس 5

اما من 6 الى 9
فهذه البايتات خاصة بل البلية او joysticks

فببساطة هذه البلية او joysticks مكونة من مقاومة متغيرة اى انالوج ويتم تحويل القيمة كما نعلم من خلال
ADC Module من انالوج الى ديجيتال ولكننا لن نستخدم ADC بال الذراع يعطينا الرقم محول جاهز الى ديجيتال

وكما نرى البايت 6 يعطينا قيم من 0 الى 255 تعبر عن قيم تحرك البلية او joysticks
اليمنة فى الذراع
فى الاتجاة الافقى اى يمين او يسار

اى انة فى الوضع الطبيعى ستكون القيمة 127 فاذا قمنا بتحريك البلية او joysticks
الى اقصى اليمين يكون النتج 255 ولو حركناها الى اقصى اليسار سيكون الناتج 0

وبالطبع خلال تحرك البلية او joysticks الى اليمين او اليسار تتغير القيمة على حسب التحرك

وهذا يمكننا وضع هذا البايت داخل
كود:
PWM1_Set_Duty;
لكى نتحكم فى اضائة ليد او سرعه محرك بسهولة ويسر

والبايت الذى يلية السابع 7 يعطينا نفس القيم للبلية او joysticks الايمن
ولكن للخط الراسى اى لاعلى او لاسفل

والبايت الذى يلية الثامن 8 نفس الكلام زى البايت السادس بالزبط ولكن للبلية او joysticks اليسرى
والتاسع كذلك 9 مثل السابع ولكن للبلية او joysticks اليسرى

اما بالنسبة لشتغل المواتير فا فى البايت الرابع والخامس اذا قمنا بارسال اى ارقام غير 0 على الطرف Command
فسوف تعمل المواتير وكل بايت خاص بماتور
__________________________________________________ ________________________
__________________________________________________ ________________________

ثالثا
خطوات كتابة الكود


اول خطوة هى تعريف الاطراف التى سوف نقوم بربط الذراع مع الميكرو من خلالها
ثانى خطوة ارسال 3 بايت لتعريف النظام وتحديد نوع البيانات
ثالث خطوة استقبال البيانات
رابع خطوة اختبار البيانات وتنفيذ الاوامر فى حالة الضغط على الازرار

__________________________________________________ ________________________
__________________________________________________ ________________________

رابعا
الكود وشرحة
((الجزء المتعب للبعض هههههههه ))

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

اولا
حمل الكود من هنا

http://www.4shared.com/rar/I-vvZDUa/PS2.html?

وهذا هو الكود

كود:
#define data PORTB.f0
#define command PORTB.f1
#define clock PORTB.f2
#define att PORTB.f3
#define ack PORTB.f4

unsigned char natg[6];char dd ;

void ps_clock(){         // Void For Make Plus 0 And 1 All The Time
clock=0;
delay_us(10);
clock=1;
delay_us(10);
}

void psinit(){
char x;
att=0;

command=1;
ps_clock();
for(x=0;x<7;x++){            /// 0x01
command=0;
ps_clock(); }

while(ack==1){}

command=0;
ps_clock();
command=1;
ps_clock();
for(x=0;x<4;x++){          ///// 0x42
command=0;
ps_clock(); }
command=1;
ps_clock();
command=0;
ps_clock();

while(ack==1){}

for(x=0;x<8;x++){          ///// 0x00
command=0;
ps_clock(); }

}

unsigned char psnatg(){
ps_clock();                             // Void For Get Bit
dd = data;
return dd;
}

unsigned char get_ps_byte(){
char n;
unsigned char ps_byte = 0;
unsigned char temp_ps = 0;
                                                  // Void For Get Byte
    for(n=0 ; n<8 ; n++){
       temp_ps = psnatg();
          ps_byte >>= 1;
        if (temp_ps == 1) {
            ps_byte += 0x80; // 128 // 10000000
        }

    }
    return ps_byte;
}

char cc;

void main() {
trisb=17;trisd=0;portd=0;PORTB.f7=0;

while(1){
att=1;clock=1;command=1;
psinit();                       // Initialize The PS2 Controller
command=0;

for(cc=0;cc<6;cc++){
while(ack==1){}                      //   Recive BYTEs
natg[cc] = get_ps_byte(); }
att=1;

if(natg[0]==247||natg[0]==254){PORTB.f7=~PORTB.f7;delay_ms(250);}
if(natg[1]==239||natg[1]==223){PORTD.f1=~PORTD.f1;delay_ms(250);}
if(natg[2]==0||natg[2]==255){PORTD.f2=~PORTD.f2;delay_ms(250);}
if(natg[4]==0||natg[4]==255){PORTD.f3=~PORTD.f3;delay_ms(250);}

    }


}
اول خطوة كانت تعريف الاطراف التى سوف نقوم بربط الذراع مع الميكرو من خلالها

وهاهى

كود:
#define data PORTB.f0
#define command PORTB.f1
#define clock PORTB.f2
#define att PORTB.f3
#define ack PORTB.f4
فهذا الامر يقوم بابدال اسم الاطراف الى اى اسم تختارة

مثلا بدل ما اكتب PORTB.f0 يمكننى الان ان اكتب data بدلا منها
وهكذا مع الباقى ويمكنك تغير الاطراف كما تريد

وبعد ذلك قمت بتعريف مصفوفة مكونة من 6 متغيرات لكى احفظ فى كل متغير
القيمة المستقبلة من الذراع التى تعبر عن حالة الازرار والبلية joysticks
ومتغير اسمة dd للاستخدام داخل الكود

كود:
unsigned char natg[6];char dd ;
.................................................. .................................................. ..........

ثانى خطوة كانت ارسال 3 بايت لتعريف النظام وتحديد نوع البيانات
ولكن نذهب اولا الى Void main

وقبل البدء هذه الاوامر لتعريف المخارج والمداخل للبك
كود:
trisb=17;trisd=0;portd=0;PORTB.f7=0;
فيجب جعل الاطراف Data و ACK كادخل اما الباقى خرج

ثم جملة تكرارية الى ملانهاية while
ثم جعل جميع الاطراف للخرج الخاصة بالذراع
تساوى 1 وهذا لكى يعمل جيدا

كود:
att=1;clock=1;command=1;
ثم قلت له اذهب الى داله التعريف او الدالة التى تقوم بكتابة اول 3 بايت لتهيئة الذراع

كود:
psinit();                       // Initialize The PS2 Controller
فلنذهب اليها اذان

كود:
void psinit(){
char x;
att=0;

command=1;
ps_clock();
for(x=0;x<7;x++){            /// 0x01
command=0;
ps_clock(); }

while(ack==1){}

command=0;
ps_clock();
command=1;
ps_clock();
for(x=0;x<4;x++){          ///// 0x42
command=0;
ps_clock(); }
command=1;
ps_clock();
command=0;
ps_clock();

while(ack==1){}

for(x=0;x<8;x++){          ///// 0x00
command=0;
ps_clock(); }

}
اول ما تفعلة الداله هو اخراج نبضة سالبة 0 على الطرف ATT لكى يعرف الذراع انى سابدء بالارسال

وكما قلت فى البداية نحن نريد ان نرسل اول بايت 0x01 او 1 او 00000001
يعنى اول بت ب1 والباقى ب0 اى 1 و 7اصفار

لهذا جعلت قيمة الطرف Command وهو الطرف الخاص بارسال الاوامر الى الذراع
يساوى 1
ثم قلت له اذهب الى الداله
كود:
ps_clock
وهى داله خاصة لعمل النبضات

وها هى
كود:
void ps_clock(){         // Void For Make Plus 0 And 1 All The Time
clock=0;
delay_us(10);
clock=1;
delay_us(10);
}
فى البدء يجعل طرف الساعة Clock يساوى 0 ثم ينتظر 10 ميكروثانية
ثم يجعلة يساوى 1 ثم ينتظر 10 ميكروثانية
وهكذا نكون قمنا بعمل نبضة وايضا تم ارسال اول بت وهو بقيمة 1

ثم يعود مرة اخرى الى داله التعريف
فطوال الوقت سوف نقوم بتغير قيمة ال Command ثم نذهب الى داله الساعة
لتفعيل النبضة وارسال البت وهكذا كل بت معها نبضة ساعة

تبقا لنا 7 بت كلهم اصفار لارسالهم
لهذا قمت بعمل تكرار 7 مرات وفية قمت بجعل قيمة الطرف Command يساوى 0
ويذهب الى نبضات الساعة وهكذا 7 مرات نحصل على 7اصفار
وفى المجمل نحصل على البايت 0x01 او 1 او 00000001

كود:
for(x=0;x<7;x++){            /// 0x01
command=0;
ps_clock(); }
ثم جعلت البك ينظر حتى يعطية الذراع انة مستعد لاستقبال باقى البيانات
وهذا من خلال الطرف ACK

كود:
while(ack==1){}
ثم ارسال البايت الثانى 0x42 بنفس الطريقة

ثم البايت الثالث 0x00 بنفس الطريقة

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

فيعود مرة اخرى الى ال Void main
ويقوم بعمل
كود:
command=0;
وهذا هام حتى لا تعمل المواتير
.................................................. .................................................. ..........

الخطوة الثالثة وهى استقبال البيانات

كود:
for(cc=0;cc<6;cc++){
while(ack==1){}                      //   Recive BYTEs
natg[cc] = get_ps_byte(); }
فكما نرى هذا هو امر استقبال البيانات
ولكنى قمت بتكرارة 6 مرات اى 6 بايت حتى نستقبل قيم جميع الازرار والبلية joysticks
وهو يعمل كلاتى
فى البداية نتظر حتى يعطى الذراع
النبضة السالبة على الطرف ack لكى نبدء فى استقبال البيانات
كود:
while(ack==1){}
ثم يخزن القيمة الراجعه من الدالة get_ps_byte داخل متغير من المصفوفة natg
على حسب عدد cc يعنى فى البدء cc يساوى 0 فيخزن اول بايت فى الخانة 0
ثم تصبح 1 فيخزن ثانى بايت فى الخانة 1
ثم تصبح 2 فيخزن البايت الثالث فى الخانة 2 وهكذا

اذن لنذهب الان الى get_ps_byte لنرى كيف تستقبل بايت فى كل مرة وتعود بة

كود:
unsigned char get_ps_byte(){
char n;
unsigned char ps_byte = 0;
unsigned char temp_ps = 0;
                                                  // Void For Get Byte
    for(n=0 ; n<8 ; n++){
       temp_ps = psnatg();
          ps_byte >>= 1;
        if (temp_ps == 1) {
            ps_byte += 0x80; // 128 // 10000000
        }

    }
    return ps_byte;
}
اظن انكم تعرفونها
نعم هى تقوم بعمل ازاحة فى كل مرة استقبال مثل مشروع الاشعه تحت حمراء

ولكننا هنا نكرر 8 مرات لان هذا هو عدد البتات للبايت الواحد وهو ثابت
ثم نجعل قيمة هذا المتغير temp_ps يساوى قيمة الدالة
كود:
psnatg();
وهى مسؤلة عن استقبال بت واحد فى كل مرة

كود:
unsigned char psnatg(){
ps_clock();                             // Void For Get Bit
dd = data;
return dd;
}
فهى تقوم بالذهاب الى داله الClock اى تقوم بعمل نبضة
لكى يتم ارسال بت من الذراع ويتم تغير قيمة الطرف Data
فنجعل المتغير dd يساوى قيمة طرف الداتا Data
ثم يجعل قيمة الداله تساوى هذه القيمة return dd

فتعود لدالة الاستقبال
اذن اصبحت قيمة المتغير temp_ps تساوى قيمة البت المستقبلة

فنقوم بعمل امر الازاحة الى اليمين بقيمة 1
كود:
  ps_byte >>= 1;
والازاحة هى اذا كان مثلا الرقم هكذا
10000000 فيكون بعد الازاحة 01000000 اى يتم ازاحتة الى جة اليمين ووضع مكانة 0
ثم يختبر هل كانت قيمة البت المستقبل 1 ام لا
فاذا كانت تساوى 1
يتم اذن اضافة رقم 1 الى اول البايت اى اذا كان هكذا 00000000 فيتم اضافة 1 هكذا 10000000
واذا لم تكن فقد تم اضافة 0 اوتوماتيك بعمل الازاحة فى الاول

وهكذا تكرار 8 مرات فنحصل على البايت فيعود الى الدالة الرئيسية وامر الاستقبال
فيرجع مرة اخرى ليستقبل بايت اخر
وهكذا 6 مرات حتى يستقبل جميع البيتات الستة
.................................................. .................................................. ..........

رابع خطوة اختبار البيانات وتنفيذ الاوامر فى حالة الضغط على الازرار

يجب بعد الانتهاء جعل الطرف ATT يخرج 1 حتى لا يرسل الذراع بيانات اخرى
ويخلى البك يخرف

كود:
att=1;
ثم نختبر قيمة الازرار فاذا تم الضغط على زر O مثلا او [ ] يشغل ليد او يفعل كذا وكذا

كود:
if(natg[0]==247||natg[0]==254){PORTB.f7=~PORTB.f7;delay_ms(250);}
if(natg[1]==239||natg[1]==223){PORTD.f1=~PORTD.f1;delay_ms(250);}
if(natg[2]==0||natg[2]==255){PORTD.f2=~PORTD.f2;delay_ms(250);}
if(natg[4]==0||natg[4]==255){PORTD.f3=~PORTD.f3;delay_ms(250);}
هنا انا اقوم باختبار امرين مرة واحدة داخل جملة IF
من خلال كتابة الامر الاول ثم || ثم الامر الثانى
فاذا كان احد الاختبارين منفذ يقوم البك بتنفذ الاوامر
وهذا اختصار بدل ما اكتب اكثر من جملة لتنفيذ امر واحد

وكما نرى كل بايت لة رقم

البايت الرابع = [natg[0
البايت الخامس = [natg[1 الخاصين بالازرار

البايت السادس = [natg[2
البايت السابع = [natg[3
البايت الثامن = [natg[4 الخاصين بالبلية joysticks
البايت التاسع = [natg[5

__________________________________انتهى___________ _____________
__________________________________________________ _____________

اى استفسار انا تحت امركم ان شاء الله
ولا تخجل من السؤال ابدا

واذا لم تفهم الشرح جيدا فلا مانع
فاستخدمة كما هو فلا حاجة لفهمة 100% لكى تستخدمة
لانه يعمل مع جميع دراعات البلايستيشن

فقط كل ما عليك ان تعرف كيف تختبر الازرار وكيف تكتب جملة if للتعامل مع الازرار وتنفذ الاوامر

وللعلم سعر joysticks واحدة 50 جنية مصرى وسعر الذراع كامل اقل من 50 جنية احيانا وممكن تجيب مستعمل
فان شاء الله تستفيدوا منة فى التحكم وعمل مشاريع تحكم فى الروبوت باحتراف
وللعلم يمكن جعل الذراع يعمل لاسلكى بتركيب دائرة ارسال واستقبال على اطرافة

وارجوا من الله ان تكونوا استفدتوا
وفقنا ووفقكم الله الى ما يحب ويرضى

اعلانات

الصورة الرمزية zanyhand
zanyhand
:: مهندس متواجد ::
تاريخ التسجيل: Aug 2009
الدولة: المغرب
المشاركات: 95
نشاط [ zanyhand ]
قوة السمعة:0
قديم 15-09-2012, 09:46 PM المشاركة 2   
افتراضي مشكور


بارك الله فيك أخي الكريم والله موضوع نادر
في إنتظار أتحكم بواسطة بلاي ستيشن 3 (لاسلكي )

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

الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
نشاط [ funky112233 ]
قوة السمعة:92
قديم 15-09-2012, 11:33 PM المشاركة 3   
افتراضي


بسم الله الرحمن الرحيم

الله يكرمك يا اخى
بالنسبة للبلايستشن 3 فانا لا املكة ولا املك الذراع بتاعه ولم اجد حتى اى معلومات عن البروتوكول الخاص بة

ووجدت انة يعمل من خلال USB

وان شاء الله لو وقع فى ايدى واحد هحاول اشتغل علية ان شاء الله مفيش مشكلة

ولكن هذا الذراع كما قلت يمكن تركيب دائرة ارسال واستقبال علية
ليعمل لاسلكى
سوا IR او RF كما تريد
ولكن ستحتاج الى اكثر من منفذ فكما تعلم هناك 5 اطراف
ولكن هناك حل ذكى سيوفر
وهو تركيب ميكرو متوصل بسلك مع الذراع من الداخل وهو الذى يقوم بالتحكم والتعامل
مع الذراع
ويقوم بعد ذلك بارسال النتائج من خلال اى دائرة ارسال ليستقبلها بك اخر مركب فى الروبوت مثلا

وهكذا نكون وفرنا وخلينا الذراع لا سلكى كمان

بالتوفيق ان شاء الله


hunter27
:: مهندس جيد ::
تاريخ التسجيل: Jul 2012
الدولة: المغرب
المشاركات: 284
نشاط [ hunter27 ]
قوة السمعة:0
قديم 16-09-2012, 01:38 PM المشاركة 4   
افتراضي


السلام عليكم

جزاك الله خيرا على هذا الشرح وجعله في ميزان حسناتك

أتمنـى لك من القلب إبداعـا يصل بك إلى النجـوم

لذي سؤال هل استطيع التحكم بذراع الحاسوب و التي تعمل ب usb

وايضا ان كان من الممكن ان تضع لنا الدارة كيف نربط الدراع ما البيك بالمقاموات

وايضا بالنسبة للرجل رقم 3 هل من الممكن الاسغناء عنها لاني لا اريد تشغيل vibro-motors

و اسف على كثرة الاسالة


التعديل الأخير تم بواسطة : hunter27 بتاريخ 16-09-2012 الساعة 02:01 PM

الصورة الرمزية هيثم العليمي
هيثم العليمي
:: مهندس جيد ::
تاريخ التسجيل: Mar 2012
الدولة: yemen
المشاركات: 236
نشاط [ هيثم العليمي ]
قوة السمعة:0
قديم 16-09-2012, 10:59 PM المشاركة 5   
افتراضي


جزاك الله خير

ساقرا الموضوع بتمعن .. واشوف لو في بعض الاسئله تحياتي ...


الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
نشاط [ funky112233 ]
قوة السمعة:92
قديم 18-09-2012, 09:19 AM المشاركة 6   
افتراضي


بسم الله الرحمن الرحيم

hunter27

الله يكرمك يا رب واسف على التاخر

بالنسبة لسؤالك

الحقيقة انا لا اعرف كيف يعمل الذراع مع ال USB لا اعرف ما هو البروتوكول الخاص بة للاسف

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

عموما تفضل هذه الصورة مثال



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

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

هيثم العليمي

الله يكرمك يارب واى شىء تحتاجة انا تحت امرك ان شاء الله
وفقك الله لما يحب ويرضى


الصورة الرمزية Semmoor
Semmoor
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
المشاركات: 300
نشاط [ Semmoor ]
قوة السمعة:0
قديم 22-09-2012, 06:50 PM المشاركة 7   
افتراضي


ماشاء الله موضوع رائع ومفيد الله يوفقك .

عندي سؤال بسيط هل يمكن الاستغناء عن البروتوكول حق يد البلايستيشن , وبس استخدم دائرة الارسال حقت الريموت سوني اللي انت سويتها في موضوع حق IR وحطها داخل يد البلايستيشن , واصير ارسل الاوامر عن طريق الاشعة تحت الحمراء.

اذا ممكن كيف راح اوصل الازرار حق يد البلايستيشن واحطه بدل الازرار اللي المستخدمه في دائرة ارسال الاشعة تحت الحمراء

اسف على الاطالة اخي وشكرا مرة ثانية ماشاءالله مواضيعك رائعة اسئل الله ان يجعلها في ميزان حسناتك.


الصورة الرمزية هيثم العليمي
هيثم العليمي
:: مهندس جيد ::
تاريخ التسجيل: Mar 2012
الدولة: yemen
المشاركات: 236
نشاط [ هيثم العليمي ]
قوة السمعة:0
قديم 22-09-2012, 07:51 PM المشاركة 8   
افتراضي


الف شكر اخي الكريم محمد ...

مفهوم .. ودرس بسيط ...

إضافة رد

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

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

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


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

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