- المواد المطلوبة:
- حساب السرعة والمسافة المقطوعة:
- مخطط الدائرة وإعداد الأجهزة:
- محاكاة:
- برمجة PIC16F877A:
- شرح العمل:
لطالما كان قياس السرعة / عدد الدورات في الدقيقة لمركبة أو محرك مشروعًا رائعًا نجربه. لذلك ، في هذا المشروع سنقوم ببناء واحد باستخدام متحكمات الميكروكونترولر الجاهزة الصناعية. سنستخدم قطعة من المغناطيس وجهاز استشعار القاعة لقياس السرعة. هناك طرق / أجهزة استشعار أخرى لقياس السرعة ولكن استخدام مستشعر القاعة رخيص ويمكن استخدامه أيضًا في أي نوع من السيارات / المركبات. من خلال القيام بهذا المشروع ، سنعمل أيضًا على تحسين مهاراتنا في تعلم PIC16F877A نظرًا لأن المشروع يتضمن استخدام المقاطعات والمؤقتات. في نهاية هذا المشروع ، ستكون قادرًا على حساب السرعة والمسافات التي يغطيها أي جسم دوار وعرضها على شاشة LCD مقاس 16 × 2. لنبدأ مع عداد السرعة الرقمي ودائرة عداد المسافات مع الموافقة المسبقة عن علم.
المواد المطلوبة:
- PIC16F877A
- 7805 منظم جهد
- مستشعر تأثير القاعة (US1881 / 04E)
- شاشة عرض LCD مقاس 16 * 2
- قطعة صغيرة من المغناطيس
- توصيل الأسلاك
- المكثفات
- اللوح.
- مزود الطاقة
حساب السرعة والمسافة المقطوعة:
قبل أن نبدأ بالفعل في بناء الدائرة ، دعونا نفهم كيف سنستخدم مستشعر هول ومغناطيس لحساب سرعة العجلة. استخدمنا سابقًا نفس الأسلوب لبناء Arduino Speedometer الذي يعرض قراءات على هاتف Android الذكي.
مستشعر القاعة هو جهاز يمكنه اكتشاف وجود المغناطيس بناءً على قطبيته. نلصق قطعة صغيرة من المغناطيس على العجلة ونضع مستشعر القاعة بالقرب منها بطريقة تجعل مستشعر القاعة يكتشفها في كل مرة تدور فيها العجلة. ثم نستخدم مساعدة الموقتات والمقاطعات في متحكم PIC الدقيق لحساب الوقت المستغرق لدوران كامل للعجلة.
بمجرد معرفة الوقت المستغرق ، يمكننا حساب RPM باستخدام الصيغ أدناه ، حيث سيعطينا 1000 / الوقت المستغرق RPS ومضاعفته بـ 60 سيعطيك RPM
rpm = (1000 / timetaken) * 60 ؛
حيث يعطي (1000 / timetaken) rps (دورة في الثانية) ويتم ضربه في 60 لتحويل rps إلى rpm (دورات في الدقيقة).
الآن لحساب سرعة السيارة ، علينا معرفة نصف قطر العجلة. في مشروعنا ، استخدمنا عجلة ألعاب صغيرة يبلغ نصف قطرها 3 سم فقط. ولكن، افترضنا نصف قطر عجلة هو أن تكون 30CM (0.3M) حتى نتمكن من تصور القراءات.
يتم ضرب القيمة أيضًا بـ 0.37699 لأننا نعلم أن السرعة = (RPM (القطر * Pi) / 60). تم تبسيط الصيغ وصولاً إلى
v = radius_of_wheel * rpm * 0.37699 ؛
بمجرد حساب السرعة يمكننا أيضًا حساب المسافة المقطوعة باستخدام طريقة مماثلة. من خلال ترتيب القاعة والمغناطيس لدينا ، نعلم عدد مرات تدوير العجلة. نعلم أيضًا نصف قطر العجلة ، والذي يمكننا من خلاله إيجاد محيط العجلة ، بافتراض أن نصف قطر العجلة هو 0.3 م (R) ، فإن قيم المحيط Pi * R * R ستكون 0.2827. وهذا يعني أنه في كل مرة يلتقي فيها مستشعر القاعة بالمغناطيس ، تغطي العجلة مسافة 0.2827 مترًا.
Distance_covered = مسافة التغطية + محيط الدائرة
منذ أن عرفنا الآن كيف سيعمل هذا المشروع ، فلننتقل إلى مخطط دائرتنا ونبدأ في بنائه.
مخطط الدائرة وإعداد الأجهزة:
مخطط الدائرة لمشروع عداد السرعة وعداد المسافات هذا بسيط للغاية ويمكن بناؤه على لوح التجارب. إذا كنت تتابع دروس الموافقة المسبقة عن علم ، فيمكنك أيضًا إعادة استخدام الأجهزة التي استخدمناها لتعلم المتحكمات الدقيقة PIC. هنا استخدمنا نفس لوحة الأداء التي قمنا ببنائها من أجل وميض LED مع متحكم PIC ، كما هو موضح أدناه:
الوصلات الطرفية لوحدة التحكم MCU PIC16F877A مذكورة في الجدول أدناه.
رقم S. |
الرقم السري |
اسم الدبوس |
متصلا |
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 |
33 |
RB0 / INT |
3 طريق دبوس من أجهزة الاستشعار قاعة |
بمجرد إنشاء مشروعك ، يجب أن يبدو مثل هذا في الصورة أدناه
كما ترى لقد استخدمت صندوقين لوضع المحرك ومستشعر القاعة في مكان قريب. يمكنك تثبيت المغناطيس على الجسم الدوار الخاص بك وتثبيت مستشعر القاعة القريب منه بطريقة تمكنه من اكتشاف المغناطيس.
ملاحظة: يحتوي مستشعر القاعة على أقطاب ، لذا تأكد من القطب الذي يكتشفه وضعه وفقًا لذلك.
تأكد أيضًا من استخدام مقاوم سحب مع دبوس الإخراج لمستشعر القاعة.
محاكاة:
تتم محاكاة هذا المشروع باستخدام Proteus. نظرًا لأن المشروع يتضمن أشياء متحركة ، لا يمكن إثبات المشروع بالكامل باستخدام المحاكاة ولكن يمكن التحقق من عمل شاشة LCD. ما عليك سوى تحميل الملف السداسي عشرية إلى المحاكاة ومحاكاته. ستتمكن من ملاحظة عمل شاشة LCD كما هو موضح أدناه.
للتحقق من عمل عداد السرعة وعداد المسافات ، قمت باستبدال مستشعر Hall بجهاز Logic state. أثناء المحاكاة ، يمكنك النقر فوق زر الحالة المنطقية لتشغيل المقاطعة والتحقق مما إذا تم تحديث السرعة والمسافة المقطوعة كما هو موضح أعلاه.
برمجة PIC16F877A:
كما ذكرنا سابقًا ، سنستخدم مساعدة المؤقتات والمقاطعات في متحكم PIC16F877A لحساب الوقت المستغرق لدوران كامل للعجلة. لقد تعلمنا بالفعل كيفية استخدام Timers في برنامجنا التعليمي السابق. لقد قدمت الكود الكامل للمشروع في نهاية هذه المقالة. علاوة على ذلك ، فقد شرحت بعض الأسطر المهمة أدناه.
تقوم أسطر الكود أدناه بتهيئة المنفذ D كدبابيس إخراج لواجهة LCD و RB0 كدبوس إدخال لاستخدامه كدبوس خارجي. علاوة على ذلك ، قمنا بتمكين مقاوم سحب داخلي باستخدام OPTION_REG وقمنا أيضًا بتعيين 64 كمقاوم مسبق. نقوم بعد ذلك بتمكين المقاطعة العامة والمحيطية لتمكين المقاطعة الخارجية. لتعريف RB0 على أنه بت المقاطعة الخارجية ، يجب جعل INTE مرتفعًا. تم تعيين قيمة Overflow لتكون 100 بحيث يتم تشغيل علامة مقاطعة المؤقت TMR0IF لكل 1 مللي ثانية. سيساعد هذا في تشغيل عداد ميلي ثانية لتحديد الوقت المستغرق بالمللي ثانية:
TRISD = 0x00 ؛ // تم الإعلان عن PORTD كناتج للتفاعل مع شاشة LCD TRISB0 = 1 ؛ // DEfine the RB0 pin كمدخل لاستخدامه كطرف مقاطعة OPTION_REG = 0b00000101 ؛ // Timer0 64 as prescalar // يُمكّن أيضًا PULL UPs TMR0 = 100 ؛ // تحميل القيمة الزمنية لـ 1 مللي ثانية ؛ يمكن أن تكون قيمة delayValue بين 0-256 فقط TMR0IE = 1 ؛ // تمكين بت المقاطعة المؤقت في سجل PIE1 GIE = 1 ؛ // Enable Global Interrupt PEIE = 1 ؛ // Enable the Peripheral Interrupt INTE = 1 ؛ // تمكين RB0 كطرف خارجي للمقاطعة
سيتم تنفيذ الوظيفة أدناه في كل مرة يتم فيها اكتشاف مقاطعة. يمكننا تسمية الوظيفة حسب رغبتنا لذلك قمت بتسميتها على أنها speed_isr (). يتعامل هذا البرنامج مع مقاطعتين أحدهما هو Timer Interrupt والآخر هو المقاطعة الخارجية. كلما حدثت مقاطعة Timer ، ترتفع العلامة TMR0IF ، لمسح وإعادة تعيين المقاطعة ، يتعين علينا تقليلها من خلال تحديد TMR0IF = 0 كما هو موضح في الكود أدناه.
باطل المقاطعة speed_isr () {if (TMR0IF == 1) // Timer قد فائض {TMR0IF = 0 ؛ // مسح مؤقت المقاطعة العلامة ميلي_سيك ++ ؛ } إذا (INTF == 1) {rpm = (1000 / milli_sec) * 60 ؛ السرعة = 0.3 * دورة في الدقيقة * 0.37699 ؛ // (بافتراض أن نصف قطر العجلة 30 سم) INTF = 0 ؛ // امسح علامة المقاطعة milli_sec = 0 ؛ المسافة = المسافة + 028.2 ؛ }}
وبالمثل ، عند حدوث مقاطعة خارجية ، سترتفع علامة INTF ، يجب مسح ذلك أيضًا بتعريف INTF = 0. يتم الاحتفاظ بالوقت المستغرق في المسار الصحيح بواسطة Timer Interrupt وتحدد المقاطعة الخارجية متى تكمل العجلة دورة كاملة واحدة. باستخدام هذه البيانات ، يتم حساب السرعة والمسافة التي تغطيها العجلة أثناء كل مقاطعة خارجية.
بمجرد حساب السرعة والمسافة ، يمكن عرضها ببساطة على شاشة LCD باستخدام وظائف LCD الخاصة بنا. إذا كنت جديدًا على شاشات LCD ، فارجع إلى البرنامج التعليمي لشاشات LCD البينية مع PIC16F877A MCU.
شرح العمل:
بعد تجهيز الأجهزة والبرامج ، ما عليك سوى تحميل الكود على PIC16F877A. إذا كنت جديدًا تمامًا على PIC ، فيجب عليك قراءة بعض البرامج التعليمية حول معرفة كيفية تحميل البرنامج إلى متحكم PIC16F877A.
لقد استخدمت POT متغيرًا لضبط سرعة المحرك لغرض العرض التوضيحي. يمكنك أيضًا استخدام نفس البحث عن تطبيق في الوقت الفعلي. إذا كان كل شيء يعمل كما هو متوقع ، فيجب أن تكون قادرًا على الحصول على السرعة في كم / ساعة والمسافة المقطوعة من حيث الأمتار كما هو موضح في الفيديو أدناه.
آمل أن تكون قد استمتعت بالمشروع وعملت به. إذا لم يكن الأمر كذلك ، يمكنك استخدام قسم التعليقات أدناه أو المنتدى لنشر شكك.