Bom dia,comecei a me aventurar a pouco tempo na plataforma ,montei um standalone para mim e estou fazendo uns testes liguei uma fan de 3 fios a um 4n25 e este ligado ao pino digital 2 do atmega...
A intenção e mostrar o rpm do mesmo para estender o funcionamento pois logo pretendo colocar um rpm digital e um velocimetro no carro atraves do sensor de velocidade o gol G2-6 pulsos.
Gostaria que alguem pudesse me ajudar a melhor o codigo...
Segue o mesmo abaixo:
--------------------------------------
#include <TimerOne.h>
unsigned char fanpin = 2; //conectado ao pino do 4n25
unsigned char pulso = 0;
unsigned short int Rpm = 0;
void setup (){
Timer1.initialize(1000000);
Timer1.attachInterrupt(Rpmf);
Serial.begin(9600);
pinMode (fanpin,INPUT); //define o pino digital 2 como entrada
attachInterrupt (0,fan,FALLING); //chama a funcao quando cai de alto para baixo
}
void loop (){
}
void fan(){
pulso++;
}
void Rpmf(){
Rpm = (pulso*60)/2;
pulso = 0 ;
Serial.println(Rpm);
}
Tags:
Bom, eu faria com uma interrupção só:
unsigned char fanpin = 2; //conectado ao pino do 4n25
unsigned char pulso = 0;
unsigned short int Rpm = 0;
void setup (){
Serial.begin(9600);
pinMode (fanpin,INPUT); //define o pino digital 2 como entrada
attachInterrupt (0,fan,FALLING); //chama a funcao quando cai de alto para baixo
}
void loop (){
int t=millis();
while((millis()-t) < 1000)
{
}
Rpm = (pulso*60)/2;
pulso = 0 ;
Serial.println(Rpm);
}
void fan(){
pulso++;
}
Agradeco o retorno... vo me dedicar para tentar melhorar a precisao e tempo da execucao...
Poque você faz o (pulso * 60) / 2 ?
A cada 1 segundo você deveria só fazer (pulso * 60), que já te dá as rotações por minuto, não ?
Pq sao 2 pulsos por volta completa..
pelo menos com a fan que estou aqui...
Fiz um teste ligando o fio de pulso na perna negativa de um led e a outra perna nos 5v.\
o led acendeu a cada meia volta.
Esta pesquisando o funcionamento da bobina do carro e o mesmo acontece para 4 cilindros sao 2 faiscas da bobina a cada 1 RPM
Ah, entendi agora.
Pensei que o sensor da rotação um pulso por volta.
Fiquei pensando aqui, qual daria o tempo mais preciso, o while((millis()-t) < 1000) ou a outra interrupção por software usando o Timer1.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por