Como Se Livrar Do Salto De Contato Ao Conectar Um Botão Ao Arduino

Índice:

Como Se Livrar Do Salto De Contato Ao Conectar Um Botão Ao Arduino
Como Se Livrar Do Salto De Contato Ao Conectar Um Botão Ao Arduino

Vídeo: Como Se Livrar Do Salto De Contato Ao Conectar Um Botão Ao Arduino

Vídeo: Como Se Livrar Do Salto De Contato Ao Conectar Um Botão Ao Arduino
Vídeo: Como Programar um Botão no Arduino - Logicando 2024, Novembro
Anonim

Já examinamos a conexão de um botão ao Arduino e abordamos a questão dos contatos "saltando". Este é um fenômeno muito irritante que causa pressionamentos repetidos de botões e torna difícil lidar com cliques de botões de maneira programática. Vamos falar sobre como se livrar do salto de contato.

Efeito de salto de contato
Efeito de salto de contato

Necessário

  • - Arduino;
  • - botão tato;
  • - resistor com valor nominal de 10 kOhm;
  • - Diodo emissor de luz;
  • - fios de conexão.

Instruções

Passo 1

O salto de contato é um fenômeno comum em interruptores mecânicos, botões de pressão, interruptores de alternância e relés. Devido ao fato de que os contatos são geralmente feitos de metais e ligas que possuem elasticidade, quando fisicamente fechados, eles não estabelecem imediatamente uma conexão confiável. Em um curto período de tempo, os contatos fecham várias vezes e se repelem. Como resultado, a corrente elétrica assume um valor de estado estacionário não instantaneamente, mas após uma série de altos e baixos. A duração deste efeito transitório depende do material de contato, tamanho e design. A ilustração mostra um oscilograma típico quando os contatos do botão de toque estão fechados. Pode-se ver que o tempo desde o momento da mudança para o estado estacionário é de vários milissegundos. Isso é chamado de "salto".

Este efeito não é perceptível em circuitos elétricos para controlar iluminação, motores ou outros sensores e dispositivos inerciais. Mas em circuitos onde há uma leitura e processamento rápido de informações (onde as frequências são da mesma ordem dos pulsos de "salto", ou mais), isso é um problema. Em particular, o Arduino UNO, que opera a 16 MHz, é excelente para capturar o salto de contato aceitando uma sequência de uns e zeros em vez de uma única chave de 0 para 1.

Salto de contato ao pressionar um botão
Salto de contato ao pressionar um botão

Passo 2

Vamos ver como o salto de contato afeta o funcionamento correto do circuito. Vamos conectar o botão do relógio ao Arduino usando um circuito de resistor pull-down. Ao pressionar o botão, acenderemos o LED e o deixaremos aceso até que o botão seja pressionado novamente. Para maior clareza, conectamos um LED externo ao pino digital 13, embora o integrado possa ser dispensado.

Conectando um botão a um Arduino usando um circuito de resistor pull-up
Conectando um botão a um Arduino usando um circuito de resistor pull-up

etapa 3

Para realizar essa tarefa, a primeira coisa que vem à mente:

- lembra o estado anterior do botão;

- compare com o estado atual;

- se o estado mudou, então mudamos o estado do LED.

Vamos escrever esse esboço e carregá-lo na memória do Arduino.

Quando o circuito é ligado, o efeito da oscilação do contato é imediatamente visível. Manifesta-se pelo facto de o LED não se acender imediatamente após premir o botão, ou se acender e depois apagar, ou não se desligar imediatamente após premir o botão, mas permanece aceso. Em geral, o circuito não funciona de forma estável. E se para uma tarefa de ligar o LED isso não for tão crítico, para outras tarefas mais sérias, é simplesmente inaceitável.

Esboço do pressionamento do botão de processamento sem levar em consideração o salto de contato
Esboço do pressionamento do botão de processamento sem levar em consideração o salto de contato

Passo 4

Tentaremos consertar a situação. Sabemos que o salto do contato ocorre alguns milissegundos após o fechamento do contato. Vamos esperar, digamos, 5ms após alterar o estado do botão. Esse tempo para uma pessoa é quase um instante, e pressionar um botão por uma pessoa geralmente leva muito mais tempo - várias dezenas de milissegundos. E o Arduino funciona muito bem com esses curtos períodos de tempo, e esses 5ms permitirão que ele corte o salto de contatos ao pressionar um botão.

Neste esboço, declararemos o procedimento debounce () ("bounce" em inglês é apenas "bounce", o prefixo "de" significa o processo reverso), para cuja entrada fornecemos o estado anterior do botão. Se o pressionamento de um botão durar mais de 5 ms, é realmente um pressionamento.

Ao detectar a imprensa, mudamos o estado do LED.

Faça upload do esboço para a placa Arduino. Tudo está muito melhor agora! O botão funciona sem falhas, quando pressionado, o LED muda de estado, como queríamos.

Esboço do processamento de um pressionamento de botão, levando em consideração o salto de contato
Esboço do processamento de um pressionamento de botão, levando em consideração o salto de contato

Etapa 5

Funcionalidades semelhantes são fornecidas por bibliotecas especiais, como a biblioteca Bounce2. Você pode baixá-lo no link na seção "Fontes" ou no site https://github.com/thomasfredericks/Bounce2. Para instalar a biblioteca, coloque-a no diretório de bibliotecas do ambiente de desenvolvimento Arduino e reinicie o IDE.

A biblioteca "Bounce2" contém os seguintes métodos:

Bounce () - inicialização do objeto "Bounce";

intervalo vazio (ms) - define o tempo de atraso em milissegundos;

void attach (pin number) - define o pino ao qual o botão está conectado;

int update () - atualiza o objeto e retorna verdadeiro se o estado do pino mudou e falso caso contrário;

int read () - lê o novo estado do pino.

Vamos reescrever nosso esboço usando a biblioteca. Você também pode lembrar e comparar o estado anterior do botão com o atual, mas vamos simplificar o algoritmo. Quando o botão é pressionado, contaremos os pressionamentos e cada pressionamento ímpar acenderá o LED, e cada pressionamento par o desligará. Este esboço parece conciso, fácil de ler e usar.

Recomendado: