• Welcome to LusoRobótica - Robótica em Português.
 

Fan RPM counter

Started by almamater, 30 de April de 2011, 15:34

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

almamater

ena..   :D voltando a este tópico

Tenho uma situação, colocando apenas o código para obter o valor pulsein funciona bem:

void loop()  {
  Serial.println("-----FAN1");

  duration = pulseIn(pin1, HIGH);
  duration2=(duration*2);
  duration2=(1/duration2);
  duration2=(duration2*1000);
  duration2=(duration2*1000);
   duration=(duration2*60/2);

  Serial.println(duration);
}


Se colocar código associado a outras coisas já se atrofia todo.. exemplo:

void loop()  {
  Serial.println("-----FAN1");

  duration = pulseIn(pin1, HIGH);
  duration2=(duration*2);
  duration2=(1/duration2);
  duration2=(duration2*1000);
  duration2=(duration2*1000);
  duration=(duration2*60/2);

  Serial.println(duration);

//Temperatura:
sensors.requestTemperatures();
Serial.print("Temperature for Device 1 is: ");
temperature=(sensors.getTempCByIndex(0));
Serial.println(temperature);
Serial.print("Temperature for Device 2 is: ");
temperature=(sensors.getTempCByIndex(1));
Serial.println(temperature);
}


Fico com valores de 18032 em vez de 3050  :o

Para obter os valores correctos de RPM tenho de executar o código pilsein sozinho?



senso

Que tipo de variavel é esse duration?
É que estás a dividir por 1/duration, a seguir multiplicas por 1 milhão, e etc..
Avr fanboy

almamater

lol foi a maneira de chegar +/- aos valores reais  ;D

unsigned long duration;
float duration2;

almamater

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 ?