¿Cómo mido las RPM de una rueda?

15

Estoy tratando de hacer un sistema a bordo para mi bicicleta usando un Arduino o tal vez las tablas Lilypad.

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

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

    
pregunta mad_z

7 respuestas

12

El uso de un sensor de efecto Hall como Starliner sugirió será una forma de interactuar con la rueda. Sin embargo, la sugerencia de Achim y Shutterdrone de utilizar un interruptor de láminas tiene más sentido, dado el hardware de soporte que un sensor de efecto Hall necesita 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 stock. La ventaja de un sensor y un imán reciclados es que ya tendrá el hardware de montaje.

Hay una página en el wiki de arduino sobre las señales de 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ás que el resultado esté en KPH (o MPH si vives en un lugar que aún cree que es civilizado). Hice algunos mods (no probados) en el código de la wiki para imprimir KPH y los 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++;
}

También, 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!) Entra y arréglalo. :)

    
respondido por el Adam
10

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

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

Principalmente, un relé Reed conectará un interruptor cuando una fuerza magnética suficiente actúe sobre él, lo que le dará una señal de encendido / apagado. Un sensor de efecto Hall proporciona un nivel de voltaje que indica la cantidad de fuerza magnética que se le aplica.

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

El principal desafío será que esté tratando un dispositivo analógico como un dispositivo digital, esperando que se dispare en el aumento de un pulso. Ahora, la señal no será pulsada, generalmente será como una curva de campana, con todo tipo de fluctuaciones. Puede pasar por alto el voltaje mínimo para una señal alta (¿aproximadamente 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 toma 100uS). Eso también supone que todo lo que haces es hacer un bucle y leer valores; no te deja mucho tiempo para actualizar una pantalla, calcular, etc. Sin mencionar, si lees en el momento equivocado, ¡perdiste tu señal!

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

En cambio, si desea utilizar un sensor de efecto Hall actual , le sugeriría que lo introduzca en un disparador Schmitt para convertirlo en una señal digital (on / off) a un nivel calibrado que indica "directamente debajo del imán". Además, dependiendo del nivel de histéresis implementado en el disparador de Schmitt, es posible que tenga que hacer algunos rebotes que podrían cambiar la tasa de rebotes en función de la velocidad actual. Entonces podrías tratarlo como un relé de Reed normal.

! c

    
respondido por el shutterdrone
6

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 láminas será más barato, pero puede darle pulsos falsos cuando la bicicleta recibe una descarga. Si eso es solo uno de los pasos de la acera, el software puede filtrarlo fácilmente, pero es diferente cuando pasas sobre adoquines, lo que puede darte 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 lo solucionará.

editar en respuesta a las preguntas de m.Alin
Los interruptores de láminas son rápidos. Esto se debe a que la caña tiene una masa baja (= baja inercia) y un recorrido bajo, a menudo solo unas pocas décimas de mm. Este interruptor reed 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 viaja 5 mm en 1 ms cuando se monta a la mitad del diámetro de la rueda. Por lo tanto, es lo suficientemente rápido para activarse cuando pasa el imán.
Este documento aproximadamente el mismo interruptor da una esperanza de vida de > 10 \ $ ^ 7 \ $ operaciones, y eso no es tanto como parece. Si haces 25 km al día, alcanzas los 10 \ $ ^ 7 \ $ eventos de cambio en 2 años.
fin de la edición

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


Obtienes el tiempo \ $ T \ $ entre 2 pulsos como información del sensor. Entonces

  

velocidad \ $ v = \ dfrac {\ pi 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 = \ text {recuento de pulsos} \ times \ pi \ times 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.

    
respondido por el stevenvh
5

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

    
respondido por el Starliner
3

Si aún desea pasar al 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 alguna densidad de flujo umbral (proporcionada en la hoja de datos). Puedes calcular una buena combinación de imán y conmutador o simplemente experimentar.

Este sitio te dirá mucho más.

    
respondido por el user1120
2

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 sobre los contactos de caña.

    
respondido por el Achim
1

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

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

[EDITAR] Acabo de encontrar esta guía en el sitio de piclist para implementar un utilice un PIC en bicicleta, tal vez parte de la información pueda serle de utilidad.

    
respondido por el Amos

Lea otras preguntas en las etiquetas