Turinys:
Video: Talpinis prisilietimas naudojant PIC16F886 mikrovaldiklį: 3 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:48
Šioje pamokoje apžvelgsime, kaip galite naudoti PIC16F886 mikrovaldiklį, kad nustatytumėte talpos skirtumus, vėliau tai gali būti naudojama norint nustatyti, ar yra paspaudžiamas jutiklinis kilimėlis. Prieš kuriant šį projektą gerai žinoti „pic“mikrovaldiklius.
1 žingsnis: prijunkite grandinę
Pirma, pradėkime nuo grandinės prijungimo pagal aukščiau pateiktą schemą. Norėdami pagaminti jutiklinį kilimėlį, galite sulankstyti aliuminio foliją į kvadratą ir užklijuoti juostą ant vielos. Galite eksperimentuoti su skirtingomis 100k rezistoriaus vertėmis, radau, kad 100k man puikiai tinka.
RC4 kaištis naudojamas matuojamai talpai įkrauti/iškrauti. C12IN0 prijungtas prie vidinio lygintuvo pusės, o C1IN kaištis prijungtas prie to paties lygintuvo + pusės. Mikrovaldiklis mato, kad talpa yra visiškai įkrauta, kai C12IN0 įtampa viršija C1IN įtampą. Varžos įtampos daliklis užtikrina, kad C1IN yra arti 5 voltų.
Kadangi jutiklinis kilimėlis priklauso nuo to, ar tarp jūsų ir grandinės įžeminimo yra didelė talpa, yra galimybė, kad baterija gali neveikti.
2 veiksmas: antraštės failas
Baigėte visus ryšius? Gerai, mes tęsime antraštės failą. Mes naudosime XC8 kompiliatorių ir, kaip rodo pavadinimas, dabar savo projekte sukurkite naują antraštės failą ir nukopijuokite ir įklijuokite šį kodą. Taip pat galite nukopijuoti ir įklijuoti jį virš pagrindinio kodo be antraštės failo.
#define CALIBRATION_SAMPLE 20 #define TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
int skaičiuoti;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // išmatuota iškrovos talpa RC4 = 0; _delay_ms (DISCHARGE_TIME); // pakankamai atidėti, kad visiškai (beveik visiškai) iškrautų "kondensatorių" // išvalyti laikmačio perpildymo vėliavą T0IF = 0; // laukti, kol laikmatis perpildys, pradėti skaičiuoti nuo 0 while (! T0IF); T0IF = 0; // pradėti matuoti įkrovimo talpą RC4 = 1; // laukti, kol talpa įkraus iki atraminės įtampos, kol (C1OUT) {timerCount = TMR0; if (T0IF) {overflowCount ++; T0IF = 0; }} count = (256 * overflowCount) + timerCount; // reset timerCount timerCount = 0; overflowCount = 0; grąžinimo skaičius; }
int isTouching (int tolerancija) {
// kelių mėginių vidurkis dvigubas vidurkis = 0; (int i = 0; i calibrationValue+tolerancija) vidurkis ++; } vidutinis /= TOUCH_SAMPLE; // vidurkis bus skaičius nuo 0 iki 1, jei (vidurkis> 0,2) grąžins 1; grįžti 0; }
void calibrate () {
int vidurkis = 0; int mėginiai [CALIBRATION_SAMPLE]; // gauti vidutinę reikšmę (int i = 0; i <CALIBRATION_SAMPLE; i ++) {sample = getChargeTime (); vidurkis += mėginiai ; } vidurkis /= CALIBRATION_SAMPLE; calibrationValue = vidutinis; // gauti max/min reikšmes maxCalibrationValue = mėginiai [0]; minCalibrationValue = mėginiai [0]; for (int i = 0; i maxCalibrationValue) maxCalibrationValue = mėginiai ; if (mėginiai <minCalibrationValue) minCalibrationValue = mėginiai ; }}
void setupCapacitiveTouch () {
// įkrovimo/iškrovimo kaiščio nustatymas kaip išėjimas, šiuo atveju tai RC4 TRISCbits. TRISC4 = 0; // laikmačio nustatymas0 T0CS = 0; PSA = 1; // lyginamojo nustatymas C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // kliringo skaičiaus reikšmių skaičius = 0; // kalibravimo verčių išvalymas calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // paleisti kalibravimą pradėjus kalibruoti (); }
3 žingsnis: pagrindinio kodo rašymas
Pradėdami nuo pagrindinio kodo, turėsite įtraukti antraštės failą, sukurtą ankstesniame veiksme. Šis kodas yra pavyzdys, kaip galite naudoti funkciją „isTouching“kaip jungiklį. Mano atveju antraštei daviau pavadinimą „capacitiveTouch.h“.
#įtraukti
#include "capacitiveTouch.h"
// šis kintamasis nurodo, ar mygtukas jau paspaustas, ar ne
int lastState = 0;
void main () {
// nustatant RC5 kaip išvestį TRISCbits. TRISC5 = 0; // šią funkciją reikia iškviesti pradedant programą setupCapacitiveTouch (); _delsimas_ms (1000); // kalibruoti po tikslios sąrankos kalibruoti (); while (1) {// patikrinti, ar mygtukas spaudžiamas, jei (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; kitaip RC5 = 1; paskutinė būsena = 1; } // patikrinti, ar mygtukas atleidžiamas kitaip, jei (lastState == 1 &&! isTouching (15)) lastState = 0; _delsimas_ms (20); }}
kalibruoti:
Kai ši funkcija bus vadinama, bus atnaujinti kintamieji calibrationValue, maxCalibrationValue ir minCalibrationValue. calibrationValue naudoja funkcija isTouching. Atminkite, kad kalibravimo metu jutiklinį kilimėlį reikia palikti vieną.
setupCapacitiveTouch:
Reikia paskambinti programos pradžioje. Jis nustato reikiamus bitus, kuriuos naudoja kitos funkcijos. Taip pat veikia kalibravimas. Tačiau sulaukiau geresnių rezultatų palaukęs sekundę ir vėl atlikęs kalibravimą atskirai.
isTouching:
Ši funkcija grąžina 1, jei aptinka C12IN0 talpos padidėjimą, ir grąžina 0, jei talpa yra artima kalibravimo metu. Paprasčiau tariant, jei kas nors paliečia trinkelę, funkcija „isTouching“grąžina 1. Funkcija taip pat nori parametro kaip įvesties, tai yra tolerancija, kad jis suveiktų. Kuo didesnė tolerancijos vertė, tuo ji tampa mažiau jautri. Nustatydamas radau, kad 15 veikė gerai, tačiau kadangi tai priklauso nuo okiliatoriaus dažnio ir kiek talpos pridedama paspaudus, turėtumėte eksperimentuoti su šia verte, kol rasite tai, kas jums tinka.
getChargeTime:
Jei norite sužinoti, kiek laiko užtruks įkrauti talpą iki CVREF įtampos, ši funkcija jį patikrins ir grąžins sveiką skaičių. Norėdami gauti laiką sekundėmis, naudokite šią formulę: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Ši formulė taip pat gali būti naudojama norint gauti tolerancijos įvestį iš funkcijos isTouching į sekundes.
Rekomenduojamas:
Skaitmeninis laikrodis naudojant mikrovaldiklį (AT89S52 be RTC grandinės): 4 žingsniai (su paveikslėliais)
Skaitmeninis laikrodis naudojant mikrovaldiklį (AT89S52 be RTC grandinės): Leiskite apibūdinti laikrodį … " Laikrodis yra prietaisas, kuris skaičiuoja ir rodo laiką (santykinis) " . PASTABA: skaitymas užtruks 2–3 minutes, perskaitykite visą projektą, kitaip aš neskaitysiu
ESP32 talpinis jutiklinis įvestis naudojant „metalinius skylių kištukus“mygtukams: 5 žingsniai (su paveikslėliais)
ESP32 talpinis jutiklinis įvestis naudojant „metalinius skylių kištukus“mygtukams: Kai baigiau rengti būsimo ESP32 „WiFi Kit 32“projekto, kuriam reikia trijų mygtukų įvesties, dizaino sprendimus, viena pastebima problema buvo ta, kad „WiFi Kit 32“neturi vieno mechaninio mygtuko, dar tik trys mechaniniai mygtukai, f
DC variklių valdymas naudojant L298N naudojant „CloudX“mikrovaldiklį: 3 žingsniai
Nuolatinės srovės variklių valdymas naudojant L298N naudojant „CloudX“mikrovaldiklį: Šiame projekte paaiškinsime, kaip naudoti mūsų L298N H tiltą, kad padidintumėte ir sumažintumėte nuolatinės srovės variklio greitį. L298N H tilto modulį galima naudoti su varikliais, kurių įtampa yra nuo 5 iki 35 V DC. Taip pat yra įmontuotas 5 V reguliatorius, taigi, jei jūsų
„Arduino MusicStump“: lengvas, patrauklus prisilietimas ir garsinis signalas: 3 žingsniai
„Arduino MusicStump“: lengvas, patrauklus prisilietimas ir garsinis signalas: interaktyvus medis, kurio viršuje yra LED žiedas, garsinis signalas ir viduje esantis jutiklinis jutiklis, kuris keičia spalvą, kai ją liečiate. Norėdami padaryti šią linksmą smulkmeną, jums reikės: Elektronika:- 1x „Arduino Uno“- 15x kabeliai- 1x, todėl
Talpinis prisilietimas naudojant „Evive“(„Arduino“valdiklis): 6 žingsniai (su nuotraukomis)
Talpus prisilietimas naudojant „Evive“(„Arduino“valdiklis): Ar žinote, kaip veikia jūsų išmaniojo telefono jutiklinis ekranas? Išmanusis telefonas turi daugybę jutiklinių jutiklių po stikliniu ekranu. Šiais laikais jis pagrįstas jutiklinės talpos jutimo technologija ir net švelniu prisilietimu. Jaučiamas talpinis prisilietimas