Ir ao conteúdo
  • Cadastre-se
Dunki

Contador do reed switch contando mais de uma vez

Recommended Posts

seguinte galera, passo o ímã no reed switch e conta, mas está contando mais de uma vez, achei que com uma interrupção deste modo "attachInterrupt(digitalPinToInterrupt(2), sensor, FALLING);" fosse ajudar, mas mesmo assim conta tipo 10 vezes, e preciso mesmo que conte só uma, era para usar em uma roda e contar a distância andada. Anexei o código. se alguém conseguir me ajudar <3 

sóinterrupt.txt

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz um fluxograma, que já usei e funcionou, para evitar o "bouncing" produzido por contatos mecânicos.

A vantagem do fluxograma é que pode ser usado para escrever o programa em qualquer linguagem. 

Ele permite alterar os tempos (valores de n e de delta t) para ser adaptado por qualquer chave.

Segue a imagem do fluxograma.

MOR_AL

Bouncing_Tecla.JPG

  • Curtir 4

Compartilhar este post


Link para o post
Compartilhar em outros sites

O bouncing que foi muito bem descrito pelo @MOR tem a característica de ser curto, no caso do red, muito curto. Quando se tem um contato reversível no dispositivo mecânico que faz a contagem uma forma simples de filtrar isso é o uso de 2 portas nand ou 2 portas nor. Faz-se um flip flop,

Com uso de nand: coloca-se o comum no switch no GND, pull-up nas 2 entradas e cada saida em cada entrada.

Com uso de nor: coloca-se o comum no switch no Vcc, pull-down nas 2 entradas e cada saida em cada entrada.

Com apenas 1 contato: ou se usa um RC ou se usa um filtro de tempo no programa. Supondo que a entrada do red produza nivel LOW:

void sensor()
{

wait 10ms
 if pin2 = low  (

  contador = contador + 1;
 )
}

No exemplo acima estamos testando a persistência do acionamento do red.Ao definir o valor do wait tenha em mente que o red deverá estar acionado por esse tempo mínimo. Talveaz tenha que abaixar.

Outra forma é estipular um intervalo mínimo entre os acionamentos. Como tem a velocidade máxima da sua roda, o diâmetro, etc, isso te dá a frequência máxima de medição. Supondo que a frequência máxima seja de 10 rotações / segundo:

void sensor()
{

 wait 70ms
  contador = contador + 1;
 
}

Isso fará que a contagem seja realizada no primeiro pulso e provoca um blanking na leitura nos 70 ms seguintes.

  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiquei tão concentrado em pensar numa solução para o boucing que esqueci do outro recurso: Transistor hall. Faz o mesmo serviço sem gerar o boucing além de ser muito mais robusto e custo mais atraente.

Boa sorte

Poste os resultados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×