-- Views
July 21, 26
スライド概要
チャリンコのオブザーバビリティに関してお話します
チャリンコ オブザーバビリティ kinoppyd@関西Ruby会議09 2026/07/18
Hello 琵琶湖
おぬしはだれ I'm kinoppyd Programmer at SmartHR I love Ruby I love Bicycle I love Poker
よくわからないことを喋ります
チャリンコ・オブザーバビリティ
チャリンコ ロードバイクのことですね CANYON Ultimate AL SLX 9.0 昔はアルテが30万せんかった
オブザーバビリティ 可観測性、つまり照 単なるモニタリングではなく、複数のコンポーネントから構成されるア プリケーション全体の相互作用をモニタリングする システムを外部から”理解”ること
チャリンコ・オブザーバビリティ ロードバイクという1つの大きなアプリケーションをモニタリングする スポーツにおいて、オブザーバビリティはパフォーマンス向上に必須 例えば、心拍やペースを測らずにマラソンの練習する人は少ない
チャリンコの構成 人間(エンジン)ー> 心拍、酸素飽和度、血糖値、etc タイヤ ー> 回転数から速度がわかる クランク ー> 回転数からケイデンス、歪みからパワーがわかる ブレーキ ー> どれくらいのブレーキをかけたかがわかる ギア ー> いまどのギアを使用しているのかがわかる 車体の傾きとか温度とか気圧とかあともうなんか色々
現代のチャリンコモニタリング
既存実装 BLEにCSCP、CPP、HRPというプロファイルが定義されている • Cycle Speed Cadence、Cycle Power、Heart Rate Di2とかEPSとかeTapとかメーカー独自の電動シフター規格もある とはいえ、すくない https://www.bluetooth.com/specifications/specs/
既存実装のいいところ ユーザーが様々なセンサとサイクルコンピュータを選べる 安価 連携とか勝手にやってくれる
でも少ないなら作る 電動シフターを使ってないけど変速は記録したい そもそもブレーキングや傾きを記録するチャリセンサは存在しない 無いなら作る、PicoRubyを使えば作れる!!!!!
メトリクス
スピード 車体のスピード タイヤのサイズが分かっているので、回転角が分かれば計算可能 ジャイロセンサを使う
スピード ホイールの円周x単位時間あたりの回転数 画像出典:https://www.mavic.com/ja-jp/p/ksyrium-sl-rr1223
スピード 実際の所、走っている瞬間はあまり気にしない値 どちらかと言うと次のケイデンスのほうが気になる あとから見返したときに気になる値
ケイデンス クランクを毎分何回回しているかの数値 スピードと同じく、クランクの回転数と回転角から計算 スピードセンサと回転の軸が違うが、ハードは共用可能
ケイデンス 1分間あたりの回転数 画像出典:https://bike.shimano.com/ja-JP/products/components/pdp.P-FC-R8100-P.html
ケイデンス 現代のロードバイク理論として、筋肉を使うより肺を使うほうがいい 筋肉の疲労は回復に時間がかかるが、呼吸器は短時間で回復する なので、筋肉に疲労を与えすぎないために回転数を意識する
パワー どれくらいの力をかけてクランクを回しているか 今回は作成してない、なぜならアルテグラのクランクという高価なパー ツを壊したくないので……怖い…… 既製品はひずみゲージを使って、クランクがどれだけ歪んでいるかを計 測している
パワー これも筋肉をどれくらい使うかと考えるときに見る FTPという値を維持するために意識する必要がある FTPは、雑に言うとエンジン(人間)が1時間に出せるパワーの限界 FTPを学ぼう!: https://www.redbull.com/jp-ja/ftp-everything-you-need-to-know
心拍数と血糖値 心拍数と血中酸素飽和度を測ってくれるセンサがある 血糖値のセンサはあるにはあるが、マイコンから簡単にアクセスできる ものは売ってない 専用のアプリをブリッジなどしなくてはいけないので面倒
心拍数と血糖値 心拍数はある程度の範囲内で安定させる必要がある FTPを維持するためにも必要だし、ケイデンスにも比例する 血糖値は低いとハンガーノックを起こす、自分は気にしたことはない
ログ
後輪のギア 後輪のギアは、ディレイラーという部品で制御されている 先端にワイヤがついた指みたいなもので、ワイヤを引くと指が内側に曲 がっていき、ギアの位置を決める 磁気角度センサを使って、どれだけ曲がっているかを測る
後輪のギア 2.ここがギアの段数にあわせて少しずつ回る 1.ここをワイヤで引っ張ると 画像出典:https://bike.shimano.com/ja-JP/products/components/pdp.P-RD-R8150.html
後輪のギア 癖みたいなものを知れる(知ったから何だという話はある) 使ってるギアが重すぎる/軽すぎるを意識するのは大事 とはいえ、まあ経験則的にはだいたい安定する
ブレーキ 何を測ればブレーキの量を測れているかは難しい問題 実用的には、たぶんブレーキワイヤをどれくらい引いたかを知りたい 磁気ホールセンサでブレーキレバーをどれだけ引いたかを測る
ブレーキ 2.この場所に近づく 1.ここを引くと 画像出典:https://bike.shimano.com/ja-JP/products/components/pdp.P-ST-R8170-R.html
ブレーキ 整備の面で必要になる数値と思う 引きに対して制動が弱いと、何かがおかしい 普段の値を知っておくことが多分大事
そのほかにも…… チルトセンサで車体の傾きを計測、坂の勾配やダンシングの傾向を知る 気温センサで外気温を測る 気圧センサで気圧を測る GPSで現在地を知る
作る
どうやって作るのか? チャリンコはわりと剥き出しの機械 車はDBWとECUで電子制御されているが、チャリはエンジンが人間で あり、ワイヤを引っ張ればキマった出力がでるわけではない 車体を制御するチェーンやワイヤが機械に直結していて、動力を仲介す る部品がほぼ無い
中間のパーツがないということは シャフトがないので、直接観測しないといけない • 一応、ギアの回転を監視するという方法はあるかもしれない…… めちゃくちゃ動いている部品に直接センサを取り付けなくてはいけない つまり、無線が必須になってくる箇所が多い
自転車競技というハードル 自転車は、車と違って頻繁にバラバラにされる 自転車自体がかなり分解しやすいように作られている つまり、センサ類も外しやすくある必要があり、無線が求められる
Raspberry Pi Pico2 W RP2350とBLEがのってる 最新のPicoRubyはPR2350がターゲットだしちょうどいい とはいえフットプリントがでかい、もっと小さいBLEが乗ってるESP32 のマイコンがあるのでそれも選択肢にすべきだったが、確実に動く方で
通信方式 BLE::UART 先述のCSCP、CP、HRPには頼らない、互換性はいらないので 複数のセンサを繋ぐ必要があるので、btstack_config.hの値を書き換えて 複数つなげるようにする
複数のセンサをつなげる
スピード/ケイデンスセンサ Pico2 Wと同じサイズのユニバーサル基板にピンソケットとセンサ Pico2 Wは取り外し可能に 200mhAの小型バッテリーをピンヘッダと基板の隙間に隠す
スピード/ケイデンスセンサ
スピード/ケイデンスセンサ
後輪ギアセンサ 時間切れで作れなかった センサはあるんだけど、ディレイラーに取り付けるパーツの成形が難 くやしみ
ブレーキ センサが注文しても届かねえ!!!! 許さんぞAmazon Prime Day 間に合わず
可視化する
可視化 複数のセンサから届いた計測値を、収集用のPico2に集める 時間と同時に、その瞬間の各センサの値を記録する このデータをPCに取り出して、最終的に可視化ができる
既存の可視化ツール StravaやRide with GPS、Garmin Connectなど、既存の可視化ツールは 存在する しかし、メトリクスがやはりCSCP/CPP/HRPくらいしかない とはいえ、共有機能とかは魅力的ではある
Strava
自作のセンサでは InfluxDBにデータを入れて、Grafanaで可視化すれば良い だがInfluxDBは連続的なデータを入れるやつ、ライドは非連続的な時間 時系列DBあんまくわしくないので、なんかいいのないかなぁ?
InfluxDB + Grafana
味気は無いね^^
もう一つの可視化
リアルタイム表示は必須でしょ 走ってるときにこそ、リアルタイムのデータは見なくちゃいけない 振り返りも大事だけど、走ってるときにこそ現状を確認しないと だから収集用のPico2 Wにはモニタが必要
メーターに表示したくない? GC9A01コントローラが載った円形ディスプレイが安く売ってる レンダリングはLovyanGFX、RP2040で動くしC拡張で書いた 1台のPico2 Wで2つのディスプレイにSPIで書き込みができるのを確認
市販のメーターは味気ない バッテリー効率を優先しているので、UIは基本しょぼい ぼくはただ趣味で作っているだけなので、おもしろUIが欲しい 車のスピードメーターみたいなのがいいなぁ
ちなみにこれが普段使うサイコン
メーター アナログメーターがかっこいい、アナログメーターにしよう 車も好き、前に乗ってた86って車のメーターを真似しよう スポーツカーは速度よりもエンジンの回転数を気にする、チャリもそう
メーター
メーター 円形ディスプレイを2つ、Pico2 Wを1つつけるためのピンヘッダ 消費電力が多いので、バッテリーは単4電池2本 本当は3連メーターにしたいので、1マイコンで動く版もある
これをみてもよくわからないけど
こだわりポイント
実走!
無理だわ…… プロポーザルには「琵琶湖走ったるぜ」って書いた が、流石に35度を超える気温の中をライドするのは危険すぎる 泣く泣く断念
代わりにテスト機でなんとか
まとめ
チャリンコ・オブザーバビリティ 既存のセンサはメトリクスが少ないので、自分でセンサを作る センサの値は収集用のマイコンに集めて、InfluxDBや各種サービスに入 れて可視化する リアルタイム表示のメーターは好きに作ろうぜ
Build what you want with PicoRuby.