Buenas noches. Soy nuevo en el tema de arduino y programación.
Estoy intentando medir la frecuencia generada por la señal de tacómetro de un ventilador de PC a modo de prueba para luego encarar un proyecto más complicado.
Estoy usando el pin D3 para tomar la señal a través de las interrupciones y calculo el tiempo que transcurre entre una interrupción y otra y con ese valor calculo la frecuencia.
El problema que se me presenta es que al variar la frecuencia frenando el ventilador, esta en el monitor lo hace en saltos de 4 Hz y no entiendo por qué.
La frecuencia obtenida es de alrededor de los 60 Hz.
La placa es Arduino uno.
Les adjunto un print de pantalla del monitor serial.
Estoy usando CHANGE en la interrupción para obtener un valor mas próximo al que voy a utilizar en el proyecto final. La frecuencia real seria la mitad de la obtenida en el monitor.
Desde ya, muchas gracias.
Estoy intentando medir la frecuencia generada por la señal de tacómetro de un ventilador de PC a modo de prueba para luego encarar un proyecto más complicado.
Estoy usando el pin D3 para tomar la señal a través de las interrupciones y calculo el tiempo que transcurre entre una interrupción y otra y con ese valor calculo la frecuencia.
El problema que se me presenta es que al variar la frecuencia frenando el ventilador, esta en el monitor lo hace en saltos de 4 Hz y no entiendo por qué.
La frecuencia obtenida es de alrededor de los 60 Hz.
La placa es Arduino uno.
Les adjunto un print de pantalla del monitor serial.
Estoy usando CHANGE en la interrupción para obtener un valor mas próximo al que voy a utilizar en el proyecto final. La frecuencia real seria la mitad de la obtenida en el monitor.
Desde ya, muchas gracias.
C++:
int sensor = 3;
volatile long tActual= 0;
volatile long tAnterior = 0;
volatile long difTiempo = 0;
int frec = 0;
void setup() {
pinMode(sensor, INPUT);
attachInterrupt(digitalPinToInterrupt(sensor), interrupcion, CHANGE);
Serial.begin(9600);
}
void loop() {
frec = 1000/difTiempo;
Serial.println(frec);
}
void interrupcion(){
tActual = millis();
difTiempo = tActual - tAnterior;
tAnterior = tActual;
}