Taula de continguts:
Vídeo: Tacte capacitiu amb microcontrolador PIC16F886: 3 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:15
En aquest tutorial repassarem com podeu utilitzar un microcontrolador PIC16F886 per detectar diferències en la capacitat; posteriorment es pot utilitzar per saber si es prem un teclat tàctil. És bo conèixer els microcontroladors pic abans de fer aquest projecte.
Pas 1: connecteu el vostre circuit
Primer, comencem cablejant el circuit segons l’esquema anterior. Per fer la pantalla tàctil es pot plegar paper d'alumini en un quadrat i cinta adhesiva sobre un filferro. Podeu experimentar amb diferents valors per a la resistència de 100 k, he trobat que 100 k funcionaven bé per a mi.
El pin RC4 s’utilitza per començar a carregar / descarregar la capacitat a mesurar. C12IN0 està connectat al costat - d'un comparador intern i el pin C1IN està connectat al costat + del mateix comparador. El microcontrolador veu la capacitat com a totalment carregada quan el voltatge C12IN0 arriba per sobre del voltatge C1IN. El divisor de tensió resistiva assegura que C1IN sigui proper als 5 volts.
Com que el teclat tàctil depèn que hi hagi una capacitat significativa entre vosaltres i la terra del circuit, hi ha la possibilitat que una bateria no funcioni.
Pas 2: el fitxer de capçalera
Heu acabat amb totes les connexions? Bé, continuarem amb el fitxer de capçalera. Utilitzarem el compilador XC8 i, tal com indica el títol, ara creeu un nou fitxer de capçalera al vostre projecte i copieu-enganxeu el següent codi. També podeu copiar-enganxar-lo sobre el vostre codi principal sense cap fitxer de capçalera.
#define CALIBRATION_SAMPLE 20 # define TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
int recompte;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // capacitat de descàrrega a mesurar RC4 = 0; _delay_ms (DISCHARGE_TIME); // donar prou retard per descarregar completament (gairebé totalment) el "condensador" // esborreu el senyal de desbordament del temporitzador T0IF = 0; // espera que el temporitzador es desbordi, comença el recompte a partir de 0 mentre (! T0IF); T0IF = 0; // començar a carregar la capacitat a mesurar RC4 = 1; // esperar que la capacitat es carregui fins a la tensió de referència mentre que (C1OUT) {timerCount = TMR0; if (T0IF) {overflowCount ++; T0IF = 0; }} count = (256 * overflowCount) + timerCount; // reset timerCount timerCount = 0; overflowCount = 0; recompte de devolucions; }
int isTouching (int tolerància) {
// mitjana de diverses mostres doble mitjana = 0; for (int i = 0; i calibrationValue + tolerance) mitjana ++; } mitjana / = TOUCH_SAMPLE; // La mitjana serà un número entre 0 i 1 si (mitjana> 0,2) retorna 1; retorn 0; }
void calibrate () {
int mitjana = 0; int samples [CALIBRATION_SAMPLE]; // obtenir valor mitjà per a (int i = 0; i <CALIBRATION_SAMPLE; i ++) {samples = getChargeTime (); mitjana + = mostres ; } mitjana / = CALIBRATION_SAMPLE; calibrationValue = mitjana; // obtenir valors màx / min maxCalibrationValue = mostres [0]; minCalibrationValue = mostres [0]; for (int i = 0; i maxCalibrationValue) maxCalibrationValue = mostres ; if (samples <minCalibrationValue) minCalibrationValue = mostres ; }}
void setupCapacitiveTouch () {
// configurant el pin de càrrega / descàrrega com a sortida, en aquest cas és RC4 TRISCbits. TRISC4 = 0; // configuració del temporitzador0 T0CS = 0; PSA = 1; // configuració del comparador C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // neteja dels valors del recompte = 0; // esborra els valors de calibratge calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // executa el calibratge a l'inici calibra (); }
Pas 3: escriure el codi principal
Començant pel codi principal, haureu d'incloure el fitxer de capçalera creat al pas anterior. El següent codi és un exemple de com podeu utilitzar la funció isTouching com a commutador. En el meu cas, he donat a la capçalera el nom capacitiveTouch.h.
#incloure
#include "capacitiveTouch.h"
// aquesta variable indica si el botó està o no està premut
int lastState = 0;
void main () {
// configurant RC5 com a sortida TRISCbits. TRISC5 = 0; // heu de convocar aquesta funció a l'inici del programa setupCapacitiveTouch (); _delay_ms (1000); // calibra després de la configuració exacta calibra (); while (1) {// comprovant si es prem el botó if (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; altrament RC5 = 1; lastState = 1; } // comprovant si el botó s’allibera else if (lastState == 1 &&! isTouching (15)) lastState = 0; _delay_ms (20); }}
calibrar:
Quan s'anomeni aquesta funció les variables calibrationValue, maxCalibrationValue i minCalibrationValue s'actualitzaran. calibrationValue l’utilitza la funció isTouching. Tingueu en compte que el teclat tàctil s’ha de deixar sol durant el calibratge.
setupCapacitiveTouch:
S’ha de trucar al principi del programa. Estableix els bits necessaris que utilitzen les altres funcions. També executa una calibració. No obstant això, vaig obtenir millors resultats en esperar un segon i tornar a executar el calibratge per separat.
isTouching:
Aquesta funció retorna 1 si detecta un augment de la capacitat al C12IN0 i retorna 0 si la capacitat és propera a la que era durant el calibratge. Simplement, si algú toca el teclat, la funció isTouching tornarà 1. La funció també vol un paràmetre com a entrada, aquesta és la tolerància perquè s'activi. Com més gran sigui el valor de tolerància, menys sensible es fa. A la meva configuració, he trobat que 15 funcionaven bé, però perquè això depèn de la freqüència de l’ocsil·lador i de la quantitat de capacitat que s’afegeixi quan el premeu, hauríeu d’experimentar amb aquest valor fins que trobeu alguna cosa que us funcioni.
getChargeTime:
Quan vulgueu saber quant de temps trigaria a carregar la capacitat fins a la tensió CVREF, aquesta funció el provarà i retornarà un enter. Per obtenir el temps en segons, utilitzeu aquesta fórmula: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Aquesta fórmula també es pot utilitzar per obtenir l'entrada de tolerància de la funció isTouching a segons.
Recomanat:
Llapis capacitiu per a un bolígraf d'un sol ús: 6 passos (amb imatges)
Llapis capacitiu per a un bolígraf d’un sol ús: tinc una dotzena de bolígrafs micro-rodets Uni-ball. Vull afegir un llapis capacitiu a la tapa d’un d’ells. A continuació, es pot moure la tapa i el llapis d’un bolígraf a l’altre a mesura que es queda sense tinta. Estic agraït a Jason Poel Smith pel seu
Ventilador de mà Arduino amb commutador tàctil capacitiu: 6 passos
Ventilador de mà Arduino amb commutador tàctil capacitiu
Monitor de plantes Arduino amb sensor capacitiu del sòl - Tutorial: 6 passos
Monitor de plantes Arduino amb sensor capacitiu del sòl: tutorial: en aquest tutorial aprendrem com detectar la humitat del sòl mitjançant un sensor d’humitat capacitiu amb pantalla OLED i Visuino. Mireu el vídeo
Joc de memòria amb tacte (Simon Says) - Si això és així: 6 passos (amb imatges)
Joc de memòria amb tacte (Simon Says) - If This Then That: vaig fer un joc de memòria amb coixinets tàctils de fabricació pròpia i un anell de neopíxels per a un projecte escolar. Aquest joc és similar a Simon Says, tret que moltes formes d’entrada i retroalimentació (sons i efectes de llum) són diferents. Vaig programar sons de Su
Tacte capacitiu amb Evive (controlador basat en Arduino): 6 passos (amb imatges)
Tacte capacitiu amb Evive (controlador basat en Arduino): sabeu com funciona la pantalla tàctil del vostre telèfon intel·ligent? El telèfon intel·ligent té una sèrie de sensors tàctils sota la pantalla de vidre. Avui en dia, es basa fàcilment en la tecnologia de detecció tàctil de capacitat i fins i tot en un toc suau. Es percep el tacte capacitiu