Inhaltsverzeichnis:
2025 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2025-01-13 06:56
Einführung
Ein bestimmtes bekanntes US-amerikanisches Fitnessunternehmen (Wahoo) hat kürzlich eine großartige Indoor-Trainingshilfe herausgebracht, die die Vorderseite des Fahrrads auf dem Turbotrainer entsprechend der simulierten Steigung, die der Benutzer fährt, anhebt und senkt (der Kickr Climb).
Sieht toll aus, aber leider ist dies nicht für uns alle verfügbar, da Sie 1) einen erstklassigen Wahoo-Trainer und 2) 500 £ Bargeld benötigen, um dies zu Ihrem zu machen.
Ich habe mir ein Schlüsselbein gebrochen (niemals einen Rennradfahrer auf ein Mountainbike setzen), also hatte ich mehr Kilometer auf dem Trainer und mehr Zeit zum Basteln und dachte, dies könnte ein lustiges Projekt werden.
Die kommerzielle Einheit simuliert -5% bis +20%, also wollte ich dem nahe kommen, aber mit 10% des Budgets!
Dies wurde um meinen Tacx Neo herum entwickelt, aber jeder Trainer, der seine Leistungs- und Geschwindigkeitsdaten über ANT+ oder BLE überträgt, könnte zum Laufen gebracht werden (glaube ich!).
Da der Radstand an meinem Rennrad genau 1000 mm misst, müsste ich die Gabeln um 200 mm anheben, um 20% zu simulieren (siehe Bild), damit ein 200-mm-Linearaktuator ausreichen würde. Es ist unwahrscheinlich, dass das Gewicht von Fahrrad + Fahrer 100 kg überschreitet und da dies auf die Achsen verteilt ist und sich die meisten auf der Rückseite befinden, heben 750 N 75 kg und sollten in Ordnung sein. Schnellere Aktuatoren sind für mehr Geld erhältlich, aber dieser kostet mich etwa 20 £ und schafft 10 mm / s. Auch Stellantriebe mit Potentiometern, die als einfache Servos verwendet werden können, sind 2 bis 3 Mal teurer.
Lieferungen
3D-Druck (PLA oder ABSetc) des Steckachsenadapterteils:
100 mm 3/4 Zoll 10 SWG Aluminiumrohrschaft (für einen Steckachsrahmen)
80mm 6mm Edelstahl Stangenmaterial
3D-Druck (PLA oder ABSetc) des Schuhs für den Linearaktuatorteil:
3D-Druck des Gehäuses für die H-Brücke
3D-Druck des Gehäuses für Arduino (Version 1 mit Tastatur) https://www.thingiverse.com/thing:3984911 (Version 2 wie abgebildet (https://www.thingiverse.com/thing:3995976)
Lasergeschnittenes Stück aus 3 mm klarem Acryl 32 x 38 mm, damit Sie nicht über die gesamte Elektronik schwitzen (hatte das, nicht ideal).
Einige Entlüftungsblöcke (angepasst, um die Beläge drin zu lassen), um zu verhindern, dass Sie die Bremssattelkolben in Ihrer Begeisterung versehentlich aus Ihren Shimano-Scheibenbremsen drücken
Linearaktuator 750N 200mm Hub zB Al03 Mini Linearaktuatoren von
L298N H-Brücke (wie:
Arduino Nano IoT 33 www.rapidonline.com bestellen 73-4863
2 Tasten Folientastatur zB
IIC I2C Logic Level Converter Bi-Directional Module 5V to 3.3V Für Arduino zB
12V 3A DC Netzteil - die für LED Beleuchtung funktionieren super!
NPE-KABEL Ant+ zu BLE-Brücke
3D-druckbarer Clip für die CABLE-Brücke
1,3 OLED-LCD-Anzeigemodul mit IIC I2C-Schnittstelle 128x32 3,3V
Schritt 1: Einige Mathematik
Wir müssen die simulierte Steigung berechnen. Ich hatte gehofft, dass der Trainer diese Daten zusammen mit Geschwindigkeit, Leistung, Trittfrequenz usw. ankündigt, aber der Trainer stellt einfach den Widerstand ein, um die Leistungsabgabe entsprechend der Software auf dem Tablet, Computer usw., die zur Steuerung verwendet wird, aufrechtzuerhalten. Ich hatte keine Möglichkeit, die "simulierte Note" einfach aus der Software zu erfassen, also musste ich rückwärts arbeiten …
Die auf Rad und Fahrer wirkenden Kräfte sind eine Kombination aus Widerstandsverlusten und der Kraft, die zum Bergauffahren benötigt wird. Der Trainer meldet Geschwindigkeit und Kraft. Wenn wir die Widerstandsverluste bei einer bestimmten Geschwindigkeit finden können, wird die verbleibende Leistung verwendet, um den Hügel zu erklimmen. Die Steigleistung hängt vom Gewicht des Bikes und Fahrers und der Steiggeschwindigkeit ab und so können wir uns wieder der Steigung widmen.
Zuerst habe ich den erstaunlichen https://bikecalculator.com verwendet, um einige Datenpunkte für den Widerstandsleistungsverlust bei typischen Geschwindigkeiten zu finden. Dann habe ich den Geschwindigkeitsbereich transformiert, um eine lineare Beziehung zu erzeugen, und die am besten passende Linie gefunden. Mit der Liniengleichung können wir nun die Leistung (W) aus dem Widerstand = (0,0102*(Speedkmh^2,8))+9,428 berechnen.
Nehmen Sie die Kraft aus dem Widerstand aus der gemessenen Kraft, um die Kraft des "Kletterns" zu erhalten.
Wir kennen die Aufstiegsgeschwindigkeit in km/h und rechnen diese in die SI-Einheit m/s um (durch 3,6 dividieren).
Die Steigung ergibt sich aus: Steigung (%) =((PowerClimbing/(WeightKg*g))/Speed)*100
wobei Beschleunigung des freien Falls g = 9,8 m/s/s oder 9,8 N/kg
Schritt 2: Holen Sie sich einige Daten
Die Steigungsberechnung erfordert Geschwindigkeit und Kraft. Ich habe ein Arduino Nano 33 IoT verwendet, um mich über BLE mit dem Trainer zu verbinden, um dies zu empfangen. Ich bin anfangs sehr stecken geblieben, da die aktuelle Version v.1.1.2 der nativen ArduinoBLE-Bibliothek für dieses Modul keine Authentifizierung in irgendeiner Form verarbeitet, was bedeutet, dass die meisten (?) kommerziellen BLE-Sensoren nicht damit koppeln.
Die Lösung bestand darin, eine NPE-Kabel ANT+-zu-BLE-Brücke (https://npe-inc.com/cableinfo/) zu verwenden, die die integrierte BLE des Trainers für die Kommunikation über die Trainings-App freihält und keine Authentifizierung auf der BLE erfordert Seite.
Die BLE-Leistungskennlinie ist ziemlich einfach, da die Leistung in Watt im zweiten und dritten Byte der übertragenen Daten als 16-Bit-Integer enthalten ist (Little Endian, dh niedrigstwertiges Oktett zuerst). Ich habe einen gleitenden Durchschnittsfilter angewendet, um eine durchschnittliche Leistung von 3 Sekunden zu erzielen - genau wie mein Fahrradcomputer es zeigt - da dies weniger unregelmäßig ist.
if (powerCharacteristic.valueUpdated()) {
// Definiere ein Array für den Wert uint8_t holdpowervalues[6] = {0, 0, 0, 0, 0, 0}; // Wert in Array lesen powerCharacteristic.readValue (holdpowervalues, 6); // Leistung wird als Watt an Position 2 und 3 zurückgegeben (Loc 0 und 1 sind 8-Bit-Flags) byte rawpowerValue2 = holdpowervalues[2]; // Leistung Least-Sig-Byte im HEX-Byte rawpowerValue3 = holdpowervalues[3]; // Leistung am meisten Sig-Byte in HEX long rawpowerTotal = (rawpowerValue2 + (rawpowerValue3 * 256)); // Verwenden des Filters für gleitenden Durchschnitt, um '3s power' zu geben powerTrainer = movingAverageFilter_power.process(rawpowerTotal);
Die BLE-Geschwindigkeitskennlinie (Cycling Speed and Cadence) ist eines der Dinge, die Sie fragen, was in aller Welt die SIG geraucht haben, als sie die Spezifikation geschrieben haben.
Die Characteristic gibt ein 16-Byte-Array zurück, das weder Geschwindigkeit noch Trittfrequenz enthält. Stattdessen erhalten Sie Radumdrehungen und Kurbelumdrehungen (Gesamtwerte) und die Zeit seit dem letzten Ereignis in 1024stel Sekunden. Also mehr Mathe. Oh, und die Bytes sind nicht immer vorhanden, also gibt es am Anfang ein Flag-Byte. Oh, und die Bytes sind Little-Endian-HEX, also müssen Sie rückwärts lesen, indem Sie das zweite Byte mit 256, das dritte mit 65536 usw. multiplizieren und dann addieren. Um die Geschwindigkeit zu ermitteln, müssen Sie einen Standardradumfang eines Fahrrads annehmen, um die Entfernung zu kennen….
if (speedCharacteristic.valueUpdated()) {
// Dieser Wert benötigt ein 16-Byte-Array uint8_t holdvalues[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // Aber ich lese nur die ersten 7 speedCharacteristic.readValue(holdvalues, 7); Byte rawValue0 = Holdvalues[0]; // binäre Flags 8 Bit int Byte rawValue1 = holdvalues[1]; // Umdrehungen niederwertigstes Byte im HEX-Byte rawValue2 = holdvalues[2]; // Umdrehungen das nächsthöhere Byte im HEX-Byte rawValue3 = holdvalues[3]; // Umdrehungen des nächsthöheren Bytes im HEX-Byte rawValue4 = holdvalues[4]; // dreht höchstwertiges Byte in HEX-Byte rawValue5 = holdvalues[5]; // Zeit seit letztem Radereignis kleinstes Sig-Byte Byte rawValue6 = holdvalues[6]; // Zeit seit letztem Radereignis am meisten Sig-Byte if (firstData) { // Hole die kumulativen Radumdrehungen als Little-Endian-Hex in Lok 2, 3 und 4 (niedrigstwertiges Oktett zuerst) WheelRevs1 = (rawValue1 + (rawValue2 * 256) + (rawValue3 * 65536) + (rawValue4 * 16777216)); // Abrufen der Zeit seit dem letzten Radereignis in 1024stel Sekunden Time_1 = (rawValue5 + (rawValue6 * 256)); firstData = false; aufrechtzuerhalten. Else { // zweiten Datensatz abrufen long WheelRevsTemp = (rawValue1 + (rawValue2 * 256) + (rawValue3 * 65536) + (rawValue4 * 16777216)); langes TimeTemp = (rawValue5 + (rawValue6 * 256)); if (WheelRevsTemp > WheelRevs1) {// sicherstellen, dass sich das Fahrrad bewegt WheelRevs2 = WheelRevsTemp; Zeit_2 = ZeitTemp; firstData = true;}
// Distanzunterschied in cm ermitteln und in km umrechnen float distanceTravelled = ((WheelRevs2 - WheelRevs1) * wheelCircCM);
float kmTravelled = DistanceTravelled / 1000000;
// Finde die Zeit in 1024stel Sekunden und wandle in Stunden um
float timeDifference = (Time_2 - Time_1); float timeSecs = timeDifference / 1024; float timeHrs = timeSecs / 3600;
// Geschwindigkeit kmh. finden
speedKMH = (kmTravelled / timeHrs);
Die Arduino-Skizze wird auf GitHub (https://github.com/mockendon/opengradesim) gehostet.
Schritt 3: Hardware 1 der Linearaktuator
Die Steckachse meines Scheibenbrems-Rennrads gibt eine 19,2-mm-Achse an, um die 12-mm-Steckachse mit 100 mm zwischen den Gabeln freizugeben.
Stock 3/4 Zoll 10swg Aluminiumrohr passt perfekt und ein netter Kerl namens Dave wird bei ebay (https://www.ebay.co.uk/str/aluminiumonline) geliefert und für mich für ein paar Pfund auf Länge geschnitten.
Der Aktuator hat einen 20-mm-Stab mit einem 6-mm-Loch, so dass das 3D-gedruckte Teil das Aluminiumrohr mit einem 6-mm-Stahlstab verbindet und da die Kräfte 90% Kompression betragen, ist etwas PLA / ABS der Herausforderung gewachsen.
Wenn Sie ein Standard-Schnellverschluss-Setup ausführen, würde so etwas (https://www.amazon.co.uk/Sharplace-Quick-Release-Conversion-Adapter/dp/B079DCY344) die Neugestaltung dieser Komponente vermeiden.
Der Stiefel ist so konzipiert, dass er in den mit meinem Tacx-Trainer gelieferten Erhöhungsblock passt, würde aber wahrscheinlich in viele ähnliche Erhöhungen passen, oder Sie können die TinkerCad-Datei einfach nach Ihren Anforderungen bearbeiten.
Schritt 4: Hardware 2 - die H-Brücke
Diese online weit verbreiteten L298N H-Brückenplatinen verfügen über einen eingebauten 5-V-Regler, der sich hervorragend für die Stromversorgung des Arduino über die für den Linearantrieb erforderliche 12-V-Stromversorgung eignet. Leider ist die Arduino Nano IoT-Platine eine 3,3-V-Signalisierung, daher ist ein logischer Pegelwandler (oder ein Optoisolator, da die Signale nur unidirektional sind) erforderlich.
Das Gehäuse ist so konzipiert, dass es die üblicherweise in LED-Beleuchtungsanwendungen verwendeten Stromanschlüsse aufnimmt. Ich habe ein USB-Verlängerungskabel abgeschlachtet, um das einfache Anschließen / Trennen der Arduino-Haupteinheit zu ermöglichen, und während ich sicher war, die Stromleitungen für die Stromversorgung und die Datenleitungen für die 3,3-V-Signalisierung zu verwenden, würde ich ehrlich davon abraten, wie ich es tun würde hassen Sie es, wenn jemand seine USB-Anschlüsse oder Peripheriegeräte fritiert, indem er sie versehentlich einsteckt!
Schritt 5: Hardware 3 die Steuerelektronik (Arduino)
Das Gehäuse für den Arduino OLED und den Logikpegelwandler verfügt auf der Rückseite über eine standardmäßige 1/2-Drehung im Garmin-Stil, um eine sichere Montage am Fahrrad zu ermöglichen. Eine "out front" Halterung ermöglicht es, das Gerät nach oben oder unten zu neigen, um die Position des Beschleunigungsmessers auf "Null" zu stellen, oder eine Codezeile nur für die automatische Nullstellung beim Start wäre einfach hinzuzufügen.
Das Gehäuse hat einen Platz für eine Folientastatur - hier wird das kombinierte Fahrer- und Fahrradgewicht eingestellt. Sie können dies einfach programmgesteuert festlegen, insbesondere wenn Sie einen Trainer mit niemandem teilen.
Es könnte schön sein, einen 'manuellen' Modus zu implementieren. Vielleicht könnte das Drücken beider Tasten einen manuellen Modus einleiten und dann könnten die Tasten die Steigung erhöhen / verringern. Ich füge das der To-Do-Liste hinzu!
Die STL-Datei des Falls ist wieder auf Thingiverse verfügbar (Link siehe Abschnitt Zubehör).
Die Arduino-Skizze wird auf GitHub (https://github.com/mockendon/opengradesim) gehostet.
Sie können hier einen hübschen kleinen Clip für Ihre CABLE-Brücke drucken
Schritt 6: 'Die hinteren Ausfallenden'
Viele Leute haben das Problem des Reibens des hinteren Ausfallendes angesprochen, wenn sich das Fahrrad bewegt. Einige Trainer haben eine Achse, die sich bewegt (wie der Kickr), aber viele nicht.
Derzeit ist meine beste Lösung für mich, einige Standard-61800-2RS-Rillenlager (jeweils etwa 2 £) an den Schnellspannadaptern zu montieren und dann die Steckachsen-Ausfallenden an diesen (siehe Bilder) mit einem übergroßen QR-Spieß zu montieren
Die Lager benötigen eine dünne Unterlegscheibe zB M12 16mm 0.3mm zwischen Adapter und Lager.
Sie passen perfekt und drehen sich unabhängig vom Trainer mit dem Fahrrad und dem Spieß.
Im Moment ändert sich dadurch der Versatz auf der Antriebsseite um einige mm, sodass Sie neu indizieren müssen
Ich entwerfe kundenspezifische Teile (siehe PDF-Plan), um sie zu bearbeiten (auf der Drehbank meines zukünftigen Schwagers, wenn er eine Stunde Zeit hat, um zu helfen!). Diese sind noch nicht getestet!!! Aber das Schleifen von 1 mm von der Innenfläche des QR-Adapters auf der Antriebsseite ist eine schnelle Lösung ohne Spezialwerkzeug;)