Jak zmierzyć RPM koła?

15

Staram się stworzyć system pokładowy dla mojego roweru za pomocą Arduino lub może tablic Lilypad.

Myślę, że powinienem użyć czujnika Halla, ale każda alternatywa jest również dobra.

Chcę przesłać moją prędkość do wyświetlacza LCD i zastanawiam się, jak najlepiej to zrobić.

mad_z
źródło

Odpowiedzi:

12

Użycie czujnika efektu Halla, jak sugeruje Starliner, będzie jednym ze sposobów połączenia z kierownicą. Sugerowanie Achima i Shutterdrone do zastosowania przełącznika kontaktronowego ma jednak większy sens, biorąc pod uwagę sprzęt pomocniczy, który wymaga czujnika Halla, aby uzyskać czysty sygnał cyfrowy.

Być może będziesz w stanie odebrać magnes i czujnik z uszkodzonego komputera rowerowego, ale jeśli nie możesz, lokalny sklep z częściami powinien mieć jeden w magazynie. Zaletą czujnika i magnesu z recyklingu jest to, że masz już sprzęt montażowy.

Na stronie wiki arduino znajduje się strona ReadingRPM sygnałów . Aby obliczyć prędkość, należy pomnożyć wartość RPM przez obwód koła (promień 2 * pi * [w metrach]). Wynik będzie w metrach na minutę.

Edycja: Zauważyłem, że połączony kod dotyczy systemów z dwoma impulsami na obrót. Jeden magnes wystarczy do twojego zadania. Ponadto w przypadku komputera rowerowego prawdopodobnie chcesz, aby wynik był w KPH (lub MPH, jeśli mieszkasz w miejscu, które nadal uważa, że ​​jest cywilizowane). Wprowadziłem kilka (nieprzetestowanych) modyfikacji kodu na wiki, aby wydrukować KPH i wkleiłem je poniżej.

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

Włączyłem także „wiki społeczności”, co według mnie oznacza, że ​​inni użytkownicy mogą je edytować. Jeśli moja matematyka jest błędna (i możesz to udowodnić!), Wskocz i napraw to dla mnie. :)

Adam
źródło
10

W rzeczywistości Achim ma tutaj bardzo dobrą opinię.

Istnieje duża różnica między przekaźnikiem (przełącznikiem) kontaktronu (Reed) a czujnikiem efektu Halla.

Przede wszystkim przekaźnik Reed podłącza przełącznik za każdym razem, gdy działa na niego wystarczająca siła magnetyczna, co daje sygnał włączenia / wyłączenia. Czujnik Halla zapewnia poziom napięcia wskazujący, ile siły magnetycznej przykłada się do niego.

Powyższy kod działałby tylko „bezpośrednio” z przekaźnikiem Reeda, co nie znaczy, że w ogóle nie będzie działał dla czujnika efektu Halla, ale zapewniłby dodatkowe wyzwania przy użyciu czujnika Halla.

Podstawowym wyzwaniem będzie to, że traktujesz urządzenie analogowe jak cyfrowe - spodziewając się, że zadziała po wzroście pulsu. Teraz sygnał nie będzie pulsował - będzie ogólnie jak krzywa dzwonowa, z wszelkiego rodzaju fluktuacjami. Możesz przekroczyć minimalne napięcie dla wysokiego sygnału (około 3,5 V, IIRC?) Kilka razy, gdy magnes mija czujnik Halla.

Oczywiście, naszym pierwszym instynktem podczas używania czegoś takiego jak czujnik Halla jest użycie ADC i odczytanie poziomu napięcia na pinach analogowych. Jednak na analogowym pinie masz mniej więcej 10 000 odczytów na sekundę (każdy odczyt wymaga 100uS). Zakłada to również, że wszystko, co robisz, to zapętlanie i odczytywanie wartości - nie pozostawia wiele czasu na aktualizację wyświetlacza, obliczenia itp. Nie wspominając o tym, że jeśli czytasz w niewłaściwym czasie, przegapiłeś swój sygnał!

Jestem pewien, że można użyć przerwań w jakiś sposób powiązanych z ADC, ale nie mam takiej wiedzy pod ręką.

Zamiast tego, jeśli chcesz użyć rzeczywistego czujnika Halla, sugeruję wprowadzenie go do wyzwalacza Schmitta w celu przekształcenia go w sygnał cyfrowy (włączony / wyłączony) na skalibrowanym poziomie wskazującym „bezpośrednio pod magnesem”. Dodatkowo, w zależności od poziomu histerezy zaimplementowanej w spuście Schmitta, może być konieczne wykonanie odskoku, który zmieniłby tempo odskoku w oparciu o bieżącą prędkość. Wtedy możesz traktować to jak normalny przekaźnik Reeda.

!do

Shutterdrone
źródło
1
Możesz uzyskać to, co najlepsze z obu światów. Komponenty ATMega8 można skonfigurować w celu zapewnienia dostępu do wewnętrznego komparatora. Przy odpowiednim napięciu odniesienia (regulowanym np. Trimpotem) możesz mieć przerwy na zboczu narastającym (lub opadającym lub na obu) zbocza sygnału analogowego. link do tematu na forum wyjaśniający, że: arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1163394545
SingleNegationElimination
Istnieją urządzenia z efektem Halla z wyjściem progowym wyzwalacza Schmitta. Są dość powszechne. Ponadto z kontaktronem będziesz musiał ogłosić wyjście mimo to.
Connor Wolf,
7

Czujniki z efektem Halla i kontaktrony są tu najczęściej wymieniane i są najlepszym rozwiązaniem.

Kontaktron będzie tańsze, ale może dać fałszywe impulsy gdy rower dostaje szoku. Jeśli to tylko jedna z jazdy na krawężniku, oprogramowanie może go łatwo odfiltrować, ale inaczej jest, gdy jeździsz po bruku, co może dać ci fałszywe impulsy przez cały czas. Bardziej odporne na uderzenia przełączniki kontaktronowe będą wymagały silniejszego pola magnetycznego do aktywacji, ale magnes neodymowy to naprawi.



77

Efekt przełącznik Hall nie ma tych wad, ale jest nieco droższy.


T.

v=πreT.

reT.

s=liczba impulsów×π×re

re

stevenvh
źródło
5

Magnes można zamontować na krawędzi obręczy koła, a czujnik Halla zamontować bardzo blisko magnesu (ale bez kontaktu z nim). Gdy koło obraca się, a magnes mija czujnik, czujnik wykryje zmiany w polu magnetycznym.


źródło
3

Jeśli nadal chcesz przejść do stanu półprzewodnikowego, jest wiele „przełączników efektu Halla”, które obejmują czujnik efektu Halla i wyzwalacz Schmitta z histerezą, aby zapewnić czysty cyfrowy sygnał wyjściowy bez odbicia. Przełączają się, gdy osiągnięta zostanie pewna progowa gęstość strumienia (podana w arkuszu danych). Możesz obliczyć dobrą kombinację magnesu i przełącznika lub po prostu eksperymentować.

Ta strona powie Ci o wiele więcej.

użytkownik1120
źródło
2

Części w komputerach rowerowych są kontaktronami, a nie czujnikami efektu Halla. Oni są zupełnie inni. Ale myślę, że wszyscy mówicie o kontaktronach.

Achim
źródło
1

Magnes można zamontować na szprychie, a czujnik na jednym z widelców lub na dolnej prowadnicy.

Zamiast pomnożyć przez pi itp., Metodą sugerowaną przez mój ostatni komputer rowerowy było zmierzenie odległości liniowej jednego obrotu (kreda na oponie, pomiar między dwoma znakami kredy), a następnie można pomnożyć obroty bezpośrednio przez obwód.

[EDYCJA] Właśnie znalazłem ten przewodnik na stronie z listą piktogramów na temat wdrażania komputera rowerowego za pomocą PIC, być może niektóre informacje mogą ci się przydać.

Amos
źródło