2019年3月14日木曜日

誰でも簡単!?手作りパワーメーター(準備中)

現時点で最もお手軽に作れるクランクアーム型パワーメーターを製作しました。

■必要なハードウェアは
1)歪ゲージ付きアルミクランクと
2)電子回路

電子回路の基本モジュールは
- ADコンバータHX711(約150から350円。eBay、秋月等)と
- 無線マイコンBL652(約900円@Digikey)
の2つのみです。




■動作原理
電子回路に通電すると、
- マイコンBL652がADコンバータHX711にひずみゲージの値を読み取るよう命令を発行
- HX711は、約80回/秒でBL652にひずみゲージの値を送信
- クランクが1回転し、REEDスイッチがバイク・フレーム上のマグネット上を通過すると、REEDスイッチが磁力でONとなり、BL652が1回転に要した時間(ミリ秒)とそれまでに取得したひずみゲージの読み取り値の平均値をBLEで無線送信
- AndroidでBLE信号を受信し、パワー値を算出し、画面にパワー表示

以降、この繰り返し
です。

■組み立て

各電子部品を以下のように結線します。


赤線と黒線は、電源ラインです(赤が+、黒が-)。
ADコンバータとマイコンの接続は、緑とオレンジの2本のみの簡単配線です。

電池は、爆発リスクがなく充電できるeneloop、これをAE-XCL102D333CR-G(300円@秋月)で3.3vに昇圧しています。

HX711は読み取り速度を80Hzに変更(PIN15を浮かせてVDDに接続)しておきます。
HX711をひずみゲージに接続します。
<解説準備中>



個々のひずみゲージはただの可変抵抗と考えられ、プラスマイナスの極性はありません。
でも裏表はあるので、張り付けるときは、要注意です。

私は、アルミ用のひずみゲージを使用しています。
鉄用のは、未だに使いこなせておりません。

張り方はこちらで紹介されています。
https://shinshu-makers.net/shinshu_makers/2019/03/11/%e3%80%90mft2019%e3%80%91%e7%b0%a1%e5%8d%98%e8%87%aa%e4%bd%9c%e3%83%ad%e3%83%bc%e3%83%89%e3%82%bb%e3%83%ab%e8%ac%9b%e5%ba%a7%ef%bc%91%ef%bc%9c%e5%8d%8a%e6%97%a5%e3%81%a7%e4%bd%9c%e3%82%8c%e3%82%8b/

ありがとうございます。

ひずみゲージは4個を1組にWheastone bridge(下のOMEGA社の資料の図B)として結線します。
なぜか・・・
頭の良いWheastone氏がそれがよいと考えたから。
それを真似すれば間違いない。
当初は、本当にこんなレベルでやってました。








配線が無事に完了すると(120Ωのゲージの場合)
Exc+とExc- 間は約120Ω
Exc-とSig+間は約90Ω
Exc-とSig-間は約90Ω
上記から大きく抵抗値がずれる場合は配線に失敗してるので、見直します。

クランクへの貼り付け位置は、下のOMEGA社資料にある、bending strain計測用の図Cの位置に貼るのが基本のようです。





ハード的にはこれだけです。
あとフレームに100均マグネットを一つ、クランク上のReedスイッチ(1パック300円@秋月)が通過するそばにはります。

以下、パイオニアの説明書の引用ですが、同じように磁石をフレームに貼ります。
“マーク” との記載あるクランク箇所にReedスイッチをつけます。


ソフトウェアについては、
AndroidからマイコンBL652に、パワー計のファームウェアをUPLOADし、
<UPLOAD方法要説明追加>
対応アプリをAndroidにInstallすれば、パワー表示できます。

上記はデバッグ・アプリです。
クランク上のBL652からは、「:;001812E004D00268」
というフォーマットで文字列がBLE無線送信(advertise)されています。

この文字列の意味は上の図のとおり、
青□が歪ゲージの読取値(平均)
緑□が温度(BL652内蔵温度センサ)
ピンクがクランクが360度回転に要した時間ミリ秒
赤字がこれらをもとに算出したパワー値(3回転Average)

上記のAndroidのデバッグ・アプリは、このadvertiseを受信し、
パワー値を算出し、表示しています。
このadvertise送信を受信する方法は、connectionをはる必要がないので、安定して受信できるメリットがあります。
BLEのconnectionが切れて、データを受信できなくなることがなくなります。

ただ、このADVERTISEを1秒間に複数回受信できるのは、私の知る限りSONYのXPERIA Zシリーズのみです。
ジャンクなAQUOS, ARROWS, GALAXYのいづれも、受信が安定せず、最悪6秒程度、データを受信できない場合もありました。
BLEチップのファームかドライバの実装の問題のようで、ANDROID OSからでは、どうやっても解決できませんでした。


BLE無線送信用のファームウェア(.inoファイル)と
Androidデバッグ・アプリ(.zipファイル)のソースコードをUPLOADしました。
ttps://sites.google.com/site/myfiles1138000
本日の日付のファイル名です。
(実際にアクセスする場合、末尾の000を削除して1138で終わるようURLを修正する必要があります。ロボット除けのためで、お手数をお掛けします)

Androidの開発環境は、
Ubuntu 16.04
Android Studio 3.1.2

【ANT+対応(ZWIFT対応)について-ご質問へのご回答】

ZWIFTでパワーデータを受信するには、パワー計がBLEかANT+のPowerプロファイルに対応する必要があります。

今回の記事のパワー計は、いずれのパワー計プロファイルにも対応していません。
あくまで、BLEのAdvertiseをAndroidで受信して、パワー表示をしてます。



これをANT+に対応するには、
1.市販品のようにクランクからANT+で無線送信するか、
2.パイオニアのように一旦サイコン側でパワーデータを受信し、ANT規格に変換して送信しなおす必要があります。

上記1.は、クランク上の電子回路が複雑になります。クランク上の電子回路はその衝撃と遠心力で故障リスクが高いため、なるべく簡素化したいので、ANT送信モジュールは載せたくありません。
上記2.は、AndroidでANT無線送信する手段が考えられますが、簡単に作れるソースコードを持ち合わせておりません。

そこで、クランクからAdvertiseされてる無線データを拾い、ANT+規格に変換してZWIFTやGARMINに送信するデバイス「ANTコンバータ」を作りました。



クランクのデータは、AdvertiseとしてTV放送波のようにbroadcastされているので同時にAndroidとANTコンバータで受信可能です。

ハードの構成


BL652でクランクのデータを受信し、ArduinoProMiniにTx信号線で送信、
Arduinoは、HARDWARE Rx端子で受信して、パワー値を算出、ANT送信モジュール(D52またはAP2モジュール。詳細は2019年4月19日の「ArduinoとANT無線中継機とZWIFTオーバーテイクボタン」にあります)でANT送信します。

ANT+については、2019年5月現在、自作パワー計でもZWIFTはパワーデータを受信しています。
ただ、ZWIFTの問題として、PCのスペックが低いと、時折0Wと表示されてしまう問題を抱えているようです。


ANTコンバータ用のBL652とArduinoのソースコードを以下のサイトに置きました(2019/05/25の日付をファイル名としています)。

(実際にアクセスする場合、末尾の000を削除して1138で終わるようURLを修正する必要があります。ロボット除けのためで、お手数をお掛けします)

ttps://sites.google.com/site/myfiles1138000

なお、ANT通信を行うには、NETWORK KEYを入手してソースコードに書き込む必要があります。
このあたりは信州Makers管理人様が詳しく公開されております。
いつもありがとうございます。
http://maru-yo.net/shinshu_makers/2017/08/15/%E3%80%90%E3%83%91%E3%83%AF%E3%83%BC%E3%83%A1%E3%83%BC%E3%82%BF%E3%83%BC%E3%80%91antatmega328p%EF%BC%88%E5%86%85%E8%94%B58mhz%E6%8E%A5%E7%B6%9A%EF%BC%9C5v-3-3v%E3%82%82%EF%BD%8F%EF%BD%8B%EF%BC%9E/







8 件のコメント:

  1. 前々からこちらのブログは拝見させていただいていて、トレーニング用に買ったスピンバイクに付けられないものかと思っていましたが(自分はランの方がメインです)、今回の記事を参考にやってみようと思っています

    返信削除
  2. こんなニッチなサイトにご興味をもっていただきありがとうございます。
    確かにスピンバイクには自作のパワー計をつけるのが合理的に思えます。
    さらにご不明な点がございましたら、何なりとお問い合わせください。

    返信削除
  3. お世話になります。
    いつも興味深く拝見させて頂いております。
    貴兄の探究心の素晴らしさに触発され効果なパワーメータを
    購入することなくトレーニングができるのではないか?と
    わくわくしながら読ませて頂いております。
    ところで、この記事では表示デバイスにandroid端末を利用されて
    おりますが、例えばZwiftでのパワーメータとして利用することは可能でしょうか?
    お手数でなければヒントをご教授頂ければ幸いです。
    よろしくお願いいたします。

    返信削除
    返信
    1. m_taki様
      コメント誠にありがとうございます。モチベーションが上がります。
      【ANT+対応(ZWIFT対応)について-ご質問へのご回答】
      というセクションを記事に追加して、回答させていただきました。
      これが、現時点での私のZWIFT対応の方法です。
      かなり、わかりにくいかと思いますので、さらなる疑問がございましたら、なんなりとお申し付けください。

      このANTコンバータは、受信のタイムラグが大きく、4秒程度またないとクランクのデータを受信できません。

      そこで、別途Androidとそのサブモニタ的なものを1体のシステムとして、ANT対応しようと考えております。

      削除
  4. DgradeDIY 様

    遅くなりましたが、ご丁寧にご教授頂き感謝感謝です。
    (どうも、ポストできていかなったようです)

    記事内容およびソースファイルを拝見さえて頂きましたが、
    まだまだ勉強不足で先は長そうですが諦めずに楽しみながら
    試行錯誤していきたいと思います。
    今後も貴兄の活躍を期待します!!

    返信削除
    返信
    1. ご丁寧にありがとうございます。
      今後は、もっとわかりやすい情報発信を心がけていきたいと思います。

      削除
  5. 自転車ペダルに取り付ける位置と荷重データをハンドリングできるセンサーを探していてこのページを見つけました。特定の仕様を満たすセンサー作成を依頼することは可能でしょうか?

    返信削除
    返信
    1. 当方、第三者が開発した部品/ソフトウェアに依存した製作活動をおこなっているため、製作したものが特定の仕様に100%合致することをお約束することはできない状況にございます。

      しかし、現在、馬車馬のように働く立場ではなく、時間的余裕はございますので、
      何かお困りな点がございましたら、お気軽にお申し付けください。
      できるだけご協力させていただきます。
      私では力不足と思われますが、あるプロの技術者の方にご協力いただけそうです。
      ご依頼されたい事項ごがございましたら以下のアドレスにご連絡をお願いいたします。
      @gmail・comの前にthx1138x008

      削除