Innehållsförteckning:
Video: Kapacitiv beröring med PIC16F886 mikrokontroller: 3 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:46
I denna handledning kommer vi att gå igenom hur du kan använda en PIC16F886 mikrokontroller för att upptäcka skillnader i kapacitans, detta kan senare användas för att berätta om en pekplatta trycks ned. Det är bra att vara bekant med bildmikrokontroller innan du gör detta projekt.
Steg 1: Koppla upp din krets
Låt oss först börja med att koppla upp kretsen enligt schemat ovan. För att göra pekplattan kan du vika aluminiumfolie till en kvadrat och tejpa på en tråd. Du kan experimentera med olika värden för 100k -motståndet, jag tyckte att 100k fungerade bra för mig.
RC4 -stiftet används för att börja ladda/ladda ur kapacitansen som ska mätas. C12IN0 är ansluten till - sidan av en intern komparator och C1IN -stiftet är anslutet till + -sidan av samma komparator. Mikrokontrollern ser kapacitansen som fulladdad när C12IN0 -spänningen når över C1IN -spänningen. Den resistiva spänningsdelaren ser till att C1IN är nära 5 volt.
Eftersom pekplattan är beroende av att det finns en betydande kapacitans mellan dig och kretsens jord finns det en möjlighet att ett batteri kanske inte fungerar.
Steg 2: Rubrikfilen
Klar med alla anslutningar? Bra, vi fortsätter med rubrikfilen. Vi kommer att använda XC8-kompilatorn och som titeln antyder ska du nu skapa en ny rubrikfil i ditt projekt och kopiera-klistra in följande kod. Du kan lika gärna kopiera och klistra in den ovanför din huvudkod utan huvudfil.
#define CALIBRATION_SAMPLE 20 #definiera TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
int count;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // urladdningskapacitans som ska mätas RC4 = 0; _fördröjning_ms (DISCHARGE_TIME); // ge tillräckligt med fördröjning för att helt (nästan helt faktiskt) ladda ur "kondensatorn" // rensa timeröverflödesflaggan T0IF = 0; // vänta tills timern flödar över, börja räkna från 0 medan (! T0IF); T0IF = 0; // starta laddningskapacitansen som ska mätas RC4 = 1; // vänta på att kapacitansen laddas upp till referensspänningen medan (C1OUT) {timerCount = TMR0; if (T0IF) {overflowCount ++; T0IF = 0; }} count = (256 * overflowCount) + timerCount; // reset timerCount timerCount = 0; overflowCount = 0; returräkning; }
int isTouching (int tolerans) {
// genomsnitt av flera prover dubbel genomsnitt = 0; för (int i = 0; i calibrationValue+tolerance) genomsnitt ++; } genomsnitt /= TOUCH_SAMPLE; // genomsnittet kommer att vara ett tal mellan 0 och 1 om (genomsnitt> 0,2) returnerar 1; returnera 0; }
void kalibrera () {
int genomsnitt = 0; int -prover [CALIBRATION_SAMPLE]; // få medelvärde för (int i = 0; i <CALIBRATION_SAMPLE; i ++) {samples = getChargeTime (); genomsnitt += prover ; } genomsnitt /= CALIBRATION_SAMPLE; calibrationValue = genomsnitt; // få max/min -värden maxCalibrationValue = samples [0]; minCalibrationValue = prover [0]; för (int i = 0; i maxCalibrationValue) maxCalibrationValue = prover ; if (prover <minCalibrationValue) minCalibrationValue = prover ; }}
void setupCapacitiveTouch () {
// ställa in laddnings-/urladdningsstift som utgång, i detta fall är det RC4 TRISCbits. TRISC4 = 0; // ställa in timer0 T0CS = 0; PSA = 1; // konfigurera komparator C1CH0 = 0; ClCH1 = 0; Cl = 0; ClON = 1; ClPOL = 0; // rensa räkna värden räkna = 0; // rensa kalibreringsvärden calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // kör kalibrering vid start kalibrera (); }
Steg 3: Skriva huvudkoden
Från och med huvudkoden måste du inkludera rubrikfilen som skapades i föregående steg. Följande kod är ett exempel på hur du kan använda isTouching -funktionen som en omkopplare. I mitt fall gav jag rubriken namnet capacitiveTouch.h.
#omfatta
#inkludera "capacitiveTouch.h"
// denna variabel berättar om knappen är eller inte redan är nedtryckt
int lastState = 0;
void main () {
// inställning av RC5 som utgång TRISCbits. TRISC5 = 0; // du måste ringa upp denna funktion vid start av programmet setupCapacitiveTouch (); _fördröjning_ms (1000); // kalibrera efter din exakta inställning kalibrera (); medan (1) {// kontrollerar om knappen trycks in om (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; annars RC5 = 1; lastState = 1; } // kontrollera om knappen släpps annars om (lastState == 1 &&! isTouching (15)) lastState = 0; _fördröjning_ms (20); }}
kalibrera:
När denna funktion kallas variablerna calibrationValue uppdateras maxCalibrationValue och minCalibrationValue. calibrationValue används av isTouching -funktionen. Tänk på att pekplattan ska lämnas ensam under kalibreringen.
setupCapacitiveTouch:
Måste ringas i början av ditt program. Det ställer in de nödvändiga bitarna som används av de andra funktionerna. Den kör också en kallibrering. Men jag fick bättre resultat genom att vänta en sekund och köra kalibreringen igen separat.
isTouching:
Denna funktion returnerar 1 om den upptäcker en ökning av kapacitansen på C12IN0 och returnerar 0 om kapacitansen är nära den den var under kalibreringen. Enkelt uttryckt, om någon rör vid plattan kommer isTouching -funktionen att returnera 1. Funktionen vill också ha en parameter som en ingång, detta är toleransen för den att utlösa. Ju högre toleransvärde desto mindre känsligt blir det. I min installation fann jag att 15 fungerade bra, men eftersom detta beror på ocsillatorfrekvens och hur mycket kapacitans som läggs till när du trycker på det bör du experimentera med detta värde tills du hittar något som fungerar för dig.
getChargeTime:
När du vill veta hur lång tid det tar att ladda upp kapacitansen till CVREF -spänningen, testar den här funktionen och returnerar ett heltal. För att få tiden i sekunder använder du denna formel: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Denna formel kan också användas för att få toleransinmatningen från isTouching -funktionen till sekunder.
Rekommenderad:
Testa Bare Arduino, med spelprogramvara med kapacitiv ingång och LED: 4 steg
Testa Bare Arduino, med spelprogramvara som använder kapacitiv ingång & LED: " Push-It " Interaktivt spel med en ren Arduino -bräda, inga externa delar eller ledningar behövs (använder en kapacitiv "touch" -ingång). Visas ovan, visar att den körs på två olika brädor. Push-It har två syften. För att snabbt demonstrera/v
Hur man gör beröring PÅ och AV krets: 8 steg
Hur man gör Touch ON och OFF Circuit: Hii vän, Idag ska jag göra Touch ON och OFF -krets med LM555 IC.När vi kommer att röra vid trådar på ena sidan lyser lysdioden och när vi kommer att röra vid trådarna på en annan sedan kommer LED att stängas AV och vice versa. Låt oss börja
ESP8266 Modbus -termostat med beröring: 5 steg
ESP8266 Modbus-termostat med beröring: Jag visar dig i denna instruktion hur du gör en snygg pekskärmstermostat med valfritt Modbus-stöd via RS485 med ArduiTouch ESP och en ESP8266 (NodeMCU eller Wemos D1 Mini)
Reaktionstidsmätare (bild, ljud och beröring): 9 steg (med bilder)
Reaktionstidsmätare (visuellt, ljud och beröring): Reaktionstid är ett mått på den tid en person tar för att identifiera en stimulans och ge ett svar. Till exempel är en idrottares ljudreaktionstid den tid som har gått mellan avfyrning av pistolskott (som startar loppet) och han eller hon startar loppet. Reagerar
Kapacitiv beröring med Evive (Arduino Based Controller): 6 steg (med bilder)
Kapacitiv beröring med Evive (Arduino -baserad styrenhet): Vet du hur din smarttelefons pekskärm fungerar? Smarttelefonen har en mängd beröringssensorer under glasskärmen. Numera är det baserat på kapacitans beröringsavkänningsteknik och till och med en mild beröring lätt att upptäcka. Kapacitiv beröring känns