كيف يمكن قياس المسافة بين نقطتين باستخدام Arduino؟

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



قياس المسافة باستخدام اردوينو

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



كيفية استخدام Arduino ومستشعر الموجات فوق الصوتية لقياس المسافة؟

كما نعلم الملخص وراء المشروع ، دعونا نمضي قدمًا ونجمع المزيد من المعلومات لبدء المشروع.



الخطوة 1: تجميع المكونات (الأجهزة)

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



  • أسلاك العبور
  • محول 5 فولت تيار متردد إلى تيار مستمر (× 2)

الخطوة 2: تجميع المكونات (البرنامج)

  • Proteus 8 Professional (يمكن تنزيله من هنا )

بعد تنزيل Proteus 8 Professional ، صمم الدائرة عليه. لقد قمت بتضمين محاكاة البرامج هنا حتى يكون من الملائم للمبتدئين تصميم الدائرة وإجراء الاتصالات المناسبة على الأجهزة.

الخطوة 3: عمل HCR-05

نظرًا لأننا نعرف الآن الملخص الرئيسي لمشروعنا ، فلنتحرك قدمًا ونستعرض دراسة موجزة لعمل HCR-05 . يمكنك فهم العمل الرئيسي لهذا المستشعر من خلال الرسم التخطيطي التالي.

يحتوي هذا المستشعر على دبابيس ، دبوس الزناد ، و دبوس ايكو كلاهما يستخدم لقياس المسافة بين نقطتين معينتين. تبدأ العملية بإرسال موجة فوق صوتية من جهاز الاستشعار. تتم هذه المهمة عن طريق تشغيل دبوس المثلث لـ 10us. يتم إرسال دفقة من 8 موجات فوق صوتية من جهاز الإرسال بمجرد الانتهاء من هذه المهمة. ستنتقل هذه الموجة في الهواء وبمجرد أن تصطدم بجسم ما في طريقها ، فإنها ستضرب وتتلقى بواسطة جهاز الاستقبال المدمج في المستشعر.



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

لجعل جهاز الاستشعار بالموجات فوق الصوتية الارسال فقط، فقط اجعل دبوس المثلث بمثابة دبوس الإخراج الخاص بك وأرسل نبضة عالية إلى هذا الدبوس لمدة 10 us. سيبدأ انفجار الموجات فوق الصوتية بمجرد القيام بذلك. لذلك ، عندما يتم إرسال الموجة ، يتم التحكم فقط في دبوس الزناد لجهاز الاستشعار بالموجات فوق الصوتية.

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

الخطوة 4: عمل الدائرة

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

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

الخطوة 5: تجميع المكونات

على الرغم من أننا نستخدم فقط جهاز إرسال أحد المستشعرات فوق الصوتية وجهاز استقبال الآخر ، إلا أنه من الضروري توصيل جميع المسامير الأربعة الخاصة بـ أجهزة الاستشعار بالموجات فوق الصوتية لاردوينو. لتوصيل الدائرة ، اتبع الخطوات الواردة أدناه:

  1. خذ جهازي استشعار بالموجات فوق الصوتية. قم بتغطية مستقبل المستشعر الأول وجهاز الإرسال الثاني للحساس. استخدم شريط لاصق أبيض لهذا الغرض وتأكد من تغطية هذين الاثنين بالكامل بحيث لا تترك أي إشارة جهاز إرسال المستشعر الثاني ولا تدخل أي إشارة إلى مستقبل المستشعر الأول.
  2. قم بتوصيل اثنين من Arduino على لوحين منفصلين وقم بتوصيل أجهزة الاستشعار الخاصة بهما. قم بتوصيل المشغل Pin إلى pin9 من Arduino و ecoPin إلى pin10 من Arduino. قم بتشغيل جهاز الاستشعار بالموجات فوق الصوتية بواسطة 5V من Arduino وقم بتجميع جميع الأسباب.
  3. قم بتحميل كود جهاز الاستقبال إلى Arduino الخاص بجهاز الاستقبال ورمز جهاز الإرسال إلى Arduino الخاص بجهاز الإرسال.
  4. افتح الآن الشاشة التسلسلية للجانب المستلم ولاحظ المسافة التي يتم قياسها.

يبدو مخطط الدائرة لهذا المشروع كما يلي:

مخطط الرسم البياني

الخطوة 6: بدء استخدام Arduino

إذا لم تكن معتادًا على Arduino IDE ، فلا تقلق لأن الإجراء خطوة بخطوة لإعداد واستخدام Arduino IDE مع لوحة متحكم موضحة أدناه.

  1. قم بتنزيل أحدث إصدار من Arduino IDE من اردوينو.
  2. قم بتوصيل لوحة Arduino Nano بجهاز الكمبيوتر المحمول وافتح لوحة التحكم. في لوحة التحكم ، انقر فوق الأجهزة والصوت . انقر الآن على الأجهزة والطابعات. هنا ، ابحث عن المنفذ الذي تتصل به لوحة وحدة التحكم الدقيقة الخاصة بك. في حالتي هو كذلك COM14 لكنه يختلف على أجهزة الكمبيوتر المختلفة.

    البحث عن ميناء

  3. انقر فوق قائمة الأداة. وضبط اللوحة على اردوينو نانو من القائمة المنسدلة.

    لوحة الإعداد

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

    منفذ الإعداد

  5. في قائمة الأداة نفسها ، اضبط المعالج على ATmega328P (قديم الإقلاع ).

    المعالج

  6. قم بتنزيل الكود المرفق أدناه والصقه في Arduino IDE. اضغط على رفع زر لنسخ الرمز الموجود على لوحة وحدة التحكم الدقيقة.

    رفع

لتنزيل الكود ، انقر هنا.

الخطوة السابعة: فهم المدونة

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

كود لجهة الإرسال

1. في البداية ، تتم تهيئة دبابيس لوحة Arduino التي سيتم توصيلها بجهاز الاستشعار بالموجات فوق الصوتية. ثم يتم الإعلان عن المتغيرات التي سيتم استخدامها لتخزين القيم لحساب الوقت والمسافة أثناء وقت تشغيل الكود.

// يحدد أرقام المسامير const int trigPin = 9 ؛ // قم بتوصيل دبوس المثلثات لمستشعر الموجات فوق الصوتية بـ pin9 من Arduino const int echoPin = 10 ؛ // قم بتوصيل دبوس eco للمستشعر بالموجات فوق الصوتية بـ pin10 من Arduino // يحدد المتغيرات طويلة الأمد ؛ // متغير لتخزين الوقت الذي تستغرقه الموجة فوق الصوتية t مسافة السفر ؛ // متغير لتخزين المسافة المحسوبة

2. الإعداد باطل() هي وظيفة تعمل مرة واحدة فقط في البداية عند تشغيل اللوحة أو الضغط على زر التمكين. هنا يتم الإعلان عن استخدام كلا دبابيس Arduino كـ إدخال و انتاج . تم ضبط Baudrate في هذه الوظيفة. معدل الباود هو السرعة بالبت في الثانية التي يتصل بها الميكروكونترولر مع المستشعر فوق الصوتي.

إعداد باطل () {pinMode (trigPin، OUTPUT) ؛ // يعين trigPin كإخراج pinMode (echoPin ، INPUT) ؛ // يعين echoPin باعتباره إدخال Serial.begin (9600) ؛ // يبدأ الاتصال التسلسلي}

3. حلقة فارغة() هي وظيفة يتم تشغيلها مرارًا وتكرارًا في حلقة. هنا قمنا بترميز الميكروكونترولر بحيث يرسل إشارة عالية إلى دبوس المشغل الخاص بجهاز الاستشعار فوق الصوتي ، لمدة 20 ميكروثانية ويرسل إشارة منخفضة إليه.

void loop () {// يعين trigPin على الحالة HIGH لمدة 10 ثوانٍ دقيقة digitalWrite (trigPin ، HIGH) ؛ // إرسال إشارة عالية عند بدء تأخير المستشعر الأول ميكروثانية (10) ؛ // انتظر 10 ثوانٍ صغيرة من الكتابة الرقمية (trigPin ، LOW) ؛ // إرسال إشارة منخفضة إلى مشغل تأخير المستشعر الأول (2) ؛ // انتظر 0.2 ثانية}

رمز جهة الاستقبال

1. في البداية ، تتم تهيئة دبابيس لوحة Arduino التي سيتم توصيلها بجهاز الاستشعار بالموجات فوق الصوتية. ثم يتم الإعلان عن المتغيرات التي سيتم استخدامها لتخزين القيم لحساب الوقت والمسافة أثناء وقت تشغيل الكود.

// يحدد أرقام المسامير const int trigPin = 9 ؛ // قم بتوصيل دبوس المثلثات لمستشعر الموجات فوق الصوتية بـ pin9 من Arduino const int echoPin = 10 ؛ // قم بتوصيل دبوس eco للمستشعر بالموجات فوق الصوتية بـ pin10 من Arduino // يحدد المتغيرات طويلة الأمد ؛ // متغير لتخزين الوقت الذي تستغرقه الموجة فوق الصوتية t مسافة السفر ؛ // متغير لتخزين المسافة المحسوبة

2. الإعداد باطل() هي وظيفة تعمل مرة واحدة فقط في البداية عند تشغيل اللوحة أو الضغط على زر التمكين. هنا يتم الإعلان عن استخدام كلا دبابيس Arduino كـ INPUT و OUTPUT. تم ضبط Baudrate في هذه الوظيفة. معدل الباود هو السرعة بالبت في الثانية التي يتصل بها الميكروكونترولر مع المستشعر فوق الصوتي.

إعداد باطل () {pinMode (trigPin، OUTPUT) ؛ // يعين trigPin كإخراج pinMode (echoPin ، INPUT) ؛ // يعين echoPin باعتباره إدخال Serial.begin (9600) ؛ // يبدأ الاتصال التسلسلي}

3. Trigger_US () باطل هي وظيفة سيتم استدعاؤها من أجل Fake Triggering of the trig pin of the second ultrasonic sensor. سنقوم بمزامنة وقت الزناد لدبوس المثلث لكل من المستشعرات.

void Trigger_US () {// Fake trigger the US sensor digitalWrite (trigPin، HIGH)؛ // أرسل إشارة عالية إلى دبوس الزناد لتأخير المستشعر الثاني ميكروثانية (10) ؛ // انتظر 10 ثوانٍ microWrite (trigPin ، LOW) ؛ // أرسل إشارة منخفضة إلى مرسل المشغل الثاني}

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

void Calc () // وظيفة لحساب الوقت الذي تستغرقه الموجات فوق الصوتية للسفر {المدة = 0 ؛ // المدة المحددة في البداية على صفر Trigger_US () ؛ // استدعاء وظيفة Trigger_US أثناء (digitalRead (echoPin) == HIGH) ؛ // بينما حالة eo pin في تأخير كبير (2) ؛ // ضع تأخيرًا قدره 0.2 ثانية Trigger_US () ؛ // استدعاء مدة وظيفة Trigger_US = pulseIn (echoPin ، HIGH) ؛ // حساب الوقت المستغرق}

5. هنا في حلقة فارغة() وظيفة ، نقوم بحساب المسافة باستخدام الوقت الذي تستغرقه إشارة الموجات فوق الصوتية للانتقال من المستشعر الأول إلى المستشعر الثاني.

حلقة فارغة () {Pdistance = مسافة ؛ احسب () ؛ // استدعاء مسافة دالة Calc () = المدة * 0.034 ؛ // حساب المسافة التي تغطيها الموجة فوق الصوتية إذا (Pdistance == مسافة || Pdistance == مسافة + 1 || Pdistance == مسافة 1) {Serial.print ('Measured Distance:') ؛ // طباعة على الشاشة التسلسلية Serial.println (مسافة / 2) ؛ // print on serial monitor} //Serial.print('Distance: ') ؛ //Serial.println (المسافة / 2) ؛ تأخير (500) ؛ // انتظر 0.5 ثانية}