Olá a todos, Sou iniciante com arduino estou tentando montar um tacometro para medir Rpm do motor do carro e exibir em um display de lcd.
Não conheço direito os codigos, minha dificuldade está ai. Será que alguem pode me da uma força ai para construir esse codigo?
Tags:
As respostas para este tópico estão encerradas.
// Sensor ligado no pino 2 do Arduino
volatile int pulsos = 0;
void ContaPulso()
{
pulsos++;
}
void setup()
{
Serial.begin(9600);
attachInterrupt(0, ContaPulso, RISING);
}
void loop()
{
int t=millis();
int c=0;
while((millis()-t) <= 1000)
{
}
Serial.println(pulsos);
pulsos=0;
}
Desculpe me intrometer no seu codigo mas acredito que você esqueceu de chamar a função dentro do while.
ficando assim:
while((millis()-t) <= 1000)
{
ContaPulso();
};
Por favor me corrija se eu estiver errado
Esqueci não.
Ela é chamada pelo mecanismo de interrupção do Arduino. Toda vez que o pino 2 mudar de 0 prá 1 a rotina é chamada automaticamente. Mais sobre interrupções no meu blog. O exemplo que tem lá é sobre interrupção por tempo, mas o princípio é o mesmo.
A instrução que define a chamada da interrupção é:
attachInterrupt(0, ContaPulso, RISING);
Ela define que a interrupção 0 (que tá amarrada ao pino 2 do Arduino) vai chamar a rotina ContaPulso sempre que o sinal no pino 2 "subir" (RISING) de 0 prá 1.
Amigo desculpa te encomodar ai, eu coloquei o codigo para rodar funcionou, mais depois de uns 40 segundo por ai ele zera o contador e para de funcionar, você sabe me dizer o que pode estar acontecendo?
Ops, é que o int é uma variável pequena, "num guenta" muito tempo. Altere para unsigned long e funcionará por uns 50 dias sem dar overflow.
// Sensor ligado no pino 2 do Arduino
volatile unsigned long pulsos = 0;
void ContaPulso()
{
pulsos++;
}
void setup()
{
Serial.begin(9600);
attachInterrupt(0, ContaPulso, RISING);
}
void loop()
{
int t=millis();
int c=0;
while((millis()-t) <= 1000)
{
}
Serial.println(pulsos);
pulsos=0;
}
Obrigado mais uma vez pela ajuda.
Olha eu de novo aqui pra encomodar, Amigo aconteceu o seguinte quando rodei codigo modificado com a outra variavel.
Funcionou beleza ai la pelos 40 segundo apos as informaçoes na serial começam a rodar muito de pressa, tipo assim como se não tivesse um tempo definido, tipo sem um delay, e so aparece 0,0,0,0...
Ah e mais uma coisa, queria saber assim se eu for colocar mais coisas dentro desse codigo, do tipo para alem de calcular rpm tambem calcule atraves de um sensor, temperatura e voltagem. Como eu faria pra colocar as outras informaçoes dentro do codigo, onde eu encaixo isso?
Obrigado pela atenção.
Eu aumentei a variável errada, sorry, tinha que aumentar era o t. Aí vai o código consertado:
volatile unsigned int pulsos = 0;
void ContaPulso()
{
pulsos++;
}
void setup()
{
Serial.begin(9600);
attachInterrupt(0, ContaPulso, RISING);
}
void loop()
{
volatile unsigned long t=millis();
int c=0;
while((millis()-t) <= 1000)
{
}
Serial.println(pulsos);
pulsos=0;
}
As outras medições que vc quer adicionar podem ser adicionadas sem problema. A leitura pode ser feita dentro do setup e escritas pelo Serial normalmente. Vc acha códigos semelhantes na net e é só incluir nesse código acima. O mais chato de fazer era o rpm, que já tá aí.
Muito obrigado, funcionou td certinho pena que a impressão no lcd não fica tão boa quanto na serial. As vezes não zera totalmente o contador.
Mas valeu pela ajuda fico te devendo essa.
Obrigado pela força, vou colocar o codigo pra roda depois posto aqui.
Agradeço.
Olá Fernando!
Você poderia me ajudar com o circuito pra captar os pulsos da bobinha? Gostaria de saber como você fez pra reduzir a tensão pra não queimar o arduino!
Grato!
Att,
Arlindo
Olá,
Então veja bem, não sei se no seu caso vai ser igual ao meu. Porque no meu caso minha bobina é simples.
Ai fiz o seguinte a bobina simples tem dois polos, positivo e negativo, para captar o sinal usei o polo negativo apenas.
Se esse for seu caso pode fazer como eu, coloquei um transistor tip32 pnp e um resistor de 2k2.
Ligando um fio no polo negativo da bobina a outra ponta vai no resistor, o resistor ligado na base to transistor, emissor do transistor no negativo e o coletor vai pro arduino.
Se no seu caso sua bobina for eletronica, tambem pode seguir esse exemplo, só que tera que descobrir qual é o fio que sai da central e vai para bobina, pode encontrar facilmente pesquisando no google, e ai pode ligar o fio que iria no polo negativo da bobina nele.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por