الثلاثاء، 12 فبراير، 2013

الألتراسونيك Ultrasonic

الألتراسونيك Ultrasonic


تصميم على الSolidworksبواسطة المهندس حسن البيتاوي 


اهلاً بمتابعي مدونتي الأحباء , الموضوع الذي سأتناوله في تدوينتي يعتبر مهم جداً نظراً لأستخداماته في العديد من التطبيقات , حديثي اليوم سيكون عن حساس الأمواج فوق الصوتية أو ما يعرف ب Ultrasonic




حسناً لنتعرف في بداية عن مبدأ عمل الأمواج فوق الصوتية .


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




سرعة الموجات في الفراغ هي 345متر\ثانية  عند 25سيلسيوس  و تختلف من وسط لأخر حسب الوسط الناقل كالسوائل و الغازات و الأجسام الصلبة .

سنركز من الآن على انتقال الموجات فوق الصوتية في الفراغ .


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

المسافه = السرعه × الزمن 

ستجد تطبيقاته في الخفاش , الغواصات , الرادارات 


حسناً لننتقل إلى ما سنقوم اليوم بفعله , وما هي الإمكانيات التي يوفرها لنا هذا الحساس .

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

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

لنجهّز معداتنا .

المعدّات 

ستحتاج لتنفيذ هذه التجربة ما يلي :
1) بطاقة أردوينو 
2)التراسونيك HC SRF04
3) BreadBoard
4)اسلاك توصيل .
5)محرك سيرفو صغير"اختياري " .


حسناً لننتقل للتوصيل :

سنقوم بتوصيل الحساس مع الأردوينو كالآتي :
Trigger>>>> D12
Echo>>>> D13 
بالإضافة للتغذية و الأرضي Vcc+GND



 البرمجة 


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

الرسم التالي يوضح المخطط الزمني لعمل الألتراسونيك .


ليبدأ الالتراسونيك العمل , يتم قدحه Trigger بنبضة طولها 10us , ثم يقوم المرسل في الألتراسونيك بإرسال 8 نبضات بطول 40KHz , ثم ينتظر أن يصله صدى Echo للنبضات التي أرسلها , و تكون بين 100us-18ms اعتماداً على المسافة التي قطعتها الأمواج الصوت "في حال كان طول نبضة الصدى 36ms هذا يعني أنه لم يصطدم بجسم أمامه ! "



لكتابة الكود يلزمنا فقط اتباع الارشادات الوادة في المخطط الزمني .

الكود الأولي  بسيط و يعتمد على ارسال نبضات كل 10uS ثم قراءة الصدى الراجع إلى الحساس, ثم قسمتها على 58 لنحصل على المسافة بالسنتيمتر 

هذا الكود أولي , لكن أليكم هذه المفاجأة ! فهناك مكتبة سهلة جداً للتعامل مع هذا النوع 

 هذه المكتبة يمكن تحميلها من هنا 

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

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


الكود موجود بالأسفل :



// this a simple program to how to use ultrasonic HC-SRO 4 & SRF 04
//This ultrasonic content 4 leg < Vcc, Tri,Ech,Gnd
//Connect SRF 04 to arduino like this:
//Vcc>>>>>+5 volt arduino power source
//Tri>>>>digital pin # 12
//ech>>>>digital pin # 13
//Gnd>>> as defalt Arduino Gnd
//Modifiy By Mohannad Rawashdeh .6/6/2012

#include "Ultrasonic.h"
Ultrasonic ultrasonic(12,13);
void setup() {
Serial.begin(9600);
}
void loop()
{
  Serial.print(ultrasonic.Ranging(CM));
  Serial.println("cm"); 
  delay(100);
}


لتهيئة المداخل التي سنربط عليها الألتراسونيك نستدعي الأمر :


Ultrasonic ultrasonic(Trigger_pin,Echo_pin);


لقياس البعد بين الألتراسونيك و الجسم التي ترتطم به الأمواج فوق الصوتية ما علينا سوى استدعاء الأمر 


;(ultrasonic.Ranging(CM

و البرنامج الأخير هنا يعرض التحكم بأكثر من التراسونيك واحد .
//This program is free software: you can redistribute it and/or modify

//it under the terms of the GNU General Public License as published by

//the Free Software Foundation, either version 3 of the License, or

//(at your option) any later version.

//This program is distributed in the hope that it will be useful,

//but WITHOUT ANY WARRANTY; without even the implied warranty of

//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

// GNU General Public License for more details.

//You should have received a copy of the GNU General Public License

// along with this program. If not, see http://www.gnu.org/licenses/


//****************************************************

//Name :Mohannad Rawashdeh .

//Date "30/12 /2012 3:00pm

// Description: This  Code for ultrasonic SRF04 Connected with arduino board

// Programmed for http://genotronex.blogspot.com/

                

//****************************************************************


#include "Ultrasonic.h"
int Distance_1=0;
int Distance_2=0;
int t=100;
void setup(){
  Serial.begin(9600);
  Serial.println( "This Program To Test  two UltraSonic Sensor");
  delay(100);
  Serial.println("Testing");
}  
void ultra_sonic_one(){
  Ultrasonic ultrasonic_one(12,13);
  Distance_1= ultrasonic_one.Ranging(CM);
  Serial.print("Distance # one in cm =");
  Serial.println(Distance_1);
  delay(t);
   
}
void ultra_sonic_two(){
  Ultrasonic ultrasonic_two(2,3);
  Distance_2= ultrasonic_two.Ranging(CM);
  Serial.print("Distance # Two in cm =");
  Serial.println(Distance_2);
  delay(t);
   
}
void loop(){
   ultra_sonic_one();
   ultra_sonic_two();
   delay(400);
}
   
   







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

تحياتي للجميع .

43 التعليقات :

  1. شكرا اخي الكريم بس عدي سوال اذا اريد اربط حساسين على البطاقه كيف اربطهم و لازم اربط
    ينو كالآتي :
    Trigger>>>> D12
    Echo>>>> D13
    لكل حساس و التغذية لكل واحد ايضا ؟؟؟
    انا دخلت على موقع اصنعها و شفت الروبوت المسي للعميان و في شي اسمه sig هل هو نفسه ال trig???ممكن توضحلي لاني لم افهم كيف اربط الحساسين
    و شكرا لك

    ردحذف
    الردود
    1. لربط حساسين يركب واحد منهما على الأرجل 12و 13 و الحساس الآخر يركب على المداخل 2 و 3 مثلاً , يمكن استخدام اي مدخل لربط الأتلراسونيك معاه و ذلك عن طريق الأمر

      Ultrasonic ultrasonic(Trigger_pin,Echo_pin);

      بالنسبة للجهاز الخاص بالعميان فهذا السؤال قد تم طرحه علي كثيراً , بالعموم المبدأ بالنسبة للالتراسونيك واحد و لكن النوع مختلف و البرمجة مختلفة قليلاً , اذا فهم القارئ كيفية كتابة كود لهذا الحساس , يمكنه بسهولة برمجة نظام مشابه

      حذف
    2. يعني اربط
      ,Echo ,و trig لكل حساس على البطاقه ؟؟؟
      لان موقع اصنعها رابط بس sig لكل حساس للمدخل 8 و 7 و شنو يعني المقصود بال sig؟
      لو في صورة توضحلي انا شفت في صورة بس بعيده و ما واضحه للحساسين
      اسفه رح اتعبك ويايه لاني مبتدئه و اريد افهم ^_^

      حذف
  2. نعم لكل حساس echo and Trig مختلف .

    هذا النوع يختلف من حيث عدد الأرجل عن الping الذي قرأتيه في موقع اصنعها .

    السبب أن هذا النوع غير متوافر في الأسواق العربية بالإضافة إلى أنه باهض الثمن .

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

    ردحذف
  3. شكرا ع الرد اخي
    و مواضيعك مميزة تحياتي لك ^_____^

    ردحذف
  4. السلام عليكم :_
    اريد المساعده بخصوص لغه الاردوينو ..!!! لاني أحتاج في مشروعي الى استخدامها ...
    لما سمعت عنها انها اسهل من لغه "pic" ....

    ردحذف
    الردود
    1. اهلاً اخي يزن .

      تفضل ما هي نوع المساعدة التي تحتاجها ؟

      حذف
  5. سلام عليكم
    ارجوا المساعده كيف ابرمج هذا الحساس باستخدام مايكروسي

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

      حذف
  6. Ranging distance

    بتاعه يكون كام لو فى ابعاد موجوده اكبيره ممكن تكتبهالى وياريت لنك ليها

    ردحذف
  7. هذا النوع مداه لغاية 4 متر و فعلياً يعطي دقة قراءة لغاية 2.8 متر تقريباً .

    هناك ez0 مداه يصل لغاية أكثر 6 أمتار بقليل

    هذه مقالة لي عن الموضوع

    http://www.instructables.com/id/Max-Sonar-EZ0/

    اعلى مدى يصل ل 8 أمتار لكن سعره يصل لغاية 200 دولار

    ردحذف
  8. سلام عليكم
    ممكن أخي كريم تشرح لنا خطوات الرئيسية في عمل "روبوت G1" اي شرح حركات سنسر والتي على اساسها كتبت الكود بمعن ادق شرح حركات التي يقوم بها روبوت G1 لانني اريد أفهم ذلك لكي أقوم بكتابة الكود بالمايكروسي وتصميم روبورت يشبه جهازك ولكن محتاج فكرة عمل وشكرا

    ردحذف
    الردود
    1. سأقوم بذلك عند توفر المحركات لدي , أعدك بهذا قريباً .

      حذف
    2. G1 مبني على محركات سيرفو 360درجة للحركة و محرك سيرفو 180 درجة لتدوير الالتراسونيك .

      قم بتدوير الالتراسونيك عند زوايا محددة 0,30,60,90 ,و هكذا و اقرأ الألتراسونيك و خزن الناتج في مصفوفة , ثم قارن نواتج المصفوفة معاً لتحصل على المسافة الأكبر .

      حذف
  9. سلام عليكم
    اخي كريم لم تخبرني بذلك عسى مانع خيرا

    ردحذف
    الردود
    1. اسف لم انتبه لوجود التعليقات هنا

      حذف
  10. السلام عليكم
    اخي كريم, المرجو ارسال لي كيفية قياس المسافة و السرعة في نفس الوقت وإظهارها على شاشة LCD 16*2.
    في انتظار الجواب تقبل مني خالص تحياتي .
    بريدي الالكتروني : moore.mealy10@gmail.com

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

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

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

      حذف
  12. الكود حق الترا سونيك فيه غلط ممكن تصحح الغلط

    ردحذف
  13. الترا سونيك المتععد الكوص فيه خطا

    ردحذف
    الردود
    1. تم التأكد منه , الكود صحيح , هل من الممكن توضيح المشكلة التي واجهنك ؟

      حذف
    2. عندما وضعت الفايل في ملف الاردوينو وشغلت الفايل وتظهر شاشة الاردوينو يعطيني خطا مالعمل رجاءا علما انني منزل فيرشن 1.05 وعندي اردوينو ميكا

      حذف
    3. هل قمت بتنزيل المكتبة الخاصة بالألتراسونيك بالمقال ؟

      حذف
  14. اخي هل بالامكان طريقة ربط الريليه مع الاردوينو والكود الخاص بذلك وهل ممكن ان استخدم الزمن هنا وكيف

    ردحذف
    الردود
    1. يمكن البحث في المدونة عن موضوع المرحل Relay و وضع السؤال هناك حتى نجيب عليه و نفيد الجميع

      حذف
  15. هل من الممكن تحديد احداثيات المكان بالضبط x , y

    ردحذف
    الردود
    1. بالتأكيد لا , تحتاج لعناصر اخرى لتحديد الأبعاد

      حذف
  16. #include
    #define trigPin 7
    #define echoPin 6
    #define power 13
    #define led 19
    #define motor 10
    #define rev 9
    #define led6 8
    #define buz A1

    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
    int sound = 250;


    void setup() {
    lcd.begin(16, 2);
    Serial.begin (9600);
    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);
    pinMode(led, OUTPUT);
    pinMode(power, OUTPUT);
    pinMode (motor , OUTPUT);
    pinMode(rev, OUTPUT);
    pinMode(led6, OUTPUT);
    pinMode(buz, OUTPUT);
    }

    void loop() {

    digitalWrite(motor, LOW);

    long duration, distance;
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    duration = pulseIn(echoPin, HIGH);
    distance = (duration/2) / 29.1;


    lcd.clear();

    lcd.print(" Ardumotive ;) "); // You can change this message.

    lcd.setCursor(0, 1); //Change line...

    lcd.print("Distance: ");

    lcd.print(distance);

    lcd.print("cm");

    delay(1000);






    if ( distance <=130) {
    digitalWrite(led, HIGH);
    delay (550);
    digitalWrite(led, LOW);
    delay (100);

    }
    if ( distance <=70) {
    digitalWrite(buz, HIGH);
    delay (650);
    digitalWrite(buz, LOW);
    delay (100);

    }



    if (distance >=10 && distance <=45) {
    digitalWrite(motor, HIGH);
    digitalWrite(rev, LOW);
    delay (500);
    digitalWrite(power, LOW);}


    else{
    digitalWrite(rev, HIGH);
    digitalWrite(power, HIGH);

    sound = 280;
    }
    }


    اريد مساعده كيف يمكن تسريع اخذ قراءات حساس >التراسونك<

    ردحذف
  17. ارجو من حضرتكم الرد في اسرع وقت ممكن

    ردحذف
  18. السلام عليكم
    لماذا مكتبة التراسونيك لم تتوافق مع أردوينو 1.6.5

    ردحذف
    الردود
    1. حاول استخدام نسخة اقدم من الارديونو 1.5.5 مثلاً

      حذف
    2. السلام عليكم لو سمحت كنت عايز برنامج لل L293D لروبوت يحل متاهة وباستخدام 2 ultrasonic لو سمحت ترد عليا ضرورى جدا

      حذف
  19. وعندى مكتبة New Ping 1.6

    ردحذف
  20. السلام عليكم ممكن لو سمحت تبين لي اذا استخدمت الماطورات الصغيرة مال الهواتف المحمولة dc motor of cell phon مع سنسر الالترسونك والاردينو اونو شو الي راح يتغير وهل استطيع جمع كود الماطورات او اتحكم بهن

    ردحذف
  21. اني الجهاز يقرا لحد ١٠٠ سم بعد ذللك يقرا خارج المدى

    ردحذف
  22. اني الجهاز يقرا لحد ١٠٠ سم بعد ذللك يقرا خارج المدى

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

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

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

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

    ردحذف
  27. السلام عليكم استخدم أي نوع من المتحسسات لكشف نوع السائل أو المادة ؟
    وشكرا

    ردحذف

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