Wie messe ich die Drehzahl eines Rades?

Ich versuche, mit einem Arduino oder vielleicht den Lilypad-Boards ein Onboard-System für mein Fahrrad zu bauen.

Ich denke, ich sollte einen Hall-Effekt-Sensor verwenden, aber jede Alternative ist auch gut.

Ich möchte meine Geschwindigkeit auf einem LCD-Display ausgeben und frage mich, wie das am besten geht.

Antworten (7)

Die Verwendung eines Hallsensors, wie von Starliner vorgeschlagen, ist eine Möglichkeit, eine Schnittstelle mit dem Rad herzustellen. Der Vorschlag von Achim und Shutterdrone, einen Reed-Schalter zu verwenden, ist jedoch sinnvoller, da ein Hall-Effekt-Sensor die unterstützende Hardware benötigt, um ein sauberes digitales Signal zu erhalten.

Möglicherweise können Sie einen Magneten und einen Sensor von einem kaputten Fahrradcomputer abholen, aber wenn Sie dies nicht können, sollte ein lokaler Komponentenhändler jeweils einen auf Lager haben. Der Vorteil eines recycelten Sensors und Magneten besteht darin, dass Sie bereits über die Montagehardware verfügen.

Es gibt eine Seite im Arduino-Wiki zum Lesen von RPM - Signalen. Um die Geschwindigkeit zu berechnen, multiplizieren Sie den Drehzahlwert mit dem Umfang des Rads (2 * pi * Radius [in Metern]). Das Ergebnis wird in Metern pro Minute angezeigt.

Bearbeiten: Ich habe festgestellt, dass der verknüpfte Code für Systeme mit zwei Impulsen pro Umdrehung gilt. Ein Magnet reicht für Ihre Aufgabe aus. Außerdem möchten Sie bei einem Fahrradcomputer wahrscheinlich, dass das Ergebnis in KPH (oder MPH, wenn Sie an einem Ort leben, der das immer noch für zivilisiert hält) angezeigt wird. Ich habe einige (ungetestete) Mods für den Code im Wiki erstellt, um KPH auszudrucken, und sie unten eingefügt.

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

Außerdem habe ich das „Community-Wiki“ aktiviert, was meiner Meinung nach bedeutet, dass andere Benutzer es bearbeiten können. Wenn meine Mathematik falsch ist (und Sie können es beweisen!), springen Sie ein und beheben Sie es für mich. :)

Eigentlich hat Achim hier einen sehr guten Punkt gemacht.

Es gibt einen großen Unterschied zwischen einem (magnetischen) Reed-Relais (Schalter) und einem Hall-Effekt-Sensor.

In erster Linie verbindet ein Reed-Relais einen Schalter, wenn genügend Magnetkraft auf ihn einwirkt, und gibt Ihnen ein Ein- / Aus-Signal. Ein Hall-Effekt-Sensor liefert einen Spannungspegel, der angibt, wie viel Magnetkraft auf ihn ausgeübt wird.

Der oben gezeigte Code würde nur "direkt" mit einem Reed-Relais funktionieren, was nicht heißen soll, dass er für einen Hall-Effekt-Sensor überhaupt nicht funktioniert, aber dass er zusätzliche Herausforderungen mit einem Hall-Effekt-Sensor bieten würde.

Die größte Herausforderung besteht darin, dass Sie ein analoges Gerät als digitales Gerät behandeln und erwarten, dass es bei einem Anstieg eines Pulses ausgelöst wird. Jetzt wird das Signal nicht gepulst – es wird im Allgemeinen wie eine Glockenkurve sein, mit allen möglichen Schwankungen. Sie könnten mehrmals über die Mindestspannung für ein hohes Signal (ca. 3,5 V, IIRC?) hinausstolpern, wenn der Magnet den Hall-Effekt-Sensor passiert.

Natürlich ist unser erster Instinkt, wenn wir so etwas wie einen Hall-Effekt-Sensor verwenden, den ADC zu verwenden und den Spannungspegel an einem analogen Pin zu lesen. Sie sind jedoch auf ungefähr 10.000 Lesevorgänge pro Sekunde auf einem analogen Pin begrenzt (jeder Lesevorgang dauert 100 uS). Das setzt auch voraus, dass Sie nur Schleifen und Werte lesen - Ihnen bleibt nicht viel Zeit, um eine Anzeige zu aktualisieren, zu berechnen usw. Ganz zu schweigen davon, dass Sie Ihr Signal verpasst haben, wenn Sie zur falschen Zeit gelesen haben!

Ich bin mir sicher, dass es möglich ist, Interrupts zu verwenden, die irgendwie mit dem ADC verknüpft sind, aber ich habe solche Kenntnisse nicht zur Hand.

Wenn Sie stattdessen einen tatsächlichen Hall-Effekt-Sensor verwenden möchten, würde ich vorschlagen, ihn in einen Schmitt-Trigger einzuspeisen, um ihn in ein digitales (Ein / Aus) -Signal mit einem kalibrierten Pegel umzuwandeln, der "direkt unter dem Magneten" anzeigt. Darüber hinaus müssen Sie abhängig von der im Schmitt-Trigger implementierten Hysteresestufe möglicherweise einige Entprellungen durchführen, die die Entprellungsrate basierend auf der aktuellen Geschwindigkeit ändern würden. Dann könnten Sie es wie ein normales Reed-Relais behandeln.

!c

Sie können das Beste aus beiden Welten bekommen. ATMega8-Komponenten können so konfiguriert werden, dass sie Zugriff auf den internen Komparator bieten. Mit einer geeigneten Spannungsreferenz (einstellbar beispielsweise mit einem Trimpot) können Sie Interrupts bei steigender (oder fallender oder beidem) Flanke des analogen Signals haben. Link zum Forumsthema, das genau das erklärt: arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1163394545
Es gibt Hall-Effekt-Geräte mit einem Ausgang mit Schmitt-Trigger-Schwelle. Sie sind ziemlich verbreitet. Außerdem müssen Sie bei einem Reed-Schalter den Ausgang sowieso entprellen.

Hall-Effekt-Sensoren und Reed-Schalter werden hier am häufigsten genannt und sind die beste Lösung.

Der Reed-Schalter ist billiger, kann Ihnen aber falsche Impulse geben, wenn das Fahrrad einen Stoß bekommt. Wenn dies nur eine vom Fahren auf dem Bordstein ist, kann die Software es leicht herausfiltern, aber es ist anders, wenn Sie über Kopfsteinpflaster fahren, was Ihnen die ganze Zeit falsche Pulse geben kann. Stoßfestere Reed-Schalter erfordern ein stärkeres Magnetfeld, um aktiviert zu werden, aber ein Neodym-Magnet behebt das.

bearbeiten als Antwort auf die Fragen von m.Alin
Reed-Schalter sind schnell. Denn das Blatt hat eine geringe Masse (= geringe Trägheit) und einen geringen Hub, oft nur wenige Zehntel mm. Dieser Reedschalter hat eine Ansprechzeit von < 0,6 ms und eine Abfallzeit von < 0,1 ms. Bei 36 km/h legt der Schalter 5 mm in 1 ms zurück, wenn er auf halber Höhe des Raddurchmessers montiert ist. Es ist also schnell genug, um aktiviert zu werden, wenn es den Magneten passiert.
Dieses Dokument über denselben Schalter gibt eine Lebenserwartung von > 10 an 7 Operationen, und das ist nicht so viel, wie es scheint. Wenn Sie 25 km am Tag fahren würden, erreichen Sie diese 10 7 Wechseln Sie die Ereignisse in 2 Jahren.
Ende der Bearbeitung

Der Halleffektschalter hat diese Nachteile nicht, ist aber etwas teurer.


Sie bekommen Zeit T zwischen 2 Impulsen als Information vom Sensor. Dann

Geschwindigkeit v = π D T

in m/s bei Raddurchmesser D wird in Metern ausgedrückt, und T in Sekunden. Rechnen Sie in km/h um, indem Sie durch 3,6 dividieren, dividieren Sie durch 5,79 für mph.

Distanz s = Impulszahl × π × D

in Metern bei Raddurchmesser D wird in Metern angegeben. Teilen Sie die Entfernung in km durch 1000, die Entfernung in Meilen durch 1609.

Ein Magnet kann an der Kante der Felge des Rads montiert werden und der Hall-Effekt-Sensor kann sehr nahe am Magneten montiert werden (aber ihn nicht berühren). Wenn sich das Rad dreht und der Magnet den Sensor passiert, nimmt der Sensor die Variation im Magnetfeld auf.

Wenn Sie immer noch auf Festkörper umsteigen möchten, gibt es viele "Hall-Effekt-Schalter", die den Hall-Effekt-Sensor und den Schmitt-Trigger mit Hysterese enthalten, um einen sauberen digitalen Ausgang ohne Prellen zu liefern. Sie schalten immer dann, wenn eine bestimmte Schwellenflussdichte (im Datenblatt angegeben) erreicht wird. Sie können eine gute Kombination aus Magnet und Schalter berechnen oder einfach experimentieren.

Diese Seite wird Ihnen viel mehr erzählen.

Die Teile in Fahrradcomputern sind Reed-Kontakte und keine Hall-Effekt-Sensoren. Sie sind völlig unterschiedlich. Aber ich denke, ihr redet alle von den Reed-Kontakten.

Der Magnet kann an einer Speiche und der Sensor an einer Ihrer Gabeln oder der Kettenstrebe montiert werden.

Anstatt mit Pi usw. zu multiplizieren, bestand die von meinem letzten Fahrradcomputer vorgeschlagene Methode darin, die lineare Entfernung einer Umdrehung zu messen (Kreide auf dem Reifen, zwischen den beiden Kreidemarkierungen messen), dann können Sie die Umdrehungen einfach direkt mit dem Umfang multiplizieren.

[BEARBEITEN] Ich habe gerade diese Anleitung auf der Piclist-Site für die Implementierung eines Fahrradcomputers mit einem PIC gefunden, vielleicht könnten einige der Informationen für Sie von Nutzen sein.