Talaan ng mga Nilalaman:
- Hakbang 1: Wire Up Ang iyong Circuit
- Hakbang 2: Ang Header File
- Hakbang 3: Pagsulat ng Pangunahing Code
Video: Capacitive Touch Sa PIC16F886 Microcontroller: 3 Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:14
Sa tutorial na ito pupunta kami sa kung paano mo magagamit ang isang PIC16F886 microcontroller upang makita ang mga pagkakaiba sa capacitance, maaari itong magamit sa paglaon upang masabi kung ang isang touch pad ay pinindot. Mabuti na maging pamilyar sa mga pic microcontroller bago gawin ang proyektong ito.
Hakbang 1: Wire Up Ang iyong Circuit
Una, magsimula tayo sa pamamagitan ng mga kable ng circuit ayon sa eskematiko sa itaas. Upang makagawa ng touch pad maaari mong tiklop ang aluminyo foil sa isang parisukat at tape sa isang kawad. Maaari kang mag-eksperimento sa paligid ng iba't ibang mga halaga para sa 100k risistor, nakita kong 100k na gumana nang maayos para sa akin.
Ginamit ang RC4 pin upang simulan ang pagsingil / paglabas ng capacitance na susukat. Ang C12IN0 ay konektado sa - gilid ng isang panloob na paghahambing at ang C1IN pin ay konektado sa + gilid ng parehong kumpare. Nakita ng microcontroller ang capacitance bilang ganap na sisingilin kapag ang boltahe ng C12IN0 ay umabot sa itaas ng boltahe ng C1IN. Tinitiyak ng resistive voltage divider na ang C1IN ay malapit sa 5 volts.
Dahil ang touch pad ay nakasalalay sa pagkakaroon ng isang makabuluhang capacitance sa pagitan mo at ng circuit ground mayroong posibilidad na maaaring hindi gumana ang isang baterya.
Hakbang 2: Ang Header File
Tapos sa lahat ng mga koneksyon? Mabuti, magpapatuloy kami sa header file. Gagamitin namin ang XC8 compiler at tulad ng pamagat ng pamagat na lilikha ka ngayon ng isang bagong header file sa iyong proyekto at kopyahin ang sumusunod na code. Maaari mo ring kopyahin-i-paste ito sa itaas ng iyong pangunahing code nang walang anumang header file.
#define CALIBRATION_SAMPLE 20 # tukuyin ang TOUCH_SAMPLE 10 # tukuyin ang DISCHARGE_TIME 5
int count;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // discharge capacitance upang masukat RC4 = 0; _delay_ms (DISCHARGE_TIME); // bigyan ng sapat na pagkaantala upang ganap (halos ganap na talagang) maalis ang "capacitor" // i-clear ang timer overflow flag T0IF = 0; // maghintay para sa timer na umapaw, simulang bilang mula sa 0 habang (! T0IF); T0IF = 0; // simulan ang pagsingil ng capacitance upang masusukat RC4 = 1; // maghintay para sa capacitance na singilin hanggang sa boltahe ng referance habang (C1OUT) {timerCount = TMR0; kung (T0IF) {overflowCount ++; T0IF = 0; }} count = (256 * overflowCount) + timerCount; // reset timerCount timerCount = 0; overflowCount = 0; bilang ng pagbalik; }
int isTouching (int tolerance) {
// average ng maraming mga sample dobleng average = 0; para sa (int i = 0; i calibrationValue + tolerance) average ++; } average / = TOUCH_SAMPLE; // average ay magiging isang numero sa pagitan ng 0 at 1 kung (average> 0.2) return 1; ibalik ang 0; }
void calibrate () {
int average = 0; int sample [CALIBRATION_SAMPLE]; // get average value for (int i = 0; i <CALIBRATION_SAMPLE; i ++) {sample = getChargeTime (); average + = mga sample ; } average / = CALIBRATION_SAMPLE; calibrationValue = average; // get max / min halaga maxCalibrationValue = mga sample [0]; minCalibrationValue = mga sample [0]; para sa (int i = 0; i maxCalibrationValue) maxCalibrationValue = mga sample ; kung (mga sample <minCalibrationValue) minCalibrationValue = mga sample ; }}
walang bisa ang setupCapacitiveTouch () {
// setting setting / debit pin bilang output, sa kasong ito ito ay RC4 TRISCbits. TRISC4 = 0; // setting up timer0 T0CS = 0; PSA = 1; // setting up comparator C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // clearing count count count = 0; // clearing calibration values calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // run calibration on start calibrate (); }
Hakbang 3: Pagsulat ng Pangunahing Code
Simula sa pangunahing code, kakailanganin mong isama ang header file na nilikha sa nakaraang hakbang. Ang sumusunod na code ay isang halimbawa ng kung paano mo magagamit ang pagpapaandar ng isTouching bilang isang switch. Sa aking kaso binigyan ko ang header ng pangalang capacitiveTouch.h.
# isama
# isama ang "capacitiveTouch.h"
// ang variable na ito ay nagsasabi kung ang pindutan ay o hindi pa pinindot
int lastState = 0;
void main () {
// setting RC5 as output TRISCbits. TRISC5 = 0; // kailangan mong tawagan ang pagpapaandar na ito hanggang sa pagsisimula ng program setupCapacitiveTouch (); _delay_ms (1000); // calibrate pagkatapos ng iyong eksaktong pag-set up ng calibrate (); habang (1) {// pagsuri kung ang pindutan ay nakakakuha ng pinindot kung (isTouching (15) && lastState == 0) {kung (RC5) RC5 = 0; iba pa RC5 = 1; lastState = 1; } // pagsuri kung ang pindutan ay pinakawalan kung iba pa (lastState == 1 &&! isTouching (15)) lastState = 0; _delay_ms (20); }}
i-calibrate:
Kapag tinawag ang pagpapaandar na ito ng mga variable na calibrationValue, maa-update ang maxCalibrationValue at minCalibrationValue. calibrationValue ay ginagamit ng pagpapaandar ng isTouching. Tandaan na ang touch pad ay dapat iwanang nag-iisa sa pagkakalibrate.
setupCapacitiveTouch:
Kailangang tawagan sa simula ng iyong programa. Itinatakda nito ang mga kinakailangang piraso na ginamit ng iba pang mga pagpapaandar. Nagpapatakbo din ito ng isang callibration. Gayunpaman nakuha ko ang mas mahusay na mga resulta sa pamamagitan ng paghihintay ng isang segundo at patakbuhin muli ang pagkakalibrate nang hiwalay.
isTouching:
Ang pagpapaandar na ito ay nagbabalik ng 1 kung nakita nito ang isang pagtaas sa capacitance sa C12IN0 at ibabalik ang 0 kung ang capacitance ay malapit sa isa na ito ay habang naka-calibrate. Sa simpleng pahayag, kung ang isang tao ay hawakan ang pad ang isTouching function ay babalik 1. Ang pagpapaandar ay nais din ng isang parameter bilang isang input, ito ang pagpapaubaya para sa mga ito upang ma-trigger. Ang mas mataas na halaga ng pagpapaubaya ay hindi gaanong sensitibo. Sa aking pag-set up natagpuan ko ang 15 na gumana nang maayos, ngunit dahil nakasalalay ito sa dalas ng ocsillator at kung magkano ang idinagdag na capacitance kapag pinindot mo ito dapat mong eksperimento sa halagang ito hanggang sa makahanap ka ng isang bagay na gumagana para sa iyo.
getChargeTime:
Kung nais mong malaman kung gaano katagal aabutin upang singilin ang kapasidad sa boltahe ng CVREF, susubukan ito ng pagpapaandar na ito at ibabalik ang isang integer. Upang makuha ang oras sa mga segundo gagamitin mo ang formula na ito: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Ang formula na ito ay maaari ding magamit upang makuha ang input ng pagpapaubaya mula sa pagpapaandar ng isTouching hanggang segundo.
Inirerekumendang:
Arduino Handheld Fan Na May Capacitive Touch Switch .: 6 Mga Hakbang
Arduino Handheld Fan With Capacitive Touch Switch .: Sa tutorial na ito matututunan natin kung paano I-ON at I-OFF ang Hendheld fan ng baterya gamit ang capacitive touch sensor, reley module at Visuino. Panoorin ang isang video ng demonstrasyon
Paano Gumawa ng isang Murang Touch-Capacitive Piano: 5 Hakbang
Paano Gumawa ng isang Murang Touch-Capacitive Piano: Ako ay isang tagahanga ng teknolohiya at musika, at nagpasya akong gawin ito pagkatapos na ma-inspire ako ng dati kong buhay bilang isang mag-aaral sa piano. Anyways … Sa araling ito, ipapakita ko sa iyo kung paano gumawa ng isang murang capacitive touch piano gamit ang isang Arduino, speaker, at papel. Ako
ESP32 Capacitive Touch Input Gamit ang "Metallic Hole Plugs" para sa Mga Pindutan: 5 Hakbang (na may Mga Larawan)
Ang ESP32 Capacitive Touch Input Gamit ang "Metallic Hole Plugs" para sa Mga Pindutan: Habang tinatapos ko ang mga desisyon sa disenyo para sa paparating na proyekto na nakabatay sa ESP32 WiFi Kit 32 na nangangailangan ng tatlong pag-input ng pindutan, ang isang kapansin-pansin na problema ay ang WiFi Kit 32 ay hindi nagtataglay ng isang solong pindutang mekanikal, nag-iisa pa ring tatlong mga mechanical button, f
Idagdag ang Capacitive Touch Switch sa Iyong Mga Proyekto: 7 Hakbang
Magdagdag ng Capacitive Touch Switch sa Iyong Mga Proyekto: Paano magdagdag ng capacitive touch switch sa iyong mga proyekto sa bahay isang propesyonal na pagtingin
Pag-configure ng AVR Microcontroller Fuse Bits. Paglikha at Pag-upload sa Flash Memory ng Microcontroller ang LED Blinking Program .: 5 Mga Hakbang
Pag-configure ng AVR Microcontroller Fuse Bits. Paglikha at Pag-upload sa Flash Memory ng Microcontroller ang LED Blinking Program .: Sa kasong ito lilikha kami ng simpleng programa sa C code at susunugin ito sa memorya ng microcontroller. Susulat kami ng aming sariling programa at isulat ang hex file, gamit ang Atmel Studio bilang pinagsamang platform ng pag-unlad. Ise-configure namin ang fuse bi