Sisukord:
Video: Mahtuvuslik puudutus PIC16F886 mikrokontrolleriga: 3 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:49
Selles õpetuses käsitleme, kuidas saate kasutada PIC16F886 mikrokontrollerit mahtuvuse erinevuste tuvastamiseks. Seda saab hiljem kasutada puuteplaadi vajutamise tuvastamiseks. Enne selle projekti tegemist on hea tutvuda pic -mikrokontrolleritega.
Samm: ühendage oma vooluahel
Esiteks alustame vooluringi ühendamisega vastavalt ülaltoodud skeemile. Puuteplaadi valmistamiseks võite alumiiniumfooliumi ruuduks kokku voltida ja teibile kleepida. Võite katsetada 100k takisti erinevate väärtustega, leidsin, et 100k töötas minu jaoks hästi.
RC4 tihvti kasutatakse mõõdetava mahtuvuse laadimise/tühjendamise alustamiseks. C12IN0 on ühendatud sisemise võrdlusseadme küljega ja C1IN -tihvt on ühendatud sama komparaatori + küljega. Mikrokontroller näeb mahtuvust täielikult laetuna, kui C12IN0 pinge ületab C1IN pinge. Takistuslik pingejagur tagab, et C1IN on 5 volti lähedal.
Kuna puuteplaat sõltub sellest, kas teie ja vooluahela vahel on märkimisväärne mahtuvus, on võimalik, et aku ei tööta.
Samm: päisefail
Kas olete kõik ühendused lõpetanud? Hea, jätkame päisefailiga. Me kasutame XC8 kompilaatorit ja nagu pealkiri ütleb, looge nüüd oma projektile uus päisefail ja kopeerige ja kleepige järgmine kood. Sama hästi saate selle kopeerida ja kleepida oma põhikoodi kohale ilma päisefailita.
#defineeri CALIBRATION_SAMPLE 20 #define TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
int count;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // mõõdetav tühjenemismahtuvus RC4 = 0; _delay_ms (DISCHARGE_TIME); // anna piisavalt viivitust, et "kondensaator" täielikult (peaaegu täielikult) tühjendada // kustuta taimeri ülevoolu lipp T0IF = 0; // oodake, kuni taimer üle voolab, alustage loendamist 0 -st (! T0IF); T0IF = 0; // mõõta laadimise mahtuvust RC4 = 1; // oodake, kuni mahtuvus laeb kuni viitepingeni, samal ajal (C1OUT) {timerCount = TMR0; kui (T0IF) {overflowCount ++; T0IF = 0; }} count = (256 * overflowCount) + timerCount; // lähtesta timerCount timerCount = 0; overflowCount = 0; tagastuste arv; }
int isTouching (int tolerantsus) {
// mitme proovi keskmine kahekordne keskmine = 0; jaoks (int i = 0; i calibrationValue+tolerants) keskmine ++; } keskmine /= TOUCH_SAMPLE; // keskmine on arv vahemikus 0 kuni 1, kui (keskmine> 0,2) tagastab 1; tagasitulek 0; }
void calibrate () {
int keskmine = 0; int proovid [CALIBRATION_SAMPLE]; // saada keskmine väärtus (int i = 0; i <CALIBRATION_SAMPLE; i ++) {sample = getChargeTime (); keskmine += proovid ; } keskmine /= CALIBRATION_SAMPLE; calibrationValue = keskmine; // saada max/min väärtused maxCalibrationValue = proovid [0]; minCalibrationValue = proovid [0]; jaoks (int i = 0; i maxCalibrationValue) maxCalibrationValue = proovid ; if (proovid <minCalibrationValue) minCalibrationValue = proovid ; }}
void setupCapacitiveTouch () {
// laadimis-/tühjendusnõela seadistamine väljundiks, antud juhul on see RC4 TRISCbits. TRISC4 = 0; // taimeri seadistamine0 T0CS = 0; PSA = 1; // võrdleja seadistamine C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // arvelduste arvu väärtuste loendamine = 0; // kalibreerimisväärtuste kustutamine calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // käivita kalibreerimine käivitamisel kalibreerimine (); }
Samm: põhikoodi kirjutamine
Alustades põhikoodist, peate lisama eelmises etapis loodud päisefaili. Järgmine kood on näide sellest, kuidas saate funktsiooni isTouching lülitina kasutada. Minu puhul andsin päisele nime capacitiveTouch.h.
#kaasake
#include "mahtuvuslikTouch.h"
// see muutuja ütleb, kas nuppu on juba vajutatud või mitte
int lastState = 0;
void main () {
// RC5 seadistamine väljundiks TRISCbits. TRISC5 = 0; // peate selle funktsiooni käivitama programmi setupCapacitiveTouch () käivitamisel; _ viivitus_ms (1000); // kalibreeri pärast täpset seadistust calibrate (); while (1) {// kontrollides, kas nuppu vajutatakse, kui (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; muidu RC5 = 1; viimane riik = 1; } // kontrollimine, kas nupp vabastatakse muidu, kui (lastState == 1 &&! isTouching (15)) lastState = 0; _ viivitus_ms (20); }}
kalibreerida:
Kui seda funktsiooni nimetatakse, muutuvad muutujad calibrationValue, maxCalibrationValue ja minCalibrationValue. funktsiooni calibrationValue kasutab funktsioon isTouching. Pidage meeles, et puuteplaat tuleks kalibreerimise ajal üksi jätta.
setupCapacitiveTouch:
Programmi alguses tuleb helistada. See seadistab vajalikud bitid, mida teised funktsioonid kasutavad. Samuti käivitab see kalibreerimise. Siiski sain paremaid tulemusi sekundit oodates ja kalibreerisin uuesti eraldi.
isTouching:
See funktsioon tagastab 1, kui tuvastab C12IN0 mahtuvuse suurenemise, ja tagastab 0, kui mahtuvus on kalibreerimise ajal lähedane. Lihtsalt öeldes, kui keegi puudutab padi, naaseb funktsioon isTouching 1. Funktsioon soovib sisendiks ka parameetrit, see on tolerants selle käivitamiseks. Mida kõrgem on tolerantsi väärtus, seda vähem tundlik see muutub. Oma seadistuses leidsin, et 15 töötas hästi, kuid kuna see sõltub oklaslaatori sagedusest ja selle vajutamisel lisatud mahtuvusest, peaksite selle väärtusega katsetama, kuni leiate midagi, mis teile sobib.
getChargeTime:
Kui soovite teada, kui kaua võtab aega mahtuvuse laadimine CVREF -i pingele, testib see funktsioon seda ja tagastab täisarvu. Aegade saamiseks sekundites kasutage järgmist valemit: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Seda valemit saab kasutada ka isTouching funktsiooni tolerantsi sisestamiseks sekunditesse.
Soovitan:
Asendage puudutus Microsoft 535 jaoks: 8 sammu
Microsoft 535 puudutuse asendamine: puutetundlik digilizer on mobiiltelefoni väga tundlik osa. See pidurdab väikeste esemete või pinnale kukkumise tõttu. Markete puudutuse asendamine on väga kulukas. Täna näitan teile, kuidas teie mobiiltelefoni puutetundlikku digilisaatorit asendada. Almo
Reaktsiooniaja mõõtja (visuaalne, heli ja puudutus): 9 sammu (piltidega)
Reaktsiooniaja mõõtja (visuaalne, heli ja puudutus): reaktsiooniaeg on aeg, mis kulub inimesel stiimuli tuvastamiseks ja vastuse saamiseks. Näiteks sportlase helireaktsiooniaeg on aeg, mis kulub püssilaskmise (võistluse alustamise) ja tema võistluse alustamise vahele. Reactio
Arduino MusicStump: kerge, kütkestav puudutus ja helisignaal: 3 sammu
Arduino MusicStump: kerge, kütkestav puudutus ja helisignaal: interaktiivne puu, mille ülaosas on LED -rõngas, helisignaal ja helisignaal, mis muudab puudutamisel värvi. Selle lõbusa pisiasja tegemiseks vajate järgmist: Elektroonika:- 1x Arduino Uno- 15x kaablit- 1x nii
LED -taustvalgustusega voodipea - puudutus aktiveeritud: 3 sammu
LED -taustvalgustusega voodipea - puutetundlik: LED -riba valgustus puutetundliku postikorgiga. Valgusdioodide aktiveerimiseks puudutan voodi posti vasest korki. Enne neljanda puudutuse pööramist aktiveeritakse järjest kolm valgustugevust, madal, keskmine ja ere
Mahtuvuslik puudutus Evive'iga (Arduino -põhine kontroller): 6 sammu (piltidega)
Mahtuvuslik puudutus Evive'iga (Arduino -põhine kontroller): Kas teate, kuidas teie nutitelefoni puuteekraan töötab? Nutitelefonil on klaasekraani all hulk puuteandureid. Tänapäeval põhineb see mahtuvuslikul puutetundlikul tehnoloogial ja isegi õrnal puudutusel. Mahtuvuslik puudutus on tajutav