- المواد المطلوبة:
- مخطط الرسم البياني:
- كيف تعمل وحدة HC-SR04 بالفعل:
- قياس المسافة بين جهازي استشعار بالموجات فوق الصوتية (HC-SR04):
- برنامج جهاز الاستشعار المرسل:
- برنامج جهاز استشعار جهاز الاستقبال:
- العمل:
- فكرة مرتجلة - معايرة المستشعر باستخدام مسافة معروفة:
يستخدم مستشعر الموجات فوق الصوتية (HC-SR04) بشكل شائع للعثور على مسافة جسم من نقطة معينة. لقد كان من السهل جدًا القيام بذلك باستخدام Arduino ، كما أن الكود بسيط جدًا. لكن في هذه المقالة سنجرب شيئًا مختلفًا باستخدام مستشعرات HC-SR04 الشهيرة. سنحاول حساب المسافة بين جهازي استشعار بالموجات فوق الصوتية ، أي أننا سنجعل أحدهما يعمل كجهاز إرسال والمستشعر الآخر يعمل كجهاز استقبال. من خلال القيام بذلك ، يمكننا تتبع موقع جهاز إرسال واحد باستخدام العديد من أجهزة استقبال الموجات فوق الصوتية ، ويسمى هذا التتبع بالتثليث ويمكن استخدامه في الإرساء التلقائي لمتابعي حقائب الروبوتات وغيرها من التطبيقات المماثلة. إيجاد المسافة بين جهازي استشعار أمريكيين قد تبدو مهمة بسيطة إلى حد ما ولكني واجهت بعض التحديات التي تمت مناقشتها في هذا المشروع.
التقنية التي تمت مناقشتها في هذه المقالة ليست دقيقة إلى حد ما وقد لا تكون مفيدة في أي أنظمة حقيقية بدون تعديلات. خلال وقت هذه التوثيق ، لم أجد أي شخص يحصل على نتائج قريبة من نتائجي ، لذلك شاركت للتو آرائي حول كيفية تشغيله حتى لا يحتاج الأشخاص الذين يحاولون ذلك إلى إعادة اختراع العجلة.
المواد المطلوبة:
- Arduino (2Nos) - أي طراز
- وحدة HCSR04 (عدد 2)
مخطط الرسم البياني:
على الرغم من أننا سنصنع مستشعرًا واحدًا أمريكيًا (فوق صوتي) للعمل كجهاز إرسال والآخر كجهاز استقبال ، فمن الضروري توصيل جميع دبابيس المستشعرات الأربعة بـ Arduino. لماذا ينبغي لنا؟ سيتم مناقشة المزيد من ذلك لاحقًا ، ولكن في الوقت الحالي سيكون مخطط الدائرة على النحو التالي
كما ترى ، فإن مخطط الدائرة لكل من المرسل والمستقبل متطابقان. تحقق أيضًا من: واجهة مستشعر Arduino بالموجات فوق الصوتية
كيف تعمل وحدة HC-SR04 بالفعل:
قبل المضي قدمًا ، دعنا نفهم كيفية عمل مستشعر HC-SR04. سيساعدنا مخطط التوقيت أدناه على فهم العمل.
يحتوي المستشعر على دبابيس Trigger و Echo والتي تستخدم لقياس المسافة كما هو موضح في مخطط التوقيت. أولاً لبدء القياس ، يجب أن نرسل موجة فوق صوتية من جهاز الإرسال ، ويمكن القيام بذلك عن طريق ضبط دبوس المشغل عالياً لـ 10uS. بمجرد الانتهاء من ذلك ، سيرسل دبوس جهاز الإرسال 8 موجات صوتية من الولايات المتحدة. ستصطدم هذه الموجة الأمريكية بجسم يرتد إلى الوراء وسيستقبلها جهاز الاستقبال.
يوضح مخطط التوقيت هنا أنه بمجرد أن يستقبل جهاز الاستقبال الموجة ، فإنه سيجعل دبوس Echo يرتفع لمدة زمنية تعادل الوقت الذي تستغرقه الموجة في الانتقال من المستشعر الأمريكي والعودة إلى المستشعر. لا يبدو أن مخطط التوقيت هذا صحيح.
لقد غطيت جزء Tx (جهاز الإرسال) من المستشعر الخاص بي وتحققت مما إذا كانت نبضات Echo عالية ، ونعم أنها ترتفع. هذا يعني أن نبض الصدى لا ينتظر الموجة الأمريكية (فوق الصوتية) ليتم استقبالها. بمجرد أن تنقل الموجة الأمريكية ، فإنها ترتفع وتظل مرتفعة حتى تعود الموجة مرة أخرى. لذا يجب أن يكون مخطط التوقيت الصحيح شيئًا مثل هذا الموضح أدناه (آسف لمهاراتي الكتابية الضعيفة)
جعل HC-SR04 يعمل كجهاز إرسال فقط:
من السهل جدًا صنع HC-SR04 للعمل كجهاز إرسال فقط. كما هو موضح في الرسم التخطيطي للوقت ، يجب عليك إعلان دبوس المشغل كدبوس إخراج وجعله يظل مرتفعًا لمدة 10 ميكروثانية. سيؤدي ذلك إلى بدء انفجار الموجات فوق الصوتية. لذلك عندما نريد إرسال الموجة ، يتعين علينا فقط التحكم في دبوس المشغل لمستشعر جهاز الإرسال ، والذي تم تقديم الرمز أدناه له.
جعل HC-SR04 يعمل كجهاز استقبال فقط:
كما هو موضح في مخطط التوقيت ، لا يمكننا التحكم في ارتفاع دبوس Echo لأنه مرتبط بدبوس المشغل. لذلك لا توجد طريقة يمكننا من خلالها جعل HC-SR04 يعمل كجهاز استقبال فقط. ولكن يمكننا استخدام الاختراق ، من خلال تغطية جزء جهاز الإرسال من المستشعر بشريط (كما هو موضح في الصورة أدناه) أو غطاء لا يمكن لموجة الولايات المتحدة الهروب خارج غلاف جهاز الإرسال ولن يتأثر دبوس Echo بهذه الموجة الأمريكية.
الآن لجعل دبوس الصدى مرتفعًا ، علينا فقط سحب دبوس الزناد الوهمي هذا لمدة 10 ميكروثانية. بمجرد أن يحصل مستشعر المستقبل هذا على الموجة الأمريكية المرسلة بواسطة مستشعر جهاز الإرسال ، سينخفض دبوس الصدى.
قياس المسافة بين جهازي استشعار بالموجات فوق الصوتية (HC-SR04):
لقد فهمنا حتى الآن كيفية جعل أحد المستشعرات يعمل كجهاز إرسال والمستشعر الآخر يعمل كجهاز استقبال. الآن ، يتعين علينا نقل الموجات فوق الصوتية من مستشعر الإرسال واستلامها مع مستشعر المستقبل والتحقق من الوقت الذي تستغرقه الموجة في الانتقال من جهاز الإرسال إلى جهاز الاستقبال ، يبدو الأمر سهلاً ، أليس كذلك؟ لكن للأسف! لدينا مشكلة هنا وهذا لن ينجح.
وحدة الإرسال ووحدة الاستقبال متباعدتان ، وعندما تتلقى وحدة الاستقبال الموجة الأمريكية من وحدة الإرسال ، فلن تعرف متى أرسل المرسل هذه الموجة المعينة. بدون معرفة وقت البدء لا يمكننا حساب الوقت المستغرق وبالتالي المسافة. لحل هذه المشكلة ، يجب جعل نبض الصدى لوحدة الاستقبال مرتفعًا تمامًا عندما تقوم وحدة الإرسال بإرسال الموجة الأمريكية. بمعنى آخر ، يجب تشغيل وحدة الإرسال ووحدة الاستقبال في نفس الوقت. يمكن تحقيق ذلك بالطريقة التالية.
في الرسم البياني أعلاه ، يمثل Tx مستشعر المرسل ويمثل Rx مستشعر المستقبل. كما هو موضح ، سيتم تصنيع مستشعر الإرسال لإرسال موجات أمريكية بتأخير دوري معروف ، هذا كل ما عليه فعله.
في مستشعر جهاز الاستقبال ، يتعين علينا بطريقة ما أن نجعل دبوس المشغل مرتفعًا تمامًا أثناء ارتفاع دبوس جهاز الإرسال. لذلك في البداية ، نجعل مشغل المستقبلات بشكل عشوائي يرتفع ويبقى مرتفعًا حتى ينخفض دبوس الصدى. سينخفض دبوس الصدى هذا فقط عندما يتلقى موجة أمريكية من جهاز الإرسال. وبمجرد انخفاضه ، يمكننا افتراض أن مستشعر جهاز الإرسال قد تم تشغيله للتو. الآن ، مع هذا الافتراض بمجرد انخفاض الصدى ، يمكننا انتظار التأخير المعروف ثم تشغيل مشغل المستقبلات. سيؤدي ذلك إلى مزامنة مشغل كل من جهاز الإرسال والاستقبال جزئيًا ، وبالتالي يمكنك قراءة مدة نبض الصدى الفورية باستخدام pulseIn () وحساب المسافة.
برنامج جهاز الاستشعار المرسل:
يمكن العثور على البرنامج الكامل لوحدة الإرسال في أسفل الصفحة. إنه لا يفعل شيئًا سوى تشغيل مستشعر جهاز الإرسال في فترة زمنية دورية.
digitalWrite (trigPin ، عالية) ؛ تأخير ميكروثانية (10) ؛ digitalWrite (trigPin ، LOW) ؛
لتشغيل جهاز استشعار ، يتعين علينا جعل دبوس المشغل مرتفعًا لمدة 10uS. رمز القيام بالشيء نفسه موضح أعلاه
برنامج جهاز استشعار جهاز الاستقبال:
في مستشعر الاستقبال ، قمنا بتغطية عين المرسل الخاصة بالمستشعر لجعلها وهمية كما تمت مناقشته سابقًا. الآن يمكننا استخدام التقنية المذكورة أعلاه لقياس المسافة بين جهازي استشعار. البرنامج الكامل موجود في أسفل هذه الصفحة. يتم شرح بعض الأسطر الهامة أدناه
Trigger_US () ، while (digitalRead (echoPin) == HIGH) ؛ تأخير ميكروثانية (10) ؛ Trigger_US () ، المدة = pulseIn (echoPin ، HIGH) ؛
في البداية نقوم بتشغيل المستشعر الأمريكي باستخدام الوظيفة Trigger_US () ثم ننتظر حتى يظل دبوس الصدى مرتفعًا باستخدام حلقة while. بمجرد انخفاضها ، ننتظر المدة المحددة مسبقًا ، يجب أن تتراوح هذه المدة بين 10 إلى 30 ميكروثانية والتي يمكن تحديدها باستخدام التجربة والخطأ (أو يمكنك استخدام الفكرة المرتجلة الواردة أدناه). بعد هذا التأخير ، قم بتشغيل الولايات المتحدة مرة أخرى باستخدام نفس الوظيفة ثم استخدم وظيفة pulseIn () لحساب مدة الموجة.
الآن باستخدام نفس الصيغ القديمة يمكننا حساب المسافة على النحو التالي
المسافة = المدة * 0.034 ؛
العمل:
قم بإجراء الاتصالات كما هو موضح في البرنامج. قم بتغطية جزء Tx من مستشعر جهاز الاستقبال كما هو موضح في الصورة. ثم قم بتحميل كود المرسل وكود المستقبل الموضحين أدناه لجهاز الإرسال والاستقبال Arduino على التوالي. افتح الشاشة التسلسلية لوحدة الاستقبال وستلاحظ المسافة بين وحدتين كما هو موضح في الفيديو أدناه.
ملاحظة: هذه الطريقة هي مجرد أيديولوجية وقد لا تكون دقيقة أو مرضية. ومع ذلك يمكنك تجربة الفكرة المرتجلة أدناه للحصول على نتائج أفضل.
فكرة مرتجلة - معايرة المستشعر باستخدام مسافة معروفة:
الطريقة التي تم شرحها حتى الآن بشكل غريب تبدو مرضية ، لكنها كانت كافية لمشروعي. ومع ذلك ، أود أيضًا مشاركة عيوب هذه الطريقة وطريقة التغلب عليها. أحد العوائق الرئيسية لهذه الطريقة هو أننا نفترض أن دبوس Echo الخاص بجهاز الاستقبال ينخفض مباشرة بعد أن يرسل مستشعر الإرسال الموجة الأمريكية وهذا غير صحيح لأن الموجة ستستغرق بعض الوقت للانتقال من جهاز الإرسال إلى جهاز الاستقبال. ومن ثم ، لن يكون مشغل جهاز الإرسال ومشغل جهاز الاستقبال في حالة تزامن تام.
للتغلب على هذا يمكننا معايرة المستشعر باستخدام مسافة معرفة في البداية. إذا كانت المسافة معروفة ، فسنعرف الوقت الذي تستغرقه الموجة الأمريكية للوصول إلى جهاز الاستقبال من جهاز الإرسال. دعونا نحتفظ بهذا الوقت على أنه Del (D) كما هو موضح أدناه.
الآن سوف نعرف بالضبط بعد مقدار الوقت الذي يجب أن نجعل فيه دبوس المشغل الخاص بجهاز الاستقبال مرتفعًا للمزامنة مع مشغل جهاز الإرسال. يمكن حساب هذه المدة عن طريق المعروف Delay (t) - Del (D). لم أتمكن من اختبار هذه الفكرة بسبب ضيق الوقت لذلك لست متأكدًا من مدى دقتها. لذلك إذا حاولت ذلك ، فأخبرني بالنتائج من خلال قسم التعليقات.