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とか送信してくるため(勿論、平均を表示させれば正確です。)、やや使いづらいと感じます。
構造的には素晴らしいアイデアと技術のパワーメーターではありますが。

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