Mục lục:
2025 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2025-01-13 06:58
Giới thiệu
Một công ty thể hình nổi tiếng của Hoa Kỳ (Wahoo) gần đây đã đưa ra một thiết bị hỗ trợ tập luyện trong nhà tuyệt vời giúp nâng và hạ thấp phần trước của xe đạp trên máy tập tăng áp theo cấp độ mô phỏng của ngọn đồi mà người dùng đang đi (Kickr Climb).
Trông tuyệt vời nhưng thật đáng buồn là điều này không có sẵn cho tất cả chúng tôi vì bạn sẽ cần 1) một huấn luyện viên Wahoo hàng đầu và 2) 500 bảng tiền mặt để biến cái này thành của bạn.
Tôi bị gãy xương đòn (không bao giờ đặt người đi xe đạp đường trường lên xe đạp địa hình) vì vậy tôi có nhiều dặm hơn trên huấn luyện viên và nhiều thời gian hơn để mày mò và nghĩ rằng đây có thể là một dự án thú vị.
Đơn vị thương mại mô phỏng -5% đến + 20%, vì vậy tôi muốn đạt gần mức đó nhưng trên 10% ngân sách!
Điều này được thiết kế xung quanh Tacx Neo của tôi nhưng bất kỳ huấn luyện viên nào phát dữ liệu sức mạnh và tốc độ của nó qua ANT + hoặc BLE đều có thể hoạt động (tôi nghĩ vậy!).
Vì đế bánh xe trên chiếc xe đạp đường trường của tôi có kích thước chính xác là 1000mm, nên tôi cần nâng phuộc lên 200mm để mô phỏng 20% (xem hình), vì vậy một bộ truyền động tuyến tính 200mm sẽ làm được. Trọng lượng của xe đạp + người lái không chắc vượt quá 100kg và vì điều này được phân bổ giữa các trục và hầu hết ở phía sau 750N sẽ nâng 75kg và sẽ ổn. Bộ truyền động nhanh hơn có sẵn với nhiều tiền hơn nhưng cái này có giá khoảng 20 bảng Anh và quản lý 10mm / giây. Các thiết bị truyền động có chiết áp có thể được sử dụng như các servo đơn giản cũng đắt hơn từ 2 đến 3 lần.
Quân nhu
Bản in 3D (PLA hoặc ABSetc) của phần bộ điều hợp qua trục:
100mm của ống nhôm 3/4 inch 10 swg (đối với khung qua trục)
80mm kho thanh thép không gỉ 6mm
Bản in 3D (PLA hoặc ABSetc) của giày cho bộ phận truyền động tuyến tính:
Bản in 3D của Vỏ cho cầu chữ H
Bản in 3D của Vỏ cho Arduino (Phiên bản 1 có bàn phím) https://www.thingiverse.com/thing:3984911 (Phiên bản 2 như hình (https://www.thingiverse.com/thing:3995976)
Cắt bằng laser mảnh acrylic trong suốt 3mm 32 x 38mm để giúp bạn không bị đổ mồ hôi trên khắp các thiết bị điện tử (điều đó không lý tưởng lắm).
Một số khối chảy máu (được điều chỉnh để để lại các miếng đệm) để tránh bạn vô tình đẩy các piston kẹp ra khỏi phanh đĩa Shimano của bạn trong sự nhiệt tình của bạn
Bộ truyền động tuyến tính 750N hành trình 200mm, ví dụ Bộ truyền động tuyến tính nhỏ Al03 từ
Cầu L298N H (như:
Arduino Nano IoT 33 www.rapidonline.com đặt hàng 73-4863
Bàn phím màng 2 phím ví dụ
IIC I2C Bộ chuyển đổi mức logic Mô-đun hai chiều 5V thành 3.3V cho Arduino, ví dụ:
Nguồn điện DC 12V 3A - nguồn cung cấp cho hệ thống chiếu sáng LED hoạt động hiệu quả!
NPE CÁP Ant + tới cầu BLE
Kẹp có thể in 3D cho cầu CÁP
Mô-đun màn hình OLED 1.3 với giao diện IIC I2C 128x32 3.3V
Bước 1: Một số môn Toán
Chúng ta cần tính toán độ nghiêng được mô phỏng. Tôi đã hy vọng rằng người huấn luyện sẽ quảng cáo dữ liệu này cùng với tốc độ, công suất, nhịp, v.v. tuy nhiên, người huấn luyện chỉ cần đặt kháng để duy trì công suất phát theo phần mềm trên máy tính bảng, máy tính, v.v. đang được sử dụng để điều khiển nó. Tôi không có cách nào để dễ dàng nắm bắt 'điểm mô phỏng' từ phần mềm, vì vậy tôi sẽ phải làm việc ngược lại…
Các lực tác động lên xe đạp và người lái là sự kết hợp của tổn thất điện trở và công suất cần thiết để leo lên đồi. Người huấn luyện báo cáo tốc độ và sức mạnh. Nếu chúng ta có thể tìm thấy tổn thất điện trở ở một tốc độ nhất định thì năng lượng còn lại đang được sử dụng để leo lên đồi. Sức mạnh để leo lên phụ thuộc vào trọng lượng của xe đạp và người lái và tốc độ đi lên và do đó chúng ta có thể quay trở lại độ nghiêng.
Đầu tiên, tôi sử dụng https://bikecalculator.com tuyệt vời để tìm một số điểm dữ liệu về tổn thất điện trở ở tốc độ điển hình. Sau đó, tôi biến đổi miền tốc độ để tạo ra mối quan hệ tuyến tính và tìm ra đường phù hợp nhất. Lấy phương trình của dòng, bây giờ chúng ta có thể tính toán công suất (W) từ điện trở = (0,0102 * (Tốc độ kmh ^ 2,8)) + 9,428.
Lấy công suất từ điện trở từ công suất đo được để cung cấp cho sức mạnh 'leo núi'.
Chúng ta biết tốc độ đi lên tính bằng km / giờ và chuyển nó sang đơn vị SI là m / s (chia cho 3,6).
Độ nghiêng được tìm thấy từ: Incline (%) = ((PowerClimbing / (WeightKg * g)) / Speed) * 100
tại đó gia tốc rơi tự do g = 9,8m / s / s hoặc 9,8 N / kg
Bước 2: Nhận một số dữ liệu
Việc tính toán độ nghiêng yêu cầu tốc độ và sức mạnh. Tôi đã sử dụng Arduino Nano 33 IoT để kết nối với trình đào tạo thông qua BLE để nhận được điều này. Ban đầu tôi gặp rất nhiều khó khăn vì phiên bản v.1.1.2 hiện tại của thư viện ArduinoBLE gốc cho mô-đun này không xử lý xác thực dưới bất kỳ hình thức nào, có nghĩa là hầu hết (?) Cảm biến BLE thương mại sẽ không ghép nối với nó.
Giải pháp là sử dụng cầu nối NPE Cable ANT + to BLE (https://npe-inc.com/cableinfo/) giữ cho BLE tích hợp sẵn của trình đào tạo miễn phí để ứng dụng đào tạo giao tiếp và không yêu cầu xác thực trên BLE bên.
Đặc tính công suất BLE khá đơn giản vì công suất tính bằng watt được chứa trong byte thứ hai và thứ ba của dữ liệu được truyền dưới dạng số nguyên 16 bit (giá trị cuối nhỏ tức là octet đầu tiên có ý nghĩa nhỏ nhất). Tôi đã áp dụng bộ lọc trung bình động để cung cấp công suất trung bình 3 giây - giống như máy tính xe đạp của tôi hiển thị - vì điều này ít thất thường hơn.
if (powerCharacteristic.valueUpdated ()) {
// Định nghĩa mảng cho giá trị uint8_t holdpowervalues [6] = {0, 0, 0, 0, 0, 0}; // Đọc giá trị vào mảng powerCharacteristic.readValue (holdpowervalues, 6); // Công suất được trả về dưới dạng watt ở vị trí 2 và 3 (loc 0 và 1 là cờ 8 bit) byte rawpowerValue2 = holdpowervalues [2]; // cấp nguồn cho byte sig ít nhất trong byte HEX rawpowerValue3 = holdpowervalues [3]; // cấp nguồn cho hầu hết byte sig trong HEX long rawpowerTotal = (rawpowerValue2 + (rawpowerValue3 * 256)); // Sử dụng bộ lọc trung bình động để cung cấp 'sức mạnh 3s' powerTrainer = movingAverageFilter_power.process (rawpowerTotal);
Đặc tính tốc độ BLE (Tốc độ đi xe đạp và Cadence) là một trong những thứ khiến bạn tự hỏi cái quái gì mà SIG hút khi họ viết thông số kỹ thuật.
Đặc tính trả về một mảng 16 byte không chứa tốc độ cũng như nhịp. Thay vào đó, bạn nhận được số vòng quay của bánh xe và số vòng quay của trục quay (tổng số) và thời gian kể từ dữ liệu sự kiện cuối cùng trong 1024 phần giây. Vì vậy, nhiều toán học hơn sau đó. Ồ, và các byte không phải lúc nào cũng hiện diện nên có một byte cờ ở đầu. Ồ, và các byte là HEX nhỏ nên bạn cần đọc ngược nhân byte thứ hai với 256, thứ ba với 65536, v.v. sau đó cộng chúng lại với nhau. Để tìm tốc độ, bạn cần giả sử một chu vi bánh xe đạp tiêu chuẩn để biết khoảng cách….
if (speedCharacteristic.valueUpdated ()) {
// Giá trị này cần một mảng 16 byte uint8_t holdvalues [16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // Nhưng tôi sẽ chỉ đọc 7 speedCharacteristic.readValue (holdvalues, 7) đầu tiên; byte rawValue0 = holdvalues [0]; // cờ nhị phân 8 bit int byte rawValue1 = holdvalues [1]; // số vòng quay byte ít quan trọng nhất trong byte HEX rawValue2 = holdvalues [2]; // vòng quay byte quan trọng nhất tiếp theo trong byte HEX rawValue3 = holdvalues [3]; // vòng quay byte quan trọng nhất tiếp theo trong byte HEX rawValue4 = holdvalues [4]; // vòng quay byte quan trọng nhất trong byte HEX rawValue5 = holdvalues [5]; // thời gian kể từ sự kiện bánh xe cuối cùng byte sig byte ít nhất rawValue6 = holdvalues [6]; // thời gian kể từ sự kiện bánh xe cuối cùng nhiều nhất sig byte if (firstData) {// Nhận số vòng quay bánh xe tích lũy dưới dạng hex nhỏ nhất trong loc 2, 3 và 4 (octet đầu tiên ít quan trọng nhất) WheelRevs1 = (rawValue1 + (rawValue2 * 256) + (rawValue3 * 65536) + (rawValue4 * 16777216)); // Lấy thời gian kể từ sự kiện bánh xe cuối cùng trong 1024 giây của giây Time_1 = (rawValue5 + (rawValue6 * 256)); firstData = false; } else {// Lấy tập dữ liệu thứ hai dài WheelRevsTemp = (rawValue1 + (rawValue2 * 256) + (rawValue3 * 65536) + (rawValue4 * 16777216)); long TimeTemp = (rawValue5 + (rawValue6 * 256)); if (WheelRevsTemp> WheelRevs1) {// đảm bảo xe đạp đang chuyển động WheelRevs2 = WheelRevsTemp; Time_2 = TimeTemp; firstData = true;}
// Tìm chênh lệch khoảng cách theo cm và chuyển đổi thành km float distanceTravelled = ((WheelRevs2 - WheelRevs1) * wheelCircCM);
float kmTravelled = distanceTravelled / 1000000;
// Tìm thời gian trong 1024 phần giây và chuyển đổi thành giờ
float timeDifference = (Time_2 - Time_1); float timeSecs = timeDifference / 1024; float timeHrs = timeSecs / 3600;
// Tìm tốc độ kmh
speedKMH = (kmTravelled / timeHrs);
Bản phác thảo Arduino được lưu trữ tại GitHub (https://github.com/mockendon/opengradesim).
Bước 3: Phần cứng 1 Bộ truyền động tuyến tính
Trục xuyên trên xe đạp phanh đĩa của tôi chỉ định trục 19,2mm để xóa trục qua 12mm với 100mm giữa các phuộc.
Ống nhôm 3/4 inch 10swg được cung cấp và cắt theo chiều dài cho tôi với giá vài pound.
Bộ truyền động có thanh 20mm với lỗ 6mm nên phần in 3D liên kết ống nhôm với thanh thép 6mm và vì lực nén là 90% nên một số PLA / ABS có thể đáp ứng được yêu cầu.
Nếu bạn chạy thiết lập bản phát hành nhanh tiêu chuẩn thì những thứ như thế này (https://www.amazon.co.uk/Sharplace-Quick-Release-Conversion-Adapter/dp/B079DCY344) sẽ tránh phải thiết kế lại thành phần này.
Khởi động được thiết kế để phù hợp với khối raiser được cung cấp cùng với huấn luyện viên Tacx của tôi nhưng có thể sẽ phù hợp với nhiều loại raisers tương tự hoặc bạn có thể chỉ cần chỉnh sửa tệp TinkerCad cho phù hợp với yêu cầu của mình.
Bước 4: Phần cứng 2 - H-Bridge
Bảng mạch cầu L298N H rất phổ biến trên mạng này có bộ điều chỉnh 5V được tích hợp sẵn, rất tốt để cấp nguồn cho Arduino từ nguồn điện 12V cần thiết cho bộ truyền động tuyến tính. Thật không may, bo mạch Arduino Nano IoT là tín hiệu 3.3V do đó cần có bộ chuyển đổi mức logic (hoặc bộ quang cách ly vì tín hiệu chỉ là một chiều).
Vỏ được thiết kế để chấp nhận các đầu nối nguồn thường được sử dụng trong các ứng dụng chiếu sáng LED. Tôi đã kiểm tra một dây dẫn mở rộng USB để có thể kết nối / ngắt kết nối đơn vị đầu Arduino một cách dễ dàng và trong khi tôi chắc chắn sử dụng đường dây điện cho nguồn điện và đường dữ liệu cho tín hiệu 3.3V, tôi thành thật khuyên LẠI điều này vì tôi muốn ghét ai đó làm hỏng cổng USB hoặc thiết bị ngoại vi của họ bằng cách cắm nhầm chúng vào!
Bước 5: Phần cứng 3, Điện tử điều khiển (Arduino)
Vỏ cho bộ chuyển đổi mức logic và Arduino OLED có giá đỡ kiểu Garmin 1/2 tiêu chuẩn ở phía sau để cho phép nó được gắn chắc chắn vào xe đạp. Một ngàm 'ngoài phía trước' sẽ cho phép thiết bị nghiêng lên hoặc xuống đến 'không' vị trí gia tốc kế hoặc một dòng mã chỉ để tự động về 0 khi bắt đầu sẽ dễ dàng thêm vào.
Vỏ có một vị trí cho bàn phím màng - được sử dụng để đặt trọng lượng người lái và xe đạp kết hợp. Bạn chỉ có thể đặt điều này theo chương trình, đặc biệt nếu bạn không chia sẻ huấn luyện viên với bất kỳ ai.
Có thể tốt hơn nếu thực hiện chế độ 'thủ công'. Có lẽ việc nhấn cả hai nút có thể bắt đầu chế độ thủ công và sau đó các nút có thể tăng / giảm độ nghiêng. Tôi sẽ thêm điều này vào danh sách việc cần làm!
Tệp STL của hộp, một lần nữa, có sẵn trên Thingiverse (xem liên kết phần vật tư).
Bản phác thảo Arduino được lưu trữ tại GitHub (https://github.com/mockendon/opengradesim).
Bạn có thể in một chiếc kẹp nhỏ gọn gàng cho cầu CÁP của mình từ đây
Bước 6: 'Cửa hàng trả tiền phía sau'
Nhiều người đã đặt ra vấn đề về sự cọ xát của phần sau rơi ra khi xe đạp di chuyển. Một số huấn luyện viên có một trục di chuyển (như Kickr) nhưng nhiều huấn luyện viên thì không.
Hiện tại, giải pháp tốt nhất của tôi là gắn một số ổ trục rãnh sâu 61800-2RS tiêu chuẩn (khoảng £ 2 mỗi cái) trên các bộ điều hợp nhả nhanh và sau đó gắn các ổ trượt xuyên trục lên chúng (xem ảnh) bằng một xiên QR có kích thước lớn hơn
Vòng bi cần một miếng đệm mỏng, ví dụ M12 16mm 0,3mm giữa bộ chuyển đổi và vòng bi.
Chúng hoàn toàn phù hợp và xoay với xe đạp và xiên độc lập với người huấn luyện.
Tại thời điểm này, điều này thay đổi độ lệch trên mặt ổ đĩa một vài mm, vì vậy bạn sẽ cần phải lập chỉ mục lại
Tôi đang thiết kế các bộ phận tùy chỉnh (xem kế hoạch pdf) cho máy (trên máy tiện của anh rể tương lai của tôi khi anh ấy có một giờ để giúp đỡ!). Những điều này vẫn chưa được kiểm tra !!! Nhưng mài 1mm khỏi bề mặt bên trong của bộ chuyển đổi QR phía ổ đĩa cổ phiếu là một cách khắc phục nhanh chóng mà không cần công cụ đặc biệt;)