Índice:
- Etapa 1: conecte seu circuito
- Etapa 2: o arquivo de cabeçalho
- Etapa 3: Escrevendo o código principal
Vídeo: Toque capacitivo com microcontrolador PIC16F886: 3 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:38
Neste tutorial, veremos como você pode usar um microcontrolador PIC16F886 para detectar diferenças na capacitância, isso pode ser usado posteriormente para saber se um touch pad está sendo pressionado. É bom estar familiarizado com os microcontroladores pic antes de fazer este projeto.
Etapa 1: conecte seu circuito
Primeiro, vamos começar ligando o circuito de acordo com o esquema acima. Para fazer o touch pad, você pode dobrar uma folha de alumínio em um quadrado e prender em um arame. Você pode experimentar diferentes valores para o resistor de 100k, descobri que 100k funcionou bem para mim.
O pino RC4 é usado para iniciar o carregamento / descarregamento da capacitância a ser medida. C12IN0 é conectado ao lado - de um comparador interno e o pino C1IN é conectado ao lado + do mesmo comparador. O microcontrolador vê a capacitância como totalmente carregada quando a tensão C12IN0 atinge acima da tensão C1IN. O divisor de tensão resistivo garante que C1IN esteja próximo a 5 volts.
Como o touch pad depende da existência de uma capacitância significativa entre você e o aterramento do circuito, é possível que a bateria não funcione.
Etapa 2: o arquivo de cabeçalho
Terminou com todas as conexões? Bom, continuaremos com o arquivo de cabeçalho. Estaremos usando o compilador XC8 e como o título sugere, agora você deve criar um novo arquivo de cabeçalho em seu projeto e copiar e colar o código a seguir. Você também pode copiar e colar acima do código principal, sem nenhum arquivo de cabeçalho.
#define CALIBRATION_SAMPLE 20 # define TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
contagem interna;
int calibraçãoValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // descarregar a capacitância a ser medida RC4 = 0; _delay_ms (DISCHARGE_TIME); // dar atraso suficiente para descarregar totalmente (quase totalmente) o "capacitor" // limpar o sinalizador de estouro do temporizador T0IF = 0; // espere o temporizador estourar, comece a contagem a partir de 0 while (! T0IF); T0IF = 0; // inicia o carregamento da capacitância a ser medida RC4 = 1; // espera que a capacitância seja carregada até a tensão de referência enquanto (C1OUT) {timerCount = TMR0; if (T0IF) {overflowCount ++; T0IF = 0; }} contagem = (256 * overflowCount) + timerCount; // redefine o timerCount timerCount = 0; overflowCount = 0; contagem de retorno; }
int isTouching (int tolerância) {
// média de múltiplas amostras double average = 0; para (int i = 0; i calibraçãoValor + tolerância) média ++; } média / = TOUCH_SAMPLE; // a média será um número entre 0 e 1 if (média> 0,2) return 1; return 0; }
void calibrate () {
média interna = 0; amostras int [CALIBRATION_SAMPLE]; // obtém o valor médio para (int i = 0; i <CALIBRATION_SAMPLE; i ++) {samples = getChargeTime (); média + = amostras ; } média / = CALIBRATION_SAMPLE; calibraçãoValue = média; // obtém os valores máx. / mín. maxCalibrationValue = samples [0]; minCalibrationValue = samples [0]; para (int i = 0; i maxCalibrationValue) maxCalibrationValue = amostras ; if (amostras <minCalibrationValue) minCalibrationValue = samples ; }}
void setupCapacitiveTouch () {
// configurando o pino de carga / descarga como saída, neste caso é RC4 TRISCbits. TRISC4 = 0; // configurando o timer0 T0CS = 0; PSA = 1; // configurando o comparador C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // limpar valores de contagem count = 0; // limpar os valores de calibração calibraçãoValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // executa a calibração no início calibrate (); }
Etapa 3: Escrevendo o código principal
Começando com o código principal, você precisará incluir o arquivo de cabeçalho criado na etapa anterior. O código a seguir é um exemplo de como você pode usar a função isTouching como uma chave. No meu caso, dei ao cabeçalho o nome capacitiveTouch.h.
#incluir
#include "capacitiveTouch.h"
// esta variável diz se o botão está ou não pressionado
int lastState = 0;
void main () {
// configurando RC5 como saída TRISCbits. TRISC5 = 0; // você precisa chamar esta função no início do programa setupCapacitiveTouch (); _delay_ms (1000); // calibrar após sua configuração exata calibrate (); while (1) {// verificar se o botão está sendo pressionado if (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; senão RC5 = 1; lastState = 1; } // verificar se o botão está sendo liberado else if (lastState == 1 &&! isTouching (15)) lastState = 0; _delay_ms (20); }}
calibrar:
Quando esta função é chamada de variáveis calibraçãoValue, maxCalibrationValue e minCalibrationValue serão atualizados. calibraçãoValue é usado pela função isTouching. Lembre-se de que o touch pad deve ser deixado sozinho durante a calibração.
setupCapacitiveTouch:
Precisa ser chamado no início de seu programa. Ele configura os bits necessários usados pelas outras funções. Ele também executa uma calibração. No entanto, obtive melhores resultados ao esperar um segundo e executar a calibração novamente separadamente.
isTouching:
Esta função retorna 1 se detectar um aumento na capacitância no C12IN0 e retorna 0 se a capacitância estiver próxima à que estava durante a calibração. Simplesmente declarado, se alguém tocar o pad, a função isTouching retornará 1. A função também deseja um parâmetro como uma entrada, esta é a tolerância para o acionamento. Quanto maior o valor de tolerância, menos sensível ele se torna. Em minha configuração, descobri que 15 funcionou bem, mas como isso depende da frequência do ocsilador e de quanta capacitância é adicionada ao pressioná-lo, você deve fazer experiências com esse valor até encontrar algo que funcione para você.
getChargeTime:
Quando você quiser saber quanto tempo levaria para carregar a capacitância até a tensão CVREF, esta função irá testá-la e retornar um número inteiro. Para obter o tempo em segundos, use esta fórmula: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Esta fórmula também pode ser usada para obter a entrada de tolerância da função isTouching para segundos.
Recomendado:
Ventilador portátil Arduino com interruptor de toque capacitivo: 6 etapas
Ventilador portátil Arduino com interruptor de toque capacitivo .: Neste tutorial, aprenderemos como LIGAR e DESLIGAR o ventilador da bateria do Hendheld usando sensor de toque capacitivo, módulo reley e Visuino. Assistir a um vídeo de demonstração
Como fazer um piano capacitivo de toque barato: 5 etapas
Como Fazer um Piano Capacitivo de Toque Barato: Sou um grande fã de tecnologia e música, e decidi fazer isso depois de me inspirar em minha vida anterior como estudante de piano. De qualquer forma … Nesta lição, mostrarei como fazer um piano de toque capacitivo barato usando um Arduino, alto-falante e papel. Eu w
Entrada de toque capacitivo ESP32 usando "plugues de orifício metálico" para botões: 5 etapas (com imagens)
Entrada de toque capacitivo ESP32 usando "plugues de orifício metálico" para botões: enquanto eu estava finalizando as decisões de design para um projeto baseado no ESP32 WiFi Kit 32 que requer três entradas de botão, um problema perceptível era que o WiFi Kit 32 não possuía um único botão mecânico, ainda sozinho três botões mecânicos, f
ADICIONE interruptor de toque capacitivo aos seus projetos: 7 etapas
ADICIONE interruptor de toque capacitivo a seus projetos: como adicionar interruptor de toque capacitivo a seus projetos em casaOi, amigos eletrônicos diy neste tutorial, vou mostrar como você pode adicionar um interruptor de toque capacitivo a seus projetos eletrônicos de forma barata e dar seu projeto DIY uma aparência profissional
Primeiros passos com o kit de toque capacitivo: 4 etapas
Introdução ao kit de toque capacitivo: No meu próximo projeto vou usar um touchpad capacitivo e, antes de lançá-lo, decidi fazer um pequeno tutorial sobre o kit que recebi para o DFRobot