תוכן עניינים:
וִידֵאוֹ: מגע קיבולי עם מיקרו -בקר PIC16F886: 3 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:16
במדריך זה נעבור כיצד ניתן להשתמש בבקר מיקרו PIC16F886 כדי לזהות הבדלים בקיבול, מאוחר יותר ניתן להשתמש בו כדי לדעת אם לוחצים על לוח מגע. טוב להכיר מיקרו -בקרי תמונות לפני ביצוע הפרויקט הזה.
שלב 1: חיבור המעגל שלך
ראשית, נתחיל בחיווט המעגל בהתאם לסכימה למעלה. להכנת משטח המגע ניתן לקפל רדיד אלומיניום לריבוע ולהדביק על חוט. אתה יכול להתנסות בערכים שונים לנגד 100k, מצאתי ש- 100k עובד לי טוב.
סיכת RC4 משמשת לטעינה/פריקה של הקיבול שיש למדוד. C12IN0 מחובר לצד - של משווה פנימי וסיכת C1IN מחוברת לצד + של אותו משווה. המיקרו -בקר רואה בקיבול טעון מלא כאשר מתח C12IN0 מגיע מעל מתח C1IN. מחלק המתח ההתנגדות מוודא כי C1IN קרוב ל -5 וולט.
מכיוון שמשטח המגע תלוי בקיבול משמעותי בינך לבין קרקע המעגל, קיימת אפשרות שסוללה לא תעבוד.
שלב 2: קובץ הכותרת
סיימת עם כל החיבורים? טוב, נמשיך עם קובץ הכותרת. אנו נשתמש במהדר XC8 וכפי שהכותרת מרמזת כעת תיצור קובץ כותרת חדש בפרויקט שלך והעתק והדבק את הקוד הבא. אתה יכול גם להעתיק ולהדביק אותו מעל הקוד הראשי שלך ללא קובץ כותרת.
#הגדר CALIBRATION_SAMPLE 20 #הגדר TOUCH_SAMPLE 10 #הגדר DISCHARGE_TIME 5
ספירת int;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // קיבול פריקה למדוד RC4 = 0; _ עיכוב_מס (DISCHARGE_TIME); // לתת מספיק עיכוב כדי לפרוק באופן מלא (כמעט לגמרי) את "הקבל" // לנקות את דגל הצפת הטיימר T0IF = 0; // המתן עד שהטיימר יעלה על גדותיו, התחל לספור מ -0 בעוד (! T0IF); T0IF = 0; // התחל טעינת קיבולת למדידה RC4 = 1; // המתן עד שקיבול יטען עד למתח ההפניה בעוד (C1OUT) {timerCount = TMR0; if (T0IF) {overflowCount ++; T0IF = 0; }} count = (256 * overflowCount) + timerCount; // אפס timerCount timerCount = 0; overflowCount = 0; ספירת החזרה; }
int isTouching (int tolerance) {
// ממוצע מספר דגימות ממוצע כפול = 0; עבור (int i = 0; i calibrationValue+סובלנות) ממוצע ++; } ממוצע /= TOUCH_SAMPLE; // הממוצע יהיה מספר בין 0 ל -1 אם (ממוצע> 0.2) החזרה 1; החזר 0; }
כיול חלל () {
ממוצע int = 0; דוגמאות int [CALIBRATION_SAMPLE]; // לקבל ערך ממוצע עבור (int i = 0; i <CALIBRATION_SAMPLE; i ++) {samples = getChargeTime (); ממוצע += דוגמאות ; } ממוצע /= CALIBRATION_SAMPLE; כיול ערך = ממוצע; // לקבל max/min ערכים maxCalibrationValue = samples [0]; minCalibrationValue = דוגמאות [0]; עבור (int i = 0; i maxCalibrationValue) maxCalibrationValue = דוגמאות ; if (דוגמאות <minCalibrationValue) minCalibrationValue = דוגמאות ; }}
void setupCapacitiveTouch () {
// הגדרת סיכת תשלום/פריקה כפלט, במקרה זה RC4 TRISCbits. TRISC4 = 0; // הגדרת טיימר 0 T0CS = 0; PSA = 1; // הגדרת משווה C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // ניקוי ערכי ספירה count = 0; // ניקוי ערכי כיול calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // הפעל כיול על התחל כיול (); }
שלב 3: כתיבת הקוד הראשי
החל מהקוד הראשי, עליך לכלול את קובץ הכותרת שנוצר בשלב הקודם. הקוד הבא הוא דוגמה לאופן בו תוכל להשתמש בפונקציית isTouching כמתג. במקרה שלי נתתי לכותרת את השם capacitiveTouch.h.
#לִכלוֹל
#כלול "capacitiveTouch.h"
// משתנה זה אומר אם הכפתור כבר נלחץ או לא
int lastState = 0;
void main () {
// הגדרת RC5 כפלט TRISCbits. TRISC5 = 0; // עליך להפעיל את הפונקציה הזו עם תחילת התוכנית setupCapacitiveTouch (); _ עיכוב_מס (1000); // כיול לאחר ההתקנה המדויקת שלך כיול (); בעוד (1) {// בודקים אם הכפתור נלחץ אם (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; אחרת RC5 = 1; lastState = 1; } // לבדוק אם הכפתור משתחרר אחרת אם (lastState == 1 &&! isTouching (15)) lastState = 0; _ עיכוב_מס (20); }}
לְדַרֵג:
כאשר פונקציה זו נקראת המשתנים calibrationValue, maxCalibrationValue ו- minCalibrationValue יעודכנו. כיול ערך משמש את הפונקציה isTouching. זכור כי משטח המגע צריך להישאר לבד במהלך הכיול.
setupCapacitiveTouch:
צריך להתקשר בתחילת התוכנית שלך. הוא מגדיר את הביטים הדרושים המשמשים את הפונקציות האחרות. הוא גם מפעיל קליברציה. עם זאת קיבלתי תוצאות טובות יותר בהמתנה שנייה והפעלת הכיול שוב בנפרד.
isTouching:
פונקציה זו מחזירה 1 אם היא מזהה עלייה בקיבול ב- C12IN0 ומחזירה 0 אם הקיבול קרוב לזה שהיה במהלך הכיול. בפשטות, אם מישהו נוגע בכרית הפונקציה isTouching תחזור 1. הפונקציה רוצה גם פרמטר כקלט, זו הסובלנות שהיא תפעיל. ככל שערך הסובלנות גבוה יותר הוא הופך להיות פחות רגיש. בהתקנה שלי מצאתי ש 15 עובד היטב, אך מכיוון שזה תלוי בתדר אוסילטור וכמה קיבול מתווסף בעת לחיצה עליו עליך להתנסות בערך זה עד שתמצא משהו שעובד עבורך.
getChargeTime:
אם אתה רוצה לדעת כמה זמן יידרש לטעון את הקיבול למתח CVREF, פונקציה זו תבדוק אותו ותחזיר מספר שלם. כדי לקבל את הזמן בשניות אתה משתמש בנוסחה הבאה: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds ניתן להשתמש בנוסחה זו גם בכדי לקבל את קלט הסובלנות מהפונקציה isTouching לשניות.
מוּמלָץ:
מאוורר כף יד Arduino עם מתג מגע קיבולי: 6 שלבים
מאוורר כף יד Arduino עם מתג מגע קיבולי: במדריך זה נלמד כיצד להפעיל ולכבות את מאוורר הסוללה של Hendheld באמצעות חיישן מגע קיבולי, מודול ממסר ו- Visuino. צפה בסרטון הדגמה
קלט מגע קיבולי ESP32 באמצעות "תקעי חורים מתכתיים" לכפתורים: 5 שלבים (עם תמונות)
קלט מגע קיבולי ESP32 באמצעות "תקעי חורים מתכתיים" לכפתורים: בזמן שסיימתי את החלטות העיצוב לפרויקט הקרוב המבוסס על ESP32 WiFi Kit 32 הדורש קלט של שלושה כפתורים, בעיה אחת ניכרת היא שלערך WiFi 32 אין כפתור מכני אחד, ובכל זאת לבד שלושה כפתורים מכניים, f
הוסף מעבר מגע קיבולי לפרויקטים שלך: 7 שלבים
הוסף מתג מגע קיבולי לפרויקטים שלך: כיצד להוסיף מתג מגע קיבולי לפרויקטים שלך בבית היי חברים חברים אלקטרוניים במדריך זה אני אראה לך כיצד תוכל להוסיף מתג מגע קיבולי לפרויקטים האלקטרוניים שלך בזול ולתת לפרויקט diy שלך. מראה מקצועי
עץ החיים (מנוע סרוו נהיגה חיישן מגע קיבולי Arduino): 6 שלבים (עם תמונות)
עץ החיים (מנוע סרוו נהיגה חיישן מגע קיבולי Arduino): לפרויקט זה הכנו עץ נותן אורז המורכב מחיישן מגע קיבולי ומנוע סרוו. עם נגיעה במחצלת מנוע הסרוו יופעל ואורז (או מה שתרצו להכניס לתוכו) ישוחרר. הנה סרטון קצר
מצב רוח מגע קיבולי/אמבילייט: 8 שלבים
מצב רוח מגע קיבולי/אמבילייט: מדריך זה הוא תיאור מהיר של החוויה שלי ביצירת מצב רוח רב תכליתי. צפוי ידע בסיסי כלשהו במעגלים אלקטרוניים. הפרויקט טרם הסתיים, כמה הוספת פונקציונליות וצריך לבצע שינויים אבל אני