قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 12-03-2020, 07:28 PM المشاركة 1   
افتراضي عمل كاشف الموجات فوق الصوتية Ultrasonic Sensor HC-SR04 مع الاردوينو ومشروع متحكم Twitter FaceBook Google+



عمل كاشف الموجات فوق الصوتية Ultrasonic Sensor HC-SR04 مع الاردوينو ومشروع متحكم فى مستوى المياه بخزان .

ما هى الموجات فوق الصوتية؟
الموجات فوق الصوتية هي موجات صوت عالية النبرة high-pitched بترددات أعلى من الحد المسموع audible limit لسمع الإنسان.



يمكن أن تسمع آذان الإنسان موجات صوتية تهتز في النطاق من حوالي 20 مرة في الثانية (ضجيج هدير عميق) إلى حوالي 20000 مرة في الثانية (صفير عالي النبرة). ومع ذلك ، فإن الموجات فوق الصوتية لديها تردد أعلا من 20،000 هرتز ، وبالتالي تكون غير مسموعة للبشر.


نبذة عن الحساس HC-SR04 :
في جوهره ، يتكون مستشعر المسافة بالموجات فوق الصوتية HC-SR04 من محوِّلين للموجات فوق الصوتية ultrasonic transducers . يعمل أحدهما كجهاز إرسال يحول الإشارة الكهربائية إلى نبضات صوت فوق صوتية بتردد 40 كيلو هرتز. يستمع (يستقبل) المستقبل النبضات المرسلة. إذا استقبلها ، فإنه ينتج نبضة خرج يمكن استخدام عرضها لتحديد المسافة التي قطعتها النبضة.
المستشعر صغير وسهل الاستخدام في أي مشروع روبوتات ويوفر كشفًا ممتازًا عن مدى عدم التلامس بين 2 سم إلى 400 سم بدقة 3 مم. نظرًا لأنه يعمل على 5 فولت ، يمكن توصيله مباشرةً بأردوينو أو أي ميكروكنترولر 5V آخر.

المواصفات :
• جهد التشغيل : DC 5V .
• تيار التشغيل : 15mA .
• تردد التشغيل : 40KHz .
• أقصى مدى : 4m .
• أدنى مدى : 2cm .
• دقة المدى : 3mm .
• زاوية القياس : 15 degree .
• إشارة دخل البدء Trigger : 10Us TTL pulse .
• الأبعاد : 45 x 20 x 15 mm .

أطراف الحساس :



• الطرف VCC هو طرف مصدر القدرة للحساس والذى يتم توصيله بطرف 5V للاردوينو .
• الطرف Trig(Trigger) ويستخدم لبدء (قدح) trigger النبضات فوق الصوتية .
• الطرف Echo وينتج نبضة pulse عندما يتم استقبال إشارة منعكسة . طول النبضة يتناسب مع الزمن الذى أخذه من أجل كشف الإشارة المرسلة (زمن الإرسال + زمن الاستقبال) .
• الطرف GND يجب توصيله بأرضى الاردوينو .

مبدأ العمل :
يبدأ العمل ، عندما يتم تطبيق نبضة بعرض duration لا يقل عن 10 S (10 microseconds) على طرف البدء Trigger . استجابة لذلك يرسل الحساس سلسلة نبضات مكونة من ثماني نبضات عند تردد 40 كيلو هرتز 40 KHz . هذا النمط ذو 8 نبضات يشكل "بصمة الموجات فوق الصوتية" من الجهاز بشكل فريد ، مما يسمح للمستقبل بتمييز النمط المرسل عن الضوضاء فوق الصوتية المحيطة.
تنتقل النبضات الثمانية الفوق صوتية عبر الهواء مبتعدة عن جهاز الإرسال. في هذه الأثناء يصبح الطرف Echo فى الحالة HIGH للبدء في تشكيل بداية إشارة ارتداد الصدى.
في حالة ، إذا لم تنعكس هذه النبضات مرة أخرى ، فستنتهي إشارة الصدى بعد 38 مللي ثانية وتعود إلى المستوى المنخفض low . وبالتالي ، فإن نبضة 38 مللي ثانية تشير إلى عدم وجود أي عوائق داخل نطاق المستشعر.




إذا إنعكست هذه النبضات مرة أخرى ، يصبح الطرف Echo منخفضا low بمجرد استلام الإشارة. ينتج عن ذلك نبضة يتراوح عرضها بين 150 S إلى 25 mS ، اعتمادًا على الوقت الذي يستغرقه استقبال الإشارة.





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



لنأخذ مثالاً لجعله أكثر وضوحًا. لنفترض أن لدينا كائنًا أمام المستشعر على مسافة غير معروفة واستقبلنا نبضة بعرض 500 S على الطرف Echo . الآن دعنا نحسب مدى المسافة الموجودة من المستشعر إلى الكائن . سوف نستخدم المعادلة أدناه.
Distance = Speed x Time
هنا ، لدينا قيمة الوقت ، أي 500 s ونحن نعرف السرعة. ما السرعة التي لدينا؟ سرعة الصوت ، بالطبع! وهى 340 m/s . يتعين علينا تحويل سرعة الصوت إلى cm/s من أجل حساب المسافة بالسنتيمتر ، وهى 0.034 cm/s وبهذه المعلومات ، يمكننا حساب المسافة!
Distance = 0.034 cm/s x 500 s
ولكن تذكر أن النبضة تشير إلى الوقت الذي استغرقه إرسال الإشارة وانعكاسها مرة أخرى ، لذلك حتى تحصل على المسافة ، ستحتاج إلى قسمة النتيجة على 2 .
Distance = (0.034 cm/s x 500 s) / 2
Distance = 8.5 cm
الآن ، نحن نعلم أن الكائن على بعد 8.5 سم من المستشعر.



الخلاصة : ينبعث من الحساس موجات فوق صوتية 40 000 Hz التى تنتقل عبر الهواء وإذا كان هناك جسم أو عقبة (عائق) في طريقها فسوف ترتد إلى وحدة الحساس . وبمعرفة زمن الانتقال وسرعة الصوت يمكنك حساب المسافة.

الدائرة الكهربية :



البرمجة :
1- فى البداية عليك تحديد الأطراف Trig و Echo. في هذه الحالة ، نستخدم الأطراف رقم 9 و 10 على لوحة Arduino ويُطلق عليهما اسم trigPin و echoPin. ستحتاج بعد ذلك إلى متغير نوع long يسمى “duration” لزمن الانتقال الذي ستحصل عليه من المستشعر ، ومتغير نوع عدد صحيح للمسافة distance.

كود:
// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;

// defines variables
long duration;
int distance;

2- في دالة الإعداد setup ، يجب عليك تعريف trigPin كمخرج و echoPin كمدخل وكذلك بدء الاتصال التسلسلي لإظهار النتائج على الشاشة التسلسلية.

كود:
void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
Serial.begin(9600); // Starts the serial communication
}

3- في الدالة loop :
أ‌- فى البداية ، يجب عليك التأكد من مسح clear الطرف trigPin ، لذا يجب عليك ضبط هذا الطرف على حالة LOW لمدة 2 s فقط .
ب‌- الآن لتوليد موجة فوق صوتية الصوت ، علينا أن نضع الطرف trigPin على الحالة HIGH لمدة 10 s .
ت‌- باستخدام الدالة pulseIn ، عليك قراءة زمن الانتقال ووضع هذه القيمة في المتغير duration . تحتوي هذه الدالة على وسيطين ، أولهما هو اسم طرف الصدى echo pin والثاني يمكنك كتابة إما HIGH أو LOW . في هذه الحالة ، HIGH تعني أن الدالة pulseIn ستنتظر حتى يبدأ الطرف الحالة HIGH بسبب موجة الصوت المرتد وسيبدأ التوقيت ، ثم ستنتظر أن يصبح الطرف LOW عندما تنتهي موجة الصوت والتي ستوقف التوقيت. في النهاية ، تقوم الدالة بإرجاع طول النبضة بالميكرو ثانية. للحصول على المسافة ، سنضرب الزمن فى 0.034 ونقسمها على 2. في النهاية سنقوم بطباعة قيمة المسافة على الشاشة التسلسلية.

كود:
void loop() {
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
	
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
	
// Reads the echoPin, returns the sound wave travel time in microseconds
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);
}

البرنامج :

كود:
//Ultrasonic Sensor HC-SR04 and Arduino Tutorial
// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;

// defines variables
long duration;
int distance;

void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
Serial.begin(9600); // Starts the serial communication
}

void loop() {
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
	
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
	
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
	
// Calculating the distance
distance= duration*0.034/2;
	
// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" CM ");
}



إذا كنت ترغب في عرض النتائج من جهاز الاستشعار بالموجات فوق الصوتية HC-SR04 على شاشة LCD ، يمكنك استخدام البرنامج التالى :



كود:
#include <LiquidCrystal.h> // includes the LiquidCrystal Library
	
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
	
const int trigPin = 9;
const int echoPin = 10;
	
long duration;
int distanceCm, distanceInch;
	
void setup() {
lcd.begin(16,2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display
	
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
	
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
	
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
	
duration = pulseIn(echoPin, HIGH);
distanceCm= duration*0.034/2;
distanceInch = duration*0.0133/2;
	
lcd.setCursor(0,0); // Sets the location at which subsequent text written to the LCD will be displayed
lcd.print("Distance: "); // Prints string "Distance" on the LCD
lcd.print(distanceCm); // Prints the distance value from the sensor
lcd.print(" cm");
delay(10);
lcd.setCursor(0,1);
lcd.print("Distance: ");
lcd.print(distanceInch);
lcd.print(" inch");
delay(10);
}

اعلانات
إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 06:01 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025