Sadržaj:
Video: Kapacitivni dodir s mikrokontrolerom PIC16F886: 3 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:37
U ovom ćemo vodiču proučiti kako možete koristiti mikrokontroler PIC16F886 za otkrivanje razlika u kapacitivnosti, što se kasnije može koristiti za utvrđivanje pritiska li se dodirna podloga. Prije izrade ovog projekta dobro je biti upoznat sa mikrokontrolerima za slike.
Korak 1: Povežite svoj krug
Prvo, počnimo ožičenjem kruga prema gornjoj shemi. Za izradu touchpada možete presaviti aluminijsku foliju u kvadrat i zalijepiti traku na žicu. Možete eksperimentirati s različitim vrijednostima za 100k otpornik, otkrio sam da mi 100k radi dobro.
RC4 pin se koristi za početak punjenja/pražnjenja mjernog kapaciteta. C12IN0 je spojen na - stranu unutarnjeg komparatora, a pin C1IN je spojen na + stranu istog usporednika. Mikrokontroler vidi da je kapacitet potpuno napunjen kada napon C12IN0 dosegne iznad napona C1IN. Otpornički razdjelnik napona osigurava da je C1IN blizu 5 volti.
Budući da dodirna ploča ovisi o značajnom kapacitetu između vas i uzemljenog kruga, postoji mogućnost da baterija ne radi.
Korak 2: Datoteka zaglavlja
Završili sa svim vezama? Dobro, nastavit ćemo s datotekom zaglavlja. Koristit ćemo kompajler XC8 i kao što naslov govori, sada ćete stvoriti novu datoteku zaglavlja u svom projektu i kopirati i zalijepiti sljedeći kod. Možete ga kopirati i zalijepiti iznad glavnog koda bez datoteke zaglavlja.
#define CALIBRATION_SAMPLE 20 #define TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
int broj;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // mjeriti kapacitet pražnjenja RC4 = 0; _odgoda_ms (DISCHARGE_TIME); // dati dovoljno kašnjenja za potpuno (gotovo potpuno stvarno) pražnjenje "kondenzatora" // očistiti zastavicu preljeva timera T0IF = 0; // čekamo da se mjerač prelije, start count od 0 while (! T0IF); T0IF = 0; // početi mjeriti kapacitet punjenja RC4 = 1; // čekamo da se kapacitet napuni do referentnog napona dok (C1OUT) {timerCount = TMR0; if (T0IF) {overflowCount ++; T0IF = 0; }} count = (256 * overflowCount) + timerCount; // resetiranje timerCount timerCount = 0; overflowCount = 0; broj povratka; }
int isTouching (int tolerancija) {
// prosjek više uzoraka dvostruki prosjek = 0; za (int i = 0; i calibrationValue+tolerancija) prosjek ++; } prosjek /= TOUCH_SAMPLE; // prosjek će biti broj između 0 i 1 ako (prosjek> 0,2) vrati 1; return 0; }
void calibrate () {
int prosjek = 0; int uzorci [CALIBRATION_SAMPLE]; // dobiti prosječnu vrijednost za (int i = 0; i <CALIBRATION_SAMPLE; i ++) {uzorci = getChargeTime (); prosjek += uzorci ; } prosjek /= CALIBRATION_SAMPLE; calibrationValue = prosjek; // dobiti max/min vrijednosti maxCalibrationValue = uzorci [0]; minCalibrationValue = uzorci [0]; za (int i = 0; i maxCalibrationValue) maxCalibrationValue = uzorci ; if (uzorci <minCalibrationValue) minCalibrationValue = uzorci ; }}
void setupCapacitiveTouch () {
// postavljanje pina za punjenje/pražnjenje kao izlaza, u ovom slučaju to je RC4 TRISCbits. TRISC4 = 0; // postavljanje timera0 T0CS = 0; PSA = 1; // postavljanje usporednika C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // brisanje vrijednosti brojanja count = 0; // brisanje kalibracijskih vrijednosti calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // pokreni kalibraciju pri pokretanju calibrate (); }
Korak 3: Pisanje glavnog koda
Počevši od glavnog koda, morat ćete uključiti datoteku zaglavlja stvorenu u prethodnom koraku. Sljedeći kôd je primjer kako možete koristiti funkciju isTouching kao prekidač. U mom slučaju dao sam zaglavlju naziv capacitiveTouch.h.
#uključi
#include "capacitiveTouch.h"
// ova varijabla govori je li gumb već pritisnut ili nije
int lastState = 0;
void main () {
// postavljanje RC5 kao izlaznog TRISCbits. TRISC5 = 0; // morate pozvati ovu funkciju pri pokretanju programa setupCapacitiveTouch (); _odgoda_ms (1000); // kalibrirati nakon točnog postavljanja calibrate (); while (1) {// provjerava se pritiska li se gumb if (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; inače RC5 = 1; lastState = 1; } // provjeravamo pušta li se gumb else if (lastState == 1 &&! isTouching (15)) lastState = 0; _odgoda_ms (20); }}
kalibrirati:
Kad se ova funkcija pozove varijable calibrationValue, maxCalibrationValue i minCalibrationValue će se ažurirati. calibrationValue koristi funkcija isTouching. Imajte na umu da dodirnu ploču treba ostaviti na miru tijekom kalibracije.
setupCapacitiveTouch:
Potrebno je nazvati na početku vašeg programa. Postavlja potrebne bitove koje koriste druge funkcije. Pokreće i kalibraciju. Međutim, čekao sam sekundu i bolje sam ponovo izvršio kalibraciju.
isTouching:
Ova funkcija vraća 1 ako detektira povećanje kapaciteta na C12IN0 i vraća 0 ako je kapacitet blizu onog koji je bio tijekom kalibracije. Jednostavno rečeno, ako netko dodirne jastučić, funkcija isTouching će se vratiti 1. Funkcija također želi parametar kao ulaz, to je tolerancija za aktiviranje. Što je veća tolerancija, to postaje manje osjetljiva. U mojim postavkama otkrio sam da 15 radi dobro, ali budući da to ovisi o frekvenciji oscilatora i kolikom se kapacitetu dodaje kad ga pritisnete, trebali biste eksperimentirati s ovom vrijednošću dok ne pronađete nešto što vam odgovara.
getChargeTime:
Ako želite znati koliko će vremena trebati da se kapacitet napuni do CVREF napona, ova funkcija će ga testirati i vratiti cijeli broj. Za dobivanje vremena u sekundama koristite ovu formulu: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Ova formula se također može koristiti za unos tolerancije iz funkcije isTouching u sekunde.
Preporučeni:
Testirajte Bare Arduino, sa softverom za igre koji koristi kapacitivni ulaz i LED: 4 koraka
Testirajte Bare Arduino, sa softverom za igre koji koristi kapacitivni ulaz i LED: " Push-It " Interaktivna igra koja koristi golu Arduino ploču, nisu potrebni vanjski dijelovi ili ožičenje (koristi kapacitivni ulaz na dodir). Gore prikazano, pokazuje da radi na dvije različite ploče. Pritisnite-Ima dvije svrhe. Za brzo demonstriranje/v
ESP32 kapacitivni dodirni ulaz pomoću "metalnih utikača za rupe" za gumbe: 5 koraka (sa slikama)
ESP32 kapacitivni dodirni ulaz pomoću "metalnih utikača za rupe" za gumbe: Dok sam dovršavao odluke o dizajnu za nadolazeći projekt temeljen na ESP32 WiFi Kit 32 koji zahtijeva unos s tri gumba, jedan je uočljiv problem bio što WiFi Kit 32 nema niti jedno mehaničko dugme, ipak sama tri mehanička gumba, f
DODAJTE kapacitivni dodirni prekidač na svoje projekte: 7 koraka
DODAJTE kapacitivni dodirni prekidač vašim projektima: Kako dodati kapacitivni dodirni prekidač svojim projektima kod kuće. Pozdrav, prijatelji elektronički sami u ovom vodiču pokazat ću vam kako možete povoljno dodati kapacitivni dodirni prekidač svojim elektroničkim projektima i dati svoj projekt sam profesionalni izgled
Kapacitivni proširivi pokazivač: 4 koraka
Kapacitivni proširivi pokazivač: Tehnologija kapacitivnog dodira danas je vrlo česta, osobito u kuhinji. Ljudima manjeg rasta ili ograničenog dosega pristup ovim tehnologijama može biti otežan. Uobičajeni pokazivači proširenja neće raditi jer
Kapacitivni dodir s Eviveom (Arduino kontroler): 6 koraka (sa slikama)
Kapacitivni dodir s Eviveom (Arduino temeljen kontroler): Znate li kako funkcionira zaslon osjetljiv na dodir vašeg pametnog telefona? Pametni telefon ima niz senzora za dodir ispod staklenog zaslona. Danas se lako temelji na kapacitivnoj tehnologiji osjetljivog dodira, pa čak i nježnom dodiru. Osjeti se kapacitivni dodir