الجمعة، 8 نوفمبر، 2013

الروبوت المتفادي للحواجز باستخدام الالتراسونيك 1

الروبوت المتفادي للحواجز 


Avoiding Ultrasonic Robot 

L298 Motor driver Module



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

ما سنقوم ببناءه هو روبوت متفادي للحواجز " Avoiding Robot " هذا الروبوت يمكنه تحسس الأجسام التي أمامه و تفاديها , مستخدماً حساس الأمواج فوق الصوتية Ultrasonic 

في ما يلي في هذا المقال سستعرف على كل المفاهيم المرتبطة بهذا الروبوت .

في البداية , ماذا سنحتاج لتنفيذ هذه التجربة ؟ 

القطع المطلوبة لتنفيذ هذا الروبوت قليلة و سهلة التوافر , و طريقة ربطها بعضها سهلة ايضاً , القطع هي 

1) أردوينو Uno او Dumilanova  .

2) هيكل الروبوت Magician Chassis من شركة 

Sparkfun , هيكل سهل التركيب .او الهيكل رباعي العجلات

 4Wheel  المميز ذو العزم العالي و الدقة الأكبر في الحركة .









3) Arduino L298 Motor Sheild و هو غطاء  يحتوي على دارة متكاملة هي L298 خاصة لقيادة المحركات الكهربائية



4) حساس الأمواج فوق الصوتية Ultrasonic HC-SR04






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

استخدم الليثيوم كخيار أول و أفضل من حيث الآداء

5)بطاريتان , واحدة لتغذية المحرك "يجب ان تكون أكبر من 5 فولت " و الثانية  بطارية 9 فولت مع الحاضنة  لتغذية الأردوينو .

غذي بها الأردوينو , حتى تكون تغذية الروبوت منفصلة عن تغذية المحركات 

6) قطع اخرى , مثل  اسلاك توصيل , ستحتاج لأسلاك توصيل female-female عدد 8 , و ايضاً ستحتاج ل dc jack male+female لتسهيل توصيل البطارية مع غطاء الأردوينو الخاص بالمحرك "اختياري "  , و اخيراً pin header male عدد 1 .

توصيل القطع : 

1) قم بتجميع هيكل الروبوت .
2) قم بتثبيت  غطاء الأردوينو الخاص بالمحرك على هيكل الروبوت .

3) ثبت الألتراسونيك في الأمام و قم بتوصيله كالأتي 

tri >>>"D12 "
echo>>"D13"
vcc>> vcc 
Gnd>>Gnd

ستحتاج لمفك صغير لتوصيل الاسلاك مع هذا غطاء قيادة المحرك .

إذا لم يكن متوفراً لديك بطارية 9 فولت فبإمكانك بعد أن توصل البطارية إلى هذا الغطاء أن تأخذ سلك من المدخل 5V من غطاء القيادة و أن توصله بمدخل ال 5 فولت من الأردوينو كما في الشكل "أجعل هذا خيارك الأخير لأنه يسبب الكثير من التشويش على عمل الأردوينو "
 .


المخرج المكتوب عنده 5V هو مصدر تغذية يمكنك تغذية الأردوينو به مباشرة


4) ثبت البطاريات بهيكل الروبوت , قم بعملية لحام ل ل dc jack female  مع سلكين و توصيلهما لمداخل التغذية مع غطاء الأردوينوالخاص بالمحرك , ليسهل تشغيل و ايقاف الروبوت , او يمكنك توصيل السلك مباشرة مع غطاء المحرك بحيث :

الخط الموجب للبطارية مع المدخل المكتوب عليه VCC

الخط السالب للبطارية  مع المدخل المكتوب عليه Gnd


5)الشكل ادناه يوضح طريقة توصيل المحركين بالأردوينو




7) حمل الكود من مقالة غطاء قيادة المحرك  L298 لتتأكد نم ان توصيلك صحيح .

8) للتأكد حمل برنامج الألتراسونيك من هذا المقال لتتأكد من تثبيت الالتراسونيك بشكل صحيح  



حتى يناسب توصيلك , و افتح شاشة العرض Serial monitor يجب ان تتغير القراءة كلما اقتربت يدك من الاتراسونيك .

9) حمل الكود الرئيسي التالي :

/*
// This code to drive 2 DC Motor using L298 Module
// Connect :

IN1 >>>> D3
IN2 >>>> D5
IN3 >>>> D6
IN4 >>>> D9

ultrasonic connection :
Vcc>>>5V
Tri >>>D12
Echo>>>D13
Gnd>>>>Gnd

code written For 
http://www.genotronex.com

Mohannad Rawashdeh

*/
 #include  "Ultrasonic.h"
 int distance = 0;
 Ultrasonic ultrasonic (12,13);
const int IN1=3;
const int IN2=5;
const int IN3=6;
const int IN4=9;
boolean Rotate=true;
void setup() {
  // fIRST , define the Motor's pin as an OUTPUT
pinMode( IN1 ,OUTPUT);// Right Motor 1st wire
pinMode( IN2 ,OUTPUT);// Right Motor 2nd wire
pinMode( IN3 ,OUTPUT);// left Motor 1st wire
pinMode( IN4 ,OUTPUT);// left Motor 2nd wire

}
void forward(int Speed){
  //When we want to let Motor To Rotate clock wise
  // just void this part on the loop section .
 
  analogWrite(IN1,0);
  analogWrite(IN2,Speed);
  analogWrite(IN3,Speed);
  analogWrite(IN4,0);
}
void backward(int Speed){
  //When we want to let Motor To Rotate Counter clock wise
  // just void this part on the loop section .
  analogWrite(IN1,Speed);
  analogWrite(IN2,0);
  analogWrite(IN3,0);
  analogWrite(IN4,Speed);
}
void left(int Speed){
  //When we want to let Motor To Rotate Counter clock wise
  // just void this part on the loop section .
  analogWrite(IN1,0);
  analogWrite(IN2,Speed);
  analogWrite(IN3,0);
  analogWrite(IN4,Speed);
}
void right(int Speed){
  //When we want to let Motor To Rotate Counter clock wise
  // 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 let Motor To Rotate clock wise
  // just void this part on the loop section .
  analogWrite(IN1,0);
  analogWrite(IN2,0);
  analogWrite(IN3,0);
  analogWrite(IN4,0);
}

void loop() {
 //Rise Up
 distance=ultrasonic.Ranging(CM);
  delay(40); 
  if(distance>20){
    forward(160);  
    delay(20); 
   Rotate=!Rotate ;// Random direction
 }
  if(distance<=20 &&Rotate==true ){
    right(120);
 }
  if(distance<=20 &&Rotate==false ){
    left(120);
 }
}
 

و هذا الفيديو يوضح طريقة العمل لهذا الكود 



25 التعليقات :

  1. كيف استخدم السيرفو مع l293

    ردحذف
    الردود
    1. في الجهة العلوية اليسرى لدارة ال L293 Module هناك مدخلين مخصصين للسيرفو مربوطين على D9, D10 و يمكن برمجتهما بشكل اعتيادي .

      حذف
  2. أزال أحد مشرفي المدونة هذا التعليق.

    ردحذف
  3. السلام عليكم ورحمة الل وبركاته
    أخي العزيز أنا حملت الكود على برنامج Arduino و بعيطيني الخطا" الموضح بالأسفل

    sketch_feb28b.ino:22:26: error: Ultrasonic.h: No such file or directory
    sketch_feb28b:24: error: 'Ultrasonic' does not name a type
    sketch_feb28b.ino: In function 'void loop()':
    sketch_feb28b:83: error: 'ultrasonic' was not declared in this scope
    sketch_feb28b:83: error: 'CM' was not declared in this scope

    يوجد شيء لالنسبة لملف Ultrasonic أرجو منكم المساعده في كود لأنو أنا جمعت الروبوت و ضل الكود عشان أختبر الروبوت
    شكرا"

    ردحذف
    الردود
    1. وعليكم السلام ورحمه الله وبركاته , المشكله هنا ان مكتبه الUltrasonic لم توضع في مسار مكتبات اردوينو او وضعت بشكل خاطئ يمكنك تتبع خطوات في مقال كيفيه وضع مكتبه جديده للاردوينو http://www.genotronex.com/2014/01/blog-post_20.html
      لحل المشكله .

      حذف
  4. هل من الممكن عدم لحم القطع

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

      حذف
  5. أزال المؤلف هذا التعليق.

    ردحذف
  6. بعد اذنك يا بشمهندس كيف يتم نسخ الأكواد الخاصة بتعريف حساس الألتتراسونيك و غطاء المحرك ؟
    هل يتم النسخ قبل الكود الرئيس ام بعدده ؟
    و لا قصد حضرتك انه هنشغل الحساس و الغطاء بالأكواد الخاصة بيهم في الأول للتاكد من عملهم بطريقة صحيحة و الكود الرئيسي قائم بذاته

    ردحذف
    الردود
    1. انسخ الكود كاملاً كما نضعه بالمدونة لا أكثر

      حذف
    2. شكرا يا بشمهندس جزاك الله خيرا

      حذف
  7. الالتراسونك الى معايا 3 مخارج بس نوعه GH-311 اوصله ازاى ؟؟؟

    ردحذف
    الردود
    1. عد للنشرة الفنية لهذا الحساس , ما هو طبيعة الخرج Output المتناسب مع مقدار المسافة المقاسة ؟؟ استخدم مكتبة ping له ,ربما تعمل لكن عليك بالرجوع للنشرة الفنية لمعرفة العلاقة بين المسافة و الأشارة الخارجة من الحساس

      حذف
  8. Arduino: 1.6.6 Hourly Build 2015/10/20 07:42 (Windows 8.1), Board: "Arduino/Genuino Uno"

    C:\Users\NONA\AppData\Local\Temp\arduino_49bb21ab07c7ab64997ce4b4103c1f0d\sketch_oct21a.ino: In function 'void loop()':

    sketch_oct21a:62: error: 'class Ultrasonic' has no member named 'Ranging'

    distance=ultrasonic.Ranging(CM);

    ^

    sketch_oct21a:62: error: 'CM' was not declared in this scope

    distance=ultrasonic.Ranging(CM);

    ^

    exit status 1
    'class Ultrasonic' has no member named 'Ranging'

    Invalid library found in C:\Users\NONA\Desktop\arduino-nightly\libraries\sketch_oct21a4: C:\Users\NONA\Desktop\arduino-nightly\libraries\sketch_oct21a4

    This report would have more information with
    "Show verbose output during compilation"
    enabled in File > Preferences.
    ممكن حل لهاذه االمشكله

    ردحذف
  9. سلام عليكم حملت البرنامج يطلعلي اخطاء ومااعرف السبب

    ردحذف
  10. رائع لكن يظهر لي خطا في #include "Ultrasonic.h"
    ارجو الرد بسرعة

    ردحذف
    الردود
    1. قم بتثبيت المكتبة بشكل صحيح , المكتبه غير معرفه لديك

      حذف
  11. بش مهندس هل القطع المذكورة اعلاه متوفرة بالاردن واين اجدها شكرا؟

    ردحذف
  12. السلام عليكم ما نوع المحرك الذي يجعل الربوت يدور

    ردحذف
  13. السلام عليكم ما نوع المحرك الذي يجعل الربوت يدور

    ردحذف
  14. السلام عليكم انا لو عايز اتحكم فى التمكين الى هما enable 1 و enable 2 والتمكين ده هو سرعة المحرك ايه الى هيتغير فالكود وشكرااا

    ردحذف
  15. كيف اتحكم بعزم المحرك والتيار وما هي مواصفات المحرك المطلوب لهكذا روبوت

    ردحذف
    الردود
    1. للتحكم المتقدم تحتاج لقراءة اوسع في ال DC Motor لان له معادلات رياضية
      للتحكم بالتيار تحتاج لدارة قيادة Current source IC للقيام بتغذية المحرك بالتيار المطلوب و تحديد الحمل على المخرج .

      حذف

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.