Spisu treści:

Inteligentny trener roweru stacjonarnego DIY: 5 kroków
Inteligentny trener roweru stacjonarnego DIY: 5 kroków

Wideo: Inteligentny trener roweru stacjonarnego DIY: 5 kroków

Wideo: Inteligentny trener roweru stacjonarnego DIY: 5 kroków
Wideo: Pudzianowski do Szpilki - dostaniesz bęcki,będzie lewatywa! #walka #mma #ksw #szpilka #pudzianowski 2024, Listopad
Anonim
Inteligentny trener roweru stacjonarnego DIY
Inteligentny trener roweru stacjonarnego DIY
Inteligentny trener roweru stacjonarnego DIY
Inteligentny trener roweru stacjonarnego DIY
Inteligentny trener roweru stacjonarnego DIY
Inteligentny trener roweru stacjonarnego DIY

Wstęp

Ten projekt rozpoczął się jako prosta modyfikacja roweru halowego Schwinn IC Elite, który używa prostej śruby i filcowych podkładek do ustawienia oporu. Problem, który chciałem rozwiązać, polegał na tym, że skok śruby był zbyt duży, więc zakres od niemożności pedałowania do całkowitego kręcenia się koła wynosił tylko kilka stopni na pokrętle oporu. Na początku wymieniłem śrubę na M6, ale potem musiałbym zrobić gałkę, więc dlaczego nie użyć pozostawionego silnika krokowego NEMA 17 do zmiany rezystancji? Jeśli jest już jakaś elektronika, dlaczego nie dodać miernika mocy korby i połączenia bluetooth do komputera, aby stworzyć inteligentny trenażer?

Okazało się to trudniejsze niż oczekiwano, ponieważ nie było przykładów na emulację miernika mocy za pomocą arduino i bluetooth. Skończyło się na tym, że spędziłem około 20 godzin na programowaniu i interpretacji specyfikacji BLE GATT. Mam nadzieję, że podając przykład pomogę komuś nie marnować tyle czasu na próby zrozumienia, co dokładnie oznacza „Service Data AD Type Field”…

Oprogramowanie

Cały projekt jest na GitHub:

github.com/kswiorek/ble-ftms

Gorąco polecam używanie Visual Studio z wtyczką VisualGDB, jeśli planujesz zrobić coś poważniejszego niż tylko kopiowanie i wklejanie mojego kodu.

Jeśli masz pytania dotyczące programu, pytaj, wiem, że moje minimalistyczne komentarze mogą niewiele pomóc.

Kredyty

Podziękowania dla stoppi71 za jego poradnik jak zrobić miernik mocy. Korba zrobiłem według jego projektu.

Kieszonkowe dzieci:

Materiały do tego projektu w dużej mierze zależą od tego, jaki rower modyfikujesz, ale są też części uniwersalne.

Korba:

  1. Moduł ESP32
  2. HX711 Czujnik masy ADC
  3. Tensometry
  4. MPU - żyroskop
  5. Mała bateria Li-Po (około 750 mAh)
  6. Rękaw termokurczliwy
  7. A4988 sterownik krokowy
  8. Regulator 5V
  9. Gniazdo baryłkowe arduino
  10. Zasilanie 12V arduino

Konsola:

  1. Stepper NEMA 17 (musi być dość mocny, >0,4 Nm)
  2. Pręt M6
  3. 12864 lcd
  4. WeMos LOLIN32
  5. Przełączniki taktowe

Ekwipunek

W tym celu prawdopodobnie ujdziesz na sucho używając tylko drukarki 3D, ale możesz zaoszczędzić dużo czasu, wycinając obudowę laserem, a także możesz wykonać PCB. Pliki DXF i gerber znajdują się na GitHub, więc możesz je zamówić lokalnie. Sprzęgło od pręta gwintowanego do silnika zostało obrócone na tokarce i może to być jedyny problem, gdyż część musi być dość mocna, aby naciągnąć na klocki, ale w tym konkretnym rowerze nie ma dużo miejsca.

Od czasu zrobienia pierwszego roweru nabyłem frezarkę, która pozwala mi robić gniazda na czujniki w korbie. Ułatwia to ich sklejanie, a także zabezpiecza je, gdyby coś uderzyło w korbę. (Kilka razy spadały mi te czujniki, więc chciałem być bezpieczny.)

Krok 1: Korba:

Korba
Korba
Korba
Korba
Korba
Korba

Najlepiej po prostu postępować zgodnie z tym samouczkiem:

W zasadzie trzeba przykleić czujniki do korby w czterech miejscach i podłączyć je do boków deski.

Właściwe połączenia już są, więc wystarczy przylutować pary przewodów bezpośrednio do tych ośmiu padów na płytce.

Aby połączyć się z czujnikami, użyj jak najcieńszego przewodu - nakładki są bardzo łatwe do podniesienia. Czujniki należy najpierw przykleić i pozostawić na zewnątrz tylko tyle do przylutowania, a resztę pokryć żywicą epoksydową. Jeśli spróbujesz lutować przed klejeniem, zwijają się i pękają.

Aby zmontować PCB:

  1. Włóż goldpiny od dołu (strona ze śladami) we wszystkie otwory poza tymi pionowymi przy dnie.
  2. Umieść trzy płytki (ESP32 na górze, potem MPU, HX711 na dole) tak, aby goldpiny weszły przez oba otwory.
  3. Przylutuj nagłówki do desek na górze
  4. Od spodu odcinamy goldpiny. (Spróbuj je najpierw wyciąć przed montażem, aby wiedzieć, że twoje "złote szpilki" nie są w środku ze stali - to sprawia, że są prawie niemożliwe do przecięcia i musisz je spiłować lub szlifować)
  5. przylutuj pozostałe goldpiny do spodu płytki.
  6. Wgraj oprogramowanie dla korby

Ostatnim krokiem jest zapakowanie całej korby w rękaw termokurczliwy.

Ten sposób wykonania deski nie jest idealny, ponieważ deski zajmują dużo miejsca, w którym można by zmieścić inne rzeczy. Najlepiej byłoby wlutować wszystkie elementy bezpośrednio do płytki, ale brakuje mi umiejętności samodzielnego wlutowania tych małych SMD. Musiałbym zamówić go zmontowany i prawdopodobnie popełniłbym kilka błędów i skończyłbym zamawiając je trzy razy i czekając rok, zanim dotrą.

Gdyby ktoś potrafił zaprojektować płytkę, to fajnie by było, gdyby miała jakiś obwód zabezpieczający baterię i czujnik, który włączyłby ESP, gdyby korba zaczęła się poruszać.

WAŻNY

Czujnik HX711 domyślnie jest ustawiony na 10Hz - jest to dużo za wolne dla pomiaru mocy. Musisz podnieść pin 15 z płyty i podłączyć go do pinu 16. To napędza pin HIGH i włącza tryb 80Hz. To 80Hz, nawiasem mówiąc, ustala taktowanie całej pętli arduino.

Stosowanie

ESP32 jest zaprogramowany do uśpienia po 30s bez podłączonego urządzenia Bluetooth. Aby go ponownie włączyć, musisz nacisnąć przycisk resetowania. Czujniki są również zasilane z cyfrowego pinu, który w trybie uśpienia zmienia się w LOW. Chcąc przetestować czujniki przykładowym kodem z bibliotek należy wbić pin HIGH i poczekać chwilę, zanim czujniki się włączą.

Po zmontowaniu czujniki należy skalibrować, odczytując wartość bez użycia siły, a następnie z obciążeniem (użyłem odważnika 12kg lub 16kg zawieszonego na pedale). Te wartości należy umieścić w kodzie powerCrank.

Korbę najlepiej tarować przed każdą jazdą - nie powinna być w stanie sama się tarować, gdy ktoś pedałuje, ale na pewno nie trzeba żałować i można ją tarować tylko raz na włączenie. Jeśli zauważysz dziwne poziomy mocy, musisz powtórzyć ten proces:

  1. Połóż korbę prosto w dół, aż lampka zacznie migać.
  2. Po kilku sekundach światło pozostanie włączone - wtedy nie dotykaj
  3. Gdy światło zgaśnie, ustawia aktualną siłę wykrytą jako nowe 0.

Jeśli chcesz po prostu użyć korby, bez konsoli, kod znajduje się tutaj na github. Wszystko inne działa tak samo.

Krok 2: Konsola

Konsola
Konsola
Konsola
Konsola
Konsola
Konsola

Obudowa jest wycinana z 3mm akrylu, przyciski są drukowane w 3D, a na LCD znajdują się przekładki wycięte z 5mm akrylu. Jest przyklejony gorącym klejem (dosyć dobrze przylega do akrylu) i jest drukowany w 3D "wspornik" do mocowania PCB do LCD. Piny do LCD są przylutowane od spodu więc nie koliduje z ESP.

ESP jest lutowany do góry nogami, więc port USB pasuje do obudowy

Oddzielna płytka przycisków jest przyklejona gorącym klejem, więc przyciski są uchwycone w swoich otworach, ale nadal wciskają przełączniki. Przyciski są połączone z płytką złączami JST PH 2.0, a kolejność pinów jest łatwa do wywnioskowania ze schematu

Bardzo ważne jest zamontowanie sterownika krokowego w prawidłowej orientacji (potencjometr w pobliżu ESP)

Cała część dla karty SD jest wyłączona, ponieważ nikt jej nie używał w pierwszej wersji. Kod należy zaktualizować o niektóre ustawienia interfejsu użytkownika, takie jak waga rowerzysty i ustawienie trudności.

Konsola montowana jest za pomocą wycinanych laserowo „ramion” i zamków. Małe zęby wbijają się w kierownicę i trzymają konsolę.

Krok 3: Silnik

Silnik
Silnik
Silnik
Silnik
Silnik
Silnik

Silnik utrzymuje się w miejscu pokrętła regulacyjnego za pomocą wspornika wydrukowanego w 3D. Do jego wałka przymocowany jest łącznik - z jednej strony otwór 5mm ze śrubami dociskowymi do mocowania wałka, z drugiej gwint M6 ze śrubami dociskowymi do jego zablokowania. Jeśli chcesz, prawdopodobnie możesz to zrobić w wiertarce z około 10 mm okrągłego materiału. Nie musi to być bardzo precyzyjne, ponieważ silnik nie jest mocowany zbyt ciasno.

W złączkę wkręca się kawałek pręta gwintowanego M6, który naciąga się na mosiężną nakrętkę M6. Obrobiłem go, ale równie łatwo można go wykonać z kawałka mosiądzu za pomocą pilnika. Możesz nawet przyspawać niektóre bity do normalnej nakrętki, aby się nie obracała. Rozwiązaniem może być również nakrętka drukowana w 3D.

Gwint musi być cieńszy niż śruba zapasowa. Jego skok wynosi około 1,3 mm, a dla M6 0,8 mm. Silnik nie ma wystarczającego momentu obrotowego, aby wkręcić śrubę kolby.

Nakrętka musi być dobrze nasmarowana, ponieważ przy wyższych ustawieniach silnik ledwo obraca śrubę

Krok 4: Konfiguracja

Konfiguracja
Konfiguracja
Konfiguracja
Konfiguracja

Aby wgrać kod do ESP32 z Arduino IDE, musisz postępować zgodnie z tym samouczkiem:

Płytka to „WeMos LOLIN32”, ale działa również „moduł deweloperski”

Proponuję używać Visual Studio, ale często może się zepsuć.

Przed pierwszym użyciem

Korbę należy ustawić zgodnie z krokiem „Korba”

Korzystając z aplikacji „nRF Connect” należy sprawdzić adres MAC korby ESP32 i ustawić go w pliku BLE.h.

W wierszu 19 indoorBike.ino musisz ustawić, ile obrotów śruby jest potrzebnych, aby ustawić opór od całkowicie luźnego do maksymalnego. ("Maksimum" jest celowo subiektywne, trudność można dostosować za pomocą tego ustawienia.)

Inteligentny trenażer posiada „wirtualne biegi” do ich prawidłowego ustawienia, należy go skalibrować na liniach 28 i 29. Należy pedałować ze stałą kadencją na zadanym ustawieniu oporu, następnie odczytać moc i ustawić ją w pliku. Powtórz to ponownie z innym ustawieniem.

Skrajny lewy przycisk przełącza z trybu ERG (opór bezwzględny) do trybu symulacji (wirtualne biegi). Tryb symulacji bez połączenia z komputerem nic nie robi, ponieważ nie ma danych symulacji.

Linia 36. ustawia wirtualne biegi - liczbę i przełożenia. Oblicza się je, dzieląc liczbę zębów w przednim biegu przez liczbę zębów w tylnym biegu.

W wierszu 12. wpisujesz wagę rowerzysty i roweru (w [niutonach] masa razy przyspieszenie grawitacyjne!)

Cała część fizyki jest chyba zbyt skomplikowana i nawet nie pamiętam, co dokładnie robi, ale obliczam wymagany moment do podciągnięcia rowerzysty pod górę lub coś w tym stylu (dlatego kalibracja).

Parametry te są bardzo subiektywne, trzeba je ustawić po kilku jazdach, aby działały poprawnie.

Port COM debugowania wysyła bezpośrednie dane binarne otrzymane przez bluetooth w cudzysłowie (' ') oraz dane symulacji.

Konfigurator

Ponieważ konfiguracja rzekomo realistycznej fizyki okazała się ogromnym kłopotem, aby wyglądała realistycznie, stworzyłem konfigurator GUI, który powinien umożliwiać użytkownikom graficzne zdefiniowanie funkcji, która konwertuje z poziomu wzgórza na absolutny poziom oporu. Nie jest jeszcze do końca skończony i nie miałem okazji go przetestować, ale w nadchodzącym miesiącu będę przerabiał inny rower, więc wtedy go doszlifuję.

W zakładce „Gears” możesz ustawić przełożenie każdego biegu, przesuwając suwaki. Następnie musisz skopiować fragment kodu, aby zastąpić zdefiniowane koła zębate w kodzie.

W zakładce „Ocena” otrzymujesz wykres funkcji liniowej (tak, okazuje się, że najbardziej znienawidzony przedmiot w matematyce jest rzeczywiście przydatny), która przyjmuje ocenę (oś pionowa) i wyświetla bezwzględne kroki oporu (oś pozioma). Dla zainteresowanych zajmę się matematyką nieco później.

Użytkownik może zdefiniować tę funkcję za pomocą dwóch leżących na niej punktów. Po prawej stronie znajduje się miejsce do zmiany aktualnego biegu. Wybrany bieg, jak można sobie wyobrazić, zmienia sposób, w jaki wzniesienia przekładają się na opór - na niższych biegach łatwiej jest pedałować pod górę. Przesuwanie suwaka zmienia drugi współczynnik, który wpływa na to, jak wybrany bieg zmienia funkcję. Najłatwiej pobawić się nim przez chwilę, aby zobaczyć, jak się zachowuje. Być może trzeba będzie również wypróbować kilka różnych ustawień, aby znaleźć najlepsze dla siebie.

Został napisany w Pythonie 3 i powinien działać z domyślnymi bibliotekami. Aby z niego skorzystać należy odkomentować linie zaraz po "odkomentuj te linie aby użyć konfiguratora". Jak powiedziałem, nie był testowany, więc mogą być jakieś błędy, ale jeśli coś się pojawi, napisz komentarz lub otwórz problem, abym mógł to poprawić.

Matematyka (i fizyka)

Jedyny sposób, w jaki kontroler może sprawić, że poczujesz się, jakbyś jechał pod górę, to przekręcenie śruby oporowej. Musimy przekonwertować ocenę na liczbę obrotów. Aby ułatwić ustawienie, cały zakres od całkowitego luzu do niemożności pokręcenia korbą jest podzielony na 40 kroków, tak samo jak w trybie ERG, ale tym razem używa liczb rzeczywistych zamiast liczb całkowitych. Odbywa się to za pomocą prostej funkcji mapy - możesz to sprawdzić w kodzie. Teraz jesteśmy o krok wyżej – zamiast zajmować się obrotem śruby, mamy do czynienia z wyimaginowanymi krokami.

Jak to właściwie działa, kiedy jedzie się rowerem pod górę (zakładając stałą prędkość)? Oczywiście musi być jakaś siła pchająca cię w górę, w przeciwnym razie stoczysz się w dół. Siła ta, jak mówi nam pierwsza zasada ruchu, musi być równa wielkości, ale przeciwna do siły ciągnącej cię w dół, abyś był w ruchu jednostajnym. Wynika to z tarcia między kołem a podłożem i jeśli narysujesz wykres tych sił, musi on być równy ciężarowi roweru i rowerzyście pomnożonemu przez przewyższenie:

F=Fg*G

Co sprawia, że koło przykłada tę siłę? Ponieważ mamy do czynienia z kołami zębatymi i kołami, łatwiej jest myśleć w kategoriach momentu obrotowego, czyli po prostu siły pomnożonej przez promień:

t=F*R

Ponieważ w grę wchodzą koła zębate, przekazujesz moment obrotowy na korbę, która ciągnie łańcuch i obraca koło. Moment obrotowy potrzebny do obrócenia koła jest mnożony przez przełożenie:

tp=tw*gr

i wracając z wzoru na moment obrotowy otrzymujemy siłę potrzebną do obrócenia pedału

Fp=tp/r

To jest coś, co możemy zmierzyć za pomocą miernika mocy w korbie. Ponieważ tarcie dynamiczne jest liniowo powiązane z siłą i ponieważ ten konkretny rower wykorzystuje sprężyny do przekazywania tej siły, jest ono liniowe względem ruchu śruby.

Moc to siła razy prędkość (przy założeniu tego samego kierunku wektorów)

P=F*V

a prędkość liniowa pedału jest związana z prędkością kątową:

V=ω*r

i tak możemy obliczyć siłę potrzebną do obrócenia pedałów na zadanym poziomie oporu. Ponieważ wszystko jest liniowo powiązane, możemy użyć do tego proporcji.

To było zasadniczo to, czego oprogramowanie potrzebowało do obliczenia podczas kalibracji i użycia okrężnej drogi, aby uzyskać nam skomplikowany kompozyt, ale funkcję liniową odnoszącą nachylenie do oporu. Wszystko napisałem na papierze, obliczyłem końcowe równanie i wszystkie stałe stały się trzema współczynnikami.

Jest to technicznie funkcja 3D reprezentująca płaszczyznę (chyba), która przyjmuje jako argumenty nachylenie i przełożenie, a te trzy współczynniki są powiązane z tymi potrzebnymi do zdefiniowania płaszczyzny, ale ponieważ koła zębate są liczbami dyskretnymi, było to łatwiejsze aby uczynić go parametrem zamiast zajmować się projekcjami i tak dalej. Współczynniki 1 i 3 można zdefiniować za pomocą jednej linii, a (-1)* współczynnik 2 to współrzędna X punktu, w którym linia „obraca się” podczas zmiany biegów.

W tej wizualizacji argumenty są reprezentowane przez pionową linię, a wartości przez poziomą i wiem, że może to być denerwujące, ale dla mnie było to bardziej intuicyjne i lepiej pasowało do GUI. To jest prawdopodobnie powód, dla którego ekonomiści rysują swoje wykresy w ten sposób.

Krok 5: Zakończ

Teraz potrzebujesz kilku aplikacji do jazdy na nowym trenażerze (co pozwoliło Ci zaoszczędzić około 900 USD:)). Oto moje opinie na temat niektórych z nich.

  • RGT Cycling - moim zdaniem najlepszy - ma całkowicie darmową opcję, ale ma trochę kilka torów. Najlepiej radzi sobie z częścią związaną z połączeniem, ponieważ telefon łączy się przez bluetooth, a komputer wyświetla trasę. Wykorzystuje realistyczne wideo z rowerzystą AR
  • Rouvy - dużo utworów, tylko płatna subskrypcja, z jakiegoś powodu aplikacja na PC nie działa z tym, musisz użyć telefonu. Mogą wystąpić problemy, gdy twój laptop używa tej samej karty do bluetooth i WiFi, często opóźnia się i nie chce się ładować
  • Zwift - gra animowana, tylko płatna, całkiem dobrze współpracuje z trainerem, ale interfejs użytkownika jest dość prymitywny - launcher używa przeglądarki Internet Explorer do wyświetlania menu.

Jeśli podobała Ci się kompilacja (lub nie), proszę powiedz mi w komentarzach, a jeśli masz jakieś pytania, możesz zadać tutaj lub przesłać zgłoszenie na github. Chętnie wszystko wyjaśnię, bo jest to dość skomplikowane.

Zalecana: