مدونة د.خلدون عرفة للروبوتيك

حجم الخط: +

انشاء ذراع روبوت باستخدام joystick و servo motors

photo_2025-02-20_13-29-01

مقدمة

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

انشاء اجزاء الrobot يعتبر من اكثر الامور متعة واثارة في مجال الRobotics وايضا من اهمها، والافضل من ذلك ان تستطيع التحكم بهم وليس فقط بنائهم ك شكل يفعل شيئا محددا.

في هذه المقالة، سوف نتعرف على كيفية إنشاء نموذج بسيطلذراع روبوت باستخدام اثنان من الservo motors (الذي سيمثل مفاصل الذراع) والjoystick (التي ينتحكم بالذراع باستخدامها) ! 

ماذا سوف تتعلم في هذه المقالة؟

  1. التعرف على الjoystick والServo motor.
  2. كيفية توصيل الjoystick مع الservo motor.
  3. كتابة كود للتحكم بالservo motors باستخدام الjoystick.

الأدوات والمكونات

لإكمال هذا المشروع، سوف تحتاج إلى:

  1. لوحة Arduino (مثل Arduino Uno)
  2. Joystick
  3. Servo motors (عدد 2)
  4. لوحة تجريبية (Breadboard)
  5. أسلاك توصيل (Jumper Wires) من نوع male to male
  6. أسلاك توصيل (Jumper Wires) من نوع male to female
  7. كابل USB لتوصيل Arduino بجهاز الكمبيوتر

مفاهيم وشرح القطع

  • Joystick

الجويستك (Joystick) في عالم الأردوينو هو عبارة عن جهاز إدخال يُستخدم للتحكم في الحركة أو الاتجاهات يتميز الجويستك بتصميمه العمودي القابل للتحريك، مما يتيح للمستخدم التحكم في موضع ومعدل الحركة بطرق دقيقة وسلسة. يستخدم الجويستك في مجموعة متنوعة من التطبيقات، بدءًا من ألعاب الفيديو ومحاكيات الطيران إلى الروبوتات وأنظمة التحكم الآلي.

  • Servo Motor

سيرفو موتور هو نوع من المحركات الكهربائية المستخدمة في التحكم الدقيق في الحركة. يتمتع السيرفو موتور بقدرة على التحكم في الزاوية، السرعة، والعزم، مما يجعله مثاليًا للتطبيقات التي تتطلب دقة عالية في الأداء. يُستخدم السيرفو موتور في مجموعة واسعة من المجالات، بما في ذلك الروبوتات، والطائرات بدون طيار، والمعدات الصناعية، وأنظمة التحكم في الحركة. 

الخطوات مع الشرح

  • خطوة 1: توصيل المكونات:

ملاحظة: بما اننا سنحتاج الGND لعدة قطع (sensor, LCD, LED) لذا سنحتاج لتطبيق ما تعلمناه عن تقسيمات الbreadboard في بوست الفيس بوك التالي:

https://www.facebook.com/share/p/1GS7bPVu9S/

قم بتوصيل كبل male to male من الGND في Arduino الى احد منافذ الbreadboard، وكما تعلمنا الان سيصبح لدينا عمود كامل من الpins متصل بالGND لنوصل عليه اكثر من قطعة كل قطعة على pin من pins هذا العمود.

افعل نفس الشيئ مع ال 5V، قم بتوصيل كبل male to male من ال 5V، الى احد منافذ الbreadboard والذي ايضا سيعطينا عمود pins كامل نصل عليه قطعا لل 5V.

توصيل Servo motor:

- السلك الموجب (VCC): يوصّل إلى منفذ الطاقة الإيجابية (+) في اللوحة (عادة تكون 5V).

- السلك السالب (GND): يوصّل إلى منفذ الأرضي (GND) في اللوحة.

- السلك التحكم (Signal): يوصّل إلى أحد المنافذ الرقمية في المتحكم الدقيق (مثل D9 في Arduino).

توصيل Joystick:

- دبوس X إلى دبوس A0 في الأردوينو.

- دبوس Y إلى دبوس A1 في الأردوينو.

- دبوس الطاقة إلى 5 فولت.

- دبوس الأرضي إلى GND. 

  • خطوة 2: كتابة كود Arduino

نقوم الآن بكتابة البرنامج الخاص بـ Arduino للذراع: 

#include <Servo.h>

Servo servoX;  // إنشاء كائن للسيرفو الأول X
Servo servoY;  // إنشاء كائن للسيرفو الأول Y

int joyX; // متغير لتخزين قيمة محور X
int joyY; // متغير لتخزين قيمة محور Y
int posX = 0;  // موضع السيرفو اكس الحالي
int posY = 0; // موضع السيرفو واي الحالي
int speedX = 0; // سرعة تحريك السيرفو اكس
int speedY = 0; // سرعة تحريك السيرفو واي
int prevX = 512;  // القيمة السابقة للمحور X (مبدئياً تكون منتصف النطاق)
int prevY = 512;  // القيمة السابقة للمحور Y (مبدئياً تكون منتصف النطاق)
int lastDeltaX = 0; // سرعة تحريك الjoyX السابقة
int lastDeltaY = 0; // سرعة تحريك الjoyY السابقة

void setup() {
  servoX.attach(3);  // توصيل السيرفو اكس بالدبوس 3
  servoY.attach(9);  // توصيل السيرفو واي بالدبوس 9
}

void loop() {
  joyX = analogRead(A0); // قراءة قيمة الجويستيك من المحور X
  joyY = analogRead(A5); // قراءة قيمة الجويستيك من المحور Y

  // حساب التغير في القيم (فرق الحركة)
  int deltaX = abs(joyX - prevX);  // فرق القيمة بين الحالية والسابقة X
  int deltaY = abs(joyY - prevY);  // فرق القيمة بين الحالية والسابقة Y

  // تحويل القيمة من 0-1023 الى 0-30 لتحديد السرعة المطلوبة لكل من x و y 
  speedX = map(deltaX , 0 , 1023 , 0 , 30);
  speedY = map(deltaY , 0 , 1023 , 0 , 30);

  // تحويل القيمة من 0-1023 إلى 0-180
  int targetPosX = map(joyX, 0, 1023, 0, 180);
  int targetPosY = map(joyY, 0, 1023, 0, 180);

  // الانتقال التدريجي نحو الموضع المطلوب
  if (posX < targetPosX) {
    posX++; // زيادة الموضع
  } else if (posX > targetPosX) {
    posX--; // تقليل الموضع
  }

  if (posY < targetPosY) {
    posY++; // زيادة الموضع
  } else if (posY > targetPosY) {
    posY--; // تقليل الموضع
  }

  // تعيين موضع السيرفو
  servoX.write(posX);
  servoY.write(posY);

  if(lastDeltaX != deltaX){
    lastDeltaX = deltaX;
    delay(speedX);
  }
  else if(lastDeltaY != deltaY){
    lastDeltaY = deltaY;
    delay(speedY); 
  }

}
 
  • خطوة 3: تحميل الكود على Arduino
  1. توصيل لوحة Arduino بالكمبيوتر: استخدم كابل USB لتوصيل لوحة Arduino بجهاز الكمبيوتر.
  2. فتح بيئة Arduino IDE: افتح بيئة البرمجة Arduino IDE، والصق الكود الموجود أعلاه.
  3. تحميل الكود: اضغط على زر "رفع" (Upload) لتحميل البرنامج إلى لوحة Arduino.

تحميل ملف المشروع

كيف تحمل الكود على Arduino وعلى TinkerCAD

  • على Arduino: اتبع التعليمات أعلاه لتوصيل اللوحة ورفع الكود باستخدام بيئة Arduino IDE.
  • على TinkerCAD:
    1. افتح موقع TinkerCAD وسجل دخولك.
    2. اختر "دوائر" (Circuits) من القائمة، ثم أنشئ مشروعًا جديدًا.
    3. قم بإضافة المكونات المطلوبة (Arduino، زر ضغط، LED) وأعد تكوين الدائرة كما هو موضح في الشرح.
    4. الصق الكود في محرر الكود الخاص بـ TinkerCAD، واضغط على "بدء المحاكاة" لرؤية النتائج.

هل لديك أسئلة؟

إذا كان لديك أي استفسار حول هذا المشروع أو أي من تفاصيله، يرجى زيارة الرابط لطرح أسئلتك. 

روابط حساباتنا

https://www.facebook.com/groups/arabicyoungtalentrobotics/ 

 https://www.youtube.com/@YoungTalentRobotics

حول المقالة

  • مبتدىء
×
فرصة لتطوير مهاراتك

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

تمكين الأطفال العرب في أوترخت عبر ورشة روبوتات مبت....
مبادرة الاستثمار في العقول الشابة تنظم ورشة روبوتا....

مدونات ذات صلة

 

تعليقات

لا تعليق على هذه المشاركة بعد. كن أول من يعلق.
مسجّل مسبقاً؟ تسجيل الدخول هنا
الخميس، 25 حزيران/يونيو 2026