Hola buenas,
Esta es mi primer post en este foro. Mis conocimientos son bastante reducidos en este tema, pero intentaré explicar cual es mi problema.
Mi idea es hacer un estación meteorológica y para ello me compré un anemometro de repuesto para la estación WS1080/3080. Por lo que he descubierto, el arduino tiene dos interruptores o relés y por cada "2 pulsos" da una vuelta.
El caso es que cada vez que el rotor toca o cierra alguno de los interruptores se "crea" una tensión no constante y recibo mucho datos de ese sensor. Entonces lo que yo hago es tener en cuenta la diferencia con el dato anterior:
void loop() {
// Lee el estado del sensor
int valor_sensor = analogRead(A0);
Serial.print("valor sensor ");
Serial.println(valor_sensor);
diferencia=valor_sensor-ultimovalor;
diferenciabs=abs(diferencia);
Serial.print("diferencias");
Serial.println(diferencia);
// Compara el estado del rele con el estado previo
if (diferenciabs>100) {
// Si el estado ha cambiado incrementa el contador
if (valor_sensor>0)
{
pulsos++;
vueltas=pulsos/2;
tiempo_ahora =millis();
tiempo_media_rev = tiempo_ahora - tiempo_anterior;
rpm = 60000*0.5 / tiempo_una_rev; // 1 minuto = 60000 ms y 0,5 por media vuelta
Serial.print("RELEON ");
// Serial.println(pulsos);
Serial.print("vuelta ");
Serial.println(vueltas);
Serial.print("Tiempo media revolucion: ");
Serial.println(tiempo_media_rev);
Serial.print("Revoluciones por minuto: ");
Serial.println(rpm);
}
else {
// Si el estado actual es LOW pasa de ON a OFF
Serial.println("Rele OFF");
tiempo_anterior = tiempo_ahora;
}
}
}
El problema es que los datos que recogo no son nada fiables porque las diferencias de tensión son muy variables y aveces cuenta vueltas cuando no las da. Por ejemplo, estos son los datos que recibo:
valor sensor 0
diferencias0
valor sensor 285
diferencias285
RELEON vuelta 8
Tiempo media revolucion: 2514
Revoluciones por minuto: 11
valor sensor 124
diferencias124
RELEON vuelta 8
Tiempo media revolucion: 2629
Revoluciones por minuto: 11
valor sensor 0
diferencias0
valor sensor 0
diferencias0
He pensado que quizás poniendo un serial.begin más bajo recibiré menos datos y tendré menos problemas, pero no lo creo. ¿A alguno se le ocurre alguna otra solución?
Creo que no he conseguido explicarme muy bien y no sé si alguno habrá entendido mi duda.
De todas formas, gracias por la atención.