لكي ينبض أي مشروع بالحياة ، نحتاج إلى استخدام أجهزة استشعار. تعمل المستشعرات كعيون وآذان لجميع التطبيقات المضمنة ، فهي تساعد المتحكم الدقيق الرقمي على فهم ما يحدث بالفعل في هذا العالم التناظري الحقيقي. في هذا البرنامج التعليمي سوف نتعلم كيفية واجهة جهاز الاستشعار بالموجات فوق الصوتية HC-SR04 مع متحكم PIC.
و -SR04 HC هو استشعار بالموجات فوق الصوتية والتي يمكن استخدامها لقياس المسافة بين مكان 2cm ل 450cm (نظريا). لقد أثبت هذا المستشعر جدارته من خلال ملاءمته للعديد من المشاريع التي تتضمن اكتشاف العوائق وقياس المسافة ورسم خرائط البيئة وما إلى ذلك. في نهاية هذه المقالة سوف تتعلم كيفية عمل هذا المستشعر وكيفية توصيله بوحدة التحكم الدقيقة PIC16F877A لقياس المسافة والعرض على شاشة LCD. تبدو مثيرة للاهتمام حق !! اذا هيا بنا نبدأ…
المواد المطلوبة:
- PIC16F877A MCU مع إعداد البرمجة
- شاشة LCD 16 * 2
- جهاز استشعار بالموجات فوق الصوتية (HC-SR04)
- توصيل الأسلاك
كيف يعمل جهاز الاستشعار بالموجات فوق الصوتية؟
قبل أن نصل إلى أبعد من ذلك ، يجب أن نعرف كيف يعمل مستشعر الموجات فوق الصوتية حتى نتمكن من فهم هذا البرنامج التعليمي بشكل أفضل. جهاز الاستشعار بالموجات فوق الصوتية المستخدم في هذا المشروع موضح أدناه.
كما ترى ، لها عينان دائريتان مثل الإسقاطات وأربعة دبابيس تخرج منه. إن الإسقاطات الشبيهة بالعين هي الموجات فوق الصوتية (المشار إليها فيما يلي باسم الموجة الأمريكية) المرسل والمستقبل. يرسل جهاز الإرسال موجة أمريكية بتردد 40 هرتز ، وتنتقل هذه الموجة عبر الهواء وتنعكس مرة أخرى عندما تستشعر جسمًا ما. يلاحظ المتلقي الموجات العائدة. الآن نحن نعلم الوقت الذي يستغرقه انعكاس هذه الموجة والعودة وسرعة الموجة الأمريكية عالمية أيضًا (3400 سم / ثانية). باستخدام هذه المعلومات وصيغ المدرسة الثانوية أدناه ، يمكننا حساب المسافة المقطوعة.
المسافة = السرعة × الوقت
الآن بعد أن عرفنا كيف يعمل المستشعر الأمريكي ، دعنا نتمكن من ربطه بأي وحدة MCU / وحدة المعالجة المركزية باستخدام الدبابيس الأربعة. هذه المسامير الأربعة هي Vcc و Trigger و Echo و Ground على التوالي. تعمل الوحدة على + 5 فولت ، وبالتالي يتم استخدام Vcc والدبوس الأرضي لتشغيل الوحدة. الدبابيسان الأخريان هما دبابيس الإدخال / الإخراج التي نستخدمها للتواصل مع MCU الخاص بنا. و ينبغي إعلان دبوس الزناد كما دبوس الانتاج وجعل عالية ل10US، وهذا سوف يحيل موجة الولايات المتحدة في الهواء إلى 8 دورة انفجار الصوتية. بمجرد ملاحظة الموجة ، سوف يرتفع دبوس Echo في الفترة الزمنية المحددة التي اتخذتها الموجة الأمريكية للعودة إلى وحدة المستشعر. ومن ثم سيتم الإعلان عن دبوس Echo هذا كمدخلوسيُستخدم مؤقت لقياس طول الدبوس. يمكن فهم ذلك أيضًا من خلال مخطط التوقيت أدناه.
آمل أن تكون قد توصلت إلى طريقة مبدئية لربط هذا المستشعر بالموافقة المسبقة عن علم. سنستخدم وحدة Timer ووحدة LCD في هذا البرنامج التعليمي وأفترض أنك على دراية بكليهما ، إذا لم يكن الأمر كذلك ، فالرجاء الرجوع إلى البرنامج التعليمي المعني أدناه لأنني سأتخطى معظم المعلومات المتعلقة به.
- واجهة LCD مع متحكم PIC
- فهم الموقتات في PIC Microcontroller
مخطط الرسم البياني:
يظهر الرسم التخطيطي الكامل للدائرة لربط حساس الموجات فوق الصوتية مع PIC16F877A أدناه:
كما هو موضح ، لا تتضمن الدائرة أكثر من شاشة LCD ومستشعر الموجات فوق الصوتية نفسه. يمكن تشغيل المستشعر الأمريكي بجهد +5 فولت ، ومن ثم يتم تشغيله مباشرة بواسطة منظم الجهد 7805. يحتوي المستشعر على دبوس إخراج واحد (دبوس الزناد) متصل بالدبوس 34 (RB1) ودبوس الإدخال (Echo pin) متصل بالدبوس 35 (RB2). يتم توضيح اتصال الدبوس الكامل في الجدول أدناه.
رقم S. |
رقم التعريف الشخصي PIC |
اسم الدبوس |
متصلا |
1 |
21 |
RD2 |
RS لشاشات الكريستال السائل |
2 |
22 |
RD3 |
E لشاشات الكريستال السائل |
3 |
27 |
RD4 |
D4 من شاشات الكريستال السائل |
4 |
28 |
RD5 |
D5 من شاشات الكريستال السائل |
5 |
29 |
RD6 |
D6 من شاشات الكريستال السائل |
6 |
30 |
RD7 |
D7 من شاشات الكريستال السائل |
7 |
34 |
RB1 |
الزناد من الولايات المتحدة |
8 |
35 |
RB2 |
صدى الولايات المتحدة |
برمجة الميكروكونترولر PIC الخاص بك:
يتم تقديم البرنامج الكامل لهذا البرنامج التعليمي في نهاية هذه الصفحة ، وقد أوضحت أدناه الكود إلى أجزاء كاملة ذات معنى صغير لكي تفهمها. كما ذكرنا سابقًا ، يشتمل البرنامج على مفهوم واجهة LCD والموقت الذي لن يتم شرحه بالتفصيل في هذا البرنامج التعليمي نظرًا لأننا قمنا بالفعل بتغطيتها في البرامج التعليمية السابقة.
في الداخل ، الوظيفة الرئيسية نبدأ بتهيئة دبابيس الإدخال والإخراج والسجلات الأخرى كالمعتاد. نحدد دبابيس IO لشاشات الكريستال السائل ومستشعر الولايات المتحدة ونبدأ أيضًا في تسجيل Timer 1 من خلال ضبطه للعمل على 1: 4 قبل عددي واستخدام الساعة الداخلية (Fosc / 4)
TRISD = 0x00 ؛ // تم الإعلان عن PORTD كناتج للتفاعل مع LCD TRISB0 = 1 ؛ // حدد دبوس RB0 كمدخل لاستخدامه كمدخل للمقاطعة TRISB1 = 0 ؛ // يتم إرسال دبوس الزناد لجهاز الاستشعار الأمريكي كدبوس إخراج TRISB2 = 1 ؛ // تم تعيين دبوس الصدى لمستشعر الولايات المتحدة كدبوس إدخال TRISB3 = 0 ؛ // RB3 هو طرف الإخراج لـ LED T1CON = 0x20 ؛ // 4 قبل عددي وساعة داخلية
Timer 1 هو مؤقت 16 بت مستخدم في PIC16F877A ، يتحكم سجل T1CON في معلمات وحدة المؤقت وسيتم تخزين النتيجة في TMR1H و TMR1L نظرًا لأنها نتيجة 16 بت سيتم تخزين أول 8 بت في TMR1H و 8 التالية في TMR1L. يمكن تشغيل أو إيقاف تشغيل هذا المؤقت باستخدام TMR1ON = 0 و TMR1ON = 1 على التوالي.
الآن ، المؤقت جاهز للاستخدام ، لكن علينا إرسال موجات الولايات المتحدة خارج المستشعر ، للقيام بذلك علينا إبقاء دبوس المشغل مرتفعًا لمدة 10uS ، ويتم ذلك عن طريق الكود التالي.
الزناد = 1 ؛ __delay_us (10) ؛ الزناد = 0 ؛
كما هو موضح في مخطط التوقيت أعلاه ، سيبقى دبوس Echo منخفضًا حتى تعود الموجة مرة أخرى ، ثم ترتفع وتبقى مرتفعة للوقت المحدد الذي تستغرقه الموجات للعودة مرة أخرى. يجب قياس هذا الوقت بواسطة وحدة Timer 1 ، والتي يمكن إجراؤها بواسطة السطر أدناه
بينما (صدى == 0) ؛ TMR1ON = 1 ؛ بينما (صدى == 1) ؛ TMR1ON = 0 ؛
بمجرد أن يتم قياس الوقت ، سيتم حفظ القيمة الناتجة في السجلات TMR1H و TMR1L ، يجب تجميع هذه السجلات لتجميعها للحصول على قيمة 16 بت. يتم ذلك باستخدام السطر أدناه
time_taken = (TMR1L - (TMR1H << 8)) ؛
هذه time_taken ستكون في شكل بايت ، للحصول على قيمة الوقت الفعلية ، يتعين علينا استخدام الصيغة أدناه.
الوقت = (قيمة التسجيل 16 بت) * (1 / الساعة الداخلية) * (المقياس المسبق) الساعة الداخلية = Fosc / 4 حيث في حالتنا ، Fosc = 20000000Mhz والمقياس المسبق = 4 ومن ثم ستكون قيمة الساعة الداخلية 5000000 ميجاهرتز وقيمة الوقت ستكون الوقت = (قيمة التسجيل 16 بت) * (1/5000000) * (4) = (قيمة التسجيل 16 بت) * (4/5000000) = (قيمة التسجيل 16 بت) * 0.0000008 ثانية (OR) الوقت = (قيمة التسجيل 16 بت) * 0.8 ميكرو ثانية
في برنامجنا ، يتم تخزين قيمة سجل 16 بت في متغير time_taken ، ومن ثم يتم استخدام السطر أدناه لحساب time_taken بالثواني الصغيرة
time_taken = time_taken * 0.8 ؛
بعد ذلك علينا إيجاد كيفية حساب المسافة. كما نعلم المسافة = السرعة * الوقت. ولكن هنا يجب تقسيم النتيجة على 2 لأن الموجة تغطي كلاً من مسافة الإرسال ومسافة الاستقبال. سرعة الموجة (صوت) لنا هي 34000 سم / ثانية.
المسافة = (السرعة * الوقت) / 2 = (34000 * (قيمة التسجيل 16 بت) * 0.0000008) / 2 المسافة = (0.0272 * قيمة التسجيل 16 بت) / 2
لذلك يمكن حساب المسافة بالسنتيمتر كما هو موضح أدناه:
المسافة = (0.0272 * time_taken) / 2 ؛
بعد حساب قيمة المسافة والوقت المستغرق ، يتعين علينا ببساطة عرضها على شاشة LCD.
قياس المسافة باستخدام PIC والمستشعر فوق الصوتي:
بعد إجراء الاتصالات وتحميل الكود ، يجب أن يبدو إعدادك التجريبي كما هو موضح في الصورة أدناه.
تم إنشاء لوحة PIC Perf ، التي تظهر في هذه الصورة ، لسلسلة دروس PIC الخاصة بنا ، والتي تعلمنا فيها كيفية استخدام متحكم PIC. قد ترغب في العودة إلى دروس PIC Microcontroller التعليمية باستخدام MPLABX و XC8 إذا كنت لا تعرف كيفية نسخ برنامج باستخدام Pickit 3 ، لأنني سأتخطى كل هذه المعلومات الأساسية.
الآن ضع شيئًا أمام المستشعر ويجب أن يعرض مدى بُعد الكائن عن المستشعر. يمكنك أيضًا ملاحظة الوقت المستغرق في العرض بالثواني الدقيقة لإرسال الموجة والعودة مرة أخرى.
يمكنك تحريك الكائن في المسافة المفضلة لديك والتحقق من القيمة المعروضة على شاشة LCD. تمكنت من قياس المسافة من 2 سم إلى 350 سم بدقة 0.5 سم. هذه نتيجة مرضية تماما! آمل أن تكون قد استمتعت بالبرنامج التعليمي وتعلمت كيفية صنع شيء ما بنفسك. إذا كان لديك أي شكوك قم بإسقاطها في قسم التعليقات أدناه أو استخدم المنتديات
تحقق أيضًا من توصيل مستشعر الموجات فوق الصوتية بوحدات التحكم الدقيقة الأخرى:
- قياس المسافة من Arduino & Ultrasonic
- قم بقياس المسافة باستخدام جهاز استشعار الموجات فوق الصوتية Raspberry Pi و HCSR04
- قياس المسافة باستخدام HC-SR04 و AVR متحكم