الصنّاع العرب

السومو روبوت

نبذة سريعة

ما هو السومو روبوت؟
هو روبوت ذو أبعاد معينه يمتاز بأنه ذاتي التحكم، كما أنه يتميز بتصميمه العدائي إلى حد ما، مما يؤهله لخوض المنافسات والمباريات مع روبوتات أخرى.

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

الفكرة

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

قوانين مسابقة السومو للروبوت

سأشرح بعض الأمور التي ستساعدنا في بناء مجسم الروبوت دون الدخول في تفاصيل

  • الأبعاد: العرض 20 سم، وطول 20 سم , وارتفاع غير محدد
  • الشكل: يمكن أن يتغير حجم الروبوت بعد بدء السباق ولكن دون أن ينفصل إلى أجزاء ويحافظ على كونه جسماً مركزياً واحداً
  • الوزن: لايزيد عن 3 كجم
  • آليه التحكم: ذاتي

كيف تصنع روبوت السومو

في الجزء التالي سأشرح ضرورة كل جزء من المكونات السابق ذكرها

  • متحكم اردوينو

هو بمثابة اللوحة الرئيسية للتحكم بكافة الاجزاء وربطها معاً

  • محركات DC motor

وهي التي تساعد الروبوت على المناورة والتحرك داخل حلبة المنافسة

  • عجلة أمامية Caster Wheel

وهي العجلة الأمامية التي تساعد على التحرك في اتجهاين متعاكسين

  • L298N Dual H Bridge for Arduino

وهي لوحة صغيرة تعمل على إعطاء جهد كهربي ثابت في المواتير ، بالإضافة إلى دعم لوحة الاردوينو بالتحكم الجيد في الحركة والجهد.

  • Ultrasonic sensor

سنستخدم حساس الالتراسونك (الموجات فوق الصوتية) لتحديد مكان الروبوت الخصم ويوضع عادة في مقدمة الروبوت.

  • IR TCRT5000

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

  • Battery 9v

لدعم لوحة الاردوينو بالكهرباء اللازمة، حيث لا يمكننا بالطبع توصيل روبوت السومو بأي أسلاك.

  • AA battery 4 * 1.5 v pieces + Battery house

لدعم لوحة التحكم بالمواتير حتي لا يتأثر جهد الموتور بأي مكونات كهربائية أخرى بالدائرة.

تصميم مجسم الروبوت

قمت بعمل التصميم على برنامج 3D sketch up بحيث تتناسب أبعاده مع قوانين المنافسة، كما يمكنكم عمل أي تصميم أخر. حاول ان تفكر بتصاميم أكثر ابداعاً.

ولكى يكون الروبوت أكثر ثباتاً يراعى وضع ثقل في المقدمة و من ثم وضع البطاريات في مقدمة الروبوت مع مراعاة وضع درع أمامي يزاوية 45 درجة ليكون شكل الروبوت.

لتحميل التصميم من هنا و هنا (اضغط بالزر اليمين ثم اختر حفظ).

البرمجة واستراتيجة لعب المباراة

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

طــريقــة اللـعب (1)

  • سنجعل الروبوت يدور حول نفسه بشكل مستمر.
  • يقوم الروبوت بقياس المسافة بشكل متواصل اثناء الدوران.
  • في حال قلت المسافة المقاسة عن قيمة معينة (10سم مثلاً), يعني ذلك وجود الروبوت الخصم أمام الروبوت الخاص بنا مباشرة.
  • يتوقف الروبوت مباشرة عن الدوران. ثم يبدأ بالهجوم (التحرك للأمام بأقصى سرعة).
  • يجب أن يأخذ الروبوت القراءات من حساسي الـIR  دائماً.
  • في حال أشارت قراءة الـ IR لوجود اللون الابيض، يجب أن يتحرك الروبوت مباشرة في عكس اتجاه الحساس (مثلاً: إذا كان الحساس الأمامي الذي أعطى إشارة للون الابيض يتحرك الروبوت للخلف).

طــريقــة اللـعب (2)

  • في بداية المبارة يقوم الروبوت بقياس المسافة بينه وبين الخصم.
  • يرجع إلى الوراء مسافة تساوي نفس المسافة التي تم قياسها.
  • يتوقف الروبوت مباشرة ثم يبدأ بالهجوم (التحرك للأمام بأقصى سرعة) دون أن يلتف.
  • في حالة هجوم الخصم يقوم الروبوت بالدوران زاوية 45 درجة للتفادي ومن ثم تكرار الخطوة الأولى من آخر موضع تم قراءته.
  • يجب أن يأخذ الروبوت القراءات من حساسي الـ IR دائماً .

في حال أشارت قراءة الـ IR لوجود اللون الابيض، يجب أن يتحرك الروبوت مباشرة في عكس اتجاه الحساس (مثلاً: إذا كان الحساس الأمامي الذي أعطى إشارة للون الأبيض يتحرك الروبوت.

الكود

#include "Ultrasonic.h"
Ultrasonic ultrasonic(4,3);
const int IN1=5;
const int IN2=6;
const int IN3=9;
const int IN4=10;
#define IR_sensor_front A0 // front sensor
#define IR_sensor_back A1 // rear senson
int distance ;

void setup() 
{
Serial.begin(9600);
delay (5000); // as per sumo compat roles
}

void loop()
{
 int IR_front = analogRead(IR_sensor_front);
 int IR_back = analogRead(IR_sensor_back);
 distance = ultrasonic.Ranging(CM) ;
 ROTATE(200); // start rotete

 if (distance < 20){
    Stop();
    while (distance < 20 ) { FORWARD(255); distance = ultrasonic.Ranging(CM); IR_front = analogRead(IR_sensor_front); IR_back = analogRead(IR_sensor_back); if ( IR_front > 650 || IR_back > 650 ) { break;}
    delay(10); }
  }
  
 if (IR_front < 650 )  // < 650 means white line
   {
   Stop();
   delay (50);
   BACKWARD(255);
   delay (500);
   } 
   
 if (IR_back < 650 )  //
   {
   Stop();
   delay (50);
   FORWARD(255);
   delay (500);
   }

/* ----------- debugging ----------------
  Serial.print(ultrasonic.Ranging(CM));
  Serial.println("cm");
  Serial.println("IR front :");
  Serial.println(IR_front); 
  Serial.println("IR back :");
  Serial.println(IR_back);  
*/ --------------------------------------  
}

//--------------------------------------------
void FORWARD (int Speed){
  //When we want to let Motor To move forward,
  // just void this part on the loop section .
  analogWrite(IN1,Speed);
  analogWrite(IN2,0);
  analogWrite(IN3,0);
  analogWrite(IN4,Speed);
}

//--------------------------------------------
void BACKWARD (int Speed){
  //When we want to let Motor To move forward,
  // just void this part on the loop section .
  analogWrite(IN1,0);
  analogWrite(IN2,Speed);
  analogWrite(IN3,Speed);
  analogWrite(IN4,0);
}

//--------------------------------------------
void ROTATE (int Speed){
  //When we want to let Motor To Rotate ,
  // just void this part on the loop section .
  analogWrite(IN1,Speed);
  analogWrite(IN2,0);
  analogWrite(IN3,Speed);
  analogWrite(IN4,0);
}

//--------------------------------------------
void Stop(){
  //When we want to  Motor To stop ,
  // just void this part on the loop section .
  analogWrite(IN1,0);
  analogWrite(IN2,0);
  analogWrite(IN3,0);
  analogWrite(IN4,0);
}

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

العدد المكون
2 Dc Motor
1 L298N Dual H Bridge for Arduino
1 Ultrasonic sensor
2 IR TCRT5000
1 Battery 9v
1 AA battery 4 * 1.5 v pieces + Battery house
4 Robot Wheels
1 Arduino Ano3

Ahmed Azouz

مطور برمجيات ، مهتم بمجال التكنولوجيا والروبوت

3 تعليقات

اترك رد

  • مجهود رائع جزاكم الله خير , احب انوه الى ان التعريب القديم لكلمة “Robot” هو “انسان الي” و هذا خاطيء الى حد ما اذ ان ليس كل “Robot” يكون بهيئة انسان فبعض السيارات او اجهزة الهاتف قد تكون ذات تحكم الي ذكي و من غير المنطقي تسميتها بـ “انسان الي”
    لذلك وليصبح التعريب اكثر شمولاً تم تغييره الى “جِسْمال” و الذي يعني “جسم آلي” .

تابعنا