Słowo "kadencja" kojarzy się najczęściej z określonym ustawą czasem urzędowania obieralnego urzędnika lub organu państwa. Uogólniając, można przyjąć, że termin ten określa częstotliwość okresowo zmieniających się zdarzeń. Jak się okazuje słowo "kadencja" jest także wykorzystywane do określenia specjalistycznego kolarskiego przyrządu treningowego - miernika kadencji. Podczas jazdy rowerem kolarz, za pomocą pedałów obraca korbą. Ruch obrotowy zostaje przeniesiony przez łańcuch na tylne koło, co powoduje wprawienie roweru w ruch. Kadencja w terminologii kolarskiej oznacza ilość obrotów korbą na minutę. Im większa liczba obrotów korbą, tym rower jedzie szybciej. W zależności od warunków terenowych - podjazdów i zjazdów, przy założeniu użycia tej samej energii, liczba obrotów korbą w jednostce czasu zmienia się. Jadąc pod górę obracamy korbą wolniej, a zjeżdżając - szybciej. W zależności od potrzeb, liczbę obrotów korbą możemy regulować używając lżejszych lub cięższych przełożeń przerzutek przedniej i tylniej. Jadąc pod górę używamy tarcz kasety bądź wolnobiegu (tylne koło) o większej liczbie zębów oraz tarcz o mniejszej liczbie zębów z przodu. Zmiana przełożeń przerzutek pozwala obracać korbą z mniejszą siłą i w ten sposób oszczędzać energię. Wynika z tego, że używając przerzutek przeciwdziałamy zmiennemu oporowi na korbie powodowanemu podjazdami i zjazdami, starając się zapewnić sobie możliwie stałą prędkość pedałowania. Mięśnie pracują wtedy cały czas, z mniejszym obciążeniem. Chcąc zachować jak najwięcej energii powinniśmy starać się tak regulować siłę przełożeń aby móc jechać z możliwie stałą kadencją. Z badań wynika, że ekonomiczniejsza i zdrowsza jest jazda w kadencji około 90-100 obrotów na minutę ale to już temat dla specjalistów (Trasy masy, 2016). Kontrola kadencji stanowi jeden z podstawowych elementów treningu kolarskiego techniki jazdy, wytrzymałości siłowej i szybkości (Górska 2016). Tak czy inaczej, świadomość jazdy z określoną kadencją przydaje się, gdy podczas jazdy chcemy świadomie i optymalnie gospodarować naszą energią.
Na rynku istnieje wiele liczników rowerowych zaopatrzonych w dodatkowy czujnik prędkości obrotowej montowany na korbie, umożliwiających kontrolę parametru kadencji. Ci, którzy mają już licznik i nie chcą wydawać pieniędzy na nowy, mogą pokusić się o skonstruowanie swojego przyrządu bazującego na układzie mikrokontrolera i czujnika pola magnetycznego.
Hallotrony (in. czujniki Halla) są elementami półprzewodnikowymi, które znajdując się w polu magnetycznym powodują odchylenie strumienia elektronów przepływających pomiędzy dwoma elektrodami, umożliwiając pojawienie się na dodatkowym pinie napięcia nazywanego napięciem Halla - od odkrywcy efektu Halla (Fig. 2) - Edwina Halla (ElektroPrzewodnik, 2016). W handlu znajdują się hallotrony dwóch rodzajów - analogowe (in. liniowe) oraz cyfrowe. Typowymi zastosowaniami hallotronów są: kontrola obrotów silników, wykrywanie pozycji, odczytywanie kodów magnetycznych, wykrywanie metali żelaznych, detekcja wibracji, wykrywanie poziomu cieczy i czujniki masy.
Popularnym hallotronem liniowym jest czujnik AH49E (Fig. 3). Element posiada trzy wyprowadzenia (Tab. 1).
Nr wyprowadzenia | Symbol | funkcja |
---|---|---|
1 | VCC | +5V |
2 | GND | masa |
3 | OUT | wyjście |
Sposób działania hallotronu liniowego AH94E dobrze ilustruje zależność napięcia Halla występującego na wyprowadzeniu OUT w zależności od wartości pola magnetycznego (Fig. 4).
Jak widać, gdy indukcja magnetyczna B jest równa zero (brak pola magnetycznego), efekt Halla nie zachodzi ale na wyjściu OUT hallotronu AH49E pojawia się napiecie około 2,5V. Zmiana napięcia (napięcie Halla) pojawia się wraz z obecnością pola magnetycznego. Jego wartość jest zależna od kierunku wektora indukcji magnetycznej i zmienia się w sposób liniowy.
Pomysł realizacji miernika kadencji zaczerpnąłem z projektu Hall Effect RPM Counter. Autor użył w nim hallotronu cyfrowego US5881LUA o napięciu zasilania 3,5-24V. Ze względu na inny rodzaj posiadanego czujnika, układ wymagał pewnych modyfikacji (Fig. 5).
Na bocznej płaszczyźnie koła, którego prędkość obrotową chcemy poznać zamontowano niewielki magnes neodymowy. Naprzeciwko niego, w bliskiej odległości, przytwierdzono czujnik Halla. Prędkość obrotowa koła w czasie rzeczywistym będzie wyświetlana na wyświetlaczu LCD. Zastosowano wyświetlacz 16×2, który podłączono z platformą Arduino za pomocą magistrali I2C. Sposób podłączenie układów objaśniono przy okazji projektu Obsługa LCD za pośrednictwem magistrali I2C. Zastosowano hallotron AH49E. Podłączono go do pinu cyfrowego 2 platformy arduino (Fig. 5). Z charakterystyki czujnika (Fig. 4) wynika, że w sytuacji, w której nie ma pola magnetycznego, wartość napięcia na wyjściu 3 hallotronu będzie wynosiła około 2,5V. Założono, że to wystarczy aby układ mikrokontrolera uznał to za stan niski. W momencie, w którym czujnik znajdzie się w obszarze oddziaływania dodatniego pola magnetycznego (biegun S magnesu), napięcie podawane z hallotronu na pin 2 arduino zmieni się na ok. 4,5V. Sytuacja taka będzie odpowiadała logicznnemu stanowi wysokiemu. Program obsługiwany przez mikrokontroler, w określonym czasie będzie zliczał wysokie stany występuące na wyjściu czujnika pola magnetycznego. Z proporcji będzie obliczana liczba obrotów koła na minutę (RPM). Zasadniczą część szkicu obsługującego układ także zaczerpnięto z projektu Measuring Stuff (2008).
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); const int hallPin = 2; const unsigned long sampleTime = 5000; const int maxRPM = 300; void setup() { Serial.begin(9600); pinMode(hallPin, INPUT); lcd.begin(16, 2); lcd.print("Miernik kadencji"); delay(5000); lcd.clear(); } void loop() { delay(100); int rpm = getRPM(); lcd.clear(); displayRPM(rpm); displayBar(rpm); } float getRPM() { //int // sample for sampleTime in millisecs int count = 0; boolean flag = LOW; unsigned long currentTime = 0; unsigned long startTime = millis(); while (currentTime <= sampleTime) { if (digitalRead(hallPin) == HIGH) { flag = HIGH; } if (digitalRead(hallPin) == LOW && flag == HIGH) { count++; flag = LOW; } currentTime = millis() - startTime; } float count2rpm = int(60000. / float(sampleTime)) * count; return count2rpm; } void displayRPM(int rpm) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("RPM: "); lcd.print(rpm, DEC); } void displayBar(int rpm) { int numOfBars = map(rpm, 0, maxRPM, 0, 15); lcd.setCursor(0, 1); if (rpm != 0) { for (int i = 0; i <= numOfBars; i++) { lcd.setCursor(i, 1); lcd.write(1023); } } }
W części wstępnej szkicu definiowane są dwie istotne zmienne sampleTime
oraz maxRPM
. Pierwsza wyznacza czas próbkowania, w trakcie którego dokonywane będą zliczenia stanów wysokich na wyjściu hallotronu. W przedstawionym szkicu, czas ten został określony na 5 sekund (5000 ms). Druga zmienna będzie wykorzystywana do generowania na wyświetlaczu LCD "paska postępu" o długości proporcjonalnej do prędkości obrotowej koła. Definiuje ona maksymalny poziom RPM t.j. prędkość obrotową odpowiadającą maksymalnej długości tego paska. W pętli loop()
uruchamiana jest funkcja getRPM()
, która jest odpowiedzialna za dokonywanie pomiarów częstotliwości zmian pola magnetycznego. Jej treść stanowi najważniejszą częścią programu. Na wstępie każdego 5-cio sekundowego cyklu pomiarowego ustawiane są zmienne: count = 0
- oznaczająca początkową liczbę zliczeń stanów wysokich na wyjściu hallotronu; flag
- zmienna logiczna oznaczająca wykrycie przez czujnik pola magnetycznego na LOW
oraz currentTime = 0
przechowująca czas wykrycia pola magnetycznego. W następnym kroku inicjowana jest zmienna startTime
zliczająca czas w kolejnych cyklach pomiarowych. W pętli while
jest sprawdzany warunek czy ciągle znajdujemy się w aktualnym cyklu pomiarowym. Jeśli aktualny cykl ciągle trwa i czujnik wykryje pole magnetyczne, zmienna flag
przyjmuje wartość HIGH
. Gdy stan hallotronu zmieni się z HIGH
na LOW
, a zmienna flag
ma wartość HIGH
, należy zinkrementować zmienną count
, a stan zmiennej flag
zmienić na LOW
. Obliczenie RPM odbywa się z proporcji. Jeśli w okresie próbkowania sampleTime
odnotowano pewną liczbę zliczeń count
, to w okresie minuty (60000 ms) jest ich count2rpm
.