Indholdsfortegnelse:
Video: Kapacitiv berøring med PIC16F886 mikrokontroller: 3 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
I denne vejledning vil vi gå over, hvordan du kan bruge en PIC16F886 mikrokontroller til at registrere forskelle i kapacitans, dette kan senere bruges til at fortælle, om der trykkes på en berøringsplade. Det er godt at være fortrolig med pic -mikrokontrollere, før du laver dette projekt.
Trin 1: Tilslut dit kredsløb
Lad os først starte med at tilslutte kredsløbet ifølge skematikken ovenfor. For at lave berøringspladen kan du folde aluminiumsfolie til en firkant og tape på en wire. Du kan eksperimentere med forskellige værdier for 100k modstanden, jeg fandt 100k fungerede godt for mig.
RC4 -stiften bruges til at starte opladning/afladning af den kapacitans, der skal måles. C12IN0 er forbundet til - siden af en intern komparator, og C1IN -stiften er forbundet til + siden af den samme komparator. Mikrocontrolleren ser kapacitansen som fuldt opladet, når C12IN0 -spændingen når over C1IN -spændingen. Den resistive spændingsdeler sørger for, at C1IN er tæt på 5 volt.
Da berøringspladen afhænger af, at der er en betydelig kapacitans mellem dig og kredsløbets jord, er der en mulighed for, at et batteri muligvis ikke fungerer.
Trin 2: Hovedfilen
Færdig med alle forbindelser? Godt, vi fortsætter med header -filen. Vi vil bruge XC8-kompilatoren, og som titlen antyder, skal du nu oprette en ny header-fil i dit projekt og kopiere og indsætte følgende kode. Du kan lige så godt kopiere og indsætte den over din hovedkode uden nogen headerfil.
#define CALIBRATION_SAMPLE 20 #definere TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
int tæller;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // afladningskapacitans, der skal måles RC4 = 0; _forsinkelse_ms (DISCHARGE_TIME); // give tilstrækkelig forsinkelse til helt (næsten fuldstændigt faktisk) at aflade "kondensatoren" // rydde timeroverløbsflagget T0IF = 0; // vent på, at timeren løber over, start tællingen fra 0, mens (! T0IF); T0IF = 0; // start opladningskapacitans, der skal måles RC4 = 1; // vent på, at kapacitansen oplades op til referencespændingen, mens (C1OUT) {timerCount = TMR0; hvis (T0IF) {overflowCount ++; T0IF = 0; }} count = (256 * overflowCount) + timerCount; // reset timerCount timerCount = 0; overflowCount = 0; return tæller; }
int isTouching (int tolerance) {
// gennemsnit af flere prøver dobbelt gennemsnit = 0; for (int i = 0; i calibrationValue+tolerance) gennemsnit ++; } gennemsnit /= TOUCH_SAMPLE; // gennemsnit vil være et tal mellem 0 og 1, hvis (gennemsnit> 0,2) returnerer 1; returnere 0; }
void kalibrer () {
int gennemsnit = 0; int prøver [CALIBRATION_SAMPLE]; // få gennemsnitsværdi for (int i = 0; i <CALIBRATION_SAMPLE; i ++) {samples = getChargeTime (); gennemsnit += prøver ; } gennemsnit /= CALIBRATION_SAMPLE; kalibreringsværdi = gennemsnit; // få max/min værdier 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 () {
// indstilling af opladnings-/afladningsstift som output, i dette tilfælde er det RC4 TRISCbits. TRISC4 = 0; // opsætning af timer0 T0CS = 0; PSA = 1; // opsætning af komparator C1CH0 = 0; ClCH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // clearing count værdier count = 0; // sletning af kalibreringsværdier calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // køre kalibrering ved start kalibrere (); }
Trin 3: Skrivning af hovedkoden
Fra og med hovedkoden skal du inkludere overskriftsfilen, der blev oprettet i det foregående trin. Den følgende kode er et eksempel på, hvordan du kan bruge isTouching -funktionen som en switch. I mit tilfælde gav jeg overskriften navnet capacitiveTouch.h.
#omfatte
#include "capacitiveTouch.h"
// denne variabel fortæller, om der er trykket på knappen eller ikke allerede
int lastState = 0;
void main () {
// indstilling af RC5 som output TRISCbits. TRISC5 = 0; // du skal kalde denne funktion op ved starten af programmet setupCapacitiveTouch (); _forsinkelse_ms (1000); // kalibrer efter din nøjagtige opsætning kalibrer (); mens (1) {// tjekker, om der trykkes på knappen, hvis (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; ellers RC5 = 1; lastState = 1; } // kontrollere, om knappen frigives, hvis (lastState == 1 &&! isTouching (15)) lastState = 0; _forsinkelse_ms (20); }}
kalibrer:
Når denne funktion kaldes variablerne calibrationValue, opdateres maxCalibrationValue og minCalibrationValue. calibrationValue bruges af isTouching -funktionen. Husk, at pegefeltet skal stå alene under kalibreringen.
setupCapacitiveTouch:
Skal kaldes i starten af dit program. Det opsætter de nødvendige bits, der bruges af de andre funktioner. Det kører også en kalibrering. Jeg fik dog bedre resultater ved at vente et sekund og køre kalibreringen igen separat.
isTouching:
Denne funktion returnerer 1, hvis den registrerer en stigning i kapacitans på C12IN0 og returnerer 0, hvis kapacitansen er tæt på den, den var under kalibreringen. Simpelthen sagt, hvis nogen rører puden, returnerer isTouching -funktionen 1. Funktionen vil også have en parameter som input, det er tolerancen for den til at udløse. Jo højere toleranceværdi, jo mindre følsom bliver den. I mit setup fandt jeg 15 fungeret godt, men fordi dette afhænger af ocsillator frekvens og hvor meget kapacitans der tilføjes, når du trykker på den, bør du eksperimentere med denne værdi, indtil du finder noget, der fungerer for dig.
getChargeTime:
Når du vil vide, hvor lang tid det vil tage at oplade kapacitansen til CVREF -spændingen, tester denne funktion det og returnerer et helt tal. For at få tiden i sekunder bruger du denne formel: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Denne formel kan også bruges til at få toleranceindtastningen fra isTouching -funktionen til sekunder.
Anbefalede:
Interfacing kapacitiv fingeraftrykssensor med Arduino UNO: 7 trin
Interfacing kapacitiv fingeraftrykssensor med Arduino UNO: Hey, hvad sker der, fyre! Akarsh her fra CETech. I dag vil vi tilføje et beskyttende lag til vores projekter. Bare rolig, vi kommer ikke til at udpege nogen livvagter til det samme. Det bliver en sød lille flot fingeraftrykssensor fra DFRobot.Så
ESP8266 Modbus -termostat med berøring: 5 trin
ESP8266 Modbus-termostat med berøring: Jeg viser dig i denne instruktion, hvordan du laver en flot berøringsskærmstermostat med valgfri Modbus-understøttelse via RS485 med ArduiTouch ESP og en ESP8266 (NodeMCU eller Wemos D1 Mini)
Konfiguration af AVR -mikrokontroller -sikringsbits. Oprettelse og upload i Flash -hukommelsen af mikrokontroller LED -blinkende program .: 5 trin
Konfiguration af AVR -mikrokontroller -sikringsbits. Oprettelse og upload i Flash -hukommelsen til mikrokontrolleren LED -blinkende program .: I dette tilfælde opretter vi et enkelt program i C -kode og brænder det ind i hukommelsen til mikrokontrolleren. Vi vil skrive vores eget program og kompilere hex -filen ved hjælp af Atmel Studio som den integrerede udviklingsplatform. Vi konfigurerer sikring bi
Reaktionstidsmåler (visuel, lyd og berøring): 9 trin (med billeder)
Reaktionstidsmåler (visuel, lyd og berøring): Reaktionstid er et mål for den tid, en person tager til at identificere en stimulus og frembringe et svar. For eksempel er en atlet lydreaktionstid, der er gået tid mellem affyring af pistolskud (der starter løbet) og ham eller hende starter løbet. Reager
Kapacitiv berøring med Evive (Arduino -baseret controller): 6 trin (med billeder)
Kapacitiv berøring med Evive (Arduino -baseret controller): Ved du, hvordan din smartphones berøringsskærm fungerer? Smartphone har en række berøringssensorer under glasskærmen. I dag er den let baseret på kapacitans berøringssensor teknologi og endda en blid berøring. Kapacitiv berøring føles