مستشعر الموجات فوق الصوتية

rover-robot-on-a-bench-with-a-kid-working-on-the back

فهم مستشعر الموجات فوق الصوتية: كيف يعمل وأين يُستخدم

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

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

1. ما هو مستشعر الموجات فوق الصوتية؟

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

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

using-ultrasound-echo-to-measure-distance-diagram

2. كيف يعمل؟

يعتمد المبدأ الأساسي لعمله على تقنية تُعرف باسم تحديد الموقع بالصدى، وهي مشابهة للطريقة التي تستخدمها الخفافيش والدلافين للتنقل.

  • يرسل المستشعر نبضة صوتية قصيرة باستخدام المرسل (وهو عنصر كهرضغطي).
  • تسير الموجة في الهواء حتى تصطدم بجسم ما وتنعكس.
  • يستقبل المستقبل الصدى الناتج.
  • يتم قياس الزمن بين إرسال النبضة واستلام الصدى.
  • باستخدام سرعة الصوت في الهواء (حوالي 343 متر/ثانية)، تُحسب المسافة عبر الصيغة:
المسافة=الزمن×سرعة الصوت2\text{المسافة} = \frac{\text{الزمن} \times \text{سرعة الصوت}}{2}

القسمة على 2 تأخذ في الاعتبار أن الصوت يسير في اتجاهين (ذهابًا وإيابًا).

how-ultra-sonic-sensor-works-ideal-case

3. المكونات الأساسية

تأتي معظم مستشعرات الموجات فوق الصوتية كوحدات صغيرة تحتوي على محولين دائريين:

  • المرسل (TX) – يرسل النبضة الصوتية
  • المستقبل (RX) – يستقبل الصدى المرتد
  • دارة التحكم – تتولى توقيت النبضات ومعالجة الإشارات

أحد أشهر هذه المستشعرات هو HC-SR04، ويُستخدم على نطاق واسع في مشاريع الهواة والتعليم.

Ultrasonic HC-SR04 sensor

4. الاستخدامات الشائعة

تُستخدم مستشعرات الموجات فوق الصوتية في العديد من المجالات، منها:

  • قياس المسافات (مثل التنقل الآلي واكتشاف العوائق)
  • قياس مستوى السوائل في الخزانات
  • أنظمة مساعدة الركن في السيارات
  • اكتشاف الحركة في الأجهزة الذكية والأنظمة المؤتمتة
  • التصوير الطبي (مثل السونار، مع استخدام مستشعرات أكثر تطورًا)
robot-rover-with-ultrasonic-sensor-and-waves-to-a-wall
Ultrasonic-sensor-based-water-level-measurement-principle
car parking sensor

5. المزايا والقيود

المزايا:

  • سهلة الاستخدام
  • رخيصة ومتوفرة
  • تقيس بدون تلامس
  • مناسبة للبيئة الداخلية

القيود:

  • الدقة تتأثر بدرجة الحرارة والرطوبة
  • نطاق قياس محدود (عادةً بين 2 إلى 4 أمتار)
  • يصعب اكتشاف الأجسام ذات الأسطح الناعمة أو الممتصة للصوت

6. كيفية استخدامه مع أردوينو

فيما يلي مثال سريع لتوصيل واستخدام مستشعر HC-SR04 مع لوحة أردوينو:

التوصيل:

  • Vcc → 5V
  • GND → الأرضي
  • Trig → أحد أرجل أردوينو (مثلاً 9)
  • Echo → رجل أخرى من أردوينو (مثلاً 10)

الكود البرمجي:

1#define TRIG_PIN 9
2#define ECHO_PIN 10
3
4void setup() {
5 Serial.begin(9600);
6 pinMode(TRIG_PIN, OUTPUT);
7 pinMode(ECHO_PIN, INPUT);
8}
9
10void loop() {
11 digitalWrite(TRIG_PIN, LOW);
12 delayMicroseconds(2);
13 digitalWrite(TRIG_PIN, HIGH);
14 delayMicroseconds(10);
15 digitalWrite(TRIG_PIN, LOW);
16
17 long duration = pulseIn(ECHO_PIN, HIGH, 30000); // مهلة 30 مللي ثانية
18
19 if (duration == 0) {
20 Serial.println("لم يتم الكشف عن جسم (انتهت المهلة)");
21 } else {
22 float distance = duration * 0.0343 / 2;
23 Serial.print("المسافة: ");
24 Serial.print(distance);
25 Serial.println(" سم");
26 }
27
28 delay(500);
29}
30
unltrasonic urduino basic setup

ما وظيفة pulseIn()؟

السطر التالي:

1long duration = pulseIn(ECHO_PIN, HIGH);
2

يُستخدم لقياس الفترة الزمنية (بالمكروثانية) التي يكون فيها الرجل Echo في الحالة HIGH، وهي الفترة التي تستغرقها الموجة الصوتية للذهاب والعودة من الجسم.

  • pulseIn(pin, HIGH) ينتظر حتى تصبح الرجل HIGH، ثم يبدأ بالعد حتى تعود إلى LOW.
  • هذا يعطينا زمن الرحلة الكاملة للموجة.
  • يتم حساب المسافة عبر المعادلة distance = duration * 0.0343 / 2 باستخدام سرعة الصوت.

ماذا يعني إذا أعاد pulseIn() القيمة 0؟

إذا كانت النتيجة 0، فهذا يعني أن الصدى لم يتم استقباله خلال المهلة المحددة، وليس أن الجسم يلامس المستشعر. حتى لو كان الجسم قريبًا جدًا (1 سم مثلاً)، سيكون هناك دائمًا زمن صغير (مثلاً 58 ميكروثانية). لذا، فإن القيمة 0 تدل على عدم اكتشاف أي جسم في النطاق.

7. نصائح لتحسين الدقة

  • استخدم تعويض الحرارة إن كانت الدقة مهمة
  • تجنب الأسطح اللينة أو غير المستوية
  • ثبّت المستشعر جيدًا لتفادي الاهتزازات
  • طبّق فلترة برمجية بسيطة لتقليل التذبذب في النتائج

8. الدقة والحدود الفعلية للقياس

رغم أن المستشعر قادر على قياس فترات زمنية دقيقة جدًا، فإن الدقة العملية تتأثر بالظروف المحيطة.

الدقة النظرية تصل إلى 0.3 ملم، لكن في الواقع العملي تكون الدقة عادة في حدود ±3 مم إلى ±5 مم.

المسافات الأقصر من 2 سم قد تكون غير موثوقة، والمسافات البعيدة (حتى 4 أمتار) ممكنة فقط في ظروف مثالية. كما أن الأسطح اللينة أو غير المنتظمة قد تعيق أو تضعف الانعكاس.

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

9. ماذا لو كانت الجدران بزاوية مائلة؟

المستشعر يعتمد على انعكاس الصوت بطريقة مباشرة، أي أن الموجة الصوتية ترتد بشكل مشابه لانعكاس الضوء على المرآة.

إذا كان الجدار عموديًا على المستشعر، فإن الموجة ترتد مباشرة وتُلتقط بوضوح.
أما إذا كان الجدار مائلًا (مثلاً بزاوية 45 درجة):

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

هذه الظاهرة تعود إلى أن مجال رؤية المستشعر ضيق (عادةً بين 15 و30 درجة)، وخارج هذا النطاق، تصبح الاستجابة ضعيفة أو معدومة.

لحل هذه المشكلة:

  • حافظ على توجيه المستشعر بشكل مباشر إلى الهدف.
  • في الحالات الخاصة، استخدم عدة مستشعرات أو تقنيات أخرى مثل الأشعة تحت الحمراء أو الليدار.
  • تجنب الأسطح الناعمة أو الزجاجية المائلة التي تشتت الموجة.
how-ultra-sonic-sensor-works-bad-angle

10. تأثير مادة الجسم على الكشف

مادة الجسم المستهدف تؤثر بشكل كبير على قدرة المستشعر على اكتشافه. المواد الصلبة والكثيفة مثل المعادن والبلاستيك الصلب والخشب المصقول تعكس الموجات فوق الصوتية بشكل جيد، مما يجعل اكتشافها سهلاً ودقيقًا.

أما المواد اللينة أو المسامية مثل الفوم أو القطن أو القماش السميك، فإنها تمتص الموجة أو تضعفها، مما يجعل نتائج القياس ضعيفة أو غير مستقرة.

يُستخدم المستشعر أيضًا لقياس مستويات الماء، لكن يجب أن يكون سطح الماء هادئًا وموازيًا للمستشعر. إذا كان السطح متقلبًا أو مليئًا بالرغوة، تصبح القياسات غير موثوقة.

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

للحصول على أفضل نتائج، تأكد أن يكون الهدف صلبًا، أملسًا، ومواجهًا للمستشعر قدر الإمكان. وإذا كانت المادة لا تعكس الصوت جيدًا، يمكن تحسين الأداء بلصق لوح صلب صغير على سطح الجسم المراد قياسه.

how-ultra-sonic-sensor-works-scattered-on-round-objects

11. استخدام عدة مستشعرات فوق صوتية

في بعض التطبيقات مثل تجنب العوائق في الروبوتات أو رسم الخرائط البيئية، لا يكون مستشعر واحد كافيًا. استخدام عدة مستشعرات يمكن أن يحسن التغطية والدقة، لكنه يتطلب تخطيطًا جيدًا لتجنب التداخل.

لماذا نستخدم أكثر من مستشعر؟

  • تغطية أوسع: المستشعر الواحد يغطي زاوية ضيقة فقط (~15 إلى 30 درجة). يمكن توجيه عدة مستشعرات بزوايا مختلفة لتغطية محيط أكبر.
  • التكرار والموثوقية: إذا أخطأ أحد المستشعرات في الكشف، قد ينجح الآخر.
  • حساب الإحداثيات: إذا كانت مواقع المستشعرات معروفة، يمكن تقدير موقع الجسم في بعدين أو ثلاثة أبعاد.

التحدي: التداخل بين الموجات

إذا تم تفعيل مستشعرين في نفس الوقت، قد تتداخل موجاتهما الصوتية وتؤدي إلى قراءات خاطئة أو غير مستقرة. يُعرف هذا بالتداخل (Crosstalk).

كيفية تجنب التداخل

  • تفعيل المستشعرات بالتتابع: لا تُفعل أكثر من مستشعر في نفس اللحظة، وانتظر 50–100 مللي ثانية بين كل قياس.
  • برمجة الجدولة في البرنامج: ضع كل مستشعر في دورة قراءة منفصلة.
  • فصل المستشعرات ماديًا: اجعل بينها مسافة كافية لتقليل التداخل الصوتي.

مثال على كود القياس المتسلسل

1// مستشعران: TRIG1/ECHO1 و TRIG2/ECHO2
2measureSensor(TRIG1, ECHO1);
3delay(100); // انتظار لتفادي التداخل
4measureSensor(TRIG2, ECHO2);
5
6void measureSensor(int trigPin, int echoPin) {
7 digitalWrite(trigPin, LOW);
8 delayMicroseconds(2);
9 digitalWrite(trigPin, HIGH);
10 delayMicroseconds(10);
11 digitalWrite(trigPin, LOW);
12
13 long duration = pulseIn(echoPin, HIGH, 30000);
14 if (duration > 0) {
15 float distance = duration * 0.0343 / 2;
16 Serial.print("المسافة: ");
17 Serial.print(distance);
18 Serial.println(" سم");
19 } else {
20 Serial.println("لم يتم استقبال صدى");
21 }
22}
23

أو بإمكانك إستكشاف تصنيفات أخرى

Arduino robot and rover

عالم الإلكترونيات

A DIY made aircraft rc model with a transmitter

الفيزياء وميكانيكا الطيران

Children looking into a microscop in turns

استكشف العالم الخفي تحت المجهر