Cómo andan? Ando necesitando diseñar un tacómetro con Arduino el cual pueda medir velocidad menores a 100rpm con una resolución de 1rpm. El tema es que estuve haciendo uno pero la resolución es malísima y no sé por qué. Paso al código:
Código:
int ledPin = 13; // IR LED conectado al pin 13
volatile byte rpmcount;
unsigned int rpm;
unsigned long timeold;
void rpm_fun()
{
rpmcount++;
}
void setup()
{
//Interrupt 0 esta en el pin 2 del arduino, es donde esta conectado el detector de IR
//La interrupcion se activa por FALLING, cuando va de Alto a bajo
attachInterrupt(0, rpm_fun, FALLING);
pinMode(ledPin, OUTPUT);//se activa el led IR
digitalWrite(ledPin, HIGH);
rpmcount = 0;
rpm = 0;
timeold = 0;
}
void loop()
{
delay(1000);//se actualiza el RPM cada segundo
detachInterrupt(0);//no entrar en las interrupciones durante el calculo de RPM
rpm = 30*1000/(millis() – timeold)*rpmcount;
timeold = millis();
rpmcount = 0;
attachInterrupt(0, rpm_fun, FALLING);//Reinicia la funcion de Interrupcion
}
Estoy simulando el proyecto con un motor paso a paso en cuyo eje hay instalado un encoder de 10 ranuras que son detectadas con un sensor de ranura y lo qué hago es, mediante una interrupción, contar la cantidad de ranuras detectas en 1 segundo... aplico fórmula y obtengo el resultado en un display. La cosa es que el error es de como unas 10rpm por cada ranura y no lo puedo corregir.
¿El método para baja velocidad está bien aplicado o debería implementar otro?
Muchas gracias!!!!
p.d.: adjunto una foto del motor con el encoder