สารบัญ:
วีดีโอ: Capacitive Touch ด้วยไมโครคอนโทรลเลอร์ PIC16F886: 3 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
ในบทช่วยสอนนี้ เราจะอธิบายวิธีที่คุณสามารถใช้ไมโครคอนโทรลเลอร์ PIC16F886 เพื่อตรวจจับความแตกต่างของความจุ ซึ่งสามารถนำมาใช้ในภายหลังเพื่อบอกว่ามีการกดทัชแพดหรือไม่ ควรทำความคุ้นเคยกับไมโครคอนโทรลเลอร์ pic ก่อนทำโครงการนี้
ขั้นตอนที่ 1: ต่อวงจรของคุณ
ขั้นแรก เริ่มต้นด้วยการเดินสายวงจรตามแผนผังด้านบน ในการทำทัชแพด คุณสามารถพับอลูมิเนียมฟอยล์เป็นสี่เหลี่ยมจัตุรัสแล้วพันเทปไว้บนลวด คุณสามารถทดลองกับค่าต่างๆ สำหรับตัวต้านทาน 100k ได้ ฉันพบว่า 100k ทำงานได้ดีสำหรับฉัน
พิน RC4 ใช้เพื่อเริ่มการชาร์จ/คายประจุความจุที่จะวัด C12IN0 เชื่อมต่อกับด้าน - ของตัวเปรียบเทียบภายใน และพิน C1IN เชื่อมต่อกับด้าน + ของตัวเปรียบเทียบเดียวกัน ไมโครคอนโทรลเลอร์มองเห็นความจุเป็นประจุเต็มเมื่อแรงดันไฟฟ้า C12IN0 สูงกว่าแรงดันไฟฟ้า C1IN ตัวแบ่งแรงดันไฟต้านทานทำให้แน่ใจว่า C1IN อยู่ใกล้กับ 5 โวลต์
เนื่องจากทัชแพดขึ้นอยู่กับความจุที่สำคัญระหว่างคุณกับกราวด์ของวงจร จึงมีความเป็นไปได้ที่แบตเตอรี่อาจไม่ทำงาน
ขั้นตอนที่ 2: ไฟล์ส่วนหัว
เสร็จสิ้นการเชื่อมต่อทั้งหมดหรือไม่ ดี เราจะดำเนินการกับไฟล์ส่วนหัว เราจะใช้คอมไพเลอร์ XC8 และตามที่ชื่อเรื่องแนะนำ ตอนนี้คุณจะต้องสร้างไฟล์ส่วนหัวใหม่ในโครงการของคุณและคัดลอกและวางโค้ดต่อไปนี้ คุณสามารถคัดลอกและวางไว้เหนือโค้ดหลักได้โดยไม่ต้องใช้ไฟล์ส่วนหัว
#define CALIBRATION_SAMPLE 20#define TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
จำนวน int;
การสอบเทียบ intValue, 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; } } จำนวน = (256 * overflowCount) + timerCount; // รีเซ็ต timerCount timerCount = 0; overflowCount = 0; นับกลับ; }
int isTouching (ความอดทน int) {
//ค่าเฉลี่ยของหลายตัวอย่าง สองเท่า ค่าเฉลี่ย = 0; for(int i = 0; i calibrationValue + tolerance) เฉลี่ย++; } เฉลี่ย /= TOUCH_SAMPLE; // ค่าเฉลี่ยจะเป็นตัวเลขระหว่าง 0 ถึง 1 ถ้า (เฉลี่ย > 0.2) คืนค่า 1; กลับ 0; }
สอบเทียบเป็นโมฆะ (){
ค่าเฉลี่ย int = 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 = ตัวอย่าง ; if(samples < minCalibrationValue) minCalibrationValue = ตัวอย่าง; } }
เป็นโมฆะ setupCapacitiveTouch (){
//ตั้งค่าขาชาร์จ/คายประจุเป็นเอาต์พุต ในกรณีนี้คือ RC4 TRISCbits. TRISC4 = 0; //ตั้งค่าตัวจับเวลา0 T0CS = 0; PSA = 1; //การตั้งค่าตัวเปรียบเทียบ C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // หักล้างค่านับนับ = 0; //ล้างค่าสอบเทียบ calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // เรียกใช้การสอบเทียบเมื่อเริ่มต้น calibrate(); }
ขั้นตอนที่ 3: การเขียนรหัสหลัก
เริ่มต้นด้วยรหัสหลัก คุณจะต้องรวมไฟล์ส่วนหัวที่สร้างในขั้นตอนก่อนหน้า โค้ดต่อไปนี้เป็นตัวอย่างวิธีที่คุณสามารถใช้ฟังก์ชัน isTouching เป็นสวิตช์ได้ ในกรณีของฉันฉันให้ชื่อ capacitiveTouch.h กับส่วนหัว
#รวม
#include "capacitiveTouch.h"
// ตัวแปรนี้บอกว่าปุ่มนั้นถูกหรือยังไม่ได้กด
int lastState = 0;
เป็นโมฆะหลัก (){
//ตั้งค่า RC5 เป็นเอาต์พุต TRISCbits. TRISC5 = 0; // คุณต้องเรียกใช้ฟังก์ชันนี้เมื่อเริ่มต้นโปรแกรม setupCapacitiveTouch(); _delay_ms(1000); //ปรับเทียบหลังจากการตั้งค่าที่แน่นอนของคุณ calibrate(); while(1){ //ตรวจสอบว่ามีการกดปุ่มหรือไม่ if(isTouching(15) && lastState == 0){ if(RC5) RC5 = 0; อย่างอื่น RC5 = 1; LastState = 1; } //ตรวจสอบว่ามีการปล่อยปุ่มอื่นหรือไม่ if(lastState == 1 && !isTouching(15)) lastState = 0; _delay_ms(20); } }
ปรับเทียบ:
เมื่อเรียกฟังก์ชันนี้ว่าตัวแปร calibrationValue maxCalibrationValue และ minCalibrationValue จะได้รับการอัปเดต calibrationValue ถูกใช้โดยฟังก์ชัน isTouching โปรดทราบว่าควรปล่อยทัชแพดไว้ตามลำพังระหว่างการปรับเทียบ
ตั้งค่า CapacitiveTouch:
จำเป็นต้องเรียกเมื่อเริ่มต้นโปรแกรมของคุณ มันตั้งค่าบิตที่จำเป็นที่ใช้โดยฟังก์ชันอื่นๆ นอกจากนี้ยังเรียกใช้การปรับเทียบ อย่างไรก็ตาม ฉันได้ผลลัพธ์ที่ดีขึ้นโดยรอสักครู่แล้วเรียกใช้การสอบเทียบอีกครั้งแยกกัน
กำลังสัมผัส:
ฟังก์ชันนี้จะคืนค่า 1 หากตรวจพบการเพิ่มความจุใน C12IN0 และคืนค่า 0 หากความจุใกล้เคียงกับค่าที่อยู่ระหว่างการปรับเทียบ กล่าวอย่างง่าย ๆ หากมีคนแตะแผ่นอิเล็กโทรด ฟังก์ชัน isTouching จะส่งกลับ 1 ฟังก์ชันนี้ต้องการพารามิเตอร์เป็นอินพุตด้วยเช่นกัน นี่คือค่าความเผื่อที่จะทริกเกอร์ ยิ่งค่าความคลาดเคลื่อนสูงก็จะยิ่งมีความไวน้อยลง ในการตั้งค่าของฉัน ฉันพบว่า 15 ทำงานได้ดี แต่เนื่องจากสิ่งนี้ขึ้นอยู่กับความถี่ของ ocsillator และความจุที่เพิ่มขึ้นเมื่อคุณกด คุณควรทดสอบด้วยค่านี้จนกว่าคุณจะพบสิ่งที่เหมาะกับคุณ
getChargeTime:
เมื่อคุณต้องการทราบว่าต้องใช้เวลานานเท่าใดในการชาร์จความจุให้กับแรงดันไฟฟ้า CVREF ฟังก์ชันนี้จะทดสอบและคืนค่าจำนวนเต็ม ในการรับเวลาเป็นวินาที คุณใช้สูตรนี้: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds สูตรนี้ยังสามารถใช้เพื่อรับอินพุตความอดทนจากฟังก์ชัน isTouching เป็นวินาที
แนะนำ:
สร้าง PWM Wave ด้วยไมโครคอนโทรลเลอร์ PIC: 6 ขั้นตอน
สร้าง PWM Wave ด้วยไมโครคอนโทรลเลอร์ PIC: PWM คืออะไร? PWM STANDS FOR PULSE WIDTH MODULATION เป็นเทคนิคที่ความกว้างของพัลส์จะแตกต่างกัน เพื่อให้เข้าใจแนวคิดนี้อย่างชัดเจน ให้พิจารณาพัลส์นาฬิกาหรือสัญญาณคลื่นสี่เหลี่ยมใดๆ โดยมีรอบการทำงาน 50% ซึ่งหมายความว่าช่วงเวลา Ton และ Toff เท่ากัน
ESP32 Capacitive Touch Input โดยใช้ "Metallic Hole Plugs" สำหรับปุ่ม: 5 ขั้นตอน (พร้อมรูปภาพ)
ESP32 Capacitive Touch Input โดยใช้ "Metallic Hole Plugs" สำหรับปุ่ม: ขณะที่ฉันกำลังตัดสินใจออกแบบสำหรับโปรเจ็กต์ที่ใช้ ESP32 WiFi Kit 32 ที่กำลังจะมีขึ้นซึ่งต้องการอินพุตสามปุ่ม ปัญหาหนึ่งที่เห็นได้ชัดเจนคือชุด WiFi 32 ไม่มีปุ่มกดเชิงกลเพียงปุ่มเดียว แต่เพียงอย่างเดียวสามปุ่มกล f
เริ่มต้นใช้งาน Capacitive Touch Kit: 4 ขั้นตอน
เริ่มต้นใช้งาน Capacitive Touch Kit: สำหรับโปรเจ็กต์ต่อไปของฉัน ฉันจะใช้ทัชแพดแบบคาปาซิทีฟ และก่อนที่จะปล่อย ฉันตัดสินใจทำแบบฝึกหัดเล็กๆ น้อยๆ เกี่ยวกับชุดอุปกรณ์ที่ได้รับจาก DFRobot
วิธีพิมพ์อักขระที่กำหนดเองใน LCD ด้วยไมโครคอนโทรลเลอร์ 8051: 4 ขั้นตอน
วิธีพิมพ์อักขระที่กำหนดเองใน LCD ด้วยไมโครคอนโทรลเลอร์ 8051: ในโครงการนี้ เราจะบอกคุณเกี่ยวกับวิธีการพิมพ์อักขระที่กำหนดเองใน LCD ขนาด 16 * 2 โดยใช้ไมโครคอนโทรลเลอร์ 8051 เราใช้ LCD ในโหมด 8 บิต เราทำเช่นเดียวกันกับโหมด 4 บิตได้เช่นกัน
การให้แสงสว่างไดโอดเปล่งแสง (LED) ด้วยไมโครคอนโทรลเลอร์ C Stamp: 5 ขั้นตอน
การจัดแสงไดโอดเปล่งแสง (LED) ด้วยไมโครคอนโทรลเลอร์ C Stamp: นี่เป็นโครงการออกแบบและกิจกรรมแรกจากคู่มืออ้างอิง CS310XXX (μC 101) โดย A-WIT Technologies, Inc. ในคำแนะนำนี้ เราจะให้แสงสว่าง ไดโอดเปล่งแสง (LED) พร้อมไมโครคอนโทรลเลอร์ C Stamp ซี&เอ็น