الذراع الروبوتية ذات 6 دووف ذات التحكم بالبلوتوث: دليل البناء الكامل

جدول المحتويات

📋 ملخص سريع

قم ببناء ذراع آلية كاملة ذات 6 DOF مع التحكم في الهاتف الذكي عبر Bluetooth. يقوم هذا الدليل بترقية الذراع الآلية الأساسية المطبوعة ثلاثية الأبعاد باستخدام وحدة Bluetooth HC-05 وتطبيق MIT App Inventor المخصص، مما يتيح التحكم اللاسلكي في جميع مفاصل المؤازرة الستة. يغطي الأسلاك مع برنامج تشغيل مؤازر PCA9685، وبرمجة Arduino Mega، وإعداد التطبيق.

في هذا البرنامج التعليمي العملي، سوف تتعلم، خطوة بخطوة، كيفية بناء الذراع الروبوتية ذات 6 أبعاد مختلفة مع تحكم كامل بالهاتف الذكي بتقنية Bluetooth من الصفر. يأخذ هذا المشروع ذراع روبوتية يتم التحكم فيها بمقياس الجهد من تصميمنا السابق وترقيته باستخدام اتصال Bluetooth اللاسلكي. بدلاً من تشغيل المقابض المادية، يمكنك الآن التحكم في جميع المفاصل الستة مباشرة من تطبيق Android مخصص على هاتفك.

يجمع النظام بين الأجزاء الميكانيكية المطبوعة ثلاثية الأبعاد، وArduino Uno، ومحرك مؤازر PCA9685، ووحدة Bluetooth HC-05، وتطبيق MIT App Inventor المخصص. والنتيجة هي لاسلكية ذراع روبوتية يتم التحكم فيها بالبلوتوث الذي يحفظ ويعيد تشغيل وتكرار تسلسلات الحركة. تحصل على ذراع روبوتية قابلة للبرمجة يمكنك تشغيلها من أريكتك.

إذا كنت تحب بناء الأشياء وترغب في تعلم بعض الروبوتات على طول الطريق، فإن هذا الدليل يغطي العملية بأكملها: تصميم CAD، والطباعة ثلاثية الأبعاد، والتجميع، والأسلاك، ورمز Arduino، وإعداد Bluetooth، وتطوير التطبيقات. جميع التعليمات البرمجية المصدر وملفات STL والتطبيق متاحة للتنزيل على موقعنا مستودع GitHub. يمكنك أيضًا الحصول على ملفات STL من Cults3D أو من لدينا متجر أومارترونيكس.

ما الذي ستتعلمه في مشروع الذراع الروبوتية ذات 6 أبعاد

بحلول نهاية هذا البرنامج التعليمي، سيكون لديك خبرة عملية في العديد من مجالات الميكاترونكس والروبوتات. سوف تتعلم كيفية تصميم أجزاء الروبوت البارامترية في Autodesk Inventor ومكونات الطباعة ثلاثية الأبعاد بتفاوتات مشددة. ستقوم أيضًا بتوصيل Arduino إلى برنامج التشغيل المؤازر PCA9685 ووحدة Bluetooth HC-05، وكتابة التعليمات البرمجية لأوامر Bluetooth في الوقت الفعلي مع استيفاء مؤازر سلس، وإنشاء تطبيق Android عملي في MIT App Inventor، ومعايرة الذراع للحركة المتكررة.

ما هو الذراع الروبوتية 6-DOF؟

يعنيDOF درجات الحرية. فهو يحدد عدد المحاور المستقلة التي يمكن للروبوت أن يتحرك بها. في تصميمنا، ذراع روبوتية 6-DOF يحتوي على ستة مفاصل مدفوعة مؤازرة: خمسة محاور دورانية تتحكم في وضعية الذراع، بالإضافة إلى مفصل قابض واحد يفتح ويغلق المستجيب النهائي. المحاور الخمسة (دوران القاعدة، الكتف، الكوع، ميل المعصم، ولف المعصم) تعطي الذراع 5 موضع DOF، بينما يقوم المفصل السادس بتشغيل القابض للإمساك بالأشياء. تعمل ثلاث معززات عزم دوران عالية MG996R على تشغيل القاعدة والكتف والمرفق، بينما تتعامل ثلاث معززات صغيرة SG90 مع ميل المعصم ولف المعصم والمقبض. ونتيجة لذلك، يوفر هذا المزيج عزمًا كافيًا لمفاصل الرفع الثقيل ودقة كافية لحركات المؤثر النهائي الأخف.

للحصول على مقدمة أعمق لكيفية عمل المحركات المؤازرة وكيفية التحكم بها باستخدام Arduino، راجع موقعنا دليل التحكم في المحرك المؤازر.

الذراع الروبوتية ذات 6 أبعاد: نظرة عامة على المشروع وبنية النظام

في المجمل، ينقسم المشروع إلى خمس مراحل: التصميم الميكانيكي، والطباعة ثلاثية الأبعاد، والتجميع، وتوصيل الإلكترونيات باستخدام البلوتوث، وبرنامج لكل من Arduino وتطبيق الهاتف. في وسط النظام يوجد Arduino Uno. إنه يتحدث إلى برنامج التشغيل المؤازر PCA9685 عبر I2C لتوليد ست إشارات PWM مستقلة. وفي الوقت نفسه، يتلقى أوامر الحركة لاسلكيًا من هاتفك عبر وحدة البلوتوث HC-05.

على جانب الهاتف، يوفر لك MIT App Inventor أيضًا بيئة السحب والإفلات لإنشاء الواجهة. يرسل التطبيق أوامر نصية عبر البلوتوث: قيم شريط التمرير للتحكم المشترك في الوقت الفعلي، بالإضافة إلى أوامر لحفظ الأوضاع وتشغيل التسلسلات وإيقاف التشغيل وإعادة ضبط الذاكرة وتبديل وضع الحلقة. عندما يصل الأمر، يقوم Arduino بتوزيعه، وتعيينه إلى قناة المؤازرة الصحيحة، ثم تشغيل حركة محرفية سلسة حتى لا يهتز الذراع.

فاتورة المواد الكاملة للذراع الروبوتية ذات 6 أبعاد ذاتية الحركة

قبل البدء في البناء، قم بجمع كافة المكونات في الجدول أدناه. وبهذه الطريقة، يمكنك تجنب التوقفات المؤقتة المحبطة في منتصف البناء. بالإضافة إلى الأجزاء من البناء السابق الذي يتحكم فيه مقياس الجهد، تضيف ترقية Bluetooth هذه وحدة HC-05 وتزيل مقاييس الجهد الستة لأن التحكم يحدث الآن لاسلكيًا من التطبيق.

الذراع الروبوتية 6-DOF DIY: قائمة الأجزاء والمكونات

البندالكميةالجزءالوصف
11القاعدة_1منصة القاعدة
21الرابط_الأساسي_الأعلى1قسم القاعدة العلوي
31ذراع_لينك_1رابط الذراع الأول
41ذراع_رابط_2رابط الذراع الثاني
51ذراع_رابط_3رابط الذراع الثالث
61قاعدة_القابضقاعدة القابض
71القابض_2إصبع القابض
81جير_رايتترس القابض (يمين)
91ترس_يسارترس القابض (يسار)
101القابضتجميع القابض
114الرابطأجزاء وصلة القابض
122فاصلفواصل القابض
133محرك مؤازر MG996Rمضاعفات عزم الدوران العالي (القاعدة، الكتف، الكوع)
143محرك مؤازر صغير SG90أجهزة صغيرة (معصم، قابض)
1514معيار ANSI B18.6.4 رقم 2-32 3/8″برغي رأس الجمالون، رقم 2-32
162معيار ANSI B18.6.4 رقم 2-32 1/4 ″برغي رأس الجمالون، رقم 2-32
173معيار DIN 7985 M1.6×2-Zبرغي متقاطع M1.6×2
187ISO 4762 M3x16 (AS 1420) ISO 4762 M3x16 (AS 1420)برغي مقبس سداسي M3x16
1912ISO 4032 M3 (AS 1112)صامولة سداسية M3
202معيار ANSI B18.6.4 رقم 2-32 1/2 ″برغي رأس الجمالون، رقم 2-32
213بوق MG955بوق MG996R
223معيار DIN 7985 M3x6-Zبرغي متقاطع M3x6
233بوق مؤازر SG90بوق لـ SG90
242معيار ANSI B18.6.4 رقم 2-32 3/8″برغي رأس الجمالون، رقم 2-32
2512معيار ANSI B18.6.4 رقم 3-28 1/2″برغي رأس الجمالون، رقم 3-28
261المحمل الكروي 6806ZZZ (30 × 42 × 7)محمل الأخدود العميق (30x42x7)
271أردوينو أونو أو ميجاوحدة التحكم الرئيسية
281لوحة تشغيل المؤازر PCA9685مشغل PWM ذو 16 قناة (I2C)
296وحدة البلوتوث HC-05وحدة بلوتوث للتحكم اللاسلكي
301اللوحقاعدة الأسلاك للاتصالات
311مصدر طاقة 5 فولت 10 أمبيرمصدر طاقة سيرفو
321أسلاك التوصيل (ذكر-ذكر)اتصالات اردوينو إلى PCA9685
331أسلاك التوصيل (ذكر-أنثى)توصيلات الأسلاك العامة
341لوح خشبيمنصة تركيب الذراع

التصميم الميكانيكي للذراع الروبوتية ذات 6 دووف في Autodesk Inventor

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

هناك نوعان من المؤازرة يقودان خيارات التصميم هنا. يبلغ حجم أجهزة SG90 الصغيرة 23 × 12 × 29 مم، مما يجعلها مناسبة تمامًا لمفاصل المعصم والمقابض الأخف وزنًا. على النقيض من ذلك، توفر الماكينات MG996R ما يصل إلى 11 كجم سم من عزم الدوران مع التروس المعدنية. ولهذا السبب، فهي الاختيار الصحيح للقاعدة والكتف والمرفق، حيث أن هذه المفاصل تحمل وزن الذراع بالكامل. ونتيجة لذلك، فإن كل جيب تثبيت، ونقطة ربط بوق، ومقعد محمل يتطابق مع أبعاد ورقة البيانات الدقيقة لهذين النوعين من المؤازرة.

يظهر الرسم الفني أدناه أبعاد الأجزاء وطرق العرض المقطعية وكيفية تناسب الأجزاء معًا. استخدمه كمرجع عند التحقق من دقة الطباعة.

Technical drawing of a DIY 6-DOF robotic arm showing all mechanical parts, servos, and assembly dimensions.

الطباعة ثلاثية الأبعاد لمكونات الذراع الروبوتية ذات 6 دووف DIY

بعد تصدير ملفات STL من Inventor، حان الوقت لبدء الطباعة. تعمل خيوط PLA بشكل جيد لأنها تطبع بسهولة وتحمل أبعادًا ضيقة. بالنسبة للأجزاء الهيكلية مثل وصلات القاعدة والذراع، استخدم طبقة بارتفاع 0.2 مم وحشو بنسبة 40 بالمائة على الأقل. ومع ذلك، بالنسبة للأجزاء الرقيقة مثل التروس ذات المقبض، فإن نسبة 20 بالمائة من الحشو كافية وتوفر المواد.

انتبه جيدًا لجيوب التثبيت المؤازرة. يجب أن تكون دقيقة حتى يتم ضغط المحركات بشكل مريح دون تمايل. بعد الطباعة، قم بإجراء بعض التنظيف الخفيف: قم بإزالة الدعامات، وأسطح التزاوج الرملية بحبيبات رملية 220، واختبر كل جهاز مؤازر قبل الانتقال إلى التجميع. إذا كان الجيب ضيقًا جدًا، فإن التمرير السريع بسكين هواية أو مبرد إبرة يكون أسرع من إعادة الطباعة.

Ultimaker Cura slicer interface showing 3D-printed robotic arm components arranged on the build plate for slicing.
Anycubic 3D printer actively printing PLA components for the DIY 6-DOF robotic arm.

اختيار المحرك المؤازر: SG90 مقابل MG996R للذراع الروبوتية ذات 6 أبعاد ذاتية الصنع

اختيار المؤازرة المناسبة لكل أمر مشترك. تحمل المفاصل السفلية الثلاثة (القاعدة، الكتف، الكوع) الوزن الكامل لكل شيء فوقها، لذا فهي تحتاج إلى MG996R وعزم دورانها البالغ 11 كجم-سم. من ناحية أخرى، فإن المفاصل العلوية الثلاثة (ميل المعصم، ولف المعصم، والقابض) تحمل حمولة قليلة جدًا. لذا فإن وزن SG90 خفيف الوزن الذي يبلغ 1.8 كجم سم أكثر من كافي، ويحافظ على ضوء نهاية الذراع.

يقبل كلا النوعين المؤازرين PWM القياسي 50 هرتز، لذا يتم توصيلهما مباشرة بموصلات PCA9685. ومع ذلك، فإن الاختلاف الرئيسي بين الأسلاك هو التيار: يمكن لـ MG996R واحد سحب ما يصل إلى 900 مللي أمبير تحت الحمل، بينما يسحب SG90 حوالي 200 مللي أمبير. مع تشغيل ستة أجهزة مؤازرة في وقت واحد، يمكن أن يتجاوز التيار الأقصى 3 أ. ولهذا السبب، تحتاج إلى مصدر طاقة خارجي 5 فولت 10 أمبير. لا تحاول تشغيل ستة أجهزة من طرف Arduino ذو 5 فولت.

تجميع ذراعك الروبوتية ذات 6 دووف خطوة بخطوة

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

All 3D-printed parts, servo motors, bearings, screws, and hardware components for the 6-DOF robotic arm laid out on a cutting mat before assembly.

الخطوة 1: تجميع قاعدة الذراع الروبوتية ذات 6 أبعاد ذاتية الحركة

القاعدة هي أساس الذراع بالكامل، لذا فالدقة هنا مهمة. ابدأ بتثبيت أول جهاز مؤازر MG996R في قاعدة التثبيت باستخدام البراغي المضمنة. يمنحك هذا المؤازرة 180 درجة كاملة من الدوران الأساسي. ثم اضغط على محمل الكرة ذو الأخدود العميق (6806ZZ، 30 × 42 × 7 مم) في مقعده على القاعدة. بعد ذلك، يقع المحمل بين لوحة القاعدة الثابتة والمنصة العلوية الدوارة. ونتيجة لذلك، فإنه يقلل الاحتكاك ويطيل عمر المفصل. بعد ذلك، قم بتوصيل البوق المؤازر بالمنصة العلوية الدوارة باستخدام براغي M2x12. ينقل هذا البوق كل قوة الدوران من المؤازرة الأساسية إلى بقية الذراع.

Installing an MG996R servo motor into the 3D-printed base mount of the robotic arm.
Press-fitting a deep-groove ball bearing into the 3D-printed base of the robotic arm for smooth rotation.
Attaching the servo horn to the rotating upper platform of the robotic arm base using self-tapping screws.

الخطوة 2: تركيب أبواق المؤازرة على وصلات ذراع الروبوت

بعد ذلك، قم بمحاذاة كل بوق مؤازر مع نقطة ربط وصلة الذراع الخاصة به. ثم قم بتثبيته بمسامير لكل قرن. إذا لم تصطف الثقوب، فسوف يلتصق البوق ويسبب حركة غير متساوية. تحقق مرة أخرى من كل اتصال قبل تشديده بالكامل.

Three-panel view showing servo horns being aligned and mounted to the 3D-printed arm link sections.

الخطوة 3: تركيب المحركات المؤازرة على وصلات الذراع

ثم ضع كل محرك مؤازر في جيبه المطبوع ثلاثي الأبعاد على رابط الذراع. تأكد أيضًا من صحة الاتجاه. اربطه ببرغيين لكل محرك واختبر الثبات بالضغط بلطف. لا ينبغي أن يتحول المؤازرة أو يتأرجح. إن حامل المحرك الصلب هو ما يمنحك حركات دقيقة ومتكررة.

Multi-panel view of MG996R servo motors being mounted into the 3D-printed arm link brackets with screws.

الخطوة 4: توصيل وصلات ذراع الروبوت معاً

انضم الآن إلى مجموعات الارتباط والمؤازرة معًا. ضع البوق على إحدى الوصلات بحيث يتم إدخاله في الرابط التالي، ثم ثبته بالمسامير. شد بشكل متساوٍ بحيث تتحرك المفاصل بسلاسة عبر النطاق الكامل.

Three-panel view showing the arm link sections being connected together with servo horns and screws to form the articulated robotic arm.

الخطوة 5: تجميع القابض

قم بتوصيل المجموعة الفرعية للمقبض بالوصلة النهائية للذراع. يستخدم القابض أجهزة SG90 صغيرة مع زوج من التروس المطبوعة ثلاثية الأبعاد لفتح وإغلاق الأصابع. استخدم مسامير M3x20 لمفاصل القابض. قبل المضي قدمًا، تأكد أيضًا من أن الأصابع تفتح وتغلق بحرية.

Assembling the gripper mechanism with an SG90 micro servo and 3D-printed gear-driven fingers at the end of the robotic arm.

الخطوة 6: تركيب الذراع الروبوتية ذات 6 دووف على قاعدة خشبية

أخيرًا، قم بتركيب الذراع المجمع بالكامل على لوح خشبي مسطح باستخدام براغي M3x12 ذاتية اللولبة. تمنع القاعدة الصلبة الذراع من الانقلاب وتمنحك أيضًا مكانًا لتركيب لوحة التجارب والأردوينو ومصدر الطاقة.

Fully assembled 6-DOF robotic arm mounted on a wooden base board for stability during operation.

الأسلاك الإلكترونية للذراع الروبوتية ذات 6 دووف ذات 6 أبعاد مع بلوتوث

الآن بعد أن تم البناء الميكانيكي، فقد حان الوقت لتوصيل الأجهزة الإلكترونية. يضيف هذا الإصدار وحدة HC-05 ويزيل أيضًا مقاييس الجهد الستة من التصميم الأصلي. يتكون نظام التحكم من أربعة أجزاء: Arduino Uno، وPCA9685 لتوليد PWM، وHC-05 للاتصالات اللاسلكية، ومصدر طاقة 5 فولت 10 أمبير للماكينات.

جدول توصيلات الأسلاك: اردوينو إلى PCA9685

دبوس الأردوينودبوس PCA9685وظيفة
5 VVCCالطاقة المنطقية لشريحة PCA9685
GNDGNDأرضية مشتركة
A4 (SDA)SDAخط بيانات I2C
A5 (SCL)SCLخط الساعة I2C

جدول توصيلات الأسلاك: اردوينو إلى وحدة البلوتوث HC-05

دبوس الأردوينودبوس HC-05وظيفة
الدبوس 10 (برنامجSerial RX)TXيستقبل البيانات من البلوتوث
الدبوس 11 (TXSerial SoftwareSerial)RX (عبر مقسم الجهد)يرسل البيانات إلى البلوتوث
5 VVCCيعمل على تشغيل وحدة HC-05
GNDGNDأرضية مشتركة

توصيلات طاقة المؤازر وتوصيلات PCA9685

بعد ذلك، قم بتوصيل قابس ثلاثي الأطراف لكل جهاز مؤازر بالقنوات من 0 إلى 5 على لوحة PCA9685. تأكد من أن السلك الأرضي (البني أو الأسود) يتماشى مع الصف السفلي من الرؤوس. بعد ذلك، قم بتوصيل مصدر الطاقة 5 فولت 10 أمبير بأطراف التوصيل اللولبية V+ وGND الخاصة بـ PCA9685. بهذه الطريقة، تظل الأحمال المؤازرة ذات التيار العالي منفصلة عن Arduino، مما يمنع انقطاع التيار الكهربائي والسلوك غير المنتظم.

Fritzing wiring diagram showing Arduino Uno connections to PCA9685 servo driver, HC-05 Bluetooth module, six servo motors, and external power supply.

فهم برنامج تشغيل المؤازر PCA9685 للذراع الروبوتية ذات 6 أبعاد ذاتي

لماذا لا تقوم فقط بقيادة الماكينات مباشرة من Arduino؟ يمكنك قيادة واحدة أو اثنتين بهذه الطريقة، لكن الأمر يقتصر على ستة. علاوة على ذلك، يحتوي Arduino Uno على ستة أطراف PWM فقط، ويمكن أن تتعارض مكتبة Servo المدمجة مع ميزات المؤقت مثل النغمة () أو بعض بروتوكولات الاتصال. يحل PCA9685 هذه المشكلة عن طريق نقل كل جيل PWM إلى شريحة I2C مخصصة. يستخدم سلكين فقط (SDA وSCL) بغض النظر عن عدد الماكينات التي تتحكم فيها. إنه يتعامل مع 16 قناة لكل لوحة، ويمكنك ربط ما يصل إلى 62 لوحة بسلسلة تعاقبية مقابل 992 خدمة إذا كنت بحاجة إلى هذا العدد الكبير.

مرجع Pinout Pinout PCA9685

أولاً، GND هي الأرضية المشتركة مع Arduino. OE (تمكين الإخراج) نشط منخفض. اتركه غير متصل للحفاظ على جميع المخرجات قيد التشغيل بشكل افتراضي. إذن، SCL وSDA هما ساعة I2C وخطوط البيانات. بالإضافة إلى ذلك، يوفر VCC طاقة منطقية تبلغ 3.3 إلى 5 فولت ويعمل فقط على تشغيل شريحة PCA9685، وليس الماكينات. أخيرًا، V+ هو خط الطاقة المؤازر. يقبل ما يصل إلى 6 فولت من مصدر الإمداد الخارجي الخاص بك من خلال الطرف اللولبي. تحتوي كل قناة على رأس ثلاثي الأطراف يستخدم موصل مؤازر قياسي.

PCA9685 16-channel PWM servo driver board pinout diagram showing I2C, power, and servo output connections.

اتصال البلوتوث مع الوحدة النمطية HC-05

HC-05 عبارة عن وحدة بلوتوث تقوم بإنشاء رابط تسلسلي لاسلكي بين هاتف Android الخاص بك وArduino. نظرًا لأنه يعمل بمنطق 3.3 فولت، فإن خط TX من Arduino (5 فولت) إلى طرف HC-05 RX يحتاج إلى مقسم جهد بمقاومتين (1 كيلو أوم و 2 كيلو أوم). ومع ذلك، فإن خط HC-05 TX إلى Arduino RX لا يحتاج إلى مقسم لأن 3.3 فولت مرتفع بالفعل بما يكفي ليقرأه Arduino على أنه منطق عالي.

في الكود، نستخدم SoftwareSerial على الأطراف 10 و11 بدلاً من الأطراف التسلسلية للأجهزة (0 و1). يؤدي هذا إلى الحفاظ على تسلسل الأجهزة مجانًا لتصحيح الأخطاء باستخدام الشاشة التسلسلية أثناء تشغيل Bluetooth على قناتها الخاصة. الافتراضي HC-05 هو 9600 باود، والذي يطابق إعداد SoftwareSerial في الكود الخاص بنا. للحصول على دليل كامل حول إعداد HC-05 وأوامر AT، راجع موقعنا البرنامج التعليمي لوحدة البلوتوث HC-05.

برمجة Arduino للذراع الروبوتية ذات 6 دووف مع البلوتوث

رسم اردوينو هو العقل وراء هذا الذراع الروبوتية ذات 6 أبعاد مختلفة. فهو يتعامل مع اتصال Bluetooth، وتحليل الأوامر، والتحكم المؤازر من خلال الاستيفاء السلس، وكذلك حفظ الوضعيات وتشغيل التسلسل. وفيما يلي كود المصدر الكامل. بعد الكود ستجد شرح قسم بقسم.

كود مصدر Arduino الكامل لذراع البلوتوث الآلي

قم بتحميل هذا المخطط إلى Arduino Uno أو Mega. قبل الترجمة، تأكد من تثبيت مكتبة برنامج تشغيل Adafruit PWM Servo من خلال Arduino Library Manager. يأتي Wire وSoftwareSerial بالفعل مع IDE. الكود وجميع ملفات المشروع متاحة أيضًا على مستودع GitHub.

رسم أردوينو تخطيطي كامل

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
#include <SoftwareSerial.h>
// Constants and definitions
const int numServos = 6; 
const int maxConfigurations = 10; 
const int stepDelay = 10; 
const int stepSize = 1; 
// Servo channels on the PCA9685
const int servoChannels[numServos] = {0, 4, 8, 9, 12, 13};
// Storage structures
int savedConfigurations[maxConfigurations][numServos];
int currentServoPositions[numServos] = {375, 375, 375, 375, 375, 375}; 
int configCount = 0; 
bool isPlaying = false; 
bool loopPlayback = false; 
bool stopPlaying = false; 
int currentPoseIndex = 0; 
bool initialized = false; 
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
SoftwareSerial BTSerial(10, 11); 
// Setup initialization
void setup() {
  Serial.begin(9600);         
  BTSerial.begin(9600);       
  pwm.begin();
  pwm.setPWMFreq(60);         
  
  for (int i = 0; i < numServos; i++) {
    pwm.setPWM(servoChannels[i], 0, currentServoPositions[i]);
  }
  initialized = true; 
  Serial.println("Bluetooth Servo Controller started. Waiting for commands...");
}
// Main loop
void loop() {
  if (BTSerial.available()) {
    String input = BTSerial.readStringUntil('n'); 
    input.trim(); 
    
    Serial.println("Received data: " + input);
    if (input.equalsIgnoreCase("S")) {
      saveCurrentPose();
    } else if (input.equalsIgnoreCase("P")) {
      startPlayingPoses();
    } else if (input.equalsIgnoreCase("R")) {
      resetPoses();
    } else if (input.equalsIgnoreCase("St")) {
      stopPlayingPoses();
    } else if (input.equalsIgnoreCase("LoopON")) { 
      loopPlayback = true;
      Serial.println("Loop playback enabled.");
    } else if (input.equalsIgnoreCase("LoopOFF")) { 
      loopPlayback = false;
      Serial.println("Loop playback disabled.");
    } else if (input.indexOf(',') > 0) {
      processLastValue(input);
    } else {
      Serial.println("Unknown command: " + input);
    }
  }
  if (isPlaying && !stopPlaying) {
    if (loopPlayback) {
      playPosesInLoop();
    } else {
      playNextPose();
    }
  }
}

وظائف التحكم المؤازر ومعالجة الأوامر

// Process servo commands
void processLastValue(String command) {
    int lastCommaIndex = command.lastIndexOf(',');
    if (lastCommaIndex > 0 && lastCommaIndex < command.length() - 1) {
        int servoIndex = command.substring(0, lastCommaIndex).toInt() - 1;
        float lastValue = command.substring(lastCommaIndex + 1).toFloat();
        
        int targetPos = (int)lastValue;
        
        int targetPwmValue = map(targetPos, 0, 180, 150, 600);
        
        moveToPositionSmoothly(servoIndex, targetPwmValue);
    } else {
        Serial.println("Invalid command for servo control: " + command);
    }
}

// Smooth movement function
void moveToPositionSmoothly(int servoIndex, int targetPwmValue) {
    int currentPwmValue = currentServoPositions[servoIndex];
    if (targetPwmValue > currentPwmValue) {
        for (int pos = currentPwmValue; pos <= targetPwmValue; pos += stepSize) {
            pwm.setPWM(servoChannels[servoIndex], 0, pos);
            delay(stepDelay);
        }
    } else {
        for (int pos = currentPwmValue; pos >= targetPwmValue; pos -= stepSize) {
            pwm.setPWM(servoChannels[servoIndex], 0, pos);
            delay(stepDelay);
        }
    }
    currentServoPositions[servoIndex] = targetPwmValue;
    Serial.println("Servo " + String(servoIndex + 1) + " set to PWM value: " + String(targetPwmValue));
}

وظائف حفظ الوضعية والتشغيل وإعادة الضبط

// Save pose function
void saveCurrentPose() {
    if (configCount < maxConfigurations) {
        for (int i = 0; i < numServos; i++) {
            savedConfigurations[configCount][i] = currentServoPositions[i];
            Serial.print("Servo "); Serial.print(i + 1);
            Serial.print(" saved at PWM value: ");
            Serial.println(savedConfigurations[configCount][i]);
        }
        configCount++;
        Serial.println("Pose saved. Total saved poses: " + String(configCount));
    } else {
        Serial.println("Memory full, cannot save more poses.");
    }
}

// Start playback
void startPlayingPoses() {
    if (configCount == 0) {
        Serial.println("No poses saved, nothing to play.");
        return;
    }
    Serial.println("Playback of saved poses started...");
    isPlaying = true;
    stopPlaying = false;
    currentPoseIndex = 0;
}

// Play next pose
void playNextPose() {
    if (currentPoseIndex < configCount) {
        Serial.println("Playing pose " + String(currentPoseIndex + 1));
        for (int i = 0; i < numServos; i++) {
            moveToPositionSmoothly(i, savedConfigurations[currentPoseIndex][i]);
        }
        delay(1000); 
        currentPoseIndex++;
    } else {
        isPlaying = false;
        Serial.println("Playback of poses finished.");
    }
}

// Loop playback
void playPosesInLoop() {
    for (int j = 0; j < configCount; j++) {
        Serial.println("Playing pose " + String(j + 1));
        for (int i = 0; i < numServos; i++) {
            moveToPositionSmoothly(i, savedConfigurations[j][i]);
        }
        delay(1000); 
        if (stopPlaying) break;
    }
}

// Stop playback
void stopPlayingPoses() {
    stopPlaying = true;
    isPlaying = false;
    Serial.println("Playback of poses stopped.");
}

// Reset all poses
void resetPoses() {
    configCount = 0;
    isPlaying = false;
    loopPlayback = false;
    currentPoseIndex = 0;
    Serial.println("All saved poses have been deleted.");
}

المكتبات المطلوبة وتعليمات التحميل

قبل التجميع، قم بتثبيت المكتبات التالية من خلال مدير مكتبة Arduino IDE: مكتبة برامج تشغيل المؤازرة PWM من Adafruit, الأسلاك (مضمنة افتراضيًا)، و برمجيات متسلسل (مضمن افتراضيًا). حدد لوحتك (Arduino Uno أو Mega)، واختر منفذ COM الصحيح، وانقر فوق تحميل.

كيف يعمل كود الأردوينو: تفصيل كل قسم على حدة

ينقسم الكود إلى أقسام محددة بوضوح. أولاً، يقوم قسم المكتبة بسحب Wire.h لـ I2C، وAdafruit_PWMServoDriver.h لـ PCA9685، وSoftwareSerial.h لـ Bluetooth على الأطراف 10 و11. بعد ذلك، تحدد الثوابت أشياء مثل عدد الماكينات (6)، والحد الأقصى للوضعيات القابلة للتخزين (10)، وتأخير الخطوة (15 مللي ثانية)، وحجم الخطوة (علامة PWM واحدة لكل خطوة).

بعد ذلك، تقوم وظيفة setup() بتشغيل كلا المنفذين التسلسليين عند 9600 باود، وتشغيل PCA9685 عند 60 هرتز، وتنقل جميع الماكينات إلى نقطة المنتصف (PWM 375) حتى لا يقفز أي شيء عند بدء التشغيل. وفي الوقت نفسه، تستمر الحلقة الرئيسية () في التحقق من بيانات البلوتوث الواردة وترسل كل أمر إلى المعالج الصحيح.

في المجمل، يتعرف محلل الأوامر على سبعة أوامر. يحفظ "S" أوضاع المؤازرة الحالية كوضع جديد، بينما يقوم "P" بتشغيل جميع الأوضاع المحفوظة بالترتيب. يقوم "R" بإعادة ضبط وحذف الأوضاع المحفوظة. يوقف "St" التشغيل، ويقوم "LoopON" و"LoopOFF" بتبديل التشغيل المتكرر. يتم التعامل مع أي أمر بفاصلة كموضع مؤازر بتنسيق "servoIndex,angle" حيث تتراوح الزاوية من 0 إلى 180.

الدالة moveToPositionSmoothly() هي ما يمنع الذراع من الاهتزاز. بدلاً من القفز مباشرة إلى قيمة PWM المستهدفة، فإنه ينتقل إلى هناك تدريجيًا، خطوة واحدة في كل مرة، مع خطوة تأخير بين كل خطوة. ونتيجة لذلك، تحصل على حركة سلسة للمفاصل بدلاً من الطقات المفاجئة التي قد تلحق الضرر بالتروس أو تقلب الذراع.

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

من ناحية التطبيق، يعد RobotArmControl تطبيق Android مدمجًا في MIT App Inventor. فهو يوفر واجهة لمس بديهية للتحكم في جميع المفاصل الستة للوحدة الذراع الروبوتية ذات 6 أبعاد مختلفة لاسلكيا عبر البلوتوث. بالإضافة إلى ذلك، يحتوي التطبيق على ستة أشرطة تمرير (واحدة لكل مؤازرة)، وأزرار لحفظ الوضعيات وتشغيلها وإيقافها وإعادة ضبطها، ومفتاح تبديل لتشغيل الحلقة.

الميزات الرئيسية لتطبيق الذراع الروبوتية ذات 6 دووف DIY

للتحكم في الوقت الفعلي، يستخدم التطبيق ستة أشرطة تمرير تم تعيينها للمفاصل من 0 إلى 5. عندما تقوم بتحريك شريط التمرير، فإنه يرسل أمرًا مثل "2,90" يخبر Arduino بتحريك المؤازرة 2 إلى 90 درجة. على سبيل المثال، يرسل زر "حفظ" الحرف "S" لتخزين موضع الذراع الحالي. وبالمثل، يرسل Play "P" لإعادة تشغيل جميع الأوضاع المحفوظة. بعد ذلك، يرسل Stop "St" لإيقاف التشغيل. أخيرًا، ترسل عملية إعادة الضبط "R" لمسح جميع الأوضاع المخزنة. يرسل مفتاح Loop "LoopON" أو "LoopOFF" للتشغيل المستمر.

Android smartphone screenshot of the RobotArmControl app showing six servo sliders, Bluetooth connection button, and Save/Play/Reset/Stop controls.

كتل مخترع تطبيقات معهد ماساتشوستس للتكنولوجيا: شرح خطوة بخطوة

يستخدم منطق التطبيق مع الكتل المرئية في MIT App Inventor. أولاً، تقوم كتلة التهيئة العامة بإنشاء متغير يسمى ReceiveText (تم ضبطه على 0) الذي يقوم بتخزين البيانات الواردة من Arduino. بعد ذلك، تقوم كتلة ListPicker BeforePicking بملء قائمة أجهزة Bluetooth حتى تتمكن من اختيار HC-05. بمجرد تحديد جهاز، تفتح كتلة AfterPicking اتصال Bluetooth التسلسلي.

تقوم كتلة PositionChanged الخاصة بكل شريط تمرير بتنسيق فهرس المؤازرة والزاوية في سلسلة مثل "2،90" وإرسالها باستخدام BluetoothClient.SendText. بنفس الطريقة، ترسل أزرار الحفظ والتشغيل والإيقاف وإعادة الضبط أوامرها المكونة من حرف واحد. أخيرًا، تتحقق الكتلة LoopSwitch.Changed من حالة التبديل وترسل "LoopON" أو "LoopOFF" وفقًا لذلك.

MIT App Inventor blocks for Bluetooth initialization, ListPicker, and LoopSwitch event handlers in the robotic arm control app.
MIT App Inventor blocks for the six servo slider PositionChanged event handlers sending angle data via Bluetooth.
MIT App Inventor blocks for Stop and Save button click handlers sending commands to Arduino via Bluetooth.
MIT App Inventor blocks for Play button click handler sending the playback command to the robotic arm via Bluetooth.

معايرة واختبار ذراعك الروبوتية ذات 6 أبعاد ذاتية الصنع واختبارها

بمجرد تجميع الأجهزة، وتحميل التعليمات البرمجية، وتثبيت التطبيق، فإن الخطوة الأخيرة هي المعايرة. ابدأ بتثبيت APK RobotArmControl على جهاز Android الخاص بك. بعد ذلك، انتقل إلى إعدادات Bluetooth بهاتفك وقم بالاقتران مع HC-05 باستخدام رقم التعريف الشخصي الافتراضي 1234. ثم افتح التطبيق، وانقر فوق منتقي قائمة Bluetooth، واختر HC-05 من الأجهزة المقترنة.

بمجرد الاتصال، حرك كل شريط تمرير ببطء للتأكد من استجابة المفصل الأيمن. إذا تحرك المفصل بطريقة خاطئة، فقم إما بتبديل القيم الدنيا والقصوى لشريط التمرير في App Inventor، أو اقلب نطاق Map() في كود Arduino. بعد ذلك، يجب عليك ضبط نطاق PWM (من 150 إلى 600 في الكود) لكل جهاز. تحتاج بعض الماكينات إلى قيم دقيقة وأقصى مختلفة قليلاً لتجنب الطنين عند التوقفات النهائية. قم أيضًا باختبار الذراع تحت الحمل عن طريق التقاط الأشياء الصغيرة باستخدام المقبض. وهذا يؤكد أن كل مفصل لديه ما يكفي من عزم الدوران.

لاختبار نظام الوضعية، حرك الذراع إلى موضع ما ثم اضغط على حفظ. افعل ذلك لعدة مناصب. ثم اضغط على تشغيل لمشاهدة الذراع يعيد تشغيل التسلسل بأكمله. قم أيضًا بتشغيل وضع Loop وتأكد من أن الذراع يستمر في الدوران خلال جميع الأوضاع حتى تضغط على Stop.

التحسينات المستقبلية للذراع الروبوتية ذات 6 أبعاد ذاتية الحركة

من هنا، تعتبر هذه الذراع الآلية التي يتم التحكم فيها عن طريق البلوتوث نقطة انطلاق جيدة للترقيات. على سبيل المثال، يمكنك إضافة حركيات عكسية بحيث يتحرك الذراع إلى إحداثيات X-Y-Z بدلاً من زوايا المفصل الفردية. وبدلاً من ذلك، فإن إضافة الجيروسكوب أو مقياس التسارع سيتيح لك التحكم في الذراع من خلال إمالة الهاتف. أو يمكنك استبدال HC-05 بـ ESP32 للتحكم في Wi-Fi من خلال لوحة معلومات الويب أو تكامل التشغيل الآلي للمنزل.

من ناحية البرنامج، يمكنك أيضًا نقل تخزين الوضع إلى EEPROM بحيث تظل التسلسلات المحفوظة على قيد الحياة خلال دورة الطاقة. بالإضافة إلى ذلك، يمكنك إضافة سرعة متغيرة لكل مفصل، أو إنشاء وضع التعليم والتشغيل حيث تقوم بتحريك الذراع فعليًا ويسجل المواضع. إن القيام بذلك من شأنه أن يجعل المشروع أقرب إلى كيفية عمل الروبوتات الصناعية. للمزيد من أفكار المشاريع، قم بزيارة موقعنا مشروع ذراع الروبوت المتحرك (OmObiArm) التي تجمع بين هذا الذراع وقاعدة مركبة جوالة متحركة.

تنزيل ملفات مشروع الذراع الروبوتية ذات 6 دووف DIY

كما ذكرنا سابقًا، جميع ملفات المشروع موجودة في مستودع GitHub الخاص بنا. يتضمن التنزيل مخطط Arduino (.ino)، وجميع ملفات STL، ومخطط الأسلاك، وملف مشروع MIT App Inventor (.aia) بالإضافة إلى ملف APK المجمع. ملفات STL متاحة أيضًا على Cults3D وفي لدينا متجر أومارترونيكس.

قم بتنزيل كود Arduino البرمجي وملفات STL ومخطط الأسلاك وتطبيق الهاتف المحمول من GitHub

الأسئلة الشائعة (FAQ)

فيما يلي إجابات للأسئلة الأكثر شيوعًا حول إنشاء هذا الذراع الآلي DIY 6-DOF واستكشاف الأخطاء وإصلاحها مع التحكم عبر Bluetooth.

أسئلة شائعة حول الذراع الروبوتية DIY 6-DOF

6-DOF تعني ست درجات من الحرية: خمس مفاصل دورانية لتحديد المواقع بالإضافة إلى مفصل قابض واحد.

نعم. نعم الميجا يستخدم نفس الكود والفرق الوحيد هو أن أطراف I2C هي 20 (SDA) و21 (SCL) بدلاً من A4 وA5.

يعني الارتعاش عادةً أن قيمة PWM تصل إلى نقطة توقف المؤازرة. اضبط نطاق الخريطة () وتحقق من تيار مصدر الطاقة لديك.

يستخدم HC-05 تقنية Bluetooth الكلاسيكية، والتي لا يدعمها iOS. لاستخدام iPhone، استبدل HC-05 بوحدة HM-10 (BLE) وأعد إنشاء التطبيق على منصة BLE.

استخدم PLA بارتفاع طبقة 0.2 مم وحشو 40% للأجزاء الهيكلية. يمكن استخدام التروس القابض بنسبة 20%. قم بتسوية سريرك وأضف حافة للأجزاء ذات مناطق الاتصال الصغيرة.

يخزن الكود ما يصل إلى 10 أوضاع في ذاكرة الوصول العشوائي بشكل افتراضي. يمكنك زيادة الحد الأقصى للتكوينات، لكن Uno يحتوي فقط على 2 كيلو بايت من ذاكرة SRAM. للتخزين المستمر، احفظه في EEPROM.

يعمل HC-05 بمنطق 3.3 فولت. يرسل Arduino 5 فولت، مما قد يؤدي إلى تلف دبوس HC-05 RX. يقوم مقسم الجهد بمقاومات 1k و 2k بإسقاط الإشارة إلى حوالي 3.3 فولت.

نعم. نعم، يحتوي PCA9685 على 16 قناة، لذا يمكنك إضافة ما يصل إلى 10 أجهزة إضافية. ما عليك سوى تحديث numServos وservoChannels في الكود.

مع ملفات STL القياسية، يصل الذراع إلى حوالي 40 سم من القاعدة عند تمديده بالكامل. يمكنك زيادة مدى الوصول عن طريق إطالة الروابط في نموذج CAD.

تحقق من مؤشر LED HC-05 (وميض سريع = غير مقترن). تحقق من معدل الباود (9600) وأسلاك TX/RX. إذا لم يتمكن التطبيق من العثور على الوحدة، فأعد الإقران في إعدادات Bluetooth.

الذراع الروبوتية ذات 6 دووف DIY: الخاتمة والمشاريع التالية

تهانينا! لديك الآن وظيفية بكامل طاقتها الذراع الروبوتية ذات 6 أبعاد مختلفة مع التحكم اللاسلكي بالهاتف الذكي عبر البلوتوث. على طول الطريق، يتطرق هذا المشروع إلى المجالات الرئيسية للميكاترونكس: تصميم CAD في Inventor، والطباعة ثلاثية الأبعاد، وتصميم الدوائر باستخدام I2C وBluetooth التسلسلي، وبرمجة Arduino، وتطوير تطبيقات الهاتف المحمول مع MIT App Inventor.

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

من أين تأخذها من هنا متروك لك. يمكنك إضافة رؤية حاسوبية باستخدام وحدة كاميرا، أو تنفيذ حركيات عكسية للتحكم الديكارتي، أو تركيب الذراع على مركبة متنقلة، أو توصيله بجهاز Raspberry Pi للتعلم الآلي. مهما كان الاتجاه الذي تسلكه، فإن هذه المنصة ذات المحاور الستة تمنحك أساسًا متينًا لاستكشاف أعمق في مجال الروبوتات والأتمتة.

إذا استمتعت بهذا الإصدار، فاطلع على دروسنا التعليمية الأخرى في مجال الروبوتات: الروبوت الذي يتبع الخطفإن وحدة تحكم بعصا تحكم بمحرك مؤازرو ذراع الروبوت المتنقل OmObiArm.

تنزيل ملفات الطباعة ثلاثية الأبعاد (STL)

جميع ملفات STL القابلة للطباعة ثلاثية الأبعاد لهذا المشروع متاحة للتنزيل. يمكنك الحصول عليها من متجرنا أو تصفحها على Cults3D:

  • متجر OmArTronics: قم بتنزيل ملفات المشروع من OmArTronics - احصل على حزمة المشروع الكاملة بما في ذلك ملفات STL ومخططات الأسلاك وكود المصدر التي يتم تسليمها إلى بريدك الإلكتروني.
  • الطوائف3D: عرض على Cults3D - تصفح وتنزيل ملفات النماذج ثلاثية الأبعاد على Cults3D.

14 رأي حول “DIY 6-DOF Robotic Arm with Bluetooth Control: Complete Build Guide”

  1. مرحباً بكم,
    هل يمكن أن تخبرني أين هي قائمة الأجزاء، لأتمكن من شراء الأجزاء، لديّ قطع الغيار الخاصة بك&8217;s إلى الطوائف
    شكراً لك
    أنطونيو مايور
    أعيش بالقرب من برشلونة

    رد
  2. مرحبًا، مشروع مثير للاهتمام أيضًا مع مراهق. فيما يتعلق بالمؤازرة MG996R، فهي موجودة في تكوينين: إما 180 درجة أو 360 درجة. بماذا توصي؟
    مع أطيب التحيات
    إيمانويل

    رد
    • مرحبًا إيمانويل، شكرًا لك على كلماتك اللطيفة! أوصي باستخدام الإصدار 180 درجة من المؤازرة MG996R لهذا المشروع. وذلك لأن المؤازر 180 درجة يسمح بالتحكم الدقيق في الزاوية، وهو أمر ضروري لتحديد المواقع والحركة في الأذرع الروبوتية أو التطبيقات المماثلة. تم تصميم المؤازر بزاوية 360 درجة للدوران المستمر وهو مناسب بشكل أفضل لمهام مثل قيادة العجلات، حيث لا يلزم التحكم في الزاوية. مع أطيب التحيات، OmArTronics.

      رد
  3. سيدي لقد قمت بنفس الاتصال لكنه لا يعمل، من فضلك قل لي كم
    التيار يعطي وحدة التحكم المؤازر pca9685

    رد
    • تسحب وحدة التحكم المؤازرة PCA9685 نفسها تيارًا ضئيلًا جدًا، عادةً أقل من 10 مللي أمبير. ومع ذلك، يعتمد إجمالي التيار المطلوب على الماكينات التي تستخدمها. على سبيل المثال، يمكن لكل مؤازر MG996R، على سبيل المثال، سحب ما يصل إلى 2 أمبير (بحد أقصى 2,5 أمبير) تحت الحمل. تأكد من أن مصدر الطاقة الخاص بك يمكن أن يوفر تيارًا كافيًا لجميع الماكينات المتصلة، مع الأخذ في الاعتبار الحد الأقصى للسحب المشترك.

      رد
  4. مرحبًا، أنا أحاول تشغيله ولكنني أستمر في الحصول على الخطأ 507. ولا يمكنني توصيل التطبيق والروبوت . كيف يمكنني تشغيله؟

    رد
  5. مرحبًا، كيف يمكنني العثور على هذه البراغي والمسامير في مكان واحد؟ هل هناك موقع للتسوق عبر الإنترنت حيث تتوفر جميعها على الإنترنت؟

    رد
  6. بالنسبة للمحركات الستة التي تعمل، ما مقدار الطاقة اللازمة لتشغيل المحركات الستة وما مقدار الطاقة التي تحتاجها من الجهد والأمبير وما المحول الذي استخدمته لهذا الغرض

    رد
    • أنا أستخدم ستة أجهزة مؤازرة تعمل بالطاقة من خلال مشغل PCA9685 مع مصدر طاقة خارجي 6 فولت.
      عادةً ما يسحب كل جهاز مؤازر 300-600 مللي أمبير حسب الحمل، لذا بالنسبة لستة أجهزة مؤازر يجب أن تخطط لتيار إجمالي يتراوح بين 3-5 أمبير.
      أنا أستخدم مصدر طاقة قابل للضبط HM305P من Hanmatek HM305P، ولكن أي محول 5 فولت - 6 فولت مصنّف بقدرة 5 أمبير على الأقل سيعمل بشكل جيد.
      يتم تشغيل Arduino نفسه بشكل منفصل عبر USB.

      رد
  7. مرحبًا ، أتمنى أن تكون بخير ، كان لدي سؤال حول البراغي ، فما هو نوع البراغي اللازمة لبات التجميع ، وأنا أمزح حتى أحصل على برغي للمضاعفات معهم ، لذا هل يمكن أن تخبرني من فضلك بالبراغي المطلوبة وكمية أجزاء التجميع.

    رد

أضف تعليق