fbpx

ذراع آلي بيتحكم الكمبيوتر

أكبر طابعة ثلاثية الأبعاد في العالم
يوليو 12, 2018
Seven Segment Clock Arduino
يوليو 15, 2018

ذراع آلي بيتحكم الكمبيوتر

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

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

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

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

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

ياالا نبدأ…

عشان تعمل المشروع ده؟

عشان تعمل المشروع ده، محتاج خبرة مسبقة في البرمجة ولو حتى فكرة سريعة تعرف بيها تشغل كود الأردوينو وتتعامل مع الـ serial port الخاص باللوحة.

مستوى الصعوبة

مستوى صعوبة المشروع متقدم و ده لأن المشروع بيسخدم لغتين برمجة

  1. لغة C Sharp عشان برنامج الـAutomation
  2. لغة Arduino C لبرمجة اللوحة

كمان المشروع بيستلزم مهارة في قص الخشب، بس لو شغال arket هيبقى سهل بالنسبة لك.

المكونات:

  1. لوحة أردوينو
  2. عدد 4 مواتير سيرفو
  3. كابلات توصيل
  4. بوكس للبطاريات 4*1.5 فولت

الأدوات:

  1. Rotary tool .. تستخدم للقص و الثقب و الصنفرة
  2. لوح خشب أم دي أف 2مم  30*30 سم
  3. لوح خشب أم دي أف 4مم 30*30 سم
  4. منشار
  5. مفكات
  6. غراء خشب
  7. غراء ورق

الخطوة الأولى

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

قم بلزق الـ pattern على الخشب MDF عشان تبدأ القص (سُمك الخشب 2مم)

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

بعد كده أطبع ورق التصميم الملون على ورق عادي وإلصقة على الخشب

الخطوة التانية

قاعدة الروبوت

الذراع مصنوعة من الخشب أم دي أف 4 مم، وبتشبه الصندوق

حجمها 17 سم * 10 سم و إرتفاعها 6 سم.

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

الخطوة التالتة

مقبض الذراع أو الـ Gripper

و ده مصنوع من أسلاك معدن سميكة و واخدة شكل المقبض، مثبت عليها قطع خشب عشان تبقي زي اليد وتقدر تمسك أي Object

المقبض مصنوع من جزئين، جزء متثبت في الذراع والجزء التاني مثبت في موتور السيرفو وهو اللي بيقدر يتحرك حسب حجم الجسم المراد إلتقاطه

الخطوة الرابعة

الدايرة الكهربية بسيطة جداً، وهي عبارة عن:
  • 4 بطاريات 1.5 فولت
  • 4 مواتير سيرفو
  • لوحة أردوينو
  • أسلاك توصيل

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

الخطوة الخامسة

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

الخطوة السادسة

برنامج الأوتوميشن

في الحقيقة دة الجزء المفضل بالنسبة لي و هو عمل برنامج لمحاكاة التحكم الآلي في الذراع و إعطاؤة أوامر لتنفيذها زي التحرك في اتجاة معين أو ألتقاط شيء من مكان لمكان وهكذا
..
طبعا التحكم ده بيتم عن طريق البرنامج فقط لأني بإختصار برسل أوامر للوحة الأردوينو من خلال الـ serial port الخاص باللوحة.

البداية كانت صعبة أني أوصل لزاوية معينة بموتور السيرفو ، وعشان أسهل الأمور استخدمت برنامج “Processing 3” وده عبارة عن برنامج مساند للأردوينو تقدر تكتب كود عليه تعمل من خلاله محاكاة لأوامر السيريال بورت.

أعتمدت على أربع زوايا رئيسية للأربع مواتير المثبتة في الذراع وإتعاملت معاها زي الذراع البشري ( القاعدة ، الكتف ، الكوع ، المقبض ) و بسجل الأربع زوايا في مصفوفة (A,B,C,D) في كل مرة بيتحرك فيها الذراع.
ومع تغيير القيم دي بيتغير مكان المقبض، وطبعا عشان تبقى الحركة طبيعية حددت حد أقصى لزاوية كل موتور والحدود دي تم وضعها كدليل إرشادي في الشريط الجانبي لواجهة المستخدم بالبرنامج و دة عشان أحافظ على السيطرة على الذراع من الكسر أو انه يتحرك حركة غير طبيعية.

البرنامج بيسجل جميع الحركات و يعرضها في لسته كمان بيحسب عدد المرات اللي أتحرك فيها الذراع الآلي و نفذ كام أمر بالظبط
كمان ممكن تهيئة البرنامج أنه يبعت مهمات جديدة يقوم بيها الروبوت ويسجلها ويرسم بيها Graph

// written by AhmedAzouz
#include

Servo MyServo,MyServo2,MyServo3,MyServo0;

char ByteReceived ;

int MyPosition,MyPosition2,MyPosition3,MyPositionG; int runCounter = 0; int ledPin = A5;

// set the default home servo positions int valGripper = 30; int valBase = 70; int valShoulder = 25; int valElbow = 150;

void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); digitalWrite(13,LOW);

MyServo0.attach(12); // Gripper attach MyServo.attach(11); // base attach MyServo2.attach(13); //shoulder attach MyServo3.attach(10); //Elbow attach

// Set startup positions

MyServo0.write(valGripper); // Gripper delay(15); MyServo.write(valBase); // base delay(30); MyServo2.write(valShoulder); // shoulder delay(30); MyServo3.write(valElbow); // elbow delay(300); } void loop() {

Serial.print(“Base : “); Serial.print(valBase); Serial.print(“\t”); Serial.print(“Shou : “); Serial.print(valShoulder); Serial.print(“\t”); Serial.print(“Elbow : “); Serial.print(valElbow); Serial.print(“\t”); Serial.print(“Grip : “); Serial.println(valGripper);

//if(Serial.available()) //Byte=Serial.read(); //read it //{

while (Serial.available() > 0 ) { ByteReceived = Serial.read();

switch (ByteReceived) {

// ************* LED case ‘n’: digitalWrite(ledPin,HIGH); //switch LED On Serial.println(“LED is on”); break;

case ‘f’: digitalWrite(ledPin,LOW); //switch LED off Serial.println(“LED is off”); break;

// ************* Base case ‘l’: MyPosition = MyServo.read() + 2; // L for move base left MyServo.write(MyPosition);

Serial.print(“Base”); Serial.print(“\t”); Serial.println(MyServo.read()); delay(15); break;

case ‘r’: MyPosition = MyServo.read() – 2; // R for move base right MyServo.write(MyPosition); Serial.print(“Base”); Serial.print(“\t”); Serial.println( MyServo.read()); delay(15); break; // ************* Elbow case ‘u’: MyPosition2 = MyServo2.read() + 2; // U for move Elbow up MyServo2.write(MyPosition2);

Serial.print(“Elbow”); Serial.print(“\t”); Serial.println(MyServo2.read()); delay(15); break;

case ‘d’: MyPosition2 = MyServo2.read() – 2; // D for move Elbow down MyServo2.write(MyPosition2);

Serial.print(“Elbow”); Serial.print(“\t”); Serial.println(MyServo2.read()); delay(15); break;

// ************* Shoulder case ‘w’: MyPosition3 = MyServo3.read() + 2; // W for move Shoulder down MyServo3.write(MyPosition3);

Serial.print(“Shoulder”); Serial.print(“\t”); Serial.println(MyServo3.read()); delay(15); break;

case ‘s’: MyPosition3 = MyServo3.read() – 2; // S for move Shoulder up MyServo3.write(MyPosition3);

Serial.print(“Shoulder”); Serial.print(“\t”); Serial.println(MyServo3.read()); delay(15); break;

// ************* Gripper case ‘o’: MyServo0.write(30); // O to open Gripper Serial.print(“Gripper Open”); Serial.print(“\t”); Serial.println(MyServo0.read()); delay(15); break;

case ‘c’: // C to open Gripper MyServo0.write(1); Serial.print(“Gripper Close”); Serial.print(“\t”); Serial.println(MyServo0.read()); delay(15); break;

// ************* Default Dropped position (quick drop position) case ‘q’: digitalWrite(ledPin,HIGH); Serial.println(“Default Dropped activated!”); Pick(); Drop(); Home(); digitalWrite(ledPin,LOW); break;

// ************* Force Stop and go home position case ‘h’: Home(); digitalWrite(ledPin,LOW); break;

// ************* Automatic mood runs Playback function // serial read Must be in this format: 1:90&2:80&3:180 // pickup place is fixed, this function will automate the drop position. default:

digitalWrite(ledPin,HIGH); Serial.println(“Automatic mood activated!”); Pick(); Playback(); Home(); digitalWrite(ledPin,LOW); break; }

}

}

ختام المشروع

التكلفة الشاملة للمشروع:

التكلفة الشاملة للمشروع: 1600 جنية

X