Isi kandungan:

Jurulatih Pintar Basikal Dalaman DIY: 5 Langkah
Jurulatih Pintar Basikal Dalaman DIY: 5 Langkah

Video: Jurulatih Pintar Basikal Dalaman DIY: 5 Langkah

Video: Jurulatih Pintar Basikal Dalaman DIY: 5 Langkah
Video: Pegawai Kanan TLDM Yang Kurang Ajar 2024, November
Anonim
Jurulatih Pintar Basikal Dalaman DIY
Jurulatih Pintar Basikal Dalaman DIY
Jurulatih Pintar Basikal Dalaman DIY
Jurulatih Pintar Basikal Dalaman DIY
Jurulatih Pintar Basikal Dalaman DIY
Jurulatih Pintar Basikal Dalaman DIY

Pengenalan

Projek ini dimulakan sebagai pengubahsuaian mudah kepada basikal dalaman Schwinn IC Elite yang menggunakan skru dan pelekap sederhana untuk tetapan rintangan. Masalah yang ingin saya selesaikan adalah bahawa nada skru adalah besar, jadi jarak dari tidak dapat mengayuh hingga roda berputar sepenuhnya bebas hanyalah beberapa darjah pada tombol rintangan. Pada mulanya saya menukar skru ke M6, tetapi kemudian saya perlu membuat tombol, jadi mengapa tidak hanya menggunakan mottor NEMA 17 yang tersisa untuk mengubah rintangan? Sekiranya sudah ada beberapa elektronik, mengapa tidak menambahkan meteran engkol dan sambungan bluetooth ke komputer untuk menjadikan pelatih pintar?

Ini terbukti lebih sukar dari yang diharapkan, kerana tidak ada contoh bagaimana meniru meter daya dengan arduino dan bluetooth. Saya akhirnya menghabiskan sekitar 20 jam untuk memprogram dan menafsirkan spesifikasi BLE GATT. Saya harap dengan memberikan contoh, saya dapat menolong seseorang yang tidak membuang banyak masa untuk berusaha memahami apa sebenarnya maksud "Bidang Jenis Iklan Data Perkhidmatan" …

Perisian

Keseluruhan projek berada di GitHub:

github.com/kswiorek/ble-ftms

Saya sangat mengesyorkan menggunakan Visual Studio dengan pemalam VisualGDB jika anda merancang untuk melakukan sesuatu yang lebih serius daripada hanya menyalin-menampal kod saya.

Sekiranya anda mempunyai pertanyaan mengenai program ini, sila tanya, saya tahu bahawa komen minimalis saya mungkin tidak banyak membantu.

Kredit

Terima kasih kepada stoppi71 untuk panduannya mengenai cara membuat meter kuasa. Saya melakukan engkol mengikut rancangannya.

Bekalan:

Bahan untuk projek ini sangat bergantung pada basikal apa yang anda ubah, tetapi ada beberapa bahagian universal.

Engkol:

  1. Modul ESP32
  2. Sensor Berat HC711 ADC
  3. Tolok regangan
  4. MPU - giroskop
  5. Bateri Li-Po kecil (sekitar 750mAh)
  6. Panas mengecilkan lengan baju
  7. Pemandu Stepper A4988
  8. Pengatur 5V
  9. Soket tong arduino
  10. Bekalan kuasa 12V arduino

Konsol:

  1. NEMA 17 stepper (perlu cukup kuat,> 0.4Nm)
  2. Batang M6
  3. 12864 lcd
  4. WeMos LOLIN32
  5. Suis taktik

Peralatan

Untuk melakukan ini, anda mungkin tidak dapat menggunakan pencetak 3D sahaja, namun anda dapat menjimatkan banyak masa dengan memotong casing dengan laser, dan anda juga boleh membuat PCB. Fail DXF dan gerber ada di GitHub, jadi anda boleh memesannya secara tempatan. Penyambung dari batang berulir ke motor dihidupkan mesin bubut dan ini mungkin satu-satunya masalah, kerana bahagiannya harus cukup kuat untuk menarik bantalan, tetapi tidak ada banyak ruang pada basikal ini.

Sejak membuat basikal pertama, saya memperoleh mesin penggilingan yang membolehkan saya membuat slot untuk sensor di engkol. Ini menjadikan pelekat mereka sedikit lebih mudah dan juga melindungi mereka jika ada sesuatu yang menghantam engkol. (Saya mengalami beberapa kali penurunan sensor ini sehingga saya mahu selamat.)

Langkah 1: Crank:

Engkol
Engkol
Engkol
Engkol
Engkol
Engkol

Sebaiknya ikuti tutorial ini:

Anda pada dasarnya perlu melekatkan sensor ke engkol di empat tempat dan menghubungkannya ke sisi papan.

Sambungan yang betul sudah ada sehingga anda hanya perlu memasangkan pasangan wayar terus ke lapan pad di papan ini.

Untuk menyambung ke sensor, gunakan wayar sekecil mungkin - padnya mudah diangkat. Anda perlu melekatkan sensor terlebih dahulu dan membiarkannya cukup di luar untuk menyolder, kemudian tutup selebihnya dengan epoksi. Sekiranya anda cuba menyolder sebelum melekatkan, ia melengkung dan pecah.

Untuk memasang PCB:

  1. Masukkan pin emas dari bawah (sisi dengan jejak) ke semua lubang kecuali yang menegak berhampiran bahagian bawah.
  2. Letakkan tiga papan (ESP32 di atas, kemudian MPU, HX711 di bahagian bawah) sehingga pin emas melekat di kedua lubang.
  3. Memateri tajuk ke papan di atas
  4. Potong pin emas dari bawah. (Cuba potong terlebih dahulu sebelum memasang, jadi anda tahu "pin emas" anda tidak di dalam keluli - ini menjadikannya hampir mustahil untuk dipotong dan anda perlu memfailkan atau menggilingnya)
  5. pateri baki pin emas yang tersisa di bahagian bawah papan.
  6. Muat naik firmware untuk engkol

Langkah terakhir adalah mengemas seluruh engkol dengan lengan penyusut panas.

Kaedah membuat papan ini tidak sesuai, kerana papan mengambil banyak ruang di mana anda boleh memuatkan perkara lain. Yang terbaik adalah memasangkan semua komponen ke papan secara langsung, tetapi saya tidak mempunyai kemahiran untuk menyolder SMD kecil ini sendiri. Saya perlu memerintahkannya berkumpul, dan saya mungkin akan membuat beberapa kesalahan dan akhirnya memesannya tiga kali dan menunggu setahun sebelum mereka tiba.

Sekiranya seseorang dapat merancang papan, Akan lebih baik jika ia mempunyai beberapa litar pelindung bateri dan sensor yang akan menghidupkan ESP jika engkol mulai bergerak.

PENTING

Sensor HX711 secara lalai ditetapkan ke 10Hz - jauh lebih lambat untuk pengukuran daya. Anda perlu mengangkat pin 15 dari papan dan menyambungkannya ke pin 16. Ini mendorong pin TINGGI dan membolehkan mod 80Hz. 80Hz ini, dengan cara, menetapkan kadar keseluruhan gelung arduino.

Penggunaan

ESP32 diprogramkan untuk tidur selepas 30-an tanpa peranti bluetooth disambungkan. Untuk menghidupkannya semula, anda perlu menekan butang reset. Sensor juga dikuasakan dari pin digital, yang berubah RENDAH dalam mod tidur. Sekiranya anda ingin menguji sensor dengan kod contoh dari perpustakaan, anda perlu menggerakkan pin TINGGI dan tunggu sebentar sebelum sensor dihidupkan.

Selepas pemasangan, sensor perlu dikalibrasi dengan membaca nilainya tanpa daya dan kemudian dengan berat yang dikenakan (saya menggunakan kettlebell 12kg atau 16kg yang digantung pada pedal). Nilai-nilai ini perlu dimasukkan ke dalam kod powerCrank.

Sebaiknya menjengkelkan engkol sebelum setiap perjalanan - seharusnya tidak dapat mengoyakkan dirinya ketika seseorang mengayuh, tetapi lebih selamat daripada menyesal dan ada kemungkinan untuk mengoyakkannya sekali sahaja semasa menghidupkan. Sekiranya anda melihat beberapa tahap kuasa pelik, anda perlu mengulangi proses ini:

  1. Letakkan engkol ke bawah sehingga lampu mula berkelip.
  2. Setelah beberapa saat lampu akan menyala - jangan sentuh kemudian
  3. Apabila lampu mati, ia menetapkan daya semasa yang dikesan sebagai 0 baru.

Sekiranya anda ingin menggunakan engkol, tanpa konsol, kodnya ada di github. Semua yang lain berfungsi sama.

Langkah 2: Konsol

Konsol
Konsol
Konsol
Konsol
Konsol
Konsol

Sarungnya dipotong dari akrilik 3mm, butang dicetak 3D dan ada spacer untuk LCD, dipotong dari akrilik 5mm. Ia dilekatkan dengan lem panas (melekat pada akrilik) dan terdapat "pendakap" bercetak 3D untuk menahan PCB ke LCD. Pin untuk LCD disolder dari bahagian bawah sehingga tidak mengganggu ESP.

ESP disolder terbalik, jadi port USB sesuai dengan casing

PCB butang yang terpisah dilekatkan dengan lem panas, jadi butang ditangkap di lubang mereka, tetapi mereka masih menekan suis. Butang disambungkan ke papan dengan penyambung JST PH 2.0 dan susunan pin mudah disimpulkan dari skema

Sangat penting untuk memasang pemacu stepper ke arah yang betul (potensiometer berhampiran ESP)

Keseluruhan bahagian untuk kad SD dilumpuhkan, kerana tidak ada yang menggunakannya pada versi pertama. Kod perlu dikemas kini dengan beberapa tetapan UI seperti berat penunggang dan kesukaran menetapkan.

Konsol dipasang menggunakan "lengan" lasercut dan zipties. Gigi kecil menggali ke hendal dan memegang konsol.

Langkah 3: Motor

Motor
Motor
Motor
Motor
Motor
Motor

Motor menahan diri di tempat tombol pelaras dengan pendakap dicetak 3D. Pada porosnya dipasang pengganding - satu sisi mempunyai lubang 5mm dengan skru set untuk menahan poros, yang lain mempunyai utas M6 dengan skru set untuk menguncinya. Sekiranya anda mahu, anda mungkin boleh membuatnya dalam gerudi dari stok bulat 10mm. Ia tidak perlu terlalu tepat kerana motor tidak dipasang dengan ketat.

Sekeping batang berulir M6 disekat pada pengganding dan ia menarik mur M6 tembaga. Saya memesinnya, tetapi boleh dibuat dengan mudah dari sekeping tembaga dengan fail. Anda bahkan boleh mengimpal beberapa bit ke kacang biasa, sehingga tidak berputar. Nut dicetak 3D juga boleh menjadi penyelesaian.

Benang perlu lebih halus daripada skru stok. Pitchnya kira-kira 1.3mm, dan untuk M6 itu 0.8mm. Motor tidak mempunyai daya kilas yang cukup untuk menghidupkan skru stok.

Mur perlu dilincirkan dengan baik, kerana motor hampir tidak dapat menghidupkan skru pada tetapan yang lebih tinggi

Langkah 4: Konfigurasi

Konfigurasi
Konfigurasi
Konfigurasi
Konfigurasi

Untuk memuat naik kod ke ESP32 dari Arduino IDE, anda perlu mengikuti tutorial ini:

Papannya adalah "WeMos LOLIN32", tetapi "Mod modul" juga berfungsi

Saya cadangkan menggunakan Visual Studio, tetapi selalunya ia boleh pecah.

Sebelum penggunaan pertama

Crank perlu dipasang mengikut langkah "Crank"

Dengan menggunakan aplikasi "nRF Connect", anda perlu menyemak alamat MAC ESP32 engkol dan menetapkannya dalam fail BLE.h.

Dalam baris 19 indoorBike.ino yang perlu anda tetapkan, berapa banyak putaran skru yang diperlukan untuk mengatur rintangan dari sepenuhnya longgar hingga maksimum. ("Maksimum" adalah subjektif dengan sengaja, anda menyesuaikan kesukaran dengan tetapan ini.)

Pelatih pintar mempunyai "gear maya" untuk memasangnya dengan betul, anda perlu menentukurkannya pada baris 28 dan 29. Anda perlu mengayuh dengan irama berterusan pada tetapan rintangan tertentu, kemudian baca kekuatannya dan tetapkan dalam fail. Ulangi ini lagi dengan tetapan lain.

Butang paling kiri beralih dari mod ERG (rintangan mutlak) ke mod simulasi (gear maya). Mod simulasi tanpa sambungan komputer tidak melakukan apa-apa kerana tidak ada data simulasi.

Baris 36. menetapkan gear maya - bilangan dan nisbah. Anda menghitungnya dengan membahagikan bilangan gigi pada gear depan dengan jumlah gigi pada gear belakang.

Pada baris 12. anda meletakkan berat penunggang dan basikal (Dalam [newtons], massa kali pecutan graviti!)

Keseluruhan bahagian fizik ini mungkin terlalu rumit dan bahkan saya tidak ingat apa yang dilakukannya dengan tepat, tetapi saya mengira tork yang diperlukan untuk menarik penunggang basikal ke atas atau sesuatu seperti itu (sebab itulah penentukuran).

Parameter ini sangat subjektif, anda perlu menetapkannya setelah beberapa perjalanan agar mereka berfungsi dengan betul.

Port COM debug menghantar data binari langsung yang diterima oleh bluetooth dalam tanda kutip ('') dan data simulasi.

Pembentuknya

Oleh kerana konfigurasi fizik yang kononnya realistik ternyata menjadi kerumitan besar untuk membuatnya terasa realistik, saya membuat konfigurasi GUI yang harus membolehkan pengguna secara grafik menentukan fungsi yang berubah dari tahap bukit ke tahap rintangan mutlak. Itu belum selesai sepenuhnya dan saya tidak berpeluang untuk mengujinya, tetapi pada bulan akan datang saya akan menukar basikal lain, jadi saya akan menggilapnya kemudian.

Pada tab "Gears" anda boleh menetapkan nisbah setiap gear dengan menggerakkan slider. Anda kemudian perlu menyalin sedikit kod untuk menggantikan gear yang ditentukan dalam kod tersebut.

Pada tab "Gred" anda diberi grafik fungsi linier (ya, ternyata subjek yang paling dibenci dalam matematik sebenarnya berguna) yang mengambil gred (paksi menegak) dan menghasilkan langkah rintangan mutlak (paksi mendatar). Saya akan mengikuti matematik sedikit kemudian untuk mereka yang berminat.

Pengguna dapat menentukan fungsi ini menggunakan dua titik yang diletakkan di atasnya. Di sebelah kanan ada tempat untuk menukar gear semasa. Gear yang dipilih, seperti yang anda bayangkan, mengubah caranya, bagaimana gred peta menjadi rintangan - pada gear yang lebih rendah, lebih mudah mengayuh naik. Menggerakkan gelangsar mengubah pekali ke-2, yang mempengaruhi bagaimana gear yang dipilih mengubah fungsinya. Paling mudah bermain dengannya sebentar untuk melihat bagaimana tingkah lakunya. Anda mungkin juga perlu mencuba beberapa tetapan yang berbeza untuk mencari yang paling sesuai untuk anda.

Ia ditulis dalam Python 3 dan harus berfungsi dengan perpustakaan lalai. Untuk menggunakannya, anda perlu melepaskan garis segera setelah "melepaskan garis ini untuk menggunakan konfigurasi". Seperti yang saya katakan, itu tidak diuji, jadi mungkin ada beberapa kesalahan, tetapi jika ada yang muncul, sila tulis komen atau buka masalah, jadi saya dapat memperbaikinya.

Matematik (dan fizik)

Satu-satunya cara pengawal dapat membuatnya merasa seperti anda menanjak adalah dengan memutar skru rintangan. Kita perlu menukar gred ke bilangan putaran. Untuk mempermudah penyediaannya, keseluruhan rentang dari sepenuhnya longgar hingga tidak dapat memutar engkol dibahagikan kepada 40 langkah, yang sama digunakan dalam mod ERG, tetapi kali ini ia menggunakan nombor nyata dan bukan bilangan bulat. Ini dilakukan dengan fungsi peta ringkas - anda boleh mencarinya dalam kod. Sekarang kita selangkah lebih tinggi - bukannya berurusan dengan putaran skru, kita berhadapan dengan langkah-langkah khayalan.

Sekarang bagaimana ia berfungsi semasa anda menaiki basikal (dengan andaian kelajuan tetap)? Jelas sekali ada kekuatan yang mendorong anda ke atas, jika tidak, anda akan jatuh ke bawah. Gaya ini, seperti hukum gerakan pertama memberitahu kita, mesti sama besarnya tetapi bertentangan dengan kekuatan yang menarik anda ke bawah, agar anda berada dalam gerakan seragam. Ia berasal dari geseran antara roda dan tanah dan jika anda melukis gambarajah daya ini, beratnya sama dengan berat basikal dan penunggang kali ganda dari gred:

F = Fg * G

Sekarang apa yang membuat roda menerapkan kekuatan ini? Oleh kerana kita berurusan dengan roda gigi dan roda, lebih mudah untuk berfikir dari segi tork, yang merupakan kekuatan kali radius:

t = F * R

Kerana terdapat roda gigi yang terlibat, anda memberikan tork pada engkol, yang menarik rantai dan memutar roda. Tork yang diperlukan untuk memutar roda dikalikan dengan nisbah gear:

tp = tw * gr

dan kembali dari formula tork kita mendapat kekuatan yang diperlukan untuk memutar pedal

Fp = tp / r

Ini adalah sesuatu yang boleh kita ukur menggunakan meter kuasa di engkol. Oleh kerana geseran dinamik secara linear berkaitan dengan daya dan kerana basikal ini menggunakan mata air untuk memberikan daya ini, ia adalah linear dengan pergerakan skru.

Daya adalah daya kali kelajuan (dengan anggapan arah vektor yang sama)

P = F * V

dan halaju linear pedal berkaitan dengan halaju sudut:

V = ω * r

dan supaya kita dapat mengira daya yang diperlukan untuk menghidupkan pedal pada tahap rintangan yang ditetapkan. Oleh kerana semuanya berkaitan secara linear, kita boleh menggunakan perkadaran untuk melakukannya.

Ini adalah asasnya perisian yang diperlukan untuk mengira semasa penentukuran dan menggunakan kaedah bulatan untuk menjadikan kita komposit yang rumit, tetapi fungsi linier yang berkaitan dengan tahap ketahanan. Saya menulis semuanya di atas kertas mengira persamaan akhir dan semua pemalar menjadi tiga pekali.

Ini adalah fungsi 3D yang mewakili satah (saya rasa) yang mengambil nisbah gred dan gear sebagai argumen, dan tiga pekali ini berkaitan dengan yang diperlukan untuk menentukan satah, tetapi kerana gear adalah nombor diskrit, maka lebih mudah untuk menjadikannya parameter dan bukannya menangani unjuran dan semacamnya. Pekali 1 dan 3 dapat ditentukan oleh satu baris dan (-1) * koefisien ke-2 adalah koordinat X titik, di mana garis "berputar" di sekitar ketika menukar gear.

Dalam visualisasi ini, argumen dilambangkan oleh garis tegak dan nilai dengan garis mendatar, dan saya tahu bahawa ini mungkin menjengkelkan, tetapi lebih intuitif bagi saya dan sesuai dengan GUI. Itulah mungkin sebab mengapa para ahli ekonomi melukis grafik mereka dengan cara ini.

Langkah 5: Selesaikan

Kini anda memerlukan beberapa aplikasi untuk menggunakan pelatih baru anda (yang menjimatkan anda sekitar $ 900:)). Berikut adalah pendapat saya mengenai sebilangan daripadanya.

  • RGT Cycling - pada pendapat saya yang terbaik - ia mempunyai pilihan percuma, tetapi mempunyai sedikit trek. Berurusan dengan bahagian sambungan yang terbaik, kerana telefon anda menghubungkan melalui bluetooth dan PC memaparkan trek. Menggunakan video realistik dengan penunggang basikal AR
  • Rouvy - banyak trek, langganan berbayar sahaja, kerana beberapa sebab aplikasi PC tidak berfungsi dengan ini, anda perlu menggunakan telefon anda. Mungkin ada masalah apabila komputer riba anda menggunakan kad yang sama untuk bluetooth dan WiFi, kadangkala ketinggalan dan tidak mahu memuat
  • Zwift - permainan animasi, hanya dibayar, berfungsi dengan baik dengan pelatih, tetapi UI cukup primitif - pelancar menggunakan Internet Explorer untuk memaparkan menu.

Sekiranya anda gemar membina (atau tidak), sila beritahu saya dalam komen dan jika anda mempunyai sebarang pertanyaan, anda boleh bertanya di sini atau mengemukakan masalah ke github. Saya dengan senang hati akan menerangkan semuanya kerana ia agak rumit.

Disyorkan: