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

ذراع آلية بسيطة وذكية باستخدام Arduino !!!: 5 خطوات (بالصور)
ذراع آلية بسيطة وذكية باستخدام Arduino !!!: 5 خطوات (بالصور)

فيديو: ذراع آلية بسيطة وذكية باستخدام Arduino !!!: 5 خطوات (بالصور)

فيديو: ذراع آلية بسيطة وذكية باستخدام Arduino !!!: 5 خطوات (بالصور)
فيديو: كيف نصنع ذراع بشرية الكترونية | How to make Bionic Arm 2024, يونيو
Anonim
Image
Image
الأشياء ستحتاج
الأشياء ستحتاج

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

لذلك دعونا نبدأ….

الخطوة 1: الأشياء التي ستحتاجها: -

الأشياء ستحتاج
الأشياء ستحتاج
الأشياء ستحتاج
الأشياء ستحتاج

فيما يلي قائمة بالأشياء التي ستحتاجها: -

1. محركات مؤازرة x 5 رابط للولايات المتحدة: - https://amzn.to/2OxbSH7Link لأوروبا: -

2. مقاييس الجهد × 5 (لقد استخدمت 100 ألف) رابط للولايات المتحدة: - https://amzn.to/2ROjhDMLink لأوروبا: -

3. Arduino UNO. (يمكنك استخدام Arduino Nano أيضًا) رابط للولايات المتحدة: - https://amzn.to/2DBbENWLink لأوروبا: -

4. اللوح. (أقترح هذه المجموعة) رابط للولايات المتحدة: - https://amzn.to/2Dy86w4Link لأوروبا: -

5. البطارية. (اختياري ، أنا أستخدم محول 5 فولت)

6. كرتون / خشب / لوح شمس / أكريليك ما هو متاح أو يسهل العثور عليه.

وستحتاج أيضًا إلى تثبيت Arduino IDE.

الخطوة الثانية: عمل الذراع: -

صنع الذراع
صنع الذراع
صنع الذراع
صنع الذراع

لقد استخدمت هنا عصي المصاصة لصنع الذراع. يمكنك استخدام أي عتاد متاح لك. ويمكنك تجربة تصميمات ميكانيكية مختلفة لصنع ذراع أفضل. تصميمي غير مستقر للغاية.

لقد استخدمت للتو شريطًا مزدوج الجوانب لإلصاق الماكينات بعصا المصاصة وربطها باستخدام البراغي.

بالنسبة للذراع الرئيسي ، قمت بلصق مقاييس فرق الجهد على عصي المصاصة وصنع الذراع.

ستعطيك الإشارة إلى الصور فكرة أفضل.

لقد قمت بتركيب كل شيء على لوح قماش بحجم A4 يستخدم كقاعدة.

الخطوة الثالثة: عمل التوصيلات: -

يصنع علاقات
يصنع علاقات
يصنع علاقات
يصنع علاقات
يصنع علاقات
يصنع علاقات

في هذه الخطوة سنقوم بعمل كافة التوصيلات اللازمة ، راجع الصور أعلاه.

  • قم أولاً بتوصيل جميع الماكينات بالتوازي مع مصدر الطاقة (السلك الأحمر بـ + ve والسلك الأسود أو البني بـ Gnd)
  • بعد ذلك ، قم بتوصيل أسلاك الإشارة ، مثل السلك الأصفر أو البرتقالي بدبوس PWM في اردوينو.
  • الآن قم بتوصيل مقاييس الجهد بـ + 5 فولت و Gnd من اردوينو بالتوازي.
  • قم بتوصيل الطرف الأوسط بالدبوس التناظري لأردونيو.

هنا يتم استخدام Digital Pins 3 و 5 و 6 و 9 و 10 للتحكم في الماكينات

تستخدم الدبابيس التناظرية من A0 إلى A4 للإدخال من مقاييس الجهد.

سيتم التحكم في المؤازرة المتصلة بالطرف 3 بواسطة مقياس الجهد المتصل بـ A0

سيتم التحكم في المؤازرة المتصلة بالطرف 5 بواسطة وعاء على A1 ، وهكذا….

ملاحظة: - على الرغم من أن الماكينات غير مدعومة من arduino ، تأكد من توصيل Gnd من الماكينات بـ arduino وإلا فلن يعمل الذراع.

الخطوة 4: التشفير: -

الترميز
الترميز

منطق هذا الرمز بسيط إلى حد ما ، حيث يتم تخزين قيم مقاييس الجهد في مصفوفة ، ثم يتم اجتياز السجلات باستخدام حلقة for وتقوم الماكينات بالخطوات وفقًا للقيم. يمكنك التحقق من هذا البرنامج التعليمي الذي استخدمته كمرجع "Arduino Potentiometer Servo Control & Memory"

الكود: - (ملف مرفق للتحميل أدناه.)

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

#يشمل

// أجهزة مؤازرة كائنات أجهزة مؤازرة_0 ؛ أجهزة مؤازرة_1 ؛ أجهزة مؤازرة_2 ؛ أجهزة مؤازرة_3 ؛ أجهزة مؤازرة_4 ؛ // كائنات مقياس الجهد int Pot_0 ؛ int Pot_1 ؛ int وعاء_2 ؛ int وعاء_3 ؛ int وعاء_4 ؛ // متغير لتخزين وضع المؤازرة int Servo_0_Pos ؛ int Servo_1_Pos؛ int Servo_2_Pos ؛ int Servo_3_Pos ؛ int Servo_4_Pos ؛ // متغير لتخزين قيم المركز السابق int Prev_0_Pos؛ int Prev_1_Pos ؛ int Prev_2_Pos ؛ int Prev_3_Pos ؛ int Prev_4_Pos ؛ // متغير لتخزين قيم المركز الحالي int Current_0_Pos؛ int Current_1_Pos؛ int Current_2_Pos ؛ int Current_3_Pos ؛ int Current_4_Pos ؛ int المؤازرة_وضع ؛ // يخزن الزاوية int Servo_Number ؛ // يخزن عددًا من أجهزة التخزين المؤازرة [600] ؛ // صفيف لتخزين البيانات (زيادة حجم الصفيف سيستهلك المزيد من الذاكرة) int Index = 0 ؛ // يبدأ فهرس المصفوفة من المركز 0 بيانات char = 0 ؛ // متغير لتخزين البيانات من الإدخال التسلسلي.

الآن سنكتب وظيفة الإعداد ، حيث نضع الدبابيس ووظائفها. هذه هي الوظيفة الرئيسية التي يتم تنفيذها أولاً

الإعداد باطل()

{Serial.begin (9600) ، // للتواصل التسلسلي بين اردوينو و IDE. // يتم توصيل كائنات المؤازرة بدبابيس PWM. Servo_0.attach (3) ؛ Servo_1.attach (5) ؛ Servo_2.attach (6) ؛ Servo_3.attach (9) ؛ Servo_4.attach (10) ؛ // يتم تعيين الماكينات على 100 موضع عند التهيئة. Servo_0.write (100) ؛ Servo_1. كتابة (100) ؛ Servo_2.write (100) ؛ Servo_3.write (100) ؛ Servo_4.write (100) ؛ Serial.println ("اضغط على" R "للتسجيل و" P "للتشغيل") ؛ }

الآن يتعين علينا قراءة قيم مقاييس الجهد باستخدام دبابيس الإدخال التناظري وتعيينها للتحكم في الماكينات ، لذلك سنقوم بتعريف دالة وتسميتها Map_Pot () ؛ ، يمكنك تسميتها أي شيء تريده هي وظيفة محددة من قبل المستخدم

Map_Pot باطلة ()

{/ * تدور الماكينات بزاوية 180 درجة ولكن استخدامها للحدود ليس فكرة جيدة لأنها تجعل المؤازرة تدق باستمرار وهو أمر مزعج لذلك نحد من المؤازرة للتنقل بين: 1-179 * / Pot_0 = analogRead (A0) ؛ // قراءة المدخلات من وعاء وتخزينها في وعاء متغير_0. Servo_0_Pos = خريطة (Pot_0، 0، 1023، 1، 179) ؛ // تعيين الماكينات حسب القيمة بين 0 إلى 1023 Servo_0.write (Servo_0_Pos) ؛ // انقل المؤازرة إلى هذا الموضع. Pot_1 = القراءة التناظرية (A1) ؛ Servo_1_Pos = خريطة (Pot_1 ، 0 ، 1023 ، 1 ، 179) ؛ Servo_1. كتابة (Servo_1_Pos) ؛ Pot_2 = القراءة التناظرية (A2) ، Servo_2_Pos = خريطة (Pot_2 ، 0 ، 1023 ، 1 ، 179) ؛ Servo_2.write (Servo_2_Pos) ؛ Pot_3 = analogRead (A3) ؛ Servo_3_Pos = خريطة (وعاء_3 ، 0 ، 1023 ، 1 ، 179) ؛ Servo_3.write (Servo_3_Pos) ؛ Pot_4 = القراءة التناظرية (A4) ؛ Servo_4_Pos = خريطة (Pot_4، 0، 1023، 1، 179) ؛ Servo_4.write (Servo_4_Pos) ؛ }

الآن سنكتب وظيفة الحلقة:

حلقة فارغة()

{Map_Pot () ؛ // استدعاء الوظيفة لقراءة قيم وعاء أثناء (Serial.available ()> 0) {data = Serial.read () ؛ إذا (البيانات == 'R') Serial.println ("حركات التسجيل …") ؛ إذا (البيانات == 'P') Serial.println ("تشغيل الحركات المسجلة …") ؛ } إذا كانت (data == 'R') // إذا تم إدخال 'R' ، فابدأ التسجيل. {// قم بتخزين القيم في متغير Prev_0_Pos = Servo_0_Pos؛ السابقة_1_Pos = Servo_1_Pos ؛ Prev_2_Pos = Servo_2_Pos ؛ Prev_3_Pos = Servo_3_Pos ؛ Prev_4_Pos = Servo_4_Pos ؛ Map_Pot () ، // تم استدعاء وظيفة الخريطة للمقارنة إذا (abs (Prev_0_Pos == Servo_0_Pos)) // تم الحصول على القيمة المطلقة من خلال مقارنة {Servo_0.write (Servo_0_Pos) ؛ // إذا كانت القيم تتطابق مع المؤازرة يتم تغيير موضعها إذا (Current_0_Pos! = Servo_0_Pos) // إذا لم تتطابق القيم مع {Storage [Index] = Servo_0_Pos + 0 ؛ // تمت إضافة القيمة إلى فهرس الصفيف ++ ؛ // تمت زيادة قيمة الفهرس بمقدار 1} Current_0_Pos = Servo_0_Pos ؛ } / * وبالمثل يتم إجراء مقارنة القيمة لجميع الماكينات ، تتم إضافة +100 لكل إدخال كقيمة تفاضلية. * / إذا (abs (Prev_1_Pos == Servo_1_Pos)) {Servo_1.write (Servo_1_Pos) ؛ إذا (Current_1_Pos! = Servo_1_Pos) {التخزين [الفهرس] = Servo_1_Pos + 100 ؛ فهرس ++ ؛ } Current_1_Pos = Servo_1_Pos ؛ } إذا (abs (Prev_2_Pos == Servo_2_Pos)) {Servo_2.write (Servo_2_Pos) ؛ إذا (Current_2_Pos! = Servo_2_Pos) {التخزين [الفهرس] = Servo_2_Pos + 200 ؛ فهرس ++ ؛ } Current_2_Pos = Servo_2_Pos ؛ } إذا (abs (Prev_3_Pos == Servo_3_Pos)) {Servo_3.write (Servo_3_Pos) ؛ إذا (Current_3_Pos! = Servo_3_Pos) {التخزين [الفهرس] = Servo_3_Pos + 300 ؛ فهرس ++ ؛ } Current_3_Pos = Servo_3_Pos ؛ } if (abs (Prev_4_Pos == Servo_4_Pos)) {Servo_4.write (Servo_4_Pos) ؛ إذا (Current_4_Pos! = Servo_4_Pos) {التخزين [الفهرس] = Servo_4_Pos + 400 ؛ فهرس ++ ؛ } Current_4_Pos = Servo_4_Pos ؛ } / * القيم مطبوعة على الشاشة التسلسلية ، "\ t" لعرض القيم بتنسيق جدولي * / Serial.print (Servo_0_Pos) ؛ Serial.print ("\ t") ؛ Serial.print (Servo_1_Pos) ؛ Serial.print ("\ t") ؛ Serial.print (Servo_2_Pos) ؛ Serial.print ("\ t") ؛ Serial.print (Servo_3_Pos) ؛ Serial.print ("\ t") ؛ Serial.println (Servo_4_Pos) ؛ Serial.print ("الفهرس =") ؛ Serial.println (فهرس) ؛ تأخير (50) ؛ } إذا تم إدخال (data == 'P') // IF 'P' ، ابدأ تشغيل الحركات المسجلة. {for (int i = 0؛ i <Index؛ i ++) // اجتياز المصفوفة باستخدام حلقة for {Servo_Number = التخزين / 100 ؛ // يعثر على عدد المؤازرة Servo_Position = التخزين ٪ 100 ؛ // يعثر على موضع تبديل المؤازرة (Servo_Number) {الحالة 0: Servo_0.write (Servo_Position) ؛ استراحة؛ الحالة 1: Servo_1.write (Servo_Position) ؛ استراحة؛ الحالة 2: Servo_2.write (Servo_Position) ؛ استراحة؛ الحالة 3: Servo_3.write (Servo_Position) ؛ استراحة؛ الحالة 4: Servo_4.write (Servo_Position) ؛ استراحة؛ } تأخير (50)؛ }}}

بمجرد أن يصبح الرمز جاهزًا ، قم الآن بتحميله على لوحة اردوينو

الذراع الذكية جاهزة للعمل. الوظيفة ليست سلسة حتى الآن مثل تلك التي صنعها Stoerpeak.

إذا كان بإمكانك تحسين الكود أو لديك أي اقتراحات لي ، فيرجى إبلاغي بذلك في قسم التعليقات.

مع ذلك ، دعنا ننتقل إلى اختبار….

الخطوة 5: الاختبار: -

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

لبدء التسجيل ، أدخل "R" في الشاشة الآن يمكنك تنفيذ الحركات التي ترغب في تسجيلها.

بعد الانتهاء من الحركات ، يجب عليك إدخال "P" لتشغيل الحركات المسجلة. ستستمر الماكينات في أداء التحركات طالما لم يتم إعادة تعيين اللوحة.

موصى به: