الأحد، 9 فبراير، 2014

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

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





لقد تحدثنا سابقا عن كيفيه بناء  روبوت تفادي الحواجز باستخدام حساس الامواج الفوق صوتيه ( التراسونيك) "يمكنك الرجوع لهذا المقال من هنا"  , وكنا نغير اتجاه حركه هذا الروبوت بناءعلى مقدار المسافه بينه بين اي عائق امامه .....امامه فقط , اي يكون الروبوت محدود الرؤيه بزايه معينه , هذه المحدوديه سببها  الزاويه التي يرسل فيها حساس الالتراسونيك الامواج طريقه ارتدادها عن الاجسام المحيطه , ماذا لو حركنا حساس الالتراسونيك لاخد اكثر من قراءة للمسافه في عده اتجاهات وتوجيه الروبوت الى اكثر مسافه ممكنه,كيف يمكننا ذلك؟ هذا ما سنعرفه في هذا المقال. 




سنحتاج الى تثبيت حساس الامواج الفوق صوتيه "الالتراسونيك" على  محرك السيرفو Servo motor  ذو 180 درجه  " لمعرفه المزيد عن هذا المحرك يمكنك الرجوع لمقاله السيرفو من هنا " , ونحرك هذا المحرك على اكثر من زاويه ونأخذ قراءه الحساس عند كل زاويه ,نقارن بين هذه المسافات ونحرك الروبوت باتجاه  المسافه الاعظم اي المسار الذي يكون فيها الحاجز امام الروبوت ابعد .وبذلك نكون قد وسعنا مدى الرؤيه لهذا الروبوت.


نحتاج لتنفيذ هذه التجربه :

1) بطاقة أردوينو "أستعملت هنا أردوينو Uno"




2) هيكل روبوت







5) بطاريتان ليثيوم (3.7V - 2400mA )
6)اسلاك التوصيل female-male & male-male wires
7)محرك سيرفو servo motor 



8) ماده لاصقه UHU او لاصق لتثبيت سنسور الالتراسونيك على محرك  السيرفو 




طريقه التوصيل :

1) قم بتركيب هيكل الروبوت
2) قم بتوصيل داره L298 كما في الشكل وثبتها فوق الهيكل


3) قم بتوصيل حساس الامواج فوق الصوتيه  Ultrasonic sensor كما هو موضح بالصورة
 4) قم بتوصيل محرك السيرفو كما في الشكل 

5) ثبت حساس الامواج فوق الصوتيه على محرك السيرفو



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


6) حمل الكود وافتح شاشه العرض Serial monitor لتتأكد من تثبيت الالتراسونك بشكل صحيح .يجب ان  تتغير القراءه كلما اقتربت يدك منه , ويجب ان يتحرك محرك السيرفو فقط عندما يكون بعد يدك اقل من 20 سم. 



//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

servo connection :
 yallow wire >> D10

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

Mohannad Rawashdeh*/
#include  <Ultrasonic.h>
#include <Servo.h> 
int IN1=3;
int IN2=5;
int IN3=6;
int IN4=9;
int sensor_reading=0;
int i=0;
Servo myservo;
int pos = 0;
int ledPins[]={};
 int A=0;
 int select=0;
 Ultrasonic ultrasonic (12,13);
void setup (){
  Serial.begin(9600);
  myservo.attach(10);
   pinMode(IN1,OUTPUT);
   pinMode(IN4,OUTPUT);
   pinMode(IN2,OUTPUT); 
   pinMode(IN3,OUTPUT);
    pinMode(A0,INPUT);
    Serial.println("Robot initialize");
}
void forword(){
  digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
 digitalWrite(IN3,LOW);
 digitalWrite(IN4,HIGH);
 delay(50);
}
void background(){
  digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
 digitalWrite(IN3,HIGH);
 digitalWrite(IN4,LOW);
delay(50);
}
void right(){
  digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
 digitalWrite(IN3,LOW);
 digitalWrite(IN4,HIGH);
delay(50);}
 void left()
 {
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,LOW);
delay(50);
 }
 void STOP()
 {
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,LOW);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,LOW);
delay(50);
 }
 
  void loop (){
   myservo.write(90);
   delay(15) ;
   sensor_reading =ultrasonic.Ranging(CM);
   Serial.print("Distance= ");
   Serial.println(sensor_reading);
while (sensor_reading > 20){   
     forword();
  sensor_reading =ultrasonic.Ranging(CM);
  Serial.print("Distance= ");
  Serial.println(sensor_reading);
  Serial.println("Forward,distance>20");
 }
 while (sensor_reading <= 20){   
STOP();
myservo.write(pos);
 delay(50);
 
  sensor_reading =ultrasonic.Ranging(CM);
  delay(1000);
 Serial.print("POSTION: ");
 Serial.println(pos);
 select=pos;
  pos+=45;
if(pos==225){
pos=0;
}
 }
myservo.write(90);
  switch(select){
    case 0:
    left();
    delay(250);
    STOP();
    break;
    case 45 :
    left();
    delay(500);
    STOP();
    break;
    case 135 :
    right();
    delay(250);
    STOP();
    break;
    case 180 :
    right();
    delay(500);
    STOP();
    break;
    
  }//end switch
  
  }


يقوم هذا االكود في البدايه  بتخزين المسافه المأخوذه من الالتراسونيك, واستخدام جمله الشرط "if " لمقارنة هذه القراءه مع الرقم 20 , فان كانت المسافه اكبر من 20سم سيتحرك الروبوت للامام , اما ان كانت المسافه اقل من 20 سم سيتوقف الروبوت ويتحرك السيرفو بزاويه 45 ,180,135,90درجه , عند كل زاويه  يتم  قراءه الحساس فان كانت اكبر من 20سم سيتحرك الروبوت الى الامام , اما ان كانت اقل من 20سم سيتحرك السيرفو الى زاويه التي تليها. وعند وصول السيرفو  الى الزاويه 180 سيعود لزاويه الصفر . 

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





11 التعليقات :

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

    ردحذف
    الردود
    1. اين هي المشكلة ؟ هل بامكانك ارفاق الكود ؟

      حذف
    2. السلام عليكم اخي بيعطي خطأ في (12,13) Ultrasonic ultrasonic ما هوه الحل ارجو الرد في اسرع وقت

      حذف
  2. ارجو الحل يعطي خطأ في Ultrasonic ultrasonic (12,13); علما اني حملت مكتبة الالترا سونيك

    ردحذف
  3. اضافتك خاطئة للمكتبة , اعد تسمية المجلد الموجود به المكتبة ل Ultrasonic بدون اضافات

    ردحذف
  4. اخي يعطي خطأ في (12,13)Ultrasonic ultrasonic
    ما هوه الحل

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

    ردحذف
  6. مكتبة الultrasonic sensor مش عيزة تنزل اتمنى الرد سريعا و شكرا

    ردحذف
  7. انا بعمل مشروع object avoidanve robot باستخدام ال ultrasonic sensor ثابت بس معرفشي المشكله في ايه في الكود لو سمحت لو ممكن كود المشروع ده باستخدام الh-bridge

    ردحذف
  8. سلام عليكم ليس اخون لاتقوموا بنسخ اي كود اكتب كود بنفسك احسن

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

    ردحذف

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