سنناقش في هذا البرنامج التعليمي ونصمم دائرة لقياس المسافة. تم تطوير هذه الدائرة عن طريق ربط مستشعر الموجات فوق الصوتية “HC-SR04” مع متحكم AVR. يستخدم هذا المستشعر تقنية تسمى "ECHO" وهو شيء تحصل عليه عندما ينعكس الصوت مرة أخرى بعد الاصطدام بسطح.
نحن نعلم أن اهتزازات الصوت لا يمكن أن تخترق المواد الصلبة. إذن ما يحدث هو ، عندما يولد مصدر الصوت اهتزازات تنتقل عبر الهواء بسرعة 220 مترًا في الثانية. هذه الاهتزازات عندما تلتقي بأذننا نصفها بالصوت. كما ذكرنا سابقًا ، لا يمكن لهذه الاهتزازات أن تمر بصلابة ، لذلك عندما تضرب بسطح مثل الجدار ، فإنها تنعكس مرة أخرى بنفس السرعة إلى المصدر ، وهو ما يسمى بالصدى.
يوفر مستشعر الموجات فوق الصوتية “HC-SR04” إشارة خرج تتناسب مع المسافة بناءً على الصدى. يولد المستشعر هنا اهتزازًا صوتيًا في نطاق الموجات فوق الصوتية عند إعطاء الزناد ، وبعد ذلك ينتظر عودة اهتزاز الصوت. بناءً على المعلمات وسرعة الصوت (220 م / ث) والوقت الذي يستغرقه الصدى للوصول إلى المصدر ، فإنه يوفر نبضة إخراج تتناسب مع المسافة.
كما هو موضح في الشكل ، نحتاج في البداية إلى بدء تشغيل المستشعر لقياس المسافة ، وهي إشارة منطقية عالية عند طرف المشغل للمستشعر لأكثر من 10uS ، وبعد ذلك يتم إرسال اهتزاز صوتي بواسطة المستشعر ، بعد الصدى ، يوفر المستشعر إشارة عند طرف الخرج الذي يتناسب عرضه مع المسافة بين المصدر والعائق.
يتم حساب هذه المسافة على النحو التالي ، المسافة (بالسنتيمتر) = عرض خرج النبض (بوحدة الولايات المتحدة) / 58.
هنا يجب أن يؤخذ عرض الإشارة في مضاعفات الولايات المتحدة (مايكرو ثانية أو 10 ^ -6).
المكونات مطلوبة
الأجهزة: ATMEGA32 ، مزود الطاقة (5 فولت) ، AVR-ISP PROGRAMMER ، JHD_162ALCD (16x2LCD) ، مكثف 1000 فائق التوهج ، مقاوم 10KΩ (قطعتان) ، مستشعر HC-SR04.
البرنامج: Atmel studio 6.1، progisp or flash magic.
مخطط الدائرة وشرح العمل
نحن هنا نستخدم PORTB للاتصال بمنفذ بيانات LCD (D0-D7). أي شخص لا يرغب في العمل مع FUSE BITS من ATMEGA32A لا يمكنه استخدام PORTC ، حيث يحتوي PORTC على نوع خاص من الاتصالات يمكن تعطيله فقط عن طريق تغيير FUSEBITS.
في الدائرة ، لاحظت أنني أخذت دبابيس تحكم فقط ، وهذا يعطي مرونة لفهم أفضل. لا يتم استخدام بت التباين والقراءة / الكتابة في كثير من الأحيان حتى يمكن تقصيرها إلى الأرض. هذا يضع LCD في أعلى وضع التباين والقراءة نحتاج فقط إلى التحكم في دبابيس ENABLE و RS لإرسال الأحرف والبيانات وفقًا لذلك.
فيما يلي التوصيلات التي تمت لشاشات الكريستال السائل:
PIN1 أو VSS على الأرض
PIN2 أو VDD أو VCC إلى + 5 فولت
PIN3 أو VEE على الأرض (يعطي أقصى تباين أفضل للمبتدئين)
PIN4 أو RS (اختيار التسجيل) إلى PD6 من uC
PIN5 أو RW (قراءة / كتابة) على الأرض (يؤدي وضع شاشة LCD في وضع القراءة إلى تسهيل الاتصال للمستخدم)
PIN6 أو E (تمكين) إلى PD5 من uC
PIN7 أو D0 إلى PB0 من uC
PIN8 أو D1 إلى PB1 من uC
PIN9 أو D2 إلى PB2 من uC
PIN10 أو D3 إلى PB3 من uC
PIN11 أو D4 إلى PB4 من uC
PIN12 أو D5 إلى PB5 من uC
PIN13 أو D6 إلى PB6 من uC
PIN14 أو D7 إلى PB7 من uC
في الدائرة يمكنك أن ترى أننا استخدمنا اتصال 8 بت (D0-D7) ولكن هذا ليس إلزاميًا ويمكننا استخدام اتصال 4 بت (D4-D7) ولكن مع برنامج اتصال 4 بت يصبح معقدًا بعض الشيء. لذلك كما هو موضح في الجدول أعلاه ، فإننا نقوم بتوصيل 10 دبابيس من شاشة LCD بوحدة التحكم ، حيث تكون 8 دبابيس عبارة عن دبابيس بيانات و 2 دبابيس للتحكم.
جهاز استشعار الموجات فوق الصوتية هو جهاز ذو أربعة أسنان ، PIN1- VCC أو + 5V ؛ PIN2-TRIGGER ؛ PIN3- صدى ؛ PIN4- الأرض. دبوس الزناد هو المكان الذي نعطي فيه الزناد لإخبار المستشعر بقياس المسافة. Echo هو دبوس الإخراج حيث نحصل على المسافة في شكل عرض النبضة. دبوس echo متصل هنا بوحدة التحكم كمصدر خارجي للمقاطعة. للحصول على عرض خرج الإشارة ، يتم توصيل دبوس صدى المستشعر بـ INT0 (مقاطعة 0) أو PD2.
1. تشغيل جهاز الاستشعار عن طريق سحب دبوس الزناد على الأقل 12uS.
2. بمجرد ارتفاع صدى الصوت ، نحصل على مقاطعة خارجية وسنبدأ عدادًا (تمكين عداد) في ISR (روتين خدمة المقاطعة) الذي يتم تنفيذه مباشرة بعد حدوث مقاطعة.
3. بمجرد انخفاض صدى الصوت مرة أخرى ، يتم إنشاء مقاطعة ، هذه المرة سنقوم بإيقاف العداد (تعطيل العداد).
4. لذلك من أجل نبضة عالية إلى منخفضة عند دبوس الصدى ، قمنا بتشغيل عداد وأوقفناه. يتم تحديث هذا العدد إلى الذاكرة للحصول على المسافة ، حيث لدينا عرض صدى في العد الآن.
5. سنقوم بإجراء المزيد من العمليات الحسابية في الذاكرة للحصول على المسافة بالسنتيمتر
6. يتم عرض المسافة على شاشة LCD مقاس 16 × 2.
لإعداد الميزات المذكورة أعلاه ، سنقوم بتعيين السجلات التالية:
يتم تعيين السجلات الثلاثة المذكورة أعلاه وفقًا للإعداد للعمل وسنناقشها بإيجاز ،
BLUE (INT0): يجب ضبط هذا البت عاليًا لتمكين المقاطعة الخارجية 0 ، بمجرد تعيين هذا الدبوس ، سنستشعر التغييرات المنطقية عند PIND2 pin.
براون (ISC00 ، ISC01): يتم تعديل هاتين البتتين من أجل التغيير المنطقي المناسب في PD2 ، والتي تعتبر مقاطعة.
لذلك كما ذكرنا سابقًا ، نحتاج إلى مقاطعة لبدء العد وإيقافه. لذلك قمنا بتعيين ISC00 كواحد ونحصل على مقاطعة عندما يكون هناك منطق منخفض إلى مرتفع عند INT0 ؛ مقاطعة أخرى عندما يكون هناك منطق مرتفع إلى منخفض.
RED (CS10): هذا البت هو ببساطة لتمكين وتعطيل العداد. على الرغم من أنه يعمل جنبًا إلى جنب مع البتات الأخرى CS10 و CS12. نحن لا نقوم بأي قياس مسبق هنا ، لذلك لا داعي للقلق بشأنها.
بعض الأشياء المهمة التي يجب تذكرها هنا هي:
نحن نستخدم ساعة داخلية ATMEGA32A وهي 1 ميجا هرتز. لا يوجد قياس مسبق هنا ، نحن لا نقوم بإجراء مقارنة بين مقاطعة المطابقة وإنشاء روتين ، لذلك لا توجد إعدادات تسجيل معقدة.
يتم تخزين قيمة العد بعد العد في سجل 16bit TCNT1.
تحقق أيضًا من هذا المشروع باستخدام اردوينو: قياس المسافة باستخدام Arduino
شرح البرمجة
يتم شرح عمل مستشعر قياس المسافة خطوة بخطوة في برنامج C أدناه.
# تضمين // رأس لتمكين التحكم في تدفق البيانات على المسامير # تعريف F_CPU 1000000 // إخبار وحدة التحكم بتردد الكريستال المرفق # تضمين