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.
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.
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.
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.
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.
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.