جدول المحتويات:
فيديو: اللمس بالسعة مع متحكم PIC16F886: 3 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:40
في هذا البرنامج التعليمي سوف نستعرض كيف يمكنك استخدام متحكم PIC16F886 لاكتشاف الفروق في السعة ، ويمكن استخدام هذا لاحقًا لمعرفة ما إذا كان يتم الضغط على لوحة اللمس. من الجيد أن تكون على دراية بالميكروكونترولر الموافقة المسبقة عن علم قبل القيام بهذا المشروع.
الخطوة 1: اربط دائرتك
أولاً ، لنبدأ بتوصيل الأسلاك بالدائرة وفقًا للتخطيط أعلاه. لصنع لوحة اللمس ، يمكنك طي ورق الألمنيوم في مربع وشريط لاصق على سلك. يمكنك تجربة قيم مختلفة للمقاوم 100 كيلو ، وجدت أن 100 كيلو تعمل بشكل جيد بالنسبة لي.
يتم استخدام دبوس RC4 لبدء شحن / تفريغ السعة المراد قياسها. يتم توصيل C12IN0 بالجانب - من المقارنة الداخلية ويتم توصيل دبوس C1IN بالجانب + من نفس المقارنة. يرى المتحكم الدقيق أن السعة مشحونة بالكامل عندما يصل جهد C12IN0 إلى أعلى من جهد C1IN. يتأكد مقسم الجهد المقاوم من أن C1IN قريب من 5 فولت.
نظرًا لأن لوحة اللمس تعتمد على وجود سعة كبيرة بينك وبين أرضية الدائرة ، فهناك احتمال أن البطارية قد لا تعمل.
الخطوة 2: ملف الرأس
هل انتهيت من جميع الاتصالات؟ حسنًا ، سننتقل إلى ملف الرأس. سنستخدم مترجم XC8 وكما يوحي العنوان ، يجب عليك الآن إنشاء ملف رأس جديد في مشروعك ونسخ الكود التالي ولصقه. يمكنك أيضًا نسخه ولصقه أعلى الكود الرئيسي دون أي ملف رأس.
#define CALIBRATION_SAMPLE 20 # حدد TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
عدد كثافة العمليات
المعايرة الدولية القيمة ، maxCalibrationValue ، minCalibrationValue ؛
int getChargeTime () {
int timerCount = 0 ؛ int overflowCount = 0 ؛ // سعة التفريغ المراد قياسها RC4 = 0 ؛ _delay_ms (DISCHARGE_TIME) ، // أعط تأخيرًا كافيًا لتفريغ "المكثف" بالكامل (تقريبًا في الواقع) // امسح علامة تجاوز المؤقت T0IF = 0 ؛ // انتظر حتى يتجاوز الموقت ، ابدأ العد من 0 أثناء (! T0IF) ؛ T0IF = 0 ؛ // بدء شحن السعة المراد قياسها RC4 = 1 ؛ // انتظر حتى تصل السعة إلى جهد الإحالة بينما (C1OUT) {timerCount = TMR0 ؛ إذا (T0IF) {overflowCount ++ ؛ T0IF = 0 ؛ }} count = (256 * overflowCount) + timerCount ؛ // إعادة تعيين timerCount timerCount = 0 ؛ overflowCount = 0 ؛ عدد العودة }
int isTouching (التسامح int) {
// متوسط عينات متعددة متوسط مزدوج = 0 ؛ لـ (int i = 0 ؛ i calibrationValue + التسامح) المتوسط ++ ؛ } متوسط / = TOUCH_SAMPLE ؛ // سيكون المتوسط رقمًا بين 0 و 1 إذا (متوسط> 0.2) يعود 1 ؛ العودة 0 ؛ }
معايرة باطلة () {
متوسط كثافة العمليات = 0 ؛ عينات int [CALIBRATION_SAMPLE] ؛ // احصل على متوسط قيمة لـ (int i = 0؛ i <CALIBRATION_SAMPLE؛ i ++) {sample = getChargeTime () ؛ متوسط + = عينات ؛ } متوسط / = CALIBRATION_SAMPLE ؛ معايرة القيمة = متوسط ؛ // الحصول على قيم قصوى / دقيقة maxCalibrationValue = عينات [0] ؛ minCalibrationValue = عينات [0] ؛ لـ (int i = 0 ؛ i maxCalibrationValue) maxCalibrationValue = عينات ؛ إذا (عينات <minCalibrationValue) minCalibrationValue = عينات ؛ }}
setupCapacitiveTouch () باطل {
// إعداد دبوس الشحن / التفريغ كإخراج ، في هذه الحالة يكون RC4 TRISCbits. TRISC4 = 0 ؛ // إعداد جهاز ضبط الوقت 0 T0CS = 0 ؛ PSA = 1 ؛ // إعداد المقارنة C1CH0 = 0 ؛ C1CH1 = 0 ؛ C1R = 0 ؛ C1ON = 1 ؛ C1POL = 0 ؛ // عدد قيم العد المقاصة = 0 ؛ // مسح معايرة قيم المعايرةValue = 0 ؛ maxCalibrationValue = 0 ؛ minCalibrationValue = 0 ؛ // قم بإجراء المعايرة عند بدء المعايرة () ؛ }
الخطوة الثالثة: كتابة الكود الرئيسي
بدءًا من الكود الرئيسي ، ستحتاج إلى تضمين ملف الرأس الذي تم إنشاؤه في الخطوة السابقة. الكود التالي هو مثال لكيفية استخدام وظيفة isTouching كمفتاح. في حالتي ، أعطيت العنوان اسم capacitiveTouch.h.
#يشمل
# تضمين "capacitiveTouch.h"
// يوضح هذا المتغير ما إذا كان الزر مضغوطًا أم لا
int lastState = 0 ؛
باطل رئيسي () {
// إعداد RC5 كإخراج TRISCbits. TRISC5 = 0 ؛ // تحتاج إلى استدعاء هذه الوظيفة في بداية إعداد البرنامج CapacitiveTouch () ؛ _delay_ms (1000) ؛ // معايرة بعد معايرة الإعداد الدقيق () ؛ while (1) {// التحقق مما إذا كان الزر مضغوطًا إذا (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0 ؛ آخر RC5 = 1 ؛ lastState = 1 ؛ } // التحقق من تحرير الزر وإلا إذا (lastState == 1 &&! isTouching (15)) lastState = 0؛ _delay_ms (20) ؛ }}
معايرة:
عندما يتم استدعاء هذه الوظيفة متغيرات معايرة القيمة ، سيتم تحديث maxCalibrationValue و minCalibrationValue. تستخدم المعايرة القيمة بواسطة وظيفة isTouching. ضع في اعتبارك أنه يجب ترك لوحة اللمس بمفردها أثناء المعايرة.
SetupCapacitive اللمس:
يجب أن يتم استدعاؤها في بداية البرنامج الخاص بك. يقوم بإعداد البتات الضرورية التي تستخدمها الوظائف الأخرى. كما يقوم بتشغيل معايرة النداء. ومع ذلك ، فقد حصلت على نتائج أفضل من خلال الانتظار لمدة ثانية وتشغيل المعايرة مرة أخرى بشكل منفصل.
اللمس:
ترجع هذه الوظيفة 1 إذا اكتشفت زيادة في السعة على C12IN0 وترجع 0 إذا كانت السعة قريبة من تلك التي كانت عليها أثناء المعايرة. وببساطة ، إذا قام شخص ما بلمس اللوحة ، فستقوم وظيفة isTouching بإرجاع 1. وتريد الوظيفة أيضًا معلمة كمدخل ، وهذا هو التفاوت المسموح به لبدء التشغيل. كلما زادت قيمة التسامح ، أصبحت أقل حساسية. في الإعداد الخاص بي ، وجدت أن 15 تعمل بشكل جيد ، ولكن نظرًا لأن هذا يعتمد على تردد المذبذب ومقدار السعة المضافة عند الضغط عليه ، يجب عليك تجربة هذه القيمة حتى تجد شيئًا يناسبك.
getChargeTime:
عندما تريد معرفة المدة التي سيستغرقها شحن السعة إلى جهد CVREF ، فإن هذه الوظيفة ستختبرها وتعيد عددًا صحيحًا. للحصول على الوقت بالثواني ، يمكنك استخدام هذه الصيغة: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds يمكن استخدام هذه الصيغة أيضًا للحصول على إدخال التفاوت من وظيفة isTouching إلى الثواني.
موصى به:
متحكم AVR. تعديل عرض النبض. متحكم محرك DC وشدة ضوء LED: 6 خطوات
متحكم AVR. تعديل عرض النبض. متحكم محرك التيار المستمر وشدة ضوء LED: مرحبًا بالجميع! يعد تعديل عرض النبض (PWM) تقنية شائعة جدًا في الاتصالات السلكية واللاسلكية والتحكم في الطاقة. يتم استخدامه بشكل شائع للتحكم في الطاقة التي يتم تغذيتها لجهاز كهربائي ، سواء كان محركًا أو مصباح LED أو مكبرات صوت وما إلى ذلك
روبوت تتبع خط متحكم به متحكم به مع تجنب العوائق: 6 خطوات
روبوت تتبع خط متحكم به متحكم به مع تجنب عقبة: كانت هذه مجرد فكرة تم فيها دمج العديد من الميزات مثل تجنب العوائق ، ومتابعة الخط ، والتحكم في الهاتف المحمول ، وما إلى ذلك معًا وصنعها في قطعة واحدة. كل ما تحتاجه هو وحدة تحكم مع بعض المستشعرات و الزي لهذا الإعداد. في هذا ، أنا
مدخلات اللمس بالسعة ESP32 باستخدام "سدادات الفتحات المعدنية" للأزرار: 5 خطوات (بالصور)
مدخلات اللمس بالسعة ESP32 باستخدام "سدادات الفتحات المعدنية" للأزرار: عندما كنت بصدد إنهاء قرارات التصميم لمشروع ESP32 WiFi Kit 32 القادم الذي يتطلب إدخال ثلاثة أزرار ، كانت إحدى المشكلات الملحوظة هي أن WiFi Kit 32 لا يمتلك زر ضغط ميكانيكي واحد ، حتى الآن وحدها ثلاثة أزرار ميكانيكية ، و
مفتاح اللمس - كيفية عمل مفتاح اللمس باستخدام الترانزستور ولوحة التوصيل: 4 خطوات
مفتاح اللمس | كيفية عمل مفتاح يعمل باللمس باستخدام الترانزستور ولوحة البريد: مفتاح اللمس هو مشروع بسيط للغاية يعتمد على تطبيق الترانزستورات. يتم استخدام الترانزستور BC547 في هذا المشروع الذي يعمل بمثابة مفتاح اللمس. تأكد من مشاهدة الفيديو الذي سيعطيك التفاصيل الكاملة حول المشروع
اللمس بالسعة مع Evive (وحدة التحكم القائمة على Arduino): 6 خطوات (بالصور)
اللمس بالسعة مع Evive (وحدة التحكم القائمة على Arduino): هل تعرف كيف تعمل شاشة اللمس بهاتفك الذكي؟ يحتوي الهاتف الذكي على مجموعة من مستشعرات اللمس أسفل الشاشة الزجاجية. في الوقت الحاضر ، يعتمد على تقنية استشعار اللمس بالسعة وحتى اللمس اللطيف يمكن اكتشافه بسهولة. يتم استشعار اللمس السعوي