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?

Bom a respeito da parte digamos assim mecanica e eletronica, não tenho problemas com isso pois sou mecanico e entendo de eletronica. 
Minha dificuldade e somente na parte do codigo. Não quero usar sensor para captação do pulso. Vou coletar o pulso direto da bobina de ignição usando um optoacoplador, ou transistor.

Então o que eu queria e fazer um codigo para contar quantos pulso foram captados da bobina de ignição dentro do espaço de tempo de um segundo, multiplicar esse valor por 60 segundos, e dividir por 2, porque a cada volta do motor a bobina vai libera dois pulsos. Para me dar a Rpm do motor.

Se puderem me ajudar agradeço.
 
 

Exibições: 6932

As respostas para este tópico estão encerradas.

Respostas a este tópico

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

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço