¿Cómo mido las RPM de una rueda?

Estoy tratando de hacer un sistema integrado para mi bicicleta usando un Arduino o tal vez las placas Lilypad.

Creo que debería usar un sensor de efecto Hall, pero cualquier alternativa también es buena.

Quiero mostrar mi velocidad en una pantalla LCD y me pregunto cuál es la mejor manera de hacerlo.

Respuestas (7)

El uso de un sensor de efecto Hall como sugirió Starliner será una forma de interactuar con la rueda. Sin embargo, la sugerencia de Achim y Shutterdrone de usar un interruptor de láminas tiene más sentido, dado el hardware de soporte que requiere un sensor de efecto Hall para obtener una señal digital limpia.

Es posible que pueda recoger un imán y un sensor de una computadora de bicicleta rota, pero si no puede, una tienda local de componentes debería tener uno de cada uno en existencia. La ventaja de un sensor e imán reciclados es que ya tendrá el hardware de montaje.

Hay una página en la wiki de arduino sobre señales ReadingRPM . Para calcular la velocidad, multiplique el valor de RPM por la circunferencia de la rueda (2 * pi * radio [en metros]). El resultado será en metros por minuto.

Editar: he notado que el código vinculado es para sistemas con dos pulsos por revolución. Un imán es suficiente para su tarea. Además, para una computadora de bicicleta, probablemente querrá que el resultado esté en KPH (o MPH si vive en un lugar que todavía piensa que es civilizado). Hice algunas modificaciones (no probadas) al código en la wiki para imprimir KPH y las pegué a continuación.

volatile byte revolutions;

unsigned int rpmilli;
float speed;


unsigned long timeold;

void setup()
{
  Serial.begin(9600);
  attachInterrupt(0, rpm_fun, RISING);

  revolutions = 0;
  rpmilli = 0;
  timeold = 0;
}

void loop()
{
  if (revolutions >= 20) { 
    //Update RPM every 20 counts, increase this for better RPM resolution,
    //decrease for faster update

    // calculate the revolutions per milli(second)
    **rpmilli = (millis() - timeold)/revolutions;** EDIT: it should be revolutions/(millis()-timeold)

    timeold = millis();
    **rpmcount = 0;** (EDIT: revolutions = 0;)

    // WHEELCIRC = 2 * PI * radius (in meters)
    // speed = rpmilli * WHEELCIRC * "milliseconds per hour" / "meters per kilometer"

    // simplify the equation to reduce the number of floating point operations
    // speed = rpmilli * WHEELCIRC * 3600000 / 1000
    // speed = rpmilli * WHEELCIRC * 3600

    speed = rpmilli * WHEELCIRC * 3600;

    Serial.print("RPM:");
    Serial.print(rpmilli * 60000,DEC);
    Serial.print(" Speed:");
    Serial.print(speed,DEC);
    Serial.println(" kph");
  }
}

void rpm_fun()
{
  revolutions++;
}

Además, he habilitado 'wiki de la comunidad' en esto, lo que creo que significa que otros usuarios pueden editarlo. Si mis cálculos son incorrectos (¡y puedes probarlo!), salta y arréglalo por mí. :)

En realidad, Achim ha hecho un muy buen punto aquí.

Hay una gran diferencia entre un relé (interruptor) Reed (magnético) y un sensor de efecto Hall.

Principalmente, un relé Reed conectará un interruptor siempre que actúe suficiente fuerza magnética sobre él, brindándole una señal de encendido/apagado. Un sensor de efecto Hall proporciona un nivel de voltaje que indica cuánta fuerza magnética se le está aplicando.

El código que se muestra arriba solo funcionaría 'directamente' con un relé Reed, lo que no quiere decir que no funcione en absoluto para un sensor de efecto hall, pero que ofrecería desafíos adicionales al usar un sensor de efecto hall.

El desafío principal será que está tratando un dispositivo analógico como uno digital, esperando que se dispare al aumentar un pulso. Ahora, la señal no será pulsada, generalmente será como una curva de campana, con todo tipo de fluctuaciones. Puede pasar el voltaje mínimo para una señal alta (¿alrededor de 3.5v, IIRC?) Varias veces cuando el imán pasa por el sensor de efecto Hall.

Por supuesto, nuestro primer instinto cuando usamos algo como un sensor de efecto Hall es usar el ADC y leer el nivel de voltaje en un pin analógico. Sin embargo, está limitado a 10 000 lecturas, aproximadamente, por segundo en un pin analógico (cada lectura requiere 100 uS). Eso supone también que todo lo que hace es hacer un bucle y leer valores, no le deja mucho más tiempo para actualizar una pantalla, calcular, etc. Sin mencionar que si lee en el momento equivocado, ¡perdió su señal!

Estoy seguro de que es posible usar interrupciones vinculadas de alguna manera al ADC, pero no tengo ese conocimiento a mano.

En cambio, si desea utilizar un sensor de efecto Hall real , le sugiero introducirlo en un disparador Schmitt para convertirlo en una señal digital (encendido/apagado) a un nivel calibrado que indica "directamente debajo del imán". Además, según el nivel de histéresis implementado en el disparador Schmitt, es posible que deba eliminar algunos rebotes que cambiarían la tasa de rebote en función de la velocidad actual. Entonces podría tratarlo como un relé Reed normal.

!C

Puedes obtener lo mejor de ambos mundos. Los componentes de ATMega8 se pueden configurar para proporcionar acceso al comparador interno. Con una referencia de voltaje adecuada (ajustable con, por ejemplo, un potenciómetro), puede tener interrupciones en el borde ascendente (o descendente o ambos) de la señal analógica. enlace al tema del foro que explica exactamente eso: arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1163394545
Hay dispositivos de efecto Hall con una salida con umbral de disparador Schmitt. Son bastante comunes. Además, con un interruptor de lengüeta, tendrá que eliminar el rebote de la salida de todos modos.

Los sensores de efecto Hall y los interruptores de láminas son los más mencionados aquí y son la mejor solución.

El interruptor de lengüeta será más barato, pero puede darte pulsos falsos cuando la bicicleta reciba un golpe. Si se trata solo de subirse al bordillo, el software puede filtrarlo fácilmente, pero es diferente cuando circula sobre adoquines, lo que le puede dar pulsos falsos todo el tiempo. Los interruptores de láminas más resistentes a los golpes requerirán un campo magnético más fuerte para activarse, pero un imán de neodimio solucionará eso.

editar en respuesta a las preguntas de m.Alin Los
interruptores Reed son rápidos. Esto se debe a que la lengüeta tiene una masa baja (= inercia baja) y un recorrido bajo, a menudo solo unas pocas décimas de mm. Este interruptor de láminas tiene un tiempo de funcionamiento de < 0,6 ms y un tiempo de liberación de < 0,1 ms. A 36 km/h, el interruptor recorre 5 mm en 1 ms cuando se monta a la mitad del diámetro de la rueda. Entonces es lo suficientemente rápido para activarse cuando pasa el imán.
Este documento sobre el mismo interruptor da una esperanza de vida de> 10 7 operaciones, y eso no es tanto como parece. Si hicieras 25 km al día llegas a esos 10 7 cambie los eventos en 2 años.
fin de edición

El interruptor de efecto Hall no tiene estas desventajas, pero es algo más caro.


tienes tiempo T entre 2 pulsos como información del sensor. Después

velocidad v = π D T

en m/s si el diámetro de la rueda D se expresa en metros, y T en segundos. Convierta a km/h dividiendo por 3.6, divida por 5.79 para mph.

distancia s = conteo de pulsos × π × D

en metros si el diámetro de la rueda D se expresa en metros. Divida por 1000 para la distancia en km, por 1609 para millas.

Se puede montar un imán en el borde de la llanta de la rueda y montar el sensor de efecto Hall muy cerca (pero sin hacer contacto) con el imán. A medida que la rueda gira y el imán pasa por el sensor, el sensor detectará la variación en el campo magnético.

Si aún desea usar estado sólido, hay muchos "interruptores de efecto Hall" que incluyen el sensor de efecto Hall y el disparador Schmitt con histéresis para proporcionar una salida digital limpia sin rebote. Cambian cada vez que se alcanza algún umbral de densidad de flujo (proporcionado en la hoja de datos). Puede calcular una buena combinación de imán e interruptor o simplemente experimentar.

Este sitio le dirá mucho más.

Las partes de las computadoras para bicicletas son contactos de láminas, no sensores de efecto Hall. Son completamente diferentes. Pero creo que todos ustedes están hablando de los contactos de caña.

El imán se puede montar en un radio y el sensor en una de sus horquillas o en la vaina.

En lugar de multiplicar por pi, etc., el método sugerido por mi última computadora para bicicleta era medir la distancia lineal de una revolución (tiza en el neumático, medir entre las dos marcas de tiza), luego puede simplemente multiplicar las revoluciones por la circunferencia directamente.

[EDITAR] Acabo de encontrar esta guía en el sitio piclist para implementar una computadora de bicicleta usando un PIC, tal vez parte de la información pueda ser útil para usted.