وصف المشروع
قم بوضع أي جسم أمام حساس الموجات فوق صوتية Ultrasonic sensor وسنرى شكله لاحقاً ونتعرف على طريقة عمله، فيقوم الأردوينو بطباعة قيمة المسافة بينهما على شاشة LCD.
الهدف من المشروع
التعرف على حساس قياس المسافة باستخدام الموجات فوق الصوتية واستخدامه في تطبيق عملي وقياس بُعد مسافة الأجسام.
جدول المكونات
العدد |
النوع |
|
1 | لوحة أردوينو أونو | Arduino Uno board |
1 | شاشة 2 × 16 | LCD 2×16 |
1 | حساس الموجات فوق صوتية | Ultrasonic sensor |
2 | مقاومة 1 كيلو أوم | Resistor 1 k ohm |
1 | لوحة اختبار | Bread board |
مجموعة | أسلاك توصيل | connecting wires |
توصيل الدائرة
شرح المكونات
-
لوحة Arduino Uno
نستخدمها للتحكم في الدائرة، باستقبال وإرسال الإشارات بتوقيت معين وكيفية معينة نختارها طبقاً لعمل الدائرة وبواسطة الكود الذي سيتم شرحه لاحقاً.
يرجى تثبيت البرنامج الخاص بالأردوينو من هنا والذي سنستخدمه في كتابة الكود وعمل compiling ورفعه إلى لوحة الأردوينو عن طريق كابل USB، ولمعرفة كيفية تثبيت البيئة التطويرية المتكاملة لأردوينو (Arduino IDE) من هنا.
لتحميل ورقة البيانات datasheet الخاصة بلوحة الأردوينو أونو Arduino Uno اضغط هنا، ولتحميل نسخة أخرى اضغط هنا، ويوجد هنا في موقع الصناع العرب مواضيع مفصله عن الأردوينو وكيفية تنصيب البرنامج، وللمزيد يمكنك زيارة الموقع الخاص به من هنا.
-
شاشة LCD 2×16
ورمزها: HD44780
هي شاشة LCD صغيرة بها مساحة لعرض صفين كل صف به مساحة لعرض 16 حرف/ رقم لهذا تسمى 2×16.
أطراف التوصيل وعددها 16:
1) GND وهذا الطرف يوصل بالأرضي لمصدر التغذية (Ground)
2) Vcc لتشغيل الشاشة وهذا الطرف يوصل بالطرف الموجب لمصدر التغذية (5 volt)
3) Vee الخاص بمستوى إضاءة الشاشة Contrast ويوصل بمقاومة 1 كيلو أوم (Resistor 1 k ohm) ثم إلى الطرف الأرضي GND ويمكنك توصيل مقاومة متغيرة للتحكم بدرجة إضاءة الشاشة حسب رغبتك (طرفها الأول بالجهد الموجب والأخير بالأرضي والأوسط يوصل ب Vee)
4) RS وهو اختصار Reset ويوصل هذا الطرف بالأردوينو (طرف رقم D2)
5) R/W وهو اختصار Read/ write ويوصل هذا الطرف بالأرضي دائما (GND) لأننا سنستعمل خاصية الكتابة فقط وليست القراءة.
6) EN وهو اختصار Enable ويوصل هذا الطرف بالأردوينو (طرف رقم D3)
7-14) DB0:DB7 نستخدم هنا فقط الأربعة أطراف الأخيرة 4 – 5 – 6 – 7 لإرسال البيانات من الأردوينو إلي الشاشة وتوصل بالأردوينو بالترتيب: (D4 وحتى D7)
15) Led+ يستخدم للإضاءة الخلفية للشاشة ويوصل بمقاومة 1 كيلو أوم ثم إلي الجهد الموجب (5 volt) لتقليل شدة إضاءة الشاشة الخلفية.
16) Led- يستخدم للإضاءة الخلفية للشاشة ويوصل بالأرضي (GND)
قم بتوصيل الأطراف كما بالرسم الموضح فى البداية.
لتحميل ورقة البيانات datasheet الخاصة بالشاشة LCD 2×16 اضغط هنا ولتحميل نسخة أخرى اضغط هنا.
-
حساس الموجات فوق الصوتية Ultrasonic sensor
الرمز الخاص به: HC-SR04
هذا الحساس يستخدم الموجات ذات الترددات العالية (غير مسموعة للبشر) حوالي 40 كيلو هيرتز (40 K Hz)، في البداية يرسل الحساس نبضة قصيرة من الموجات الفوق صوتية ثم ينتظر إستقبال صدى هذة النبضة، ويحسب الزمن المستغرق لسفر النبضة ذهاباً وإياباً وباستخدام معلومة سرعة الصوت يقوم الحساس بحساب المسافة بينه وبين الجسم طبقا للمعادلة التالية :
المسافة = الزمن * السرعة
المسافة = ( الزمن المستغرق ÷ 2 ) × سرعة الصوت
يوجد في الحساس قطعتين إحداهما مسئولة عن الإرسال والأخرى مسئولة عن الاستقبال.
أطراف الحساس
يوجد من الحساس نوعين أحدهما له 4 أطراف كما بالصورة وهم:
- طرف التغذية Vcc
- طرف Trigger الدخل
- طرف Echo الخرج
- طرف الأرضي Ground
والنوع الآخر له 3 أطراف فقط
- طرف الأرضي GND
- طرف التغذية 5v
- طرف إشارة الخرج SIG
ملاحظات هامة حول استخدام حساس الموجات فوق الصوتية كما توضحها الصورة التالية:
- يغطى الحساس مسافة 3 متر فقط.
- يجب أن يكون الجسم المراد قياس بعده أمام الحساس مباشرة (خط مستقيم) وليس فى مسار آخر.
- لا يفضل أن يكون الجسم صغيراً جداً.
- لا يفضل أن يكون الجسم ناعماً جداً وذلك لضمان انعكاس الموجات بشكل مباشر وسليم إلى الحساس مرة أخرى.
لهذا الحساس استخدامات عديدة منها:
- قياس قطر الجسم.
- قياس المسافة.
- قياس الإرتفاع.
- قياس عمق السائل فى خزان.
- عمل عداد للأجسام.
- استخدام الحساس في قياس ارتفاع منسوب المياه.
- استخدام الحساس لتحديد الاماكن الفارغة في مناطق ركن السيارات.
- استخدام الحساس في السيارات لتحديد مدى الاقتراب من الجدار الخلفي.
واستخدامات أخرى عديدة يمكنك البحث والتجربة بنفسك.
لتحميل ورقة البيانات datasheet الخاصة بحساس الموجات فوق الصوتية اضغط هنا.
-
لوحة اختبار الدوائر Bread board
هذه اللوحة مفيدة جداً في التجارب، يمكنك توصيل عناصر دائرتك عليه للتأكد من عملها بالشكل السليم وعمل التعديلات عليها قبل صناعتها على لوحة نحاسية مطبوعة، أو لمجرد التجربة فقط وذلك لسهولة التوصيلات كما سنرى.
تحتوي معظم اللوحات هذه على صفين على الجوانب أحدهما أحمر والآخر أزرق كما بالصورة بالأسفل (A و D)، وكل النقاط في طول هذا الصف متصلة ببعض.
باقي النقاط في المنتصف يمين ويسار الفراغ المنتصف (B و C) مقسمة طولياً وليس أفقياً كما بالأحمر والأزرق، والصورة التالية توضح لك النقاط المتصلة ببعضها:
ويتم تركيب العناصر بإدخال الأطراف المعدنية في الفراغات، والعناصر المراد توصيلها معاً يتم إدخال الأطراف في نفس العمود (حيث كل 4 نقاط رأسية متصلة ببعض).
ملحوظة: الصفين الموجب يمين ويسار اللوحة غير متصلين ببعض، والصفين الأرضي أيضاً لذا عليك توصيلهم بهذا الشكل:
وهذه الصورة توضح كيفية تغذية اللوحة بمصدر الجهد والأرضي من الأردوينو:
يمكنك تتبع الصورة في بداية الشرح لإتمام توصيل العناصر ببعضها، وللمزيد عن كيفية استخدام لوح التجارب (Breadboard) اضغط هنا.
-
مجموعة أسلاك التوصيل Connecting wires
ينصح بالحصول على مجموعة أسلاك للتوصيل مثل التي بالصورة وتستخدم في توصيل العناصر ببعضها أو التوصيل بأجزاء خارجية مثل لوحة الأردوينو والحساسات وغيرها.
وللمزيد عن استخدام الأسلاك (wires) اضغط هنا.
الكود البرمجي وتجربة وتشغيل الدائرة
كما وضحنا سابقاً أنه يوجد نوعان، أحدهما ذو 4 أطراف وهو المنتشر في الأسواق وهذا الكود التالي خاص به، أما النوع ذو 3 أطراف فيوجد فى موقع circuits.io الخاص بالمحاكاة حيث أن الحساس المدرج هناك ذو 3 أطراف ومرفق به الكود.
#include // تضمين مكتبة الأكواد الخاصة بالشاشة
#define trigger 1 //تعريف متغير بقيمة 1 لتوصيل طرف التريجر الخاص بالحساس
#define echo 0 //تعريف متغير بقيمة 0 لتوصيل طرف إيكو الخاص بالحساس
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //تعريف طرف توصيل حساس الحركة بالأردوينو
float the_time = 0, the_distance = 0; //تعريف متغيرين لتخزين الزمن والمسافة
void setup() //دالة الإعداد وتنفذ مرة واحدة فقط فى بداية البرنامج
{ //كل الأوامر التالية بين القوسين ضمن هذه الدالة
lcd.begin(16, 2); //أمر لبدء تشغيل الشاشة
lcd.print(" Ultrasonic "); //أمر طباعة رسالة تعريفية للدائرة
lcd.setCursor(0, 1);
lcd.print(" Distance Meter");
delay(2000);
lcd.clear();
lcd.print(" ARABS MAKERS ");
delay(2000); //أمر انتظار ثانيتين
lcd.clear(); //أمر مسح الشاشة
}
void loop() //دالة التكرار وتنفذ باستمرار طالما يوجد تغذية كهرباء للأردوينو
{
pinMode(trigger, OUTPUT); //تعريف طرف تريجر كخرج
pinMode(echo, INPUT); //تعريف طرف إيكو كدخل
digitalWrite(trigger, LOW); //إرسال صفر لطرف تريجر
delayMicroseconds(2); //أمر انتظار 2 ميكرو ثانية
digitalWrite(trigger, HIGH); //إرسال 1 لطرف تريجر لتفعيل الحساس لبدء إرسال نبضة
delayMicroseconds(10);
digitalWrite(trigger, LOW);
delayMicroseconds(2);
the_time = pulseIn(echo, HIGH); //دالة قراءة البيانات من طرف إيكو لاستخراج قيمة الزمن
the_distance = the_time * 340 / 20000; //معادلة استخراج المسافة باستخدام الزمن
lcd.clear();
lcd.print("Distance :");
lcd.setCursor(0, 1);
lcd.print(the_distance); //طباعة المسافة بالمتر
lcd.print("cm , ");
lcd.print(the_distance / 100); //طباعة المسافة بالسنتيمتر
lcd.print("m");
delay(1000);
}
نفتح برنامج الأردوينو ونُنشئ ملف مشروع جديد بالاسم الذي تريده واكتب الكود السابق فيه واحفظه عندك علي جهازك، ثم قم بتوصيل لوحة الأردوينو بالكمبيوتر لديك وارفع الكود إلى لوحة الأردوينو (upload).
ملحوظات هامة
- توصيل أطراف الحساس بالأردوينو 0 – 1 يجب فصلهم عند تحميل الكود، حيث أن إرسال الكود من الكمبيوتر إلى المتحكم الدقيق (الميكروكنترولر) يتم عن طريق هذين الطرفين (serial) فيجب فصل أى عنصر متصل بهما لحين إنهاء إرسال الكود. (معلومة هامة ويمكنك توصيل الحساس بأى طرفين آخرين وتعديل أرقام الأطراف فى البرنامج لا مشكلة)
- الحساس فى السوق 4 أطراف والحساس فى المحاكاة 3 أطراف فقط لذلك يوجد كودين مختلفين.
يمكنك تجربة محاكاة الدائرة من هنا، وفى هذا الرابط ستجد الدائرة مرسومة كما هو مُوضح بالأعلى، للتشغيل اضغط على زر Start Simulation لبدء المحاكاة.
ويمكنك تحميل رسم وتصميم الدائرة ببرنامج Fritzing من هنا وملف كود الأردوينو من هنا.
ولتحميل برنامج Fritzing المجاني من خلال الموقع الخاص اضغط هنا.
ويمكنك أيضاً البحث في الموقع عن تصميمات ورسومات لدوائر مختلفة واسعة المجال وتطبيقات متنوعة ورائعة (جربها الآن).
أتمنى أن يكون الدرس مفيداً لكم.
أضف تعليق