Sadržaj:
Video: Kapacitivni dodir sa mikrokontrolerom PIC16F886: 3 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:08
U ovom vodiču ćemo razmotriti kako možete koristiti mikrokontroler PIC16F886 za otkrivanje razlika u kapacitivnosti, što se kasnije može koristiti za utvrđivanje pritiska li se dodirna ploča. Dobro je upoznati se sa mikrokontrolerima za slike prije izrade ovog projekta.
Korak 1: Povežite svoj krug
Prvo, počnimo ožičenjem kruga prema gornjoj shemi. Za izradu touchpada možete saviti aluminijsku foliju u kvadrat i zalijepiti traku na žicu. Možete eksperimentirati s različitim vrijednostima za 100k otpornik, otkrio sam da mi 100k dobro funkcionira.
RC4 pin se koristi za početak punjenja/pražnjenja mjernog kapaciteta. C12IN0 je spojen na - stranu unutrašnjeg komparatora, a C1IN pin je spojen na + stranu istog komparatora. Mikrokontroler vidi da je kapacitet potpuno napunjen kada napon C12IN0 dosegne iznad napona C1IN0. Otpornički razdjelnik napona osigurava da je C1IN blizu 5 volti.
Budući da dodirna podloga ovisi o značajnom kapacitetu između vas i mase kruga, postoji mogućnost da baterija možda neće raditi.
Korak 2: Datoteka zaglavlja
Završili sa svim vezama? Dobro, nastavit ćemo s datotekom zaglavlja. Koristit ćemo XC8 kompajler 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 count;
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; // čekati da se tajmer prelije, start count od 0 while (! T0IF); T0IF = 0; // počinje 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; count return; }
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]; // dobivamo prosječnu vrijednost za (int i = 0; i <CALIBRATION_SAMPLE; i ++) {uzorci = getChargeTime (); prosjek += uzorci ; } prosjek /= CALIBRATION_SAMPLE; calibrationValue = prosjek; // dobivamo 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 tajmera0 T0CS = 0; PSA = 1; // postavljanje komparatora C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // brisanje vrijednosti računa 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 zaglavlju sam dao naziv capacitiveTouch.h.
#include
#include "capacitiveTouch.h"
// ova varijabla govori je li dugme već pritisnuto ili nije
int lastState = 0;
void main () {
// postavljanje RC5 kao izlaznog TRISCbits. TRISC5 = 0; // morate pozvati ovu funkciju pri pokretanju programa setupCapacitiveTouch (); _delay_ms (1000); // kalibrirati nakon vašeg tačnog postavljanja calibrate (); while (1) {// provjerava se pritiska li se dugme if (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; drugo RC5 = 1; lastState = 1; } // provjeravamo otpuštamo li gumb else if (lastState == 1 &&! isTouching (15)) lastState = 0; _odgoda_ms (20); }}
kalibrirati:
Kada se ova funkcija pozove varijable calibrationValue, maxCalibrationValue i minCalibrationValue će biti ažurirane. calibrationValue koristi isTouching funkcija. Imajte na umu da dodirnu ploču treba ostaviti na miru tijekom kalibracije.
setupCapacitiveTouch:
Potrebno je pozvati na početku vašeg programa. Postavlja potrebne bitove koje koriste druge funkcije. Pokreće i kalibraciju. Međutim, ja sam postigao bolje rezultate tako što sam čekao sekundu i ponovo izvršio kalibraciju zasebno.
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 na CVREF napon, ova funkcija će ga testirati i vratiti cijeli broj. Da biste dobili vrijeme 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čuje se:
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 niti 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 dugmad: 5 koraka (sa slikama)
ESP32 kapacitivni dodirni ulaz pomoću "metalnih utikača za rupe" za tipke: Dok sam dovršavao odluke o dizajnu za nadolazeći projekt zasnovan na ESP32 WiFi Kit 32 koji zahtijeva unos s tri tipke, jedan je uočljiv problem bio to što WiFi Kit 32 nema niti jedno mehaničko dugme, ipak sama tri mehanička dugmeta, 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. Zdravo, prijatelji elektronički sami u ovom vodiču pokazat ću vam kako možete jeftino dodati kapacitivni dodirni prekidač svojim elektroničkim projektima i dati svoj projekt sam. profesionalni izgled
Kapacitivni dodir sa Eviveom (Arduino kontroler): 6 koraka (sa slikama)
Kapacitivni dodir sa Evive -om (Arduino zasnovan kontroler): Znate li kako funkcioniše ekran osetljiv na dodir vašeg pametnog telefona? Pametni telefon ima niz senzora za dodir ispod staklenog ekrana. Danas se njegova tehnologija temelji na kapacitivnoj tehnologiji osjetljivog na dodir, pa čak i nježan dodir lako se otkriva. Kapacitivni dodir se osjeća
Zagrli & Robot zakrpa osjetljiva na dodir osjetljiva na dodir: 10 koraka (sa slikama)
Zagrli & Robot zakrpa osetljiva na dodir osetljiva na dodir: Uvek sam želeo da napravim jednostavan, ali pristojan projekat sa ovom zakrpom i „džepnom veličinom“Takmičenje je izgledalo kao savršena prilika da se napravi maskota robota. Ovaj momak sjedi u džepu moje majice, baš kao na ikoni takmičenja, i ide