Kazalo:
Video: Kapacitivni dotik z mikrokontrolerjem PIC16F886: 3 koraki
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:07
V tej vadnici bomo preučili, kako lahko z mikrokrmilnikom PIC16F886 zaznate razlike v kapacitivnosti, kar lahko kasneje uporabite za ugotavljanje, ali je pritisnjena sledilna ploščica. Dobro je, da se pred izdelavo tega projekta seznanite z mikrokrmilniki pic.
1. korak: Povežite vezje
Najprej začnimo z ožičenjem vezja po zgornji shemi. Za izdelavo sledilne ploščice lahko aluminijasto folijo zložite v kvadrat in nalepite trak na žico. Lahko poskusite z različnimi vrednostmi za 100k upor. Ugotovil sem, da mi 100k dobro deluje.
Pin RC4 se uporablja za začetek polnjenja/praznjenja kapacitivnosti, ki jo je treba izmeriti. C12IN0 je priključen na - stran notranjega primerjalnika, pin C1IN pa na + stran istega primerjalnika. Mikrokrmilnik vidi, da je kapacitivnost popolnoma napolnjena, ko napetost C12IN0 doseže nad napetostjo C1IN. Uporni delilnik napetosti zagotavlja, da je C1IN blizu 5 voltov.
Ker je sledilna ploščica odvisna od velike kapacitivnosti med vami in maso vezja, obstaja možnost, da baterija ne bo delovala.
2. korak: Datoteka z glavo
Končali z vsemi povezavami? Dobro, nadaljevali bomo z datoteko z glavo. Uporabljali bomo prevajalnik XC8 in kot že naslov pove, boste zdaj v svojem projektu ustvarili novo datoteko z glavo in kopirali in prilepili naslednjo kodo. Prav tako ga lahko kopirate in prilepite nad glavno kodo brez datoteke z glavo.
#define CALIBRATION_SAMPLE 20 #define TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
število int;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // izpraznjena kapacitivnost, ki jo je treba izmeriti RC4 = 0; _kasnenje_ms (DISCHARGE_TIME); // damo dovolj zamude, da popolnoma (skoraj v celoti dejansko) izpraznimo "kondenzator" // počistimo zastavico prelivanja časovnika T0IF = 0; // počakajte, da se časovnik preplavi, začni štetje od 0 while (! T0IF); T0IF = 0; // začnemo meriti kapaciteto polnjenja RC4 = 1; // počakamo, da se kapacitivnost napolni do referentne napetosti, medtem ko (C1OUT) {timerCount = TMR0; if (T0IF) {overflowCount ++; T0IF = 0; }} count = (256 * overflowCount) + timerCount; // ponastavitev timerCount timerCount = 0; overflowCount = 0; število vračil; }
int isTouching (int tolerance) {
// povprečje več vzorcev dvojno povprečje = 0; za (int i = 0; i calibrationValue+tolerance) povprečje ++; } povprečje /= TOUCH_SAMPLE; // povprečje bo število med 0 in 1, če (povprečje> 0,2) vrne 1; vrnitev 0; }
void calibrate () {
int povprečje = 0; int vzorci [CALIBRATION_SAMPLE]; // dobimo povprečno vrednost za (int i = 0; i <CALIBRATION_SAMPLE; i ++) {vzorcev = getChargeTime (); povprečje += vzorci ; } povprečje /= CALIBRATION_SAMPLE; calibrationValue = povprečje; // dobimo vrednosti max/min maxCalibrationValue = vzorci [0]; minCalibrationValue = vzorci [0]; za (int i = 0; i maxCalibrationValue) maxCalibrationValue = vzorci ; if (vzorci <minCalibrationValue) minCalibrationValue = vzorci ; }}
void setupCapacitiveTouch () {
// nastavitev polnilnega/praznilnega zatiča kot izhoda, v tem primeru je to RC4 TRISCbits. TRISC4 = 0; // nastavitev timer0 T0CS = 0; PSA = 1; // nastavitev primerjalnika C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // brisanje vrednosti štetja count = 0; // brisanje kalibracijskih vrednosti calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // zaženi umerjanje ob zagonu calibrate (); }
3. korak: Pisanje glavne kode
Začenši z glavno kodo, morate vključiti datoteko z glavo, ustvarjeno v prejšnjem koraku. Naslednja koda je primer, kako lahko funkcijo isTouching uporabite kot stikalo. V mojem primeru sem glavi dal ime capacitiveTouch.h.
#vključi
#include "kapacitiveTouch.h"
// ta spremenljivka pove, ali je gumb že pritisnjen ali še ni pritisnjen
int lastState = 0;
void main () {
// nastavitev RC5 kot izhodnega TRISCbits. TRISC5 = 0; // to funkcijo morate poklicati ob zagonu programa setupCapacitiveTouch (); _dey_ms (1000); // umerjanje po natančni nastavitvi calibrate (); while (1) {// preverjanje, ali se gumb pritisne if (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; drugače je RC5 = 1; lastState = 1; } // preverjanje, ali se gumb sprosti, če (lastState == 1 &&! isTouching (15)) lastState = 0; _kasnenje_ms (20); }}
umeriti:
Ko se ta funkcija pokliče spremenljivki calibrationValue, bo maxCalibrationValue in minCalibrationValue posodobljena. calibrationValue uporablja funkcija isTouching. Upoštevajte, da je treba sledilno ploščico med kalibracijo pustiti pri miru.
setupCapacitiveTouch:
Potrebno ga je poklicati na začetku programa. Določa potrebne bite, ki jih uporabljajo druge funkcije. Izvaja tudi kalibracijo. Vendar sem dobil boljše rezultate tako, da sem počakal sekundo in ločeno znova zagnal umerjanje.
se dotika:
Ta funkcija vrne 1, če zazna povečanje kapacitivnosti na C12IN0 in vrne 0, če je kapacitivnost blizu tiste, ki je bila med kalibracijo. Preprosto povedano, če se nekdo dotakne blazinice, se funkcija isTouching vrne 1. Funkcija želi tudi parameter kot vhod, to je toleranca, da se sproži. Višja kot je toleranca, manj občutljiva je. V moji nastavitvi sem ugotovil, da jih je 15 delovalo dobro, ker pa je to odvisno od frekvence oscilatorja in od tega, koliko kapacitivnosti dodamo, ko pritisnemo nanjo, bi morali eksperimentirati s to vrednostjo, dokler ne najdete nekaj, kar vam ustreza.
getChargeTime:
Če želite vedeti, koliko časa bo trajalo, da se kapacitivnost napolni na napetost CVREF, jo bo ta funkcija preizkusila in vrnila celo število. Za izračun časa v sekundah uporabite to formulo: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds To formulo lahko uporabite tudi za vnos tolerance iz funkcije isTouching v sekunde.
Priporočena:
Tri vezja senzorja na dotik + vezje časovnika na dotik: 4 koraki
Tri vezja senzorja na dotik + vezje časovnika na dotik: Senzor na dotik je vezje, ki se vklopi, ko zazna dotik na nožicah na dotik. Deluje na prehodni osnovi, to je, da bo obremenitev vklopljena le za čas dotika na zatičih. Tukaj vam bom pokazal tri različne načine, kako občutiti dotik
ESP32 kapacitivni vnos na dotik z uporabo "kovinskih vtičev za luknje" za gumbe: 5 korakov (s slikami)
Kapacitivni vnos na dotik ESP32 z uporabo "kovinskih vtičev za luknje" za gumbe: Ko sem dokončeval oblikovalske odločitve za prihajajoči projekt, ki temelji na ESP32 WiFi Kit 32, ki zahteva vnos s tremi gumbi, je bila ena opazna težava, da WiFi Kit 32 nima niti enega mehanskega gumba, pa še trije mehanski gumbi, f
STIKALO NA DOTIK - Kako narediti stikalo na dotik s tranzistorjem in ploščico: 4 koraki
STIKALO NA DOTIK | Kako narediti stikalo na dotik z uporabo tranzistorja in tiskalne plošče.: Stikalo na dotik je zelo preprost projekt, ki temelji na uporabi tranzistorjev. V tem projektu je uporabljen tranzistor BC547, ki deluje kot stikalo na dotik. OBVEZNO OGLEDITE VIDEO, KI vam bo dal popolne podrobnosti o projektu
Drevo življenja (Arduino kapacitivni senzor na dotik, ki poganja servo motor): 6 korakov (s slikami)
Tree of Life (Arduino kapacitivni senzor na dotik, ki poganja servo motor): Za ta projekt smo izdelali drevo za dajanje riža, ki ga sestavljata kapacitivni senzor na dotik in servo motor. Ko se dotaknete preproge, se aktivira servo motor in sprosti riž (ali karkoli želite vanj). Tukaj je kratek video
Kapacitivni dotik z Evive (krmilnik na osnovi Arduino): 6 korakov (s slikami)
Kapacitivni dotik z Evive (krmilnik na osnovi Arduino): Ali veste, kako deluje zaslon na dotik vašega pametnega telefona? Pametni telefon ima pod steklenim zaslonom vrsto senzorjev na dotik. Danes temelji na kapacitivni tehnologiji zaznavanja dotika in celo nežen dotik zlahka zazna. Kapacitivni dotik se zazna