تعلم الوحدات · الدرس 2.9
وحدة حساس الموجات فوق الصوتية (Ultrasonic Sensor Module)
العودة إلى الدروسالقياس بالموجات فوق الصوتية
يفيد HC-SR04 في قياس المسافات وتجنب العوائق. وهو قليل التكلفة وسهل الاستخدام مع مكتبة مخصصة.
المكونات المطلوبة
- لوحة أردوينو (ELEGOO UNO R3).
- وحدة حساس موجات فوق صوتية (Ultrasonic Sensor Module).
- أربعة أسلاك أنثى إلى ذكر (Female to Male DuPont Wires).

المبدأ
تقيس الوحدة دون تلامس من 2cm إلى 400cm، بدقة قد تصل إلى 3mm. تضم مرسلًا ومستقبلًا ودائرة تحكم.
- أرسل إلى Trigger إشارة HIGH لمدة لا تقل عن 10µs.
- ترسل الوحدة تلقائيًا ثماني دورات عند 40kHz وتبحث عن صدى.
- عند عودة الإشارة يكون زمن HIGH على خرج Echo هو زمن انتقال الصوت ذهابًا وإيابًا.
المسافة = زمن HIGH × سرعة الصوت (340m/s) ÷ 2. وعند قياس الزمن بالميكروثانية: الزمن ÷ 58 يعطي السنتيمترات، والزمن ÷ 148 يعطي البوصات. عرض نبضة Echo يتناسب مع المسافة. يُنصح بفاصل قياس يتجاوز 60ms لتجنب تداخل Trigger مع Echo.

توصيل الدائرة


البرنامج وقراءة المسافة
تجعل المكتبة البرنامج قصيرًا وبسيطًا؛ تُضمَّن في بدايته، ثم تُستخدم دوالها للتحكم في الحساس. قبل رفع البرنامج، تأكد من توفر مكتبة HC-SR04 في بيئة Arduino IDE. إذا لم تكن مثبتة أو ظهرت رسالة تشير إلى مكتبة مفقودة، فاتبع خطوات التثبيت في قسم «ما هي المكتبات؟» وطرق تثبيتها في الدرس 1.5 «وميض LED وإضافة المكتبات».
افتح ملف البرنامج SR04_Example.ino من ملفات الدرس في بيئة Arduino IDE. بعد إتمام التوصيلات، وصّل لوحة أردوينو (UNO R3 Board) بالحاسوب بكابل توصيل (USB Cable)، ثم اضغط زر Upload (رفع) لنقل البرنامج إلى اللوحة وتشغيله عليها.
إذا تعذر نقل البرنامج إلى اللوحة، فراجع قسم «رفع البرنامج ومعالجة خطأ الاتصال» في الدرس 1.5 «وميض LED وإضافة المكتبات» للتحقق من اتصال USB واختيار نوع اللوحة والمنفذ التسلسلي في بيئة Arduino IDE.
long
اختصار long int، وهو عدد صحيح طويل موقّع افتراضيًا يشغل أربعة بايتات بمدى -2^31 إلى 2^31-1.
long a;
long(x);
(long)x;تحول long(x) أو الصيغة (long)x قيمة x، من أي نوع، إلى long وتعيد قيمة من هذا النوع.
افتح Serial Monitor بزر المراقب التسلسلي لعرض البيانات. يشرح الدرس 2.4 «المراقب التسلسلي» طريقة فتح الأداة وضبط سرعة الاتصال وقراءة البيانات.

الكود
SR04_Example/SR04_Example.ino
//www.elegoo.com
//2016.12.08
#include "SR04.h"
#define TRIG_PIN 12
#define ECHO_PIN 11
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
long a;
void setup() {
Serial.begin(9600);//Initialization of Serial Port
delay(1000);
}
void loop() {
a=sr04.Distance();
Serial.print(a);
Serial.println("cm");//The difference between "Serial.print" and "Serial.println"
//is that "Serial.println" can change lines.
delay(1000);
}