recent
أخبار ساخنة

ماهو روبوت العنكبوت Spider robot واستخداماته

الصفحة الرئيسية
Spider robot روبوت العنكبوت

روبوت العنكبوت Spider robot

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

ماهو روبوت العنكبوت

هو عنكبوت آلي كبير تم إنشاؤه بواسطة مات دينتون و ماكروماجينيك سيستم استغرق الأمر أربع سنوات لإنشائه وتصميمه. الروبوت قادر على نقل شخص واحد ويمكنه الدوران على أي سطح. يزن الروبوت 4188 رطلاً (1900 كجم) ، ويبلغ ارتفاعه 9.18 قدمًا ويعمل بمحرك باركينج انجيز بسعة 2.2 لتر بقوة 50 حصانًا وهو المسؤول عن النظام الهيدروليكي. تساعده عدة أجهزة استشعار حوله على المشي. يتم التحكم في الروبوت بواسطة كمبيوتر يعمل بنظام التشغيل لينكس وبرنامج هيكس انجيز والذي يتحكم في الملف اللولبي الهيدروليكي في الأرجل. يتم تشغيلها بواسطة عصا التحكم داخل قمرة القيادة

مزايا روبوت العنكبوت

  1. يمكن أن تعمل بصوت منخفض.
  2. أقوى للعمل في التضاريس السيئة.
  3. يمكن أن تتحرك بحرية أكبر على الأسطح غير المنتظمة.
  4. ليس من السهل التعديل لأن المسافة من الجسم إلى السطح يمكن تعديلها.
  5. آلية حركة أكثر كفاءة

كيف يعمل الروبوت

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

كبف يعمل روبوت العنكبوت بالأردوينو

في أي روبوت بشكل عام عادةً ما يكون للروبوتات هيكل مادي ، ومحرك ، ونظام استشعار ، ومصدر طاقة ، و "دماغ" كمبيوتر يتحكم في كل هذه المكونات.

الروبوت هو في الأساس آلة تحاكي سلوك الإنسان والحيوان ، وهي نسخة من صنع الإنسان للحياة الحيوانية

مكونات دائرة ربوبوت العنكبوت

  • أرديونو MEGA2560 R.
  • حساس مسافات.
  • سيرفو موتور SG90.
  • بطارية لييو 7.4v (مستحسن 2000 mah).
  • محول جهد DC-DC Mini 360.
  • 2N3906 -ترانزيستور.

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

نحتاج إلى تزويد الروبوت ببطارية 7.4 فولط و 2 أمبير ساعي لأن المحركات الكثيرة التي يستخدمها الروبوت تحتاج إلى طاقة كبيرة و لأن محرك السرفو يحتاج إلى 5 فولط فقط فإننا نحتاج إلى محول جهد تنازلي و يجب استخدام محولي حهد واحد من أجل المحركات و الآخر من أجل تغذية الأرديونو. و يرجى عدم تغذية كل من الأرديونو و المحركات من نفس المحول لأن المحركات تستهلك جل طاقة المحول.

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

مثال كود برمجة روبرت العنكبوت بالأردوينو

#include <spiderRobot.h>
#include <SoftwareSerial.h>
SoftwareSerial BTserial(0, 1);
char RecivedData;

#define trigPin 3 /* Arduino pin tied to trigger pin on the ultrasonic sensor.*/
#define echoPin 4 /* Arduino pin tied to echo pin on the ultrasonic sensor.*/
int Ultraswitchpin=5; /*Ultrasonic switch bin 255 off and 0 is on*/
int distance;
int duration;


/* declare servos*/
spiderServo servobackleftC(0,180,27);
spiderServo servobackleftB(1,0,25);
spiderServo servobackleftA(2,0,23);
spiderServo servomidelleftC(3,0,22);
spiderServo servomidelleftB(4,180,24);
spiderServo servomidelleftA(5,0,26);
spiderServo servofrontleftC(6,180,28);
spiderServo servofrontleftB(7,0,30);
spiderServo servofrontleftA(8,0,32);
spiderServo servoUltraSonic(9,180,34);
spiderServo servofrontrightA(10,180,36);
spiderServo servofrontrightB(11,180,38);
spiderServo servofrontrightC(12,0,40);
spiderServo servomidelrightA(13,180,42);
spiderServo servomidelrightB(14,0,44);
spiderServo servomidelrightC(15,180,46);
spiderServo servobackrightA(16,180,48);
spiderServo servobackrightB(17,180,50);
spiderServo servobackrightC(18,0,52);
spiderServo spiderservos[19];
/* end declar servos*/
int spee=5;
void setup() {

pinMode(trigPin, OUTPUT); /* Sets the trigPin as an Output*/
pinMode(echoPin, INPUT); /* Sets the echoPin as an Input*/
pinMode(Ultraswitchpin,OUTPUT);



BTserial.begin(38400);
//set servos array
servomidelrightB.fixValue=-10;
spiderservos[0]=servobackleftC;
spiderservos[1]=servobackleftB;
spiderservos[2]=servobackleftA;
spiderservos[3]=servomidelleftC;
spiderservos[4]=servomidelleftB;
spiderservos[5]=servomidelleftA;
spiderservos[6]=servofrontleftC;
spiderservos[7]=servofrontleftB;
spiderservos[8]=servofrontleftA;
spiderservos[9]=servoUltraSonic;
spiderservos[10]=servofrontrightA;
spiderservos[11]=servofrontrightB;
spiderservos[12]=servofrontrightC;
spiderservos[13]=servomidelrightA;
spiderservos[14]=servomidelrightB;
spiderservos[15]=servomidelrightC;
spiderservos[16]=servobackrightA;
spiderservos[17]=servobackrightB;
spiderservos[18]=servobackrightC;
/*end set servos array*/
Serial.begin(9600);

/*delay(1000);*/
servobackleftC.attachServo();
servomidelleftC.attachServo();
servofrontleftC.attachServo();
servobackrightC.attachServo();
servomidelrightC.attachServo();
servofrontrightC.attachServo();
servobackleftC.newDegree=120;
servomidelleftC.newDegree=120;
servofrontleftC.newDegree=120;
servobackrightC.newDegree=120;
servomidelrightC.newDegree=120;
servofrontrightC.newDegree=120;

spiderMove(spee);


servobackleftB.attachServo();
servomidelleftB.attachServo();
servofrontleftB.attachServo();
servobackrightB.attachServo();
servomidelrightB.attachServo();
servofrontrightB.attachServo();
servobackleftB.newDegree=30;
servomidelleftB.newDegree=30;
servofrontleftB.newDegree=30;
servobackrightB.newDegree=30;
servomidelrightB.newDegree=30;
servofrontrightB.newDegree=30;
spiderMove(spee);

servoUltraSonic.attachServo();
servobackleftA.attachServo();
servomidelleftA.attachServo();
servofrontleftA.attachServo();
servobackrightA.attachServo();
servomidelrightA.attachServo();
servofrontrightA.attachServo();
servoUltraSonic.newDegree=90;
servobackleftA.newDegree=45;
servomidelleftA.newDegree=90;
servofrontleftA.newDegree=90;
servobackrightA.newDegree=45;
servomidelrightA.newDegree=90;
servofrontrightA.newDegree=90;
spiderMove(spee);


servobackleftB.newDegree=60;
servomidelleftB.newDegree=60;
servofrontleftB.newDegree=60;
servobackrightB.newDegree=60;
servomidelrightB.newDegree=60;
servofrontrightB.newDegree=60;
spiderMove(spee);

servobackrightB.newDegree=40;
servobackrightC.newDegree=90;
spiderMove(spee);
servobackrightB.newDegree=75;
spiderMove(spee);


}



void loop() {



Ultrasonic();

if(distance>40)
{

servofrontleftA.newDegree=60;
servomidelrightA.newDegree=60;
servobackleftB.newDegree=90;
servobackleftC.newDegree=60;
servobackrightB.newDegree=40;
servobackrightC.newDegree=120;
servofrontrightB.newDegree=40;
servofrontrightA.newDegree=120;
servomidelleftB.newDegree=40;
servomidelleftA.newDegree=120;
spiderMove(spee);
servobackrightB.newDegree=60;
servofrontrightB.newDegree=60;
servomidelleftB.newDegree=60;
spiderMove(spee);

servofrontrightA.newDegree=60;
servomidelleftA.newDegree=60;
servobackrightB.newDegree=90;
servobackrightC.newDegree=60;
servobackleftB.newDegree=40;
servobackleftC.newDegree=120;
servofrontleftB.newDegree=40;
servofrontleftA.newDegree=120;
servomidelrightB.newDegree=40;
servomidelrightA.newDegree=120;
spiderMove(spee);
servobackleftB.newDegree=60;
servofrontleftB.newDegree=60;
servomidelrightB.newDegree=60;
spiderMove(spee);


}else{
if(distance>15){
servofrontleftA.newDegree=60;
servomidelrightA.newDegree=60;
servobackleftB.newDegree=90;
servobackleftC.newDegree=60;
servobackrightB.newDegree=40;
servobackrightC.newDegree=120;
servofrontrightB.newDegree=40;
servofrontrightA.newDegree=80;
servomidelleftB.newDegree=40;
servomidelleftA.newDegree=120;
spiderMove(spee);
servobackrightB.newDegree=60;
servofrontrightB.newDegree=60;
servomidelleftB.newDegree=60;
spiderMove(spee);

servofrontrightA.newDegree=60;
servomidelleftA.newDegree=60;
servobackrightB.newDegree=90;
servobackrightC.newDegree=60;
servobackleftB.newDegree=40;
servobackleftC.newDegree=120;
servofrontleftB.newDegree=40;
servofrontleftA.newDegree=120;
servomidelrightB.newDegree=40;
servomidelrightA.newDegree=80;
spiderMove(spee);
servobackleftB.newDegree=60;
servofrontleftB.newDegree=60;
servomidelrightB.newDegree=60;
spiderMove(spee);
}
}

}
spiderServo *newspiderservos(){

spiderservos[0]=servobackleftC;
spiderservos[1]=servobackleftB;
spiderservos[2]=servobackleftA;
spiderservos[3]=servomidelleftC;
spiderservos[4]=servomidelleftB;
spiderservos[5]=servomidelleftA;
spiderservos[6]=servofrontleftC;
spiderservos[7]=servofrontleftB;
spiderservos[8]=servofrontleftA;
spiderservos[9]=servoUltraSonic;
spiderservos[10]=servofrontrightA;
spiderservos[11]=servofrontrightB;
spiderservos[12]=servofrontrightC;
spiderservos[13]=servomidelrightA;
spiderservos[14]=servomidelrightB;
spiderservos[15]=servomidelrightC;
spiderservos[16]=servobackrightA;
spiderservos[17]=servobackrightB;
spiderservos[18]=servobackrightC;
return(spiderservos);

}

/*move all servos that their destination is changed*/
void spiderMove(int Speed)
{
spiderservos[0]=servobackleftC;
spiderservos[1]=servobackleftB;
spiderservos[2]=servobackleftA;
spiderservos[3]=servomidelleftC;
spiderservos[4]=servomidelleftB;
spiderservos[5]=servomidelleftA;
spiderservos[6]=servofrontleftC;
spiderservos[7]=servofrontleftB;
spiderservos[8]=servofrontleftA;
spiderservos[9]=servoUltraSonic;
spiderservos[10]=servofrontrightA;
spiderservos[11]=servofrontrightB;
spiderservos[12]=servofrontrightC;
spiderservos[13]=servomidelrightA;
spiderservos[14]=servomidelrightB;
spiderservos[15]=servomidelrightC;
spiderservos[16]=servobackrightA;
spiderservos[17]=servobackrightB;
spiderservos[18]=servobackrightC;
bool checkmove=false;
/*check all servos assigned to move if they finished their moves*/
while(!checkmove)
{
checkmove=true;
for (int i = 0; i < 19; ++i)
{
if (spiderservos[i].newDegree!=spiderservos[i].currentDegree)
{
spiderservos[i].turn(Speed);

checkmove=false;
}
}
}
servobackleftC=spiderservos[0];
servobackleftB=spiderservos[1];
servobackleftA=spiderservos[2];
servomidelleftC=spiderservos[3];
servomidelleftB=spiderservos[4];
servomidelleftA=spiderservos[5];
servofrontleftC=spiderservos[6];
servofrontleftB=spiderservos[7];
servofrontleftA=spiderservos[8];
servoUltraSonic=spiderservos[9];
servofrontrightA=spiderservos[10];
servofrontrightB=spiderservos[11];
servofrontrightC=spiderservos[12];
servomidelrightA=spiderservos[13];
servomidelrightB=spiderservos[14];
servomidelrightC=spiderservos[15];
servobackrightA=spiderservos[16];
servobackrightB=spiderservos[17];
servobackrightC=spiderservos[18];
}

void Ultrasonic(){

if(distance==0){
analogWrite(Ultraswitchpin,255);
analogWrite(Ultraswitchpin,0);
}else{
/* Clears the trigPin*/
analogWrite(Ultraswitchpin,0);
}
analogWrite(Ultraswitchpin,255);
analogWrite(Ultraswitchpin,0);
duration = pulseIn(echoPin, HIGH);
/* Calculating the distance*/
distance= duration*0.034/2;
/* Prints the distance on the Serial Monitor*/

Serial.print("Distance: ");
Serial.println(distance);

}

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

google-playkhamsatmostaqltradent