2017年6月8日木曜日

Tiagraで手作りパワーメーター

今まで公開した情報を利用して実際にパワーメーターを製作しました。

完成図




手作りパワー計は、配線がむき出しなのでチョッと・・・
という意見を踏まえて、$167で3Dプリンタを新規購入し、オレンジ色でマズそうな、おにぎりをプリントし電子部品を格納しました。

おにぎりが不細工ですが、不器用な人は3Dプリンタを使っても作品が不細工になるようです。

ひずみゲージも、むき出しにならないよう「自転車部品は、カーボン柄のシールを貼れば、それなりに見える法則」に従って、シールをはりました。
実際は、ケチって、レーザープリンタでカーボン柄を紙に印刷し、両面テープで張り付けたためか、これも不細工です・・・(汗)




モジュール構成は、いつも通り以下の3点セットぽっきりで、お手軽です。
1. ひずみゲージ付きクランク
  今回はお手軽なひずみゲージ2枚構成(上の写真のカーボン柄のシールの下に1枚と対称となる裏面の位置にもう1枚)で、他の2つの抵抗はひずみゲージでなく固定抵抗(200+120=320Ω)です。
2. コンピュータ(nRF52使用)モジュール
3. 上記2.のソフトウェア

上記1と2は、以下の配線でVCC, GND, Sg+,Sg-を接続してます。





nRF52のマイコンモジュールにソフトウェアを書き込む際は、開発ボード(ST-LinkやnRF52-DK)を使用します。

今回は、以下の開発ボードにnRF52(図の右側D52Q)を接続し、書き込みました。
nRF52は電源のVCCとGNDのほか、信号線2本を接続するだけで、勝手に認識してくれて、ソフトを書き込めてしまいます。
簡単です。


この開発ボード自体は、USBケーブルでPCと接続し、PC用のnRFgoというソフトウェアを使って、書き込み作業を行います。


つづく


2017年6月6日火曜日

$49パワー計(ソフトウェア編 - nRF UART版)

$49パワー計に採用したNordic社のマイコン、nRF52は、内蔵するソフトウェアによって、スピードセンサ、心拍センサー、パワーセンサーと様々なものに変身させることができます。

nRF52を使ったパワー計には、それ用のソフトウェアが必要です。

今回、BLE(Bluetooth Low Energy)上で文字列を転送できる“nRF UART”という通信方式で、パワー計のデータを無線送信するソフトウェアを作成しました。

送信されたパワー計の情報は、Android/iOS上で動作するnRF UARTまたはnRF Toolboxというアプリで表示できます。
BLE上で強引に文字列を転送するためか、端末によってはかなり動作が不安定です。


ANT+対応のパワー計を作る前に、
製作したパワー計が正常動作しているか、必要なデータを取得して確認し、
個々のクランク毎に異なるゼロオフセット値、スロープ値を算出する必要があります。

この目的には、ANT+規格で送信できるデータだけでは不十分で、bluetoothで様々な値を転送し、PC/Smartphone上で表示・確認する必要があります。

こんな感じで表示されます。



ソースコードをまるごと公開しようとしましたが、
「SDKのサンプル部分を除いて、独自開発した部分のみを差分として公開せよ」
との権利元のNordic社がお達しを出してます。

逆らってもしかたがないので、こちらに差分を公開しました
ttps://sites.google.com/site/myfiles1138000
(20170606.cというファイル名です。実際にアクセスする場合、末尾の000を削除して1138で終わるようURLを修正する必要があります。ロボット除けのためで、お手数をお掛けします)

この差分をSDK内の
...\nRF5_SDK_12.1.0_0d23e2a\examples\ble_peripheral\ble_app_uart
BLE_UART内のmain.cと結合します。

具体的には、main.c内の“int Main(void)”から最後までを選択し、削除。
イメージ図



削除された部分に、上記差分ファイルをコピペします。
以上です。

なお、本ソースコードは、パワー計の基本アルゴリズムの理解のために作成してます。

わかり易さを優先しているので(本当にわかりやすいかは不明です。コンピュータのプログラムを学んだのは、子供の頃にベーマガ(マイコンBASICマガジン)を少し読んだ程度ですので。)、実際には、改変をして以下の機能を実装した方がよいです。
・精度向上のためのADコンバーター内蔵アンプの設定
・ボタン電池駆動用の省電力間欠動作設定
・ひずみゲージ回路の節電用の間欠動作設定
・温度補正
これらはなくとも最低限のパワー計としての動作はします。

基本的な動作は、
1.Mainルーチンが開始されると、ADコンバータからひずみゲージの値を読み取り、それを繰り返します。
2.クランクが一回転し(リード・スイッチがフレームに張り付けた磁石を通過し)リードスイッチがONになると、それまでに取得したひずみゲージ値と角速度をもとにパワー計算を行い、無線送信します。

基本は、この繰り返しです。


ANT+用のサンプル・ソースがNordicのSDKに含まれているので、このソースコードを移植すれば、簡単にANT+対応にできます。

また、本ソースコードは、ひずみゲージ回路が1回路であることが前提です。
従来通り、クランクアームの上下に4枚のひずみゲージを配置するほか他に、
以下の(赤丸ではなく)緑の矢印の面にそれぞれ1枚ひずみゲージを配置する方法に対応します。

この方法は、SRMと同じく、スパイダーアームがチェーンによりピンクの矢印方向に引っ張られる際のひずみを計測します。
条件付きながら、よいデータが得られています。

この方式では、選択しているリアのギアがトップの場合とローの場合で、計測誤差がでるハズですが、ほぼ無視できそうです(5%とかの差はなく、SRMもこの誤差は補正してないようです)。

メリットとしては、パワー値が安定しており、乗り手の感覚に近い値がでます。

パワータップハブは、クランクの回転とは無関係にパワー値を送信してきて、また同じパワーで回しているのに、今回は270w、次回は30wも下がって240wとか送信してくるため(勿論、平均を表示させれば正確です。)、やや使いづらいと感じます。
構造的には素晴らしいアイデアと技術のパワーメーターではありますが。

クランクアーム式もスパイダーアーム式と比べると・・・












2017年5月4日木曜日

ANT+対応サイコンの自作(ソフトウェア編)

昔、ANT+対応のサイクル・コンピュータを自作してました。

パワー、心拍、速度とケイデンスをANTセンサーから受信して表示できました。

本人的に一番の売りは、速度とケイデンスから、何枚目のギアを使ってるか算出して表示できたことでした。
10年くらい前のカンパのサイコンも同様なギア表示をしていたことがヒントでした。

こんな感じで1.8インチTFTにカラー&グラフィカル表示。

しかしこのTFT液晶は太陽光の下では視認性が悪く、
「がんばれ、もっと明るくなーれ、明るくなーれ」
と駆動電圧を上げていったところ、壊れました(汗)。
結果、上の写真のように薄暗くしか映りません。

その後、Stravaにはまってしまい、Garmin以外使わなくなっていました。

最近、お手軽パワーメータには、お手軽サイコンが欲しいな、
という妄想が湧いてきました。

以下は、キャットアイの不朽の名作(と私が勝手に思ってる)RD200。

このサイコンは有線式で、ケイデンス用の線を100回/分のペースでOn・Offすると画面に100と表示され、同様に200回/分ペースなら200と表示される。

ANTの信号を受信して、その数値に合わせて速度/ケイデンス用の線をOn/Offすれば、パワーに限らず、様々な数値を表示できる。
メリットはボタン電池で数年動作すること。
Garminは頻繁に充電が必要で、普段乗りには面倒です。

とりあえず、昔作った、Arduino Uno+nRF24(BC-ANT-Serial)用のANT対応サイコン・ソースコードを動作させてみました。
ArduinoUnoは通常5v動作ですが3.3v動作に改造しており、nRF24と接続するのにレベル・シフタは不要です。

配線は、
Arduinoの2番ピンを入力PINとして、nRF24のTXピンに接続、
Arduinoの3番ピンを出力PINとして、nRF24のRXピンに接続
nRF24の裏面のBR2をショートして、通信速度を9600bpsに設定。




PCのシリアルモニタで見ると、以下のように正常に各ANTセンサーからの情報を受信し、PCへシリアル送信しています。


「パワーが700wで心拍が70は正常でないだろ」
と思われてしまいそうですが、これはANTシミュレータ
を使っています。

このシミュレータを使うと、パワーメータ等のセンサーの出力をシミュレートして電波を送信したり、市販のANT対応センサーの電波を受信して、ログをとったりできます。
(ZWIFTで使うようなUSBのANTドングルが必要です。)

こちらのANTのサイトでフリーで入手しましたが、最新版は、あれこれ変更されてるかもしれません。
ttps://www.thisisant.com/

今回のArduino+nRF24用のANT受信サンプルのソースコードを以下のサイトに置きました(本日の日付をファイル名としています)。
(実際にアクセスする場合、末尾の000を削除して1138で終わるようURLを修正する必要があります。ロボット除けのためで、お手数をお掛けします)
ttps://sites.google.com/site/myfiles1138000

あと、このサンプルのソースコードを動作させるには、
#define NETWORKKEY {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55}
となっている箇所を正しいNETWORKKEYに置き換える必要があります。

www.thisisant.comからANTの仕様とNETWORKKEYを入手する際、NETWORKKEYを公開しないことを約束している(させられている)ためです。
無視して、公開してる方もいるようですが・・・












2017年4月25日火曜日

$49パワー計のひずみゲージ考(2)

前回のグループ分けに沿って、実験をしてみました。

■グループ2:パワー算出用のトルク検出用とは別に、余計な力成分の検出用ひずみゲージを設けてパワー値の補正をしている。
 Shimano、Quarq Cinqo、4iii

以下、パイオニア特許図面です。

ペダルの外側を踏むと、赤の矢印方向に捻じれがより大きく生じ、ひずみゲージ369a8は伸びて、369b8は縮む。
これを利用すると、どの程度ペダルの外側を踏んでいるか把握できるので、このデータを利用してパワー値を修正する。

4iiiの米国特許出願でも同様の記載があります。

試しにやってみた。
結果は・・・キャリブレーションが面倒。

パワー測定用のひずみゲージ回路とは別に、補正用ゲージのキャリブレーションも緻密に行う必要がある。
お手軽パワーメータを目指す今回の目的には合致しないので、どうするか悩み中です。
ただ、この方式を実装すれば、設計が甘い潔い市販品よりも正確なパワーメーターを作れます。


■グループ3:上記グループ2のような補正はないが、構造上、余計な力成分の影響をあまり受けない。

 SRMを見習ってスパイダーアームの以下の赤丸位置にひずみゲージを張って、ペダリング。

結果は・・・ひずみの変化量が足りない。
剛性がなく柔らかめのTiagraクランクでテストしましたが、あまり歪の変化がない。
ひずみゲージを張る位置を見直して再度トライする予定です。

もう一つ、正確なpowertapハブのように、円柱の軸にひずみゲージを張り、トルクを測定する方法。
以下のように、クランクシャフトの中にひずみゲージを張ってペダリング。


これは、正直、一番期待していました。
構造はpowertapと同じに思えたし、ひずみゲージ、充電池、電子回路をすべてシャフト内に収納できる。
見た目が以下のようにすっきりするし(写真はボケてますが)、失敗してもクランクの外観に傷がつかない。


結果は・・・ペダルの外側を踏むとパワー値が小さくなる。
「またまた冗談でしょ」
と再度ペダルの踏位置を外側に。
結果は同じ。ガックシ。

円柱にひずみゲージを張る場合、以下のOMEGA社の解説の図Fのように張る。
Powertapハブも同じ。


しかし、クランクシャフトの場合、左のクランクアームがボルトで固定されるため、ペダルの外側を踏むと、クランクシャフトが外側に引っ張られて、すべてのひずみゲージが横み引っ張られて縮んでしまう。
この結果、パワー値が小さくでてしまうと推測。

では、この方式を採用しているRotorのINPowerは大丈夫なのか?
ある記事に「INPowerは、大きなトルクで低回転で踏んだ場合、またスプリントで800w以上出した場合に、パワー値が低く出る」とのコメントが。
要は、大きなトルクでシャフトが外側に引っ張られて、パワー値が小さく計測されるような。
私の実験結果と同じ?

この方式の最大の欠点は、ひずみゲージの張りにくさ。
ゲージの接着に2回ほど失敗して、心が折れました(不器用なので)。
とてもお手軽とは言えません。


■グループ4:パワー算出用のトルク検出は行うが、補正は行わない(潔い)。少なくともホビーレーサーのFTP領域以下では、補正を行う必要はなく、正確。

結局、現時点で、一番お手軽なのは従来通りクランクアームの上下に4枚ひずみゲージを配置する方法かと思います。
でも、クランクのねじりに対する補正はありません。
したがって、動物園で、象さんに
「ペダルの外側を踏んで、パワー値が大きく出るか見てくれる?」とお願いして
「分かったゾウ」(寒)
と了解してもらえば、すぐに影響が出るとは思いますが、人力の場合は不明です。

以下の左のゲージは、eBayでよく販売されている幅広のもの。
右のゲージは某国産の曲げ測定用のもの。


左の幅広タイプのゲージは、右のタイプに比べて、ペダルの外側を踏んだ際に生じる捻じれによく反応してしまう。
ネット上に、この幅広タイプのゲージをクランクアームに付けて「簡単にパワーメータを作れた」という記事もありますが、おそらく、ペダルの外側を踏むと、問題にぶつかると推測してます。

右側の細長のゲージをフルブリッジ(ゲージ4枚構成)で、クランクアームのペダル軸に近い場所に配置したところ、700w(私がペダルの端っこを踏んで安定出力できた最大値)程度では、ペダルの外側を踏むことによる影響はでていません。

以下のサイトでは、FEAによる分析で、クランクの捻じれがどのように出るか、CG化されています。ひずみゲージの位置決めの参考になります。
ttps://hackaday.io/project/2314/logs

実際に、どの程度のトルクから影響が出るは、ペダル軸の長さ(TIME製は短く、フラぺは長い)、クランクの剛性によると思います。

パワートレーニング本にあるトレーニングメニューでは、FTPの200%までしか使っていません。
とすれば、700wを正確に計測できれば、FTP350wまでは対応できることとなります。
FTP300wを切って久しい私には十分で、もう、この方法でいいじゃん、という誘惑と格闘中です。



2017年4月19日水曜日

$49パワー計のひずみゲージ考

以下はshimanoの特許図面。
パワーメータのトルク(図18のFΘ)算出には、他の3つの方向の力(図19のFz、図20のFrおよび図21のMから生じる捻じれ方向の力)をすべて測定したうえで、FΘの値を補正する必要があると知る。



上記図21の捻じれ方向の力はわかりにくいが、以下のパイオニア特許の図6(b)の通り、ペダル103を踏んだ時に、クランクアームには、rzの捻じれ方向の力が発生する。




パワー計測には、FΘの力だけを検出したい。しかし、ペダリング時には、Fr、Fzおよびrzの力がかかる。
シマノ特許の図18にある、上側のひずみゲージ138,178は、FΘの力がかかると伸びる。
しかし、Fz、Frおよびrzの力にも影響されて、実際には更に伸びてしまう。
その結果、乗り手にわかる現象として、ペダルの外側を踏むと、パワー値が実際よりも大きく出てしまう。
これを除去するには、rz、Fz、Frも測定してFΘから余分な力成分(rz、Fz,Frの影響度)を算出して除去する必要があるとのこと。

では、市販のパワーメータはどうなっているか。

以下、独断と偏見で、市販のパワーメータが、ひずみゲージが拾ってしまう余分な力成分をどのように処理しているか、分類してみた。
ちなみに私は、理工系の教育を一切受けていない、ド素人ですので、以下の内容は、勝手な妄想と思ってください。

■グループ1:余計な力成分を拾わないようメカ設計されている
 Powertap, InfoCrank

■グループ2:パワー算出用のトルク検出用とは別に、余計な力成分の検出用ひずみゲージを設けてパワー値の補正をしている。
 Shimano、Quarq Cinqo、4iii

■グループ3:上記グループ2のような補正はないが、構造上、余計な力成分の影響をあまり受けない。
 SRM。
 SRMは、ローギアのときは左に、トップギアのときは右にスパイダーアームが引っ張られ、余計なひずみが生じるが、この影響を補正する構造が見当たらない(少なくとも2ゲージのモデルでは)

■グループ4:パワー算出用のトルク検出は行うが、補正は行わない(潔い)。少なくともホビーレーサーのFTP領域以下では、補正を行う必要はなく、正確。
 R社INPower(たぶん)

■グループ5:ホビーレーサーのFTP領域ですら、トルクが不正確で補正なし。パワーメータとして機能しない。
 PowerCal、先日、自分で作った失敗パワーメータ。

$49.99の手作りパワーメーターはどのグループを目指すか。
今回は、お手軽お手頃に誰でも付けられるパワーメーターを目指したい。
「パワーメーターは欲しいが奥方の承認を得られない」という方でも、$49.99ならば「役員に飲み会に誘われて付いていったら、しょぼい居酒屋だった挙句、代金も均等負担だったつもり貯金」で賄える。

グループ1は論外。

只今、グループ2、3,4に属するものを実験中。











2017年3月21日火曜日

49.99ドルで手作りパワーメーター




基本的な部品構成は:
- ひずみゲージ($7以下@ebay)
- AD7124-4(ADコンバーター $11@Digikey)
- D52Q(Dynastream製nRF52モジュール(マイコン) $17@Digikey)
- Reed スイッチ(300円@秋月)
- DCコンバータ(単四電池を3.3vへ昇圧)+SSOPピッチ変換基板(約350円@秋月)

動作は、ひずみゲージでクランクのひずみを計測し、ADコンバータでデジタルデータ化し、これをもとにnRF52モジュールでパワー値を算出し、ANT+規格で送信する。
ANT+対応のサイコンやsmart phoneでデータを表示・記録できる。


■組み立て方

豆電球を点灯するには、電池のプラスとマイナスを接続しますが、
マイコンとADコンバータも同様にプラスとマイナスを接続すると動作します。
ただ、仕様上、最低電圧が2.7vとされているので、DCコンバータで乾電池の出力を3.3vに昇圧します。





さらに、ADコンバータとnRF52モジュール(マイコン)間の通信を行う信号線を3本接続します。
各信号線の意味は:
MOSI=MasterOut, SlaveIn=親のnRF52から出力し、子のADコンバータへ入力の信号
MISO=MasterIn, SlaveOut=親のnRF52へ入力、子のADコンバータから出力の信号
SCLK=上記の信号線の通信速度を決めるクロック信号。
   (通信速度が、ピー、ピッピなのか、ピーーー、ピッーーピなのか決める)

ここに、REEDスイッチ(クランクが1回転したことを検知して、マイコンがパワー計算を開始するために必要)を取り付けて完成。(あ、あとAD7124に2つコンデンサをつけます)
小学生でもできてしまいます。


■ 胡散臭くないか?

昔は50万円、今でも数万円するパワーメーターを$49.99でつくれてしまうというのは、いかにも胡散臭い。
そこで、胡散臭さを分析してみた。

以下はパイオニアのパワーメーターの特許図面。


測定モジュール(Pioneerクランクに付いてる“おにぎり”モジュール)301の大部分は、nRF52モジュールとAD7124でカバーできている。
それ以上のものはない。
したがって、部品構成には胡散臭さはないと思う。

では、部品選択はどうか。
ANT+対応の無線送信機能を備えたマイコンは、Nordic社とTI社からリリースされている。パワーメーター各社がどちらのマイコンを採用してるか不明だが、ANT+規格を発案したDynastream社は、最近では、Nordic社のモジュールしか製品に利用していない。
また、消費電力もNordic社は優れており、多くのメーカは、Nordic社のnRF51を採用していると勝手に推測している。(nRF52モジュールは、リリースされて間もないので、あまりパワーメーターには採用されてないハズ)
PZ-4999が採用したnRF52は、nRF51の後継で演算速度と省電力性能が改善されており、勝ることはあっても劣ることはない。

ADコンバータ、AD7124-4は、最新世代の24bitのADコンバータ。
1秒間に100回程度読み取る設定で、スペック上の有効ビット数は22Bit.
パイオニアがパワーメーターを発売した2013年当時の24bitADコンバーターは、1世代前の性能で、スペック上の有効ビット数は20bit。
さらに1世代前のものは有効ビット数18bit。
AD7124-4は、最もノイズの少ない世代のADコンバータ。

eBayで$7で買った1000ohmのひずみゲージは・・・
胡散臭さがプンプンです。
今まで使ったことがないので、要経過観察です。
いままでは、大手のOMEGA社のものをメインに使ってました。
同じ条件で比較はしてませんが、明らかに感度が違うような・・・

一番重要なのはひずみゲージのパターンと取り付け位置であると、パイオニア、シマノおよび4iii社の特許を読んで勉強したので、PZ-4999では、今までとは異なるひずみゲージの張り方にしました。
これは次回以降で。
















2017年2月14日火曜日

AD7124-4

「チューブラーがパンクしちゃったつもり貯金」で製作するパワーメーター「TP-002」に採用したADコンバーターltc2472の読み取り値が安定しない。
とある週のゼロオフセット値(負荷ゼロでクランクを地面に垂直に向けたときの値)
火曜日:745
水曜日:746
木曜日:743
金曜日:750
土曜日:728

ADコンバーターが週末で心躍ったのか、値が大きくずれる。
これでは、週末に必ずゼロオフセット値を校正しなければならない。
原因はあれこれ考えられるが、思い切ってADコンバーターを24bitのAD7124-4に変えてみた。




早速クランクに付けたひずみゲージの値を取得。


有効ビット数は約20bitか。これは期待できる。

TP-002を仮組して、パワータップハブと比較してみた。


TP-002とパワータップハブのそれぞれについて、3回計測平均値をグラフ化。
縦軸がワット数。
上下の振れが大きい方がパワータップハブ。
24bitADコンバーターは16bitよりも安定した数値を得られ、
「今のは明らかに数値がおかしいだろ」というのがない。

グラフの後半、TP-002の値がパワータップハブより低めに出ている。
これは、ひずみゲージに電流を流しすぎた結果と推測。
ひずみゲージは電流制御をしないと、最初の数十分は数値が少しずつ、ずれてしまう。
今回も、電流制御なしの簡易セットアップだったので、その点が正確にデータに現れていると思う。

「最初の20分は安定しないパワーメーター」が某メーカーから市販されていたこともあった。


実験を繰り返すも、AD7124-4でもゼロオフセット値が日によってずれると判明。
ひずみゲージが壊れてるのか?

(2017年3月21日更新)
ひずみゲージではなく、ひずみゲージのブリッジ回路が損傷しており、ゼロオフセット値がずれる現象がでていました。