Ir ao conteúdo

Problema com Velocímetro arduíno


Ir à solução Resolvido por marcoshenri,

Posts recomendados

Postado

Olá galera, tudo bom?

Então, eu fiz um velocímetro com Arduíno Leonardo, usando LCD 16x2.

O código de programação compila normalmente e a simulação no Proteus ocorre sem falhas e 

dá o resultado esperado.

No entanto quando monto na protoboard e mando um sinal, o valor da velocidade dá muito maior do que o correto e até mesmo quando não tem sinal sendo enviado ele dá uma velocidade alta. Eu penso que possa ser ruído ou interferência.

Gostaria da ajuda de vocês pra uma possível solução.

Vou postar aqui o código:

 

#include <LiquidCrystal.h> // Atualiza a cada 300 milissegundos. #define REFRESH_TIME 300int ledPin = 3;LiquidCrystal lcd(9,8,4,5,6,7);long refresh;float raio= 1.63;unsigned int velocidade;unsigned long contador;   // Contador  void setup(){  pinMode(ledPin, INPUT);attachInterrupt(1, contadorDeVelocidade, RISING); lcd.begin(16,2);  lcd.clear(); lcd.setCursor(0,0); lcd.print("Velocimetro "); contador = 0; refresh = millis(); velocidade = 0.0;} void contadorDeVelocidade(){ contador++; } void loop (){if (millis() - refresh  >= REFRESH_TIME){ velocidade = (3600*raio*contador)/(millis()-refresh); contador=0; refresh=millis();  lcd.setCursor(5,2);  lcd.print(int(velocidade));  lcd.print ("   kmh");}  }
Postado

Poste o esquema de ligação de seu sensor de velocidade, eu ví que você usa um pino com interrupção, mas preciso saber exatamente o que que está ligado nesse pino.

 

Paulo

  • Curtir 1
Postado

l75u.jpg

 

Nessa figura o pino de interrupção é o pino 2, por isso o attachInterrupt usa o 0 nesse caso. attachInterrupt(0, contadorDeVelocidade, RISING);

Eu não montei ele em hardware como eu queria, pra dar os pulsos eu pegava um jumper e colocava e tirava rapidamente do Vcc da protoboard. Mas, eu irei usar um SENSOR INDUTIVO, que chegara na segunda feira.

Postado

O jumper na protoboard tem "Bouncing", o que na realidade faz ocorrerem mais pulsos do que esperado. Tanto quando conectar como quando desconectar.

 

Veja o fluxograma que fiz (em pseudo código) para evitar o bouncing. A formas de onda mostra o que pode estar ocorrendo.

 

Bouncing.jpg

 

Pesquise.

MOR_AL

  • Curtir 1
Postado

@marcoshenri,

 

Isso que você postou eu já sabia... o que falta é exatamente o circuito que leva o pulso até o Arduíno, é ele que me importa.

 

Pelo que eu me lembro, você usar o pino com entrada pela IDE do Arduíno acaba deixando ele em alta impedância, o ideal seria ligar o resistor interno de Pull-Up, ou acrescentar um externo mesmo. Estranhei porque você dizia que no teste do Proteus funcionou e no protoboard estava mais acelerado, só pode ser algum problema na entrada do circuito.

 

Ah, outra coisa, você disse logo acima que está usando a interrupt 0, mas lá em cima, no seu programa, está Interrupt 1 , ok ?

 

Para testar, tem um jeito fácil, use um canal PWM do Arduíno, e gere uma frequência de onda quadrada, por exemplo 200 hertz, e aplique essa saida à sua entrada, faça as contas e veja se deu certo, ok ?

 

Assim, não vai ter ruídos , e voce evita o bouncing.

 

Paulo


Mor,

 

Gostei do seu fluxograma, é o mesmo jeitao dos que eu faço... você deve ter aprendido a programar em Fortran, acertei ?????

 

Paulo

  • Curtir 1
Postado

Sou iniciante nessa área,por isso não entendi praticamente nada.

Eu queria entender um pouco melhor o fluxograma.

No entanto, irei dar uma boa pesquisada e estudada e ver se consigo fazer isso que vocês disseram.

Muito obrigado!

Postado

@marcoshenri,

Calma, voce não vai ter o problema do bouncing quando usar o sensor, esse problema ocorre quando você está simulando o sensor no protoboard, pois tanto fios no contato ou chaves geram ruído, ok ?

Paulo

  • Curtir 1
  • Solução
Postado

Entendi, eu tava lendo que na prática só preciso usar debounce com botões e chaves, porque elas trepidam muito.

Essa segunda irei usar o sensor e ver no q vai dar, muito obrigado. 

Postado

@marcoshenri,

 

Isso...

Mor,

 

Gostei do seu fluxograma, é o mesmo jeitao dos que eu faço... você deve ter aprendido a programar em Fortran, acertei ?????

 

Paulo

 

Sim ... em 197x, na faculdade!

O Computador era o PDP11 (ou o 1130). Já não me lembro mais, hehehe!

 

 

marcoshenri.

 

A dica do Paulo é bem interessante.

Só não sei como estipular a frequência do PWM como função do Arduino. Também ainda sou iniciante no Arduino. Caso não seja possível, pelo menos o valor da frequência será constante.

MOR_AL

Postado

@MOR,

 

Pois é, eu aprendi num IBM370 se me lembro bem ... haja papel perfurado kakakaak !

 

 

@marcoshenri,

 

Infelizmente eu também não sei programar no Arduíno, prá mim é igualzinho a C.... ou seja, simbólico demais prá minha cabeça....

 

Mas é muito fácil, existe uma função prontinha :  TONE() , onde voce define a frequência e a duração dela, assim resolve o problema sem ter de inventar nada !

 

http://arduino.cc/en/Reference/Tone

 

Boa diversão !

 

Paulo

  • 2 anos depois...
Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!