Satura rādītājs:
Video: Kapacitīvs pieskāriens ar PIC16F886 mikrokontrolleru: 3 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:57
Šajā apmācībā mēs apskatīsim, kā jūs varat izmantot PIC16F886 mikrokontrolleru, lai noteiktu kapacitātes atšķirības, vēlāk to var izmantot, lai noteiktu, vai tiek piespiests skārienpaliktnis. Pirms šī projekta veikšanas ir labi iepazīties ar mikrokontrolleriem.
1. darbība: savienojiet ķēdi
Pirmkārt, sāksim ar ķēdes savienošanu saskaņā ar iepriekš minēto shēmu. Lai izveidotu skārienpaliktni, alumīnija foliju var salocīt kvadrātā un pielīmēt pie stieples. Jūs varat eksperimentēt ar dažādām 100k rezistora vērtībām, es atklāju, ka 100k man derēja labi.
RC4 tapu izmanto, lai sāktu izmērāmās kapacitātes uzlādi/izlādi. C12IN0 ir savienots ar iekšējā salīdzinātāja pusi, un C1IN tapa ir pievienota tā paša salīdzinātāja + pusei. Mikrokontrolleris redz kapacitāti kā pilnībā uzlādētu, kad C12IN0 spriegums sasniedz virs C1IN sprieguma. Pretestības sprieguma dalītājs nodrošina, ka C1IN ir tuvu 5 voltiem.
Tā kā skārienpaliktnis ir atkarīgs no tā, vai starp jums un ķēdes zemi ir ievērojama kapacitāte, pastāv iespēja, ka akumulators var nedarboties.
2. darbība: galvenes fails
Vai esat pabeidzis visus savienojumus? Labi, mēs turpināsim ar galvenes failu. Mēs izmantosim XC8 kompilatoru, un, kā norāda nosaukums, tagad savā projektā izveidojiet jaunu galvenes failu un kopējiet un ielīmējiet šādu kodu. Tikpat labi varat to kopēt un ielīmēt virs galvenā koda bez galvenes faila.
#define CALIBRATION_SAMPLE 20 #define TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
int skaits;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // izmērāmā izlādes kapacitāte RC4 = 0; _delay_ms (DISCHARGE_TIME); // dod pietiekami daudz kavēšanās, lai pilnībā (gandrīz pilnībā) izlādētu "kondensatoru" // notīrītu taimera pārplūdes karodziņu T0IF = 0; // gaidīt, lai taimeris pārplūst, sākt skaitīt no 0, kamēr (! T0IF); T0IF = 0; // sākt mērāmo uzlādes kapacitāti RC4 = 1; // pagaidiet, līdz kapacitāte uzlādējas līdz atsauces spriegumam, kamēr (C1OUT) {timerCount = TMR0; ja (T0IF) {overflowCount ++; T0IF = 0; }} skaits = (256 * overflowCount) + timerCount; // reset timerCount timerCount = 0; overflowCount = 0; atgriešanās skaits; }
int isTouching (int tolerance) {
// vairāku paraugu vidējais rādītājs dubultā vidējais = 0; par (int i = 0; i calibrationValue+tolerance) vidēji ++; } vidējais /= TOUCH_SAMPLE; // vidējais būs skaitlis no 0 līdz 1, ja (vidēji> 0,2) atgriež 1; atgriezties 0; }
void calibrate () {
int vidēji = 0; int paraugi [CALIBRATION_SAMPLE]; // iegūt vidējo vērtību (int i = 0; i <CALIBRATION_SAMPLE; i ++) {paraugi = getChargeTime (); vidējais += paraugi ; } vidējais /= CALIBRATION_SAMPLE; calibrationValue = vidējais; // iegūt maksimālās/min vērtības maxCalibrationValue = paraugi [0]; minCalibrationValue = paraugi [0]; par (int i = 0; i maxCalibrationValue) maxCalibrationValue = paraugi ; ja (paraugi <minCalibrationValue) minCalibrationValue = paraugi ; }}
void setupCapacitiveTouch () {
// iestatot uzlādes/izlādes tapu kā izeju, šajā gadījumā tas ir RC4 TRISCbits. TRISC4 = 0; // taimera iestatīšana0 T0CS = 0; PSA = 1; // salīdzinātāja iestatīšana C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // ieskaita skaitļu vērtību skaits count = 0; // kalibrēšanas vērtību notīrīšana calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // palaist kalibrēšanu, uzsākot kalibrēšanu (); }
3. solis: galvenā koda rakstīšana
Sākot ar galveno kodu, jums jāiekļauj galvenes fails, kas izveidots iepriekšējā solī. Šis kods ir piemērs tam, kā jūs varat izmantot funkciju isTouching kā slēdzi. Manā gadījumā galvenei devu nosaukumu capacitiveTouch.h.
#iekļaut
#include "capacitiveTouch.h"
// šis mainīgais norāda, vai poga ir vai nav jau nospiesta
int lastState = 0;
void main () {
// iestatot RC5 kā izeju TRISCbits. TRISC5 = 0; // šī funkcija jāizsauc, startējot programmu setupCapacitiveTouch (); _ kavēšanās_ms (1000); // kalibrēt pēc precīzas iestatīšanas calibrate (); while (1) {// pārbaudot, vai poga tiek nospiesta, ja (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; citādi RC5 = 1; lastState = 1; } // pārbaude, vai poga tiek atbrīvota citādi, ja (lastState == 1 &&! isTouching (15)) lastState = 0; _kavēšanās_ms (20); }}
kalibrēt:
Kad šī funkcija tiek saukta, tiks atjaunināti mainīgie calibrationValue, maxCalibrationValue un minCalibrationValue. calibrationValue izmanto funkcija isTouching. Paturiet prātā, ka skārienpaliktnis kalibrēšanas laikā jāatstāj viens.
setupCapacitiveTouch:
Nepieciešams piezvanīt programmas sākumā. Tas nosaka nepieciešamos bitus, ko izmanto citas funkcijas. Tas arī veic kalibrēšanu. Tomēr es guvu labākus rezultātus, gaidot sekundi un vēlreiz veicot kalibrēšanu atsevišķi.
isTouching:
Šī funkcija atgriež 1, ja tā konstatē C12IN0 kapacitātes palielināšanos, un atgriež 0, ja kapacitāte ir tuvu tai, kas bija kalibrēšanas laikā. Vienkārši sakot, ja kāds pieskaras spilventiņam, funkcija isTouching atgriezīsies 1. Funkcija arī vēlas ievadīt parametru, tā ir pielaide, lai to aktivizētu. Jo augstāka ir pielaides vērtība, jo mazāk jutīga tā kļūst. Savā iestatījumā es atklāju, ka 15 strādāja labi, taču, tā kā tas ir atkarīgs no oksilatora frekvences un no tā, cik daudz jaudas tiek pievienotas, nospiežot to, jums vajadzētu eksperimentēt ar šo vērtību, līdz atrodat kaut ko, kas jums noder.
getChargeTime:
Ja vēlaties uzzināt, cik ilgs laiks būtu nepieciešams, lai uzlādētu kapacitāti līdz CVREF spriegumam, šī funkcija to pārbaudīs un parādīs veselu skaitli. Lai iegūtu laiku sekundēs, izmantojiet šo formulu: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Šo formulu var izmantot arī, lai iegūtu pielaides ievadi no funkcijas isTouching līdz sekundēm.
Ieteicams:
Corona Safe: automātisks ūdens taupīšanas pieskāriens: 6 soļi
Korona drošs: automātisks ūdens taupīšanas krāns: mums visiem ik pa laikam ir jānomazgā rokas, lai atbrīvotos no vīrusa un baktērijām, kas īpaši paredzētas koronavīrusa vīrusam, mums ir jānomazgā rokas 20 sekundes, lai pilnībā atbrīvotos no tā. Arī ziepju dozators vai krāna poga var nebūt obligāti higiēniski vai c
Reakcijas laika mērītājs (vizuāls, audio un pieskāriens): 9 soļi (ar attēliem)
Reakcijas laika mērītājs (vizuāls, audio un pieskāriens): Reakcijas laiks ir laika mērījums, kas cilvēkam nepieciešams, lai identificētu stimulu un radītu atbildi. Piemēram, sportista audio reakcijas laiks ir laiks, kas pagājis no šāviena šāviena (ar to sākas sacensības) un viņa vai viņas sacensību sākuma. Reactio
Arduino MusicStump: viegls, aizraujošs pieskāriens un skaņas signāls: 3 soļi
Arduino MusicStump: viegls, aizraujošs pieskāriens un skaņas signāls: interaktīvs koks ar LED gredzenu augšpusē, skaņas signālu un skaņas signālu, kas maina krāsu, pieskaroties tai. Lai padarītu šo jautro sīkumu, jums būs nepieciešams: Elektronika:- 1x Arduino Uno- 15x kabeļi- 1x tātad
Gaismas diodes ar aizmugurgaismojumu - aktivizēts pieskāriens: 3 soļi
Gaismas diodes ar aizmugurgaismojumu - skārienaktivizēts: LED sloksnes apgaismojums ar skārienjutīgu statņa vāciņu. Lai aktivizētu gaismas diodes, es pieskaros vara vāciņam uz gultas statņa. Ir trīs gaismas līmeņa intensitātes - zema, vidēja un spilgta, kas tiek aktivizētas secīgi pirms ceturtā pieskāriena pagrieziena
Kapacitīvs pieskāriens ar Evive (kontrolieris uz Arduino): 6 soļi (ar attēliem)
Kapacitīvs pieskāriens ar Evive (kontrolieris uz Arduino bāzes): Vai jūs zināt, kā darbojas jūsu viedtālruņa skārienekrāns? Viedtālrunī zem stikla ekrāna ir virkne pieskārienu sensoru. Mūsdienās tās pamatā ir kapacitātes pieskārienu sensoru tehnoloģija un pat maigs pieskāriens ir viegli nosakāms. Ir jūtams kapacitatīvs pieskāriens