Ir ao conteúdo
  • Cadastre-se

Problema com Velocímetro arduíno


Ir à solução Resolvido por marcoshenri,

Posts recomendados

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");}  }
Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

@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

Link para o comentário
Compartilhar em outros sites

@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

Link para o comentário
Compartilhar em outros sites

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