Comment mesurer le régime d'une roue?


15

J'essaie de créer un système embarqué pour mon vélo en utilisant un Arduino ou peut-être les planches Lilypad.

Je pense que je devrais utiliser un capteur à effet Hall, mais toute alternative est également bonne.

Je veux afficher ma vitesse sur un écran LCD et je me demande la meilleure façon de procéder.

Réponses:


12

L'utilisation d'un capteur à effet hall comme l'a suggéré Starliner sera un moyen d'interfacer avec la roue. La suggestion d'Achim et de Shutterdrone d'utiliser un commutateur à lames est plus logique, étant donné le matériel de support qu'un capteur à effet Hall nécessite pour obtenir un signal numérique propre.

Vous pourrez peut-être récupérer un aimant et un capteur sur un ordinateur de vélo cassé, mais si vous ne le pouvez pas, un magasin de composants local devrait en avoir un en stock. L'avantage d'un capteur et d'un aimant recyclés est que vous aurez déjà le matériel de montage.

Il y a une page sur le wiki Arduino sur les signaux ReadingRPM . Pour calculer la vitesse, multipliez la valeur RPM par la circonférence de la roue (rayon 2 * pi * [en mètres]). Le résultat sera en mètres par minute.

Edit: j'ai remarqué que le code lié est pour les systèmes avec deux impulsions par tour. Un aimant suffit pour votre tâche. De plus, pour un ordinateur de vélo, vous voudrez probablement que le résultat soit en KPH (ou MPH si vous vivez dans un endroit qui pense toujours que c'est civilisé). J'ai fait quelques mods (non testés) au code sur le wiki pour imprimer KPH et les coller ci-dessous.

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++;
}

De plus, j'ai activé le «wiki communautaire» à ce sujet, ce qui, je pense, signifie que d'autres utilisateurs peuvent le modifier. Si mes calculs sont faux (et vous pouvez le prouver!), Sautez et corrigez-le pour moi. :)


10

En fait, Achim a fait un très bon point ici.

Il y a une grande différence entre un relais (interrupteur) Reed (magnétique) et un capteur à effet Hall.

Principalement, un relais Reed connectera un interrupteur chaque fois qu'une force magnétique suffisante agit sur lui, vous donnant un signal marche / arrêt. Un capteur à effet Hall fournit un niveau de tension indiquant la force magnétique qui lui est appliquée.

Le code ci-dessus ne fonctionnerait que `` directement '' avec un relais Reed, ce qui ne veut pas dire qu'il ne fonctionnera pas du tout pour un capteur à effet Hall, mais qu'il poserait des défis supplémentaires en utilisant un capteur à effet Hall.

Le principal défi sera de traiter un appareil analogique comme un appareil numérique - en espérant qu'il se déclenchera à la montée d'une impulsion. Maintenant, le signal ne sera pas pulsé - ce sera généralement comme une courbe en cloche, avec toutes sortes de fluctuations. Vous pourriez trébucher au-delà de la tension minimale pour un signal élevé (environ 3,5 V, IIRC?) Plusieurs fois lorsque l'aimant passe devant le capteur à effet Hall.

Bien sûr, notre premier instinct lorsque nous utilisons quelque chose comme un capteur à effet Hall est d'utiliser l'ADC et de lire le niveau de tension sur une broche analogique. Cependant, vous êtes limité à 10 000 lectures, à peu près, par seconde sur une broche analogique (chaque lecture prend 100 uS). Cela suppose également que tout ce que vous faites est de lire en boucle et de lire des valeurs - ne vous laisse pas beaucoup de temps pour mettre à jour un affichage, calculer, etc. Sans oublier, si vous lisez au mauvais moment, vous avez raté votre signal!

Je suis sûr qu'il est possible d'utiliser des interruptions liées à l'ADC, mais je n'ai pas de telles connaissances à portée de main.

Au lieu de cela, si vous souhaitez utiliser un véritable capteur à effet Hall, je suggère de l'introduire dans un déclencheur Schmitt pour le convertir en un signal numérique (marche / arrêt) à un niveau calibré qui indique «directement sous l'aimant». En outre, selon le niveau d'hystérésis implémenté dans le déclencheur Schmitt, vous devrez peut-être effectuer un certain rebond qui modifierait le taux de rebond en fonction de la vitesse actuelle. Ensuite, vous pouvez le traiter comme un relais Reed normal.

! c


1
Vous pouvez tirer le meilleur parti des deux mondes. Les composants ATMega8 peuvent être configurés pour fournir un accès au comparateur interne. Avec une référence de tension appropriée (réglable avec, disons, un potentiomètre), vous pouvez avoir des interruptions sur le front montant (ou descendant ou les deux) du signal analogique. lien vers le sujet du forum expliquant juste cela: arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1163394545
SingleNegationElimination

Il existe des appareils à effet hall avec une sortie seuil déclenchée par schmitt. Ils sont assez courants. De plus, avec un commutateur à lames, vous devrez de toute façon rebondir la sortie.
Connor Wolf

7

Les capteurs à effet Hall et les interrupteurs reed sont les plus mentionnés ici, et ils sont la meilleure solution.

Le commutateur à lames sera moins cher, mais peut vous donner de fausses impulsions lorsque le vélo subit un choc. Si ce n'est qu'une des chevauchées, le logiciel peut facilement le filtrer, mais c'est différent lorsque vous roulez sur des pavés, ce qui peut vous donner de fausses impulsions tout le temps. Les interrupteurs à lames plus résistants aux chocs nécessiteront un champ magnétique plus fort pour s'activer, mais un aimant en néodyme corrigera cela.



septsept

Le commutateur d'effet Hall n'a pas ces inconvénients, mais il est un peu plus cher.


T

v=πT

T

s=nombre d'impulsions×π×


5

Un aimant peut être monté sur le bord de la jante de la roue et le capteur à effet Hall monté très près (mais sans contact) de l'aimant. Lorsque la roue tourne et que l'aimant passe devant le capteur, le capteur capte la variation du champ magnétique.


3

Si vous voulez toujours passer à l'état solide, il existe de nombreux "commutateurs à effet Hall" qui incluent le capteur à effet Hall et le déclencheur Schmitt avec hystérésis pour fournir une sortie numérique propre sans rebond. Ils commutent chaque fois qu'un certain seuil de densité de flux (fourni dans la fiche technique) est atteint. Vous pouvez calculer une bonne combinaison d'aimant et de commutateur ou simplement expérimenter.

Ce site vous en dira beaucoup plus.


2

Les pièces des ordinateurs de vélo sont des contacts reed et non des capteurs à effet Hall. Ils sont complètement différents. Mais je pense que vous parlez tous des contacts reed.


1

L'aimant peut être monté sur un rayon, et le capteur sur l'une de vos fourches, ou la base.

Plutôt que de multiplier par pi, etc., la méthode suggérée par mon dernier ordinateur de vélo était de mesurer la distance linéaire d'une révolution (craie sur le pneu, mesurer entre les deux marques de craie), alors vous pouvez simplement multiplier les révolutions par la circonférence directe.

[EDIT] Je viens de trouver ce guide sur le site piclist pour implémenter un ordinateur de vélo en utilisant un PIC, peut-être que certaines informations pourraient vous être utiles.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.