Skocz do zawartości

Pomocna odpowiedź

Cześć! Jakiś czas temu zainteresował mnie temat rowerowych czujników. Jednym z przełomowych "odkryć" ostatnich lat jest urządzenie pokazujące moc z jaką kolarz naciska na pedały. Pozwala to na pełną optymalizację treningu, no ale mniejsza z tym. Na rynku jest dostępnych kilka rozwiązań różnych producentów, ale ich ceny nadal odstraszają amatorskich kolarzy. Latem zacząłem szukać domowych projektów różnych użytkowników. Znalazłem kilka ciekawych, jednak żaden z nich nie spełnia wymagań które postawiłem sobie przed tym projektem. Wiem, że mierzę wysoko, ponieważ nie jest to projekt należący do kategorii łatwych, ale czego się nauczę przy jego produkcji to już mi zostanie.

Jesienią tego roku postanowiłem wykonać podobny projekt udostępniony w sieci ( https://github.com/rrrlasse/Powerino/wiki ). Działał poprawnie, jednak autor tego projektu postawił na korzystanie z własnej aplikacji którą przestał aktualizować, co całkowicie wyklucza korzystanie z tego rozwiązania. Ponadto autor użył sporo elementów których chciałbym uniknąć (ze względów na ograniczone miejsce) w swoim projekcie.

 

[Wymagania]

- powtarzalność pomiarów,

- możliwość połączenia miernika z urządzeniami komercyjnymi oraz smartfonem,

- upchnięcie elektroniki w rurce korby shimano (średnica zewnętrzna 24mm/ wewnętrzna 22-20 mm),

- w miarę możliwości energooszczędność,

- zasilanie ogniwem 18650 (opcjonalne).

 

[Część mechaniczna]

- Największą trudnością tej części jest naklejenie tensometrów na ramię korby. Ale to mam już akurat wykonane.

- Druga część polega na umieszczeniu elektroniki oraz zasilania {?) wewnątrz osi korby ( coś jak w projekcie tego użytkownika, tylko jest mniej miejsca, bo ta korba oś o średnicy 30mm. ).

- w miarę możliwości uszczelnienie układu. Wiadomo, że w domowych warunkach nie zrobi się w 100% szczelnego układu.

 

[Część elektroniczna]

Wzorując się na projekcie z linka zamieszczonego wyżej, są potrzebne właściwie [4] elementy: 

- żyroskop (MPU6050), tu pierwsze (1) pytanie. Czy żyroskop umieszczony praktycznie w osi centralnej korby, będzie w stanie odczytywać wartości prędkości kątowej? 

- moduł odpowiedzialny za odczyt z tensometrów (HX711), całość działa na zasadzie mostka Wheatston'a oraz belki tensometrycznej. Jako, że napięcie na mostku jest bardzo małe to trzeba przepuścić je przez wzmacniacz HX711, z którego trafia na ADC bezpośrednio w arduino

- moduł odpowiedzialny za komunikację BLE (HM-10?),

- arduino jako mózg operacji.

Tutaj pojawia się drugie(2) pytanie, jako że nie udało mi się umieścić tych wszystkich elementów w wyznaczonym miejscu, trzeba dokonać redukcji. Myślałem nad zastosowaniem płytki z wbudowanym modułem ble (esp32?), ale potem wpadłem na artykuł o nowo wypuszczonym do progukcji arduino nano 33 ble, nie dość że wyposażonego w bluetooth low energy, to jeszcze w 3 osiowy żyroskop oraz satysfakcjonujące mnie wymiary. Czy na bazie arduino nano 33 ble da się wykonać tego typu projekt? (2) Wiem, że są różne wersje tej płytki, którą z nich najlepiej użyć? 

 

[Część programowa]

- odczyt wartości z tensometrów. Wyliczanie siły nacisku (belka tensometryczna).  

- pomiar kadencji. Odczyt z żyroskopu, przeliczanie na prędkość kątową.

- scalenie wyników. 

- wysyłanie wartości otrzymanej mocy urządzenia przez Bluetooth low energy (BLE). Trzeba stworzyć protokół GATT, dogadujący się ze sportowymi aplikacjami oraz komputerkami rowerowymi. Specyfikacja protokołu jest ogólnodostępna. Mam kilka programów na których mogę się wzorować, ale sama komunikacja BLE to dla mnie czarna magia. W tej dziedzinie mam niestety najmniejszą wiedzę, z góry dziękuję za wszystkie wskazówki oraz pomoc. 

 

Byłbym wdzięczny gdyby ktoś bardziej doświadczony w ogólnym temacie tego typu projektów się wypowiedział, bo może poleciałem z fantazją za bardzo i nie jest to wszystko tak proste jak sobie zaplanowałem. Za wszystkie rady i odpowiedzi z góry dzięki. 

Link to post
Share on other sites

Hej,

wreszcie dowiedziałem się, po co są te drążone osie suportów 🙂

A na poważnie trzy kwestie na początek:

- Po ci żyroskop? Jeśli tylko po to, żeby odczytać kadencję, to chyba strzelanie z armaty do muchy. Znacznie prościej przykleić na zewnątrz mufy suportowej magnesik, a w środku dać kontaktron.

- Ogniwo 18650 chyba trudno będzie ci tam umieścić. Masz 20 mm średnicy wewnętrznej (jaka długość), a ogniwo ma wymiary 18,5 (śr.) x 65 mm, a musisz zostawić jeszcze trochę miejsca na elektronikę...

- Co do komunikacji przez BT - spróbuj najpierw przesłać na smartfona bez skomplikowanych protokołów na przykład samą kadencję. Przykładowo na http://www.keuwl.com masz program do zainstalowania na telefonie i dużo przykładów, jak przesyłać w obie strony dane przy użyciu Arduino.

I tak największym wyzwaniem wydaje mi się wodoodporność. To jedno z najbardziej mokrych i brudnych miejsc w rowerze.

 

Link to post
Share on other sites
(edytowany)

HX711 to nie jest "wzmacniacz" tylko kompletny tor pomiarowy, łącznie z 24-bitowym ADC. Z tego scalaka dostajesz szeregowo cyfrowe wyniki pomiarów tensometrów. Jednego różnicowego albo dwóch zwykłych - na jeden kanał. W sumie masz dwa kanały, choć każdy trochę inny. W pewien dziwny sposób zlecasz mu konwersję a po pewnym czasie daje Ci znać, że ją wykonał i odczytujesz wynik. Może pracować na dwóch prędkościach (wybieranych stanem pinu): ok. 10 lub 80 pomiarów na sekundę. Wybierasz wolniejszy i dokładniejszy albo szybszy i bardziej zgrubny.

Bardzo ważny jest punkt naklejenia tensometrów na korbę, bo trzeba znaleźć miejsce jej największego ugięcia. W zależności od jej konstrukcji i modelu (w co celujesz, czy możesz podać konkretny typ?) to mogą być różne miejsca. A największe ugięcie to największy sygnał i najmniejsze błędy pomiaru. Jak rozumiem ten etap badań masz już za sobą.

Żyroskop będzie mógł odczytywać prędkość kątową, bo do tego jest. Niestety żyroskop jak każdy czujnik ma swój błąd więc po iluś tam zakręceniach nie będziesz wiedział w jakiej pozycji jest korba. Dla długotrwałego pomiaru mocy nie ma to znaczenia, ale na obrazkach z projektu "wzorcowego" jaki podlinkowałeś widzę kolumnę danych "pedal position" co oznacza, że musisz także posiłkować się akcelerometrem by "resetować" pozycję kątową. Akcelerometr do takiego zastosowania powinien być umieszczony moim zdaniem jak najdalej od osi obrotu, bo przyspieszenia takiego obiektu są bardzo charakterystyczne i bez problemu algorytm może rozpoznać położenie kątowe korby. No ale w przypadku osi suportu wielkiego wyboru nie ma. A żyroskopowi w ogólności odległość od osi obrotu nie przeszkadza, nie musi być centralnie - to powinno znacznie ułatwić projekt.

Radziłbym od razu przewidzieć kompensację temperaturową, czyli jakiś czujnik temperatury. Na początku możesz go ignorować, ale gdy projekt będzie się rozrastał i pozbędziesz się wszystkich oczywistych problemów a dokładność będzie rosła, na pewno skorzystasz. No i od razu pomyśl nad drugą korbą. HX711 ma dwa kanały (co prawda różne), dlaczego z tego nie skorzystać? Są ćwiczenia polegające na jeździe jedną nogą, one rewelacyjnie pokazują słabości w technice pedałowania i pomagają to nadrobić - wtedy porównanie jednej kończyny do drugiej i ich rozwoju w sezonie byłoby bezcenne. 

Generalnie pomyśl nad liczeniem jakiegoś parametru określającego płynność pedałowania. Sama moc też jest fajna, ale wiele osób początkujących ma poważne braki w technice, szczególnie w pierwszych sezonach po przejściu na pedały wpinane lub nawet noski. Przydałaby się jakaś ocena ciągłości lub pokazanie "górek" i "dołków" momentu. Tutaj masz jego pomiar w funkcji kąta obrotu i to mogłoby pokazywać obszary mocniejsze i słabsze a to pomogłoby zwalczać złe nawyki lub zwyczajnie trenować pewne grupy rzadziej używanych mięśni. Nie wszyscy mają w pobliżu góry i 10km podjazdy na wyciągnięcie ręki.

Jak często chcesz raportować wyniki mocy przez radio? Bo rozumiem, że co obrót to za często. Lepiej co stały czas, np. 2-5s. Czy zwyczajnie chcesz kotłować na drugą stronę każdy pomiar z tensometru a wszystko będzie liczyć aplikacja? To będzie kosztować dużo prądu.

Pomyśl nad kalibracją przy użyciu jakichś odważników kładzionych na pedał. Każdy takie cudo zrobi u siebie troszkę inaczej no i ma inne korby więc musi być tryb w którym wpisujesz jaki kładziesz ciężar i to dla kilku obciążeń (powstanie jakaś krzywa kalibracji), bo wcale nie jest powiedziane, że odpowiedź tensometrów naklejonych w przypadkowych miejscach jest liniowa do przyłożonego momentu. Zauważ, że nacisk na pedał nie tylko ugina korbę wzdłuż, ale także próbuje belkę korby ukręcić, bo siła nie jest przyłożona na przedłużeniu metalowego ramienia tylko z boku. To wyrywa gwint pedału i daje dodatkowy moment skręcający. Być może optymalne położenie tensometrów wcale nie jest równoległe do korby?

Edytowano przez marek1707
  • Lubię! 2
Link to post
Share on other sites

Panowie, dziękuje za zainteresowanie. Zasialiście w mój projekt wiele niepewności, ale postaram się odpowiedzieć na pytanie na tyle ile będę w stanie.

 

@rafalini

4 godziny temu, rafalini napisał:

Znacznie prościej przykleić na zewnątrz mufy suportowej magnesik, a w środku dać kontaktron.

Tak, to jest prostsze rozwiązanie, jednak mniej eleganckie oraz bardziej narażone na czynniki atmosferyczne niż schowanie wszystkich elementów w osi korby.

4 godziny temu, rafalini napisał:

Ogniwo 18650 chyba trudno będzie ci tam umieścić.

Ogniwo mam wstępnie umieszczone, zostaje jeszcze 54,5mm wolnego miejsca, więc jest szansa na pomyśle upchnięcie wszystkiego (o ile do projektu użyję arduino nano 33 ble).

4 godziny temu, rafalini napisał:

spróbuj najpierw przesłać na smartfona

Samo przesyłanie danych przez zwykły bluetooth to żaden problem, ale pewnie będę na początku tak to testował.

 

@marek1707

3 godziny temu, marek1707 napisał:

po iluś tam zakręceniach nie będziesz wiedział w jakiej pozycji jest korba.

Wydaje mi się, że tak dokładna pozycja korby nie jest potrzebna przy wyznaczaniu samej mocy, wystarczy kadencja. Ja jestem realistą i wiem doskonale, że bez zespołu badawczego, narzędzi i zasobów nie da się domowym sposobem wykonać takiego urządzenia oddającego w 100% pewne wartości. Jednak podkreślę, że w głównej mierze liczy się powtarzalność wyników. Czyli robiąc sobie trening na 150 watów, chcę to 150 watów osiągać stale (bez znaczenia czy w rzeczywistości to będzie 143 czy 165 watów). Pomiary sprzedawane komercyjnie potrafią odbiegać wartościami od innych producentów nawet o 30 watów. Ale liczy się powtarzalność.

 

 

2 godziny temu, marek1707 napisał:

W zależności od jej konstrukcji i modelu (w co celujesz, czy możesz podać konkretny typ?)

 

3 godziny temu, marek1707 napisał:

Pomyśl nad kalibracją przy użyciu jakichś odważników kładzionych na pedał.

Wydaje mi się, że umieszczenie tensometrów wpływa tylko jak już napisałeś na moc sygnału, cała reszta zależy już od samej kalibracji. Badań oczywiście nie było. Całe doświadczenie w tym temacie bazuje na odczytach z projektu "wzorcowego". Tensometry czujników mocy sprzedawanych komercyjnie umieszczane są w zupełnie innym miejscu (na wewnętrznej ścianie korby). Nie mam pojęcia na jakiej zasadzie działają, ale tam prawdopodobnie wykorzystywana jest zależność skręcania się ramienia korby podczas przykładania siły. U mnie sprawa wygląda prościej, zasada wagi z belką tensometryczną(?). Co do kalibracji to projekt "wzorcowy" zakładał ustawienie korby w pozycji poziomej, założenie znanego obciążenia. Wpisanie odczytu z obciążeniem do pamięci eeprom(?), ściągnięcie obciążenia, ponowne wpisanie w eeprom wartości tensometrów. Obrót korby o 180° i zakończenie kalibracji. Z własnych testów mogę powiedzieć, że to działało. Nie mam jeszcze pomysłu jak to zrobić u siebie.

1982276315_Bsddsduu.thumb.jpg.ff88044a31a83a62d09c90674d7764f9.jpg

 

2 godziny temu, marek1707 napisał:

Radziłbym od razu przewidzieć kompensację temperaturową, czyli jakiś czujnik temperatury.

Dzięki za sugestię, o tym nie pomyślałem. Autor projektu "wzorcowego" twierdził, że umieszczenie tensometrów na przeciwstawnych ścianach ramienia korby praktycznie niweluje efekt kompensacji temperaturowej.

 

2 godziny temu, marek1707 napisał:

Jak często chcesz raportować wyniki mocy przez radio?

Myślałem o częstotliwości 1s. Z mojego urządzenia po protokole ble musi być wysyłana tylko i wyłącznie zmienna reprezentująca moc wyrażona w watach. Zobacz jak to wygląda zapisane już przez urządzenie treningowe "w n sekundzie wartość power = x" (wartość kadencji to już oddzielny czujnik).

  <trkseg>
   <trkpt lat="50.3868200" lon="19.2937280">
    <ele>318.0</ele>
    <time>2020-09-15T14:02:37Z</time>
    <extensions>
     <gpxtpx:TrackPointExtension>
      <gpxtpx:hr>134</gpxtpx:hr>
      <gpxtpx:cad>57</gpxtpx:cad>
     </gpxtpx:TrackPointExtension>
    </extensions>
   </trkpt>
   <trkpt lat="50.3868180" lon="19.2937020">
    <ele>318.0</ele>
    <time>2020-09-15T14:02:38Z</time>
    <extensions>
     <power>155</power>
     <gpxtpx:TrackPointExtension>
      <gpxtpx:hr>134</gpxtpx:hr>
      <gpxtpx:cad>57</gpxtpx:cad>
     </gpxtpx:TrackPointExtension>
    </extensions>
   </trkpt>
   <trkpt lat="50.3868140" lon="19.2936400">
    <ele>318.2</ele>
    <time>2020-09-15T14:02:39Z</time>
    <extensions>
     <power>158</power>
     <gpxtpx:TrackPointExtension>
      <gpxtpx:hr>133</gpxtpx:hr>
      <gpxtpx:cad>60</gpxtpx:cad>
     </gpxtpx:TrackPointExtension>
    </extensions>
   </trkpt>
   <trkpt lat="50.3868100" lon="19.2935820">
    <ele>318.2</ele>
    <time>2020-09-15T14:02:40Z</time>
    <extensions>
     <power>146</power>
     <gpxtpx:TrackPointExtension>
      <gpxtpx:atemp>23</gpxtpx:atemp>
      <gpxtpx:hr>132</gpxtpx:hr>
      <gpxtpx:cad>63</gpxtpx:cad>
     </gpxtpx:TrackPointExtension>
    </extensions>
   </trkpt>
   <trkpt lat="50.3868070" lon="19.2935160">
    <ele>318.2</ele>
    <time>2020-09-15T14:02:41Z</time>
    <extensions>
     <power>132</power>
     <gpxtpx:TrackPointExtension>
      <gpxtpx:atemp>23</gpxtpx:atemp>
      <gpxtpx:hr>132</gpxtpx:hr>
      <gpxtpx:cad>64</gpxtpx:cad>
     </gpxtpx:TrackPointExtension>
    </extensions>
   </trkpt>
   <trkpt lat="50.3868070" lon="19.2934570">
    <ele>318.2</ele>
    <time>2020-09-15T14:02:42Z</time>
    <extensions>
     <power>127</power>
     <gpxtpx:TrackPointExtension>
      <gpxtpx:atemp>23</gpxtpx:atemp>
      <gpxtpx:hr>132</gpxtpx:hr>
      <gpxtpx:cad>67</gpxtpx:cad>
     </gpxtpx:TrackPointExtension>
    </extensions>
   </trkpt>

 

3 godziny temu, marek1707 napisał:

No i od razu pomyśl nad drugą korbą.

To już raczej odległa przyszłość, żeby operować na tych wszystkich danych, trzeba by napisać osobną aplikację np. na androida. Albo gdzieś to pokazywać, może jakiś wyświetlacz na kierownicy. Na ten moment jednak skupię się nad suchym wysyłaniem samej mocy pochodzącej z jednego ramienia.

3 godziny temu, marek1707 napisał:

Generalnie pomyśl nad liczeniem jakiegoś parametru określającego płynność pedałowania.

jw.

3 godziny temu, marek1707 napisał:

Przydałaby się jakaś ocena ciągłości lub pokazanie "górek" i "dołków" momentu.

jww.

Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.