![Kapasitiv berøring med PIC16F886 mikrokontroller: 3 trinn Kapasitiv berøring med PIC16F886 mikrokontroller: 3 trinn](https://i.howwhatproduce.com/images/001/image-210-79-j.webp)
Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-23 15:02
![Kapasitiv berøring med PIC16F886 mikrokontroller Kapasitiv berøring med PIC16F886 mikrokontroller](https://i.howwhatproduce.com/images/001/image-210-80-j.webp)
I denne opplæringen vil vi gå over hvordan du kan bruke en PIC16F886 mikrokontroller for å oppdage forskjeller i kapasitans, dette kan senere brukes til å fortelle om en berøringsplate trykkes ned. Det er godt å bli kjent med pic -mikrokontrollere før du gjør dette prosjektet.
Trinn 1: Koble opp kretsen din
![Koble opp kretsen din Koble opp kretsen din](https://i.howwhatproduce.com/images/001/image-210-81-j.webp)
La oss først starte med å koble opp kretsen i henhold til skjemaet ovenfor. For å lage berøringsplaten kan du brette aluminiumsfolie til en firkant og tape på en wire. Du kan eksperimentere med forskjellige verdier for 100k -motstanden, jeg fant 100k som fungerte bra for meg.
RC4 -pinnen brukes til å begynne å lade/tømme kapasitansen som skal måles. C12IN0 er koblet til - siden av en intern komparator, og C1IN - pinnen er koblet til + - siden av den samme komparatoren. Mikrokontrolleren ser på kapasitansen som fulladet når C12IN0 -spenningen når over C1IN -spenningen. Den resistive spenningsdeleren sørger for at C1IN er nær 5 volt.
Siden styreplaten er avhengig av at det er en betydelig kapasitans mellom deg og kretsjorda, er det en mulighet for at et batteri ikke fungerer.
Trinn 2: Overskriftsfilen
![Hovedfilen Hovedfilen](https://i.howwhatproduce.com/images/001/image-210-82-j.webp)
Ferdig med alle tilkoblinger? Bra, vi fortsetter med toppteksten. Vi skal bruke XC8-kompilatoren, og som tittelen antyder, skal du nå opprette en ny toppfil i prosjektet og kopiere og lime inn følgende kode. Du kan like godt kopiere og lime den inn over hovedkoden din uten noen overskriftsfil.
#define CALIBRATION_SAMPLE 20 #definere TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
int telle;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // utladningskapasitans som skal måles RC4 = 0; _forsinkelse_ms (DISCHARGE_TIME); // gi nok forsinkelse til å fullstendig (nesten helt faktisk) tømme "kondensatoren" // tømme tidtakeroverløpsflagget T0IF = 0; // vent på at timeren overløper, begynn tellingen fra 0 mens (! T0IF); T0IF = 0; // start ladekapasitansen som skal måles RC4 = 1; // vent på at kapasitansen lades opp til referansespenningen mens (C1OUT) {timerCount = TMR0; hvis (T0IF) {overflowCount ++; T0IF = 0; }} count = (256 * overflowCount) + timerCount; // reset timerCount timerCount = 0; overflowCount = 0; returantall; }
int isTouching (int toleranse) {
// gjennomsnitt av flere prøver dobbelt gjennomsnitt = 0; for (int i = 0; i calibrationValue+tolerance) gjennomsnitt ++; } gjennomsnitt /= TOUCH_SAMPLE; // gjennomsnitt vil være et tall mellom 0 og 1 hvis (gjennomsnitt> 0,2) returnerer 1; retur 0; }
ugyldig kalibrer () {
int gjennomsnitt = 0; int prøver [CALIBRATION_SAMPLE]; // få gjennomsnittlig verdi for (int i = 0; i <CALIBRATION_SAMPLE; i ++) {samples = getChargeTime (); gjennomsnittlig += prøver ; } gjennomsnitt /= CALIBRATION_SAMPLE; calibrationValue = gjennomsnittlig; // få max/min verdier maxCalibrationValue = samples [0]; minCalibrationValue = prøver [0]; for (int i = 0; i maxCalibrationValue) maxCalibrationValue = prøver ; hvis (prøver <minCalibrationValue) minCalibrationValue = prøver ; }}
void setupCapacitiveTouch () {
// angi lade-/utladningspinne som utgang, i dette tilfellet er det RC4 TRISCbits. TRISC4 = 0; // sette opp timer0 T0CS = 0; PSA = 1; // sette opp komparator C1CH0 = 0; ClCH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // telle telleverdier telle = 0; // slette kalibreringsverdier calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // kjøre kalibrering ved start kalibrere (); }
Trinn 3: Skrive hovedkoden
Fra og med hovedkoden må du inkludere toppfilen som ble opprettet i forrige trinn. Følgende kode er et eksempel på hvordan du kan bruke isTouching -funksjonen som en bryter. I mitt tilfelle ga jeg overskriften navnet capacitiveTouch.h.
#inkludere
#include "capacitiveTouch.h"
// denne variabelen forteller om knappen er trykket eller ikke allerede
int lastState = 0;
void main () {
// sette RC5 som utgang TRISCbits. TRISC5 = 0; // du må ringe denne funksjonen ved starten av programmet setupCapacitiveTouch (); _forsinkelse_ms (1000); // kalibrer etter det nøyaktige oppsettet kalibrer (); mens (1) {// sjekker om knappen blir trykket hvis (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; annet RC5 = 1; lastState = 1; } // sjekke om knappen slippes, ellers hvis (lastState == 1 &&! isTouching (15)) lastState = 0; _forsinkelse_ms (20); }}
kalibrere:
Når denne funksjonen kalles variablene calibrationValue, oppdateres maxCalibrationValue og minCalibrationValue. calibrationValue brukes av isTouching -funksjonen. Husk at berøringsputen skal stå alene under kalibreringen.
setupCapacitiveTouch:
Må ringes opp i begynnelsen av programmet. Den setter opp de nødvendige bitene som brukes av de andre funksjonene. Den kjører også en kalibrering. Imidlertid fikk jeg bedre resultater ved å vente et sekund og kjøre kalibreringen igjen separat.
isTouching:
Denne funksjonen returnerer 1 hvis den oppdager en økning i kapasitans på C12IN0 og returnerer 0 hvis kapasitansen er nær den den var under kalibreringen. Enkelt sagt, hvis noen berører puten, vil isTouching -funksjonen returnere 1. Funksjonen vil også ha en parameter som inngang, dette er toleransen for den å utløse. Jo høyere toleranseverdi, jo mindre sensitiv blir den. I oppsettet mitt fant jeg ut at 15 fungerte bra, men fordi dette avhenger av ocsillatorfrekvensen og hvor mye kapasitans som tilføres når du trykker på den, bør du eksperimentere med denne verdien til du finner noe som fungerer for deg.
getChargeTime:
Når du vil vite hvor lang tid det vil ta å lade opp kapasitansen til CVREF -spenningen, vil denne funksjonen teste den og returnere et helt tall. For å få tiden i sekunder bruker du denne formelen: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Denne formelen kan også brukes til å få toleranseinngangen fra isTouching -funksjonen til sekunder.
Anbefalt:
Kapasitiv pekepenn for en engangs penn: 6 trinn (med bilder)
![Kapasitiv pekepenn for en engangs penn: 6 trinn (med bilder) Kapasitiv pekepenn for en engangs penn: 6 trinn (med bilder)](https://i.howwhatproduce.com/images/001/image-340-j.webp)
Kapasitiv pekepenn for en engangs penn: Jeg har et dusin Uni-ball Micro Roller Ball Pens. Jeg vil legge til en kapasitiv pekepinne på hetten på en av dem. Deretter kan hetten og pennen flyttes fra den ene pennen til den neste når den går tom for blekk. Jeg er takknemlig overfor Jason Poel Smith for hans
Du kan gjøre det med et berøring ?: 15 trinn (med bilder)
![Du kan gjøre det med et berøring ?: 15 trinn (med bilder) Du kan gjøre det med et berøring ?: 15 trinn (med bilder)](https://i.howwhatproduce.com/images/004/image-9956-23-j.webp)
You Can Do THAT With a KIndle Touch ?: Jeg kunne aldri forstå hvorfor noen ville eie en e-leser. Så ga mine voksne barn meg en Kindle Touch, og jeg har funnet måter å få det til å gjøre mye for meg med en smarttelefon eller iPad for andre mennesker. En dag vil det erstatte min aldring
ESP8266 Modbus -termostat med berøring: 5 trinn
![ESP8266 Modbus -termostat med berøring: 5 trinn ESP8266 Modbus -termostat med berøring: 5 trinn](https://i.howwhatproduce.com/images/006/image-15695-2-j.webp)
ESP8266 Modbus-termostat med berøring: Jeg vil vise deg i denne instruksjonen hvordan du lager en flott berøringsskjermtermostat med valgfri Modbus-støtte via RS485 med ArduiTouch ESP og en ESP8266 (NodeMCU eller Wemos D1 Mini)
Reaksjonstidsmåler (visuell, lyd og berøring): 9 trinn (med bilder)
![Reaksjonstidsmåler (visuell, lyd og berøring): 9 trinn (med bilder) Reaksjonstidsmåler (visuell, lyd og berøring): 9 trinn (med bilder)](https://i.howwhatproduce.com/images/002/image-3518-46-j.webp)
Reaksjonstidsmåler (visuell, lyd og berøring): Reaksjonstid er et mål på tid en person tar for å identifisere en stimulus og produsere et svar. For eksempel er en idrettsutøvers lydreaksjonstid tiden som går mellom avfyring av pistolskudd (som starter løpet) og han eller hun starter løpet. Reagerer
Kapasitiv berøring med Evive (Arduino -basert kontroller): 6 trinn (med bilder)
![Kapasitiv berøring med Evive (Arduino -basert kontroller): 6 trinn (med bilder) Kapasitiv berøring med Evive (Arduino -basert kontroller): 6 trinn (med bilder)](https://i.howwhatproduce.com/images/001/image-1889-127-j.webp)
Kapasitiv berøring med Evive (Arduino -basert kontroller): Vet du hvordan smarttelefonens berøringsskjerm fungerer? Smarttelefonen har en rekke berøringssensorer under glassskjermen. I dag er den lett basert på kapasitansberøringsteknologi og til og med en lett berøring. Kapasitiv berøring føles