¿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 también es buena.

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

mad_z
fuente

Respuestas:

12

Usar 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 stock. La ventaja de un sensor e imán reciclados es que ya tendrá el hardware de montaje.

Hay una página en el wiki de arduino sobre 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 todavía piensa que es civilizado). He realizado algunas modificaciones (no probadas) en el código de la wiki para imprimir KPH y pegarlas 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 'community wiki' en esto, lo que creo que significa que otros usuarios pueden editarlo. Si mis matemáticas están mal (¡y puedes probarlo!), Salta y arréglalo por mí. :)

Adam
fuente
10

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 sobre él una fuerza magnética suficiente, dá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 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 proporcionaría desafíos adicionales usando un sensor de efecto hall.

El desafío principal será que esté tratando un dispositivo analógico como uno digital, esperando desencadenar 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 el voltaje mínimo para una señal alta (¿alrededor de 3.5v, IIRC?) Varias veces cuando el imán pasa 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 supone también que todo lo que hace es bucle y leer valores, no le deja mucho tiempo para actualizar una pantalla, calcular, etc. Sin mencionar que si leyó en el momento equivocado, ¡perdió su señal!

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

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

!C

obturador
fuente
1
Puedes obtener lo mejor de ambos mundos. Los componentes ATMega8 se pueden configurar para proporcionar acceso al comparador interno. Con una referencia de voltaje adecuada (ajustable con, digamos, un trimpot), 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
SingleNegationElimination
Hay dispositivos de efecto hall con una salida con umbral schmitt-trigger. Son bastante comunes. Además, con un interruptor de láminas, tendrá que cancelar la eliminación de la salida de todos modos.
Connor Wolf
7

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 sufre una descarga. Si eso es solo uno de la acera, el software puede filtrarlo fácilmente, pero es diferente cuando manejas 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á.



7 77 7

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


T

v=πreT

reT

s=cuenta de pulso×π×re

re

stevenvh
fuente
5

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


fuente
3

Si aún desea pasar a 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 un 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 te dirá mucho más.

usuario1120
fuente
2

Las piezas en las computadoras de bicicleta 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 lámina.

Achim
fuente
1

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

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

[EDITAR] Acabo de encontrar esta guía en el sitio de la lista de imágenes para implementar una computadora para bicicleta usando un PIC, tal vez parte de la información podría serle útil.

Amós
fuente