No entanto, eu quero usar a função PulseIn() uma vez que a nível de "attachInterrupt" apenas posso usar 2 pinos (2 ventoinhas) e queria obter a info de RPM de mais ventoínhas..
Estou a utilizar este código:
int pin = 7;
unsigned long duration;
void setup()
{
Serial.begin(9600); // Inicializa a comunicação serial
pinMode(pin, INPUT);
}
void loop()
{
duration = pulseIn(pin, HIGH);
Serial.println(duration);
}
funciona bem, a única diferença é que retorna o valor de 3600, como a função PulseIn() retorna micro-segundos.. alguém sabe como chegar aos 4200 RPM da função "attachInterrupt", pois deverá ser este o valor real.. e não os 3600, tenho de converter como?
nao entendi,
vc esta tentando usar a funcao pulsein para medidir os pulsos gerados pelo giro da ventoninha?
note que a funcao pulsein retorna o tempo de um pulso, a largura de um pulso que pode HIGH ou LOW. Voce nao consegue contar pulsos com ela.
Radames:
nao entendi,
vc esta tentando usar a funcao pulsein para medidir os pulsos gerados pelo giro da ventoninha?
note que a funcao pulsein retorna o tempo de um pulso, a largura de um pulso que pode HIGH ou LOW. Voce nao consegue contar pulsos com ela.
Olá,
Sim a função pulsein devolve micro-segundos, conseguimos converter para Hz e depois para rpm? ou algo assim..?
Com esta função consigo saber se a ventoinha está parada ou a rodar e era mesmo excelente se conseguisse calcular +/- a velocidade a que está a trabalhar...
the length of the pulse (in microseconds) or 0 if no pulse started before the timeout (unsigned long)
ele te retorna a largura de um pulso em microsegundos!
para vc contar múltiplas ventoinhas precisa fazer um tachometer para múltiplas entradas, procure este chip LM2907 , ele converte frequência, para voltagem, assim vc pode ler sem acrescentar mais nada 6 ventoninhas utilizando 6 portas analógicas.
the length of the pulse (in microseconds) or 0 if no pulse started before the timeout (unsigned long)
ele te retorna a largura de um pulso em microsegundos!
para vc contar múltiplas ventoinhas precisa fazer um tachometer para múltiplas entradas, procure este chip LM2907 , ele converte frequência, para voltagem, assim vc pode ler sem acrescentar mais nada 6 ventoninhas utilizando 6 portas analógicas.
XD ups!
Vou procurar alguma informação então de circuitos do LM2907 com o arduino
Bom.. toda a informação que encontro está associada para carros.. no datasheet do chip o exemplo que mais se adapta será este:
Em vez daqueles 2 fios no "Magnetic Pickup" secalhar dá para meter apenas o fio amarelo vindo da Fan.. a nível de Vout é que não deve dar para ligar directamente a um pino analógico do arduino.. tem de se ver o que sai dali
int pin = 8;
unsigned long duration;
float duration2;
void setup()
{
Serial.begin(9600); // Inicializa a comunicação serial
pinMode(pin, INPUT);
}
void loop()
{
Serial.println("-----");
duration = pulseIn(pin, HIGH);
Serial.println(duration);
duration2=(duration*2);
Serial.println(duration2);
duration2=(1/duration2);
duration2=(duration2*1000);
duration2=(duration2*1000);
Serial.println(duration2);
duration=(duration2*60/2);
Serial.println(duration);
}
Resultado:
3622 -> Valor lido no pulsein
7244.00 -> multiplicado por 2
138.05 -> não sei se é bem isto mas ao resultado de 1/7244 multipliquei depois 2x por 1000
4141 -> Resultado RPM
3628
7256.00
137.82
4134
3623
7246.00
138.01
4140
3628
7256.00
137.82
4134
3622
7244.00
138.05
4141
Assim parece estar Ok! mas vou testar ainda mas só amanhã que agora tenho de ir dormir..
Possa... é muito complicado obter valores certos, usando simplesmente este código:
int pin = 7;
unsigned long duration;
void setup()
{
Serial.begin(9600); // Inicializa a comunicação serial
pinMode(pin, INPUT);
}
void loop()
{
duration = pulseIn(pin, HIGH);
Serial.println(duration);
}
Tenho valores completamente diferentes consoante as ventoinhas, com uma bastante potente de 80mm tenho 3600 de resultado, com uma ventoinha de 120mm já tenho 15084.
Pensei que fosse por ser de 120mm, mas testei uma outra de 80mm e tenho os mesmo valores ~14033..
Usando o attachInterrupt os valores batem sempre certo independentemente do tipo de ventoinha.. tem a ver com o tipo de hall effect sensor ?
almamater:
...
Tenho valores completamente diferentes consoante as ventoinhas, com uma bastante potente de 80mm tenho 3600 de resultado, com uma ventoinha de 120mm já tenho 15084.
Pensei que fosse por ser de 120mm, mas testei uma outra de 80mm e tenho os mesmo valores ~14033..
...
Quanto mais potente a ventoinha, mais rapido ela gira... e menos tempo ela demora para dar uma volta....
a ventoinha de 120mm é maior mas não mais rápida e daí o tempo maior...
Ainda não testei o código do Fábio, e desde já agradeço as vossas respostas.
O meu objectivo é implementar um ATMega168 num sistema de refrigeração com 4 ventoinhas, para além de controlar as mesmas queria apresentar/obter a rotação +/- real de cada uma.
Será que existe alguma outra forma (outro controlador/chip) que possa utilizar para esta parte do projecto? em que seja mais fácil? já pesquisei muito na web mas acabo sempre por concluir que com o arduino é mais simples.. mas não sei se existem controladores específicos para ler as rpm´s das ventoinhas