最安24bit ADコンバータHX711モジュールが秋月から発売されている、と信州MAKERS管理人様より情報をいただいておりました。
秋月では350円、eBayでは100円未満のもあります。その名称にかかわらず、セブイレブンでは取り扱いがないようです。
これを利用して価格優先パワー計を製作してみました。
HX711は温度計を内蔵せず、温度補償機能を簡単に実装できないため、パワーメーターというより、Power Estimatorと呼ぶほうが適切かもしれません。
◆ 基本動作と使用部品
クランクアームのひずみゲージの値をHX711で読み、Arduinoでパワー値を算出後、SPP-CでBluetooth送信、PCのteratermやAndroidのbluetermアプリで受信・表示する、というものです。
◆ ひずみゲージ 約200円@ebay
前回までは、スパイダー・アームにひずみゲージを貼っておりましたが、走行中にランダムにゼロオフセット値が変化することがある、という問題が出ております。
そこで、新しいひずみゲージの貼り方を試してみました。
ネットで海外の自作パワーメータ製作者の方が投稿していた方法です。
写真は右側クランクアームで、ペダリングすると、アームのひずみゲージ面が右方向に延び、左のひずみゲージが伸び、右のひずみゲージが縮みます。
クランクアームの裏面の対象位置にも同様にひずみゲージを貼り、こちらは、ひずみゲージ面の縮みにより生じるひずみの変化を電圧に変換します。
◆ADコンバータHX711 約100~350円
HX711は仕様上は、10SPSか80SPS(1秒間に10サンプル計測か80サンプル計測)でADコンバートが可能です。
しかし、秋月のモジュールでは、10SPSに固定されています。
10SPSでは、パワー計として使えないので、80SPSで動作するよう改造します。
データシートをみると、15番ピンをGNDに落とすと10SPSに、VCCに上げると80SPSになるようです。
早速、15番ピンとGNDをつなぐパターンをカッターで切断します。
結果・・・失敗。
見た目は切断されましたが、テスターでは、15番ピンはGNDとつながってました。
ならばと、15番ピンをプリント基板から浮かせて、GNDから分離する方法を試みます。
ゼッケンピンの針先部分で、15番ピンを上方向に持ち上げる圧力をかけながら、半田ごてを当てて加熱。
簡単にピンがプリント基板から浮き、無事に基板上のGNDから分離されました。
浮いた15番ピンをお隣の16番ピンVCCに半田付けします。
これで80SPSで動作するようになりました。
◆Arduino 約200円@ebay
消費電力の低いArduino ProMiniの8Mhz品を使ってます。
これをさらに消費電力を落とすため、prescalerで4Mhzに落として駆動します。
HX711とArduinoは、電源線(VCC, GND)に加えて、HX711のData線、Clock線の2本をそれぞれPIND6, PIND7につなぐだけで動作しました。
今回のArduinoのソフトウェアはいつもの場所に置きました(余分はコードもいっぱいはいってますが)。
ひずみゲージのゼロオフセット値やスロープ値をArduinoのEEPROMに保存し読出す関数は、こちらのサイトのものを使わせていただきました。ありがとうございます。
ttp://projectsbiotope.blogspot.com/2010/11/2-eeprom.html
◆昇圧DCDCコンバータ+REEDスイッチ+磁石+SPP-C 約700円
今回は単四電池で駆動したため、1.2v->3.3vのDCコンバータを利用しました。
角速度を算出するためにREEDスイッチを使用し、フレームには磁石を張り付けています。
IMUは、信州MAKERS管理人様よりアドバイスはいただいておりますが、まだ実装できておりません。
Bluetoothモジュールと置き換えでArduinoからのシリアルデータをもとに、ANT+規格でパワー値を送信するモジュールを別途製作中です。これを取り付ければ、ANT対応となります。
部品代の総額は1500円程度とお手頃価格に収まりました。
電子部品を3Dプリントしたオレンジのおにぎりの中収めます。
(イメージ図)
試作中で、ひずみゲージとその配線の整理ができておらず、実際はこんな小汚い状態です
基板類はすべておにぎりに収まり、また、おにぎりはこの位置だとペダリングに干渉することなく、取り扱いが楽です。
早速実験開始・・・結果・・・失敗。
ひずみゲージの配置/種類がNGでした。
同一負荷、同一ケイデンスで回しつつ、フラットペダルの踏位置を内側から外側にずらしていきます。
内側=155wで、外側=180w。
ダメダメです。
ペダルのより外側を踏むとより大きく生じる、クランクのねじれのひずみを大いに拾って、外側を踏むと大きなパワー値が表示されます。
しかし、ここまで派手にクランクのねじれに反応してくれると、むしろねじれの影響がよくデータとして見えるので、補正もしやすいのでは、と気づきました。
パワー測定用のひずみゲージの値を、クランクのねじれ測定ゲージの値で補正する、というのが簡単にできそうな予感です。
Tが真のパワー値とします。
ペダルの踏み位置が1から2へと外側にずれるに従い、パワー計測用のひずみゲージ(Gage1)の値が、クランクアームの捻じれにより大きく計測されてしまう(100wのはずが120w)、というのが今回の失敗です。
この誤った値に対して、ペダルの踏み位置計測用/クランクアームの捻じれ計測用のゲージ(Gage2)の値を利用すれば、補正係数を割りだし、真の値T(100w)に補正できるはず、というかそうすればいい、とPioneer, Shimano, および4iiiiの特許出願に書いてありました。
クランクアーム式ももう少し検討しますが、そもそも、ギアがインナーのときとアウターのときで、同一負荷でも見過ごせない誤差を生じるデータが出たりと問題山積です。
4iiiiのパワー計開発者の方のこちらのフォーラムでの発言もそれを裏付けています。
ttp://forum.slowtwitch.com/forum/Slowtwitch_Forums_C1/Triathlon_Forum_F1/4iiii_Precision_arrived_P5495248/
これを見て、市販のパワー計が表明している精度2%未満とかは、相当な量の前提条件をあれこれ置いたときの値なんだな、とわかりました。
2017年10月23日月曜日
2017年9月3日日曜日
スマホ、サイコン化計画
サイクルコンピュータには、GARMINを利用してきましたが、どうも文字が小さく「老眼の人は使わないで結構です」といわんばかりです。
そこで、Smartphoneをサイクルコンピュータ化してみました。
技術的には、ANT心拍/パワー/速度等の各センサーの情報をスマートフォンにWiFiで転送するデバイスを製作してみました、というものです。
現状品
スマートフォンのブラウザで各センサーのデータを表示します。
スマホなので、画面の拡大、縮小やスクロールが楽です。
ピンチ操作で拡大してみました。
サイクルコンピュータは、ボタンを押しにくいものが多く、よく不便に感じてましたが、だいぶ改善できたと思います。
また、夏は、信号ストップでサイコンを見て「今、気温43度!熱すぎるー」と空騒ぎするのが自転車の楽しみですが、GARMINは温度表示がかなりいい加減です。
感覚的に誤差が±4度くらいあり、誤差範囲がANTチップ内蔵の温度センサーと重なることから、ANT受信チップ内蔵の温度計をそのまま使ってると推測します。
もう少し温度の精度がほしいです。
丁度、BME280というチップが、温度、湿度、気圧を計測でき、温度誤差は±1度なので、これを採用しました。
今回のハードウェア構成です。
-D52(Dynastream製ANTモジュール)- これでANTセンサーの無線情報を受信します。
-BME280 - これで温度、湿度、気圧を計測します
-Arduino Pro Mini - 上記2つのモジュールからデータを受信し、文字列として、ESP-WROOMに転送します。
-ESP-WROOM - WEBサーバとして機能し、各センサーの情報が反映されたWEBサイトをブラウザに送信します。
クライアントは、スマートフォンに限らず、WEBサイトを表示できるデバイスならば、PCでもタブレットでも、腕時計でもOKです。
専用のAppを入れる必要もなく、WiFiのアクセスポイントをESP-WROOMに変更し、ブラウザで、192.168.10.1にアクセスすれば、ブラウザで画面表示され、1秒置きにページが更新される仕組みです。
配線図
ソフトウェアは、Arduino ProMiniはもちろん、ESP-WROOMもArduinoとしてプログラムを書き込んでいます(ESP-WROOMをArduino IDEで書き込む方法はGoogle検索でたくさんでてきます)。
BME280へのアクセスは、GIT HUBのSWITCH SCIENSE製のソースコードをそのまま利用させていただきました。
つづく
そこで、Smartphoneをサイクルコンピュータ化してみました。
技術的には、ANT心拍/パワー/速度等の各センサーの情報をスマートフォンにWiFiで転送するデバイスを製作してみました、というものです。
現状品
スマートフォンのブラウザで各センサーのデータを表示します。
スマホなので、画面の拡大、縮小やスクロールが楽です。
ピンチ操作で拡大してみました。
サイクルコンピュータは、ボタンを押しにくいものが多く、よく不便に感じてましたが、だいぶ改善できたと思います。
また、夏は、信号ストップでサイコンを見て「今、気温43度!熱すぎるー」と空騒ぎするのが自転車の楽しみですが、GARMINは温度表示がかなりいい加減です。
感覚的に誤差が±4度くらいあり、誤差範囲がANTチップ内蔵の温度センサーと重なることから、ANT受信チップ内蔵の温度計をそのまま使ってると推測します。
もう少し温度の精度がほしいです。
丁度、BME280というチップが、温度、湿度、気圧を計測でき、温度誤差は±1度なので、これを採用しました。
今回のハードウェア構成です。
-D52(Dynastream製ANTモジュール)- これでANTセンサーの無線情報を受信します。
-BME280 - これで温度、湿度、気圧を計測します
-Arduino Pro Mini - 上記2つのモジュールからデータを受信し、文字列として、ESP-WROOMに転送します。
-ESP-WROOM - WEBサーバとして機能し、各センサーの情報が反映されたWEBサイトをブラウザに送信します。
クライアントは、スマートフォンに限らず、WEBサイトを表示できるデバイスならば、PCでもタブレットでも、腕時計でもOKです。
専用のAppを入れる必要もなく、WiFiのアクセスポイントをESP-WROOMに変更し、ブラウザで、192.168.10.1にアクセスすれば、ブラウザで画面表示され、1秒置きにページが更新される仕組みです。
配線図
ソフトウェアは、Arduino ProMiniはもちろん、ESP-WROOMもArduinoとしてプログラムを書き込んでいます(ESP-WROOMをArduino IDEで書き込む方法はGoogle検索でたくさんでてきます)。
BME280へのアクセスは、GIT HUBのSWITCH SCIENSE製のソースコードをそのまま利用させていただきました。
つづく
ラベル:
サイクルコンピュータ,
マイコン
2017年8月11日金曜日
ペダリングモニターのひずみゲージ
数少ない、貴重な、本ブログに興味をもっていただいた方から、メッセージをいただきました。パイオニアのペダリングモニターのひずみゲージ配置を知りたいとの内容です。
このような高度な質問に限らず、初歩的な小学生からの質問、小学生になりすました大人からの質問も歓迎です。
パイオニアのおにぎりは単品販売もあったようです。
ペダリングにより、クランク・アームが下方向に踏まれると、ひずみゲージF1は伸び、F2は縮みます。
これによりトルクを算出できますが、ハーフ・ブリッジであることもあり、このひずみゲージ配置では、クランク・アームのねじれに弱いです。
具体的には、同じパワーでペダリングしても、内側で踏むより外側を踏んだ方がよりパワー値が大きく表示されます。外側を踏むとクランクアームがより捻じれ、ゲージF1がより伸びてしまうためです。
4iiiiは、捻じれの程度を計測するshearゲージ(45度方向の伸びを計測するゲージ)を追加で配置して、この問題を補正しています(特許出願にそう書いてあったので)。
こう書くと、パイオニア製品をけなしているようですが、個人的には、よい戦略の製品だと思います。
パワー値だけを計測するパワーメーターでは、すぐに価格競争に巻き込まれてしまうので、あえてペダリングモニターというものを生み出したはずで、今後も頑張ってほしいです。実際、チーム内でも、パイオニアペダリングモニターで特訓の結果、FTPを30%以上のばしているケースもあり、捻じれ問題は懸念するに足りないと思います。後はペダリングモニターでなければできない、決定的なメリットを主張できれば、とてもよいのですが・・・
歪ゲージY1とY2は、クランクアームの長手方向の伸びを計測します。クランクアームが伸びると、Y1は縮み、Y2は伸びます。正方形のゲージ(Poisson Guage)は、このような用途の計測に向いているそうです。
ゲージF1、F2で計測される回転方向の力と、ゲージY1,Y2で計測される長手方向の力を比較すれば、どの方向に踏んでいるか判定でき、ペダリング方向のベクトル表示が可能となります。
なぜ、F1,F2とY1,Y2はそれぞれハーフブリッジか・・・特許出願によるとコストが一つの要因のようです。
特注のひずみゲージは、それなりの価格であると、某外国メーカーがインタビューで答えておりました。
このような高度な質問に限らず、初歩的な小学生からの質問、小学生になりすました大人からの質問も歓迎です。
パイオニアのおにぎりは単品販売もあったようです。
ペダリングにより、クランク・アームが下方向に踏まれると、ひずみゲージF1は伸び、F2は縮みます。
これによりトルクを算出できますが、ハーフ・ブリッジであることもあり、このひずみゲージ配置では、クランク・アームのねじれに弱いです。
具体的には、同じパワーでペダリングしても、内側で踏むより外側を踏んだ方がよりパワー値が大きく表示されます。外側を踏むとクランクアームがより捻じれ、ゲージF1がより伸びてしまうためです。
4iiiiは、捻じれの程度を計測するshearゲージ(45度方向の伸びを計測するゲージ)を追加で配置して、この問題を補正しています(特許出願にそう書いてあったので)。
こう書くと、パイオニア製品をけなしているようですが、個人的には、よい戦略の製品だと思います。
パワー値だけを計測するパワーメーターでは、すぐに価格競争に巻き込まれてしまうので、あえてペダリングモニターというものを生み出したはずで、今後も頑張ってほしいです。実際、チーム内でも、パイオニアペダリングモニターで特訓の結果、FTPを30%以上のばしているケースもあり、捻じれ問題は懸念するに足りないと思います。後はペダリングモニターでなければできない、決定的なメリットを主張できれば、とてもよいのですが・・・
歪ゲージY1とY2は、クランクアームの長手方向の伸びを計測します。クランクアームが伸びると、Y1は縮み、Y2は伸びます。正方形のゲージ(Poisson Guage)は、このような用途の計測に向いているそうです。
ゲージF1、F2で計測される回転方向の力と、ゲージY1,Y2で計測される長手方向の力を比較すれば、どの方向に踏んでいるか判定でき、ペダリング方向のベクトル表示が可能となります。
なぜ、F1,F2とY1,Y2はそれぞれハーフブリッジか・・・特許出願によるとコストが一つの要因のようです。
特注のひずみゲージは、それなりの価格であると、某外国メーカーがインタビューで答えておりました。
2017年7月23日日曜日
nRF52モジュール比較
nRF52モジュールを複数種入手しました。
ANTに対応できないものがあることが判明しています。
左から
ーRigado製
ーsparkfun製
ーebay large version
ーebay mini version
ーDynastream製
すべてプログラムの書き込み方法は一緒です。
VCC, GND, SWDCLK, SWDIOの4線をST-LinkかnRF52-DKにつなげば書き込めます。
ただし、RigadoとDynastreamのモジュールは、あらかじめfirmwareが書き込まれ、かつプログラムが読みだせないようプロテクトがかけられています。
これを、nRFgo Studioかコマンドラインで、erase allやRecoverしたり、mbedフォルダにfirmwareを上書きすることで、消去する必要があります。
ST-Linkでは、この消去を行う機能がないため、RigadoやDynastreamのモジュールを使う際は、誰かにプロテクトを解除してもらう必要があります。
ST-Linkをj-linkに変身させるファームもリリースされていますが、なぜかST Microのチップをターゲットとしてのみ使用可で、他のチップに使うことは禁止する、絶対禁止すると表示されます。
実際は、技術的にはnRF52をターゲットとして使用可能にもかかわらず「使用するなよ、絶対するなよ」と言われるとダチョウ倶楽部を思いだいし「絶対するな=すぐにやってよい」と解釈してしまいがちですが、やはりまずいと思います。
nRF52モジュールにnRF52-DKから書き込みを行う場合、以下のように配線します。
ポイントは、ピンヘッダのVTGにVDDをGND DctにGNDを接続することです。
これにより、書き込みチップが、外付けのnRF52モジュールに書き込みを行うよう設定変更され、オンボードのチップに書き込まれなくなります。
私は、ボードの真ん中にDIPスイッチを付け、書き込み先を外付けnRF52モジュールとするか、オンボードのチップとするか、選択できるようにしています。
nRF52モジュールがnRFgo Studioに認識されると、以下のように表示されます。
この例では、Region1にSoftdeviceが書き込まれていることがわかります。
Addressが0x1f000までがSoftdeviceなので、s132(BLE用)のSoftdeviceが書き込まれてるとわかります。
Softdeviceを書き換えるには、右欄のProgram Softdeviceのタブから任意のSoftdeviceファイル(ANTの場合はS212)を選択し、ProgramボタンをせばOKです。
S212のSoftdeviceはwww.thisisant.comからダウンロードできます。
つづいて、Softdevice上で動くアプリケーションをプログラムします。
Program Applicationタブから書き込みアプリの.hexファイルを選択し、Programボタンを押せばOKです。
話を戻しますと、RigadoとSparkfunのnRF52モジュールは、ANT対応ではありません。
どうやら32khzの発振子の精度が悪いようで、BLEはなんとかOKですが、シビアなANTには対応できてませんでした。
Sparkfunのものは、32khzの発振子のパターンをカットできます。
パターンカットのうえ、秋月で買った水晶発振子に付け替えたところANTもOKとなりました。
ANTに対応できないものがあることが判明しています。
左から
ーRigado製
ーsparkfun製
ーebay large version
ーebay mini version
ーDynastream製
すべてプログラムの書き込み方法は一緒です。
VCC, GND, SWDCLK, SWDIOの4線をST-LinkかnRF52-DKにつなげば書き込めます。
ただし、RigadoとDynastreamのモジュールは、あらかじめfirmwareが書き込まれ、かつプログラムが読みだせないようプロテクトがかけられています。
これを、nRFgo Studioかコマンドラインで、erase allやRecoverしたり、mbedフォルダにfirmwareを上書きすることで、消去する必要があります。
ST-Linkでは、この消去を行う機能がないため、RigadoやDynastreamのモジュールを使う際は、誰かにプロテクトを解除してもらう必要があります。
ST-Linkをj-linkに変身させるファームもリリースされていますが、なぜかST Microのチップをターゲットとしてのみ使用可で、他のチップに使うことは禁止する、絶対禁止すると表示されます。
実際は、技術的にはnRF52をターゲットとして使用可能にもかかわらず「使用するなよ、絶対するなよ」と言われるとダチョウ倶楽部を思いだいし「絶対するな=すぐにやってよい」と解釈してしまいがちですが、やはりまずいと思います。
nRF52モジュールにnRF52-DKから書き込みを行う場合、以下のように配線します。
ポイントは、ピンヘッダのVTGにVDDをGND DctにGNDを接続することです。
これにより、書き込みチップが、外付けのnRF52モジュールに書き込みを行うよう設定変更され、オンボードのチップに書き込まれなくなります。
私は、ボードの真ん中にDIPスイッチを付け、書き込み先を外付けnRF52モジュールとするか、オンボードのチップとするか、選択できるようにしています。
nRF52モジュールがnRFgo Studioに認識されると、以下のように表示されます。
この例では、Region1にSoftdeviceが書き込まれていることがわかります。
Addressが0x1f000までがSoftdeviceなので、s132(BLE用)のSoftdeviceが書き込まれてるとわかります。
Softdeviceを書き換えるには、右欄のProgram Softdeviceのタブから任意のSoftdeviceファイル(ANTの場合はS212)を選択し、ProgramボタンをせばOKです。
S212のSoftdeviceはwww.thisisant.comからダウンロードできます。
つづいて、Softdevice上で動くアプリケーションをプログラムします。
Program Applicationタブから書き込みアプリの.hexファイルを選択し、Programボタンを押せばOKです。
話を戻しますと、RigadoとSparkfunのnRF52モジュールは、ANT対応ではありません。
どうやら32khzの発振子の精度が悪いようで、BLEはなんとかOKですが、シビアなANTには対応できてませんでした。
Sparkfunのものは、32khzの発振子のパターンをカットできます。
パターンカットのうえ、秋月で買った水晶発振子に付け替えたところANTもOKとなりました。
ラベル:
マイコン
2017年7月21日金曜日
DuraAce9000で手作りパワーメーター
Tiagraに続き、Dura Ace 9000をパーワーメーター化してみました。
パワー計、量産体制です。
完成図
コンピュータ・ユニットのアップです
不器用臭さがプンプンします。
臭いものには蓋をします。
3D印刷に失敗して隙間だらけなので、やり直しです。
なんか不細工ですが、本ブログのurlは、
D Grade DIY(D級工作)なので合格です。
ひずみゲージ貼り付け位置です。
スパイダーアームがチェーンにより反時計回り方向に引かれる歪を計測してます。
モジュール構成は、いつも通り以下の3点セットぽっきりで、お手軽です。
1. ひずみゲージ付きクランク
お手軽な1000Ωひずみゲージ2枚構成(上の写真のピンク矢印の位置)で、他の2つの抵抗はひずみゲージでなく固定抵抗(1000Ω)です。
2. コンピュータ(nRF52使用)モジュール
↓こちらで過去に公開したものです。
https://dgradediy.blogspot.jp/2017/03/4999.html
3. 上記2.のソフトウェア
↓こちらで過去に公開したものです。
https://dgradediy.blogspot.jp/2017/06/49-nrf-uart.html
今回は、これをnRF5 SDKにあるANTパワーセンサーのサンプルコード(..\nRF5_SDK_12.1.0_0d23e2a\examples\ant\ant_plus\ant_bpwr\bpwr_tx
)に移植し、ANT+対応とし、ガーミンでパワー表示を可能にしてます。
以下、詳細です。
【①クランク】
クランクにひずみゲージを貼る際、以前はクランクを耐水ペーパーで削り、アルミの地肌を出してましたが、面倒です。
今回は、お手軽に、脱脂してアルマイト加工?の上から100均の瞬間接着剤で貼り付けました。
これでも大丈夫そうです。
失敗しても、瞬間接着剤のはがし液で、きれいに剥がせます。
ひずみゲージは、以下のようにまずセロテープで貼り付け、位置決めをします。
次に、セロテープを半分剥がし、ピンクの矢印のひずみゲージ面に瞬間接着剤を適量付けます。
つけすぎるとクランクではなく、固形化した瞬間接着剤のひずみを拾うこととなるので、要注意です。
瞬間接着剤をつけたら、セロテープをもとの位置にもどし、むにゅー、と1分程度加圧します。
セロテープの半分はついたままなので、それがガイドとなり、元の位置にひずみゲージは張り付きます。こうして、面倒な位置決めを簡単にできます。
これは4iiiiのパワーメーターを開発されたエンジニアの方が、4iiiiと組む前に、個人のブログで公開して、教えてくれた方法です。
【②配線】
ひずみゲージ付きクランクとコンピュータモジュールは、以下の配線でVCC, GND, Sg+,Sg-を接続してます。
今回の電池はボタン電池CR2032を使用しました。
CR2032の最大連続放電電流は2mAなので、
消費電力を落とす必要があります。
マイコン(nRF52)とADコンバーター(AD7124)は余裕で2mAを下回りますが、
ひずみゲージ回路をつけると6mAを超えます。
どうするか・・・
ひずみゲージを読み取る時だけゲージ回路に通電し、読み取り終了後は直ちにスイッチを切ることにより、消費電力を2mA以下に落とします。
ADコンバータAD7124は、このひずみゲージ回路への通電を切るPSW(パワー・ダウン・スイッチ)が搭載されており、nRF52からソフトウェア・コマンドを発行することで、スイッチをON/Offできます。便利です。
これに伴い、ひずみゲージ回路のGNDをGNDから分離し、AD7124のPSWピンに接続します。
右下の紫色の線で示しています。
【②ソフトウェア】
上記のとおり、今回は、省電力化のため、PSW(パワーダウンスイッチ)をソフトでON/OFFします。
以下のプログラムでPSWを制御するも、ADCのデータをうまく読み取れないトラブル発生。
悩むこと2週間以上。
m_tx_buf[0]=0x03;//アドレス3番地書き込み
m_tx_buf[1]=0x00;
m_tx_buf[2]=0x08;//PSWをONに設定
m_tx_buf[3]=0x00;
m_tx_buf[4]=0x42;//ADC読み取りコマンド発行
m_tx_buf[5]=0xff;
m_tx_buf[6]=0xff;
m_tx_buf[7]=0xff;
m_tx_buf[8]=0x03;//アドレス3番地に書き込み
m_tx_buf[9]=0x00;
m_tx_buf[10]=0x00;//PSWをOFFに設定
m_tx_buf[11]=0x00;
spi_xfer_done=false;
nrf_drv_spi_transfer(&spi, m_tx_buf, 12, m_rx_buf, 12); // SPI経由でコマンド転送
while (!spi_xfer_done)
{
err_code = sd_app_evt_wait();
APP_ERROR_CHECK(err_code);
}
正解は、こちらでした。
m_tx_buf[0]=0x42;//読み取りコマンド発行
m_tx_buf[1]=0xff;
m_tx_buf[2]=0xff;
m_tx_buf[3]=0xff;
m_tx_buf[4]=0x42;//読み取りコマンド発行
m_tx_buf[5]=0xff;
m_tx_buf[6]=0xff;
m_tx_buf[7]=0xff;
m_tx_buf[8]=0x03;//アドレス3番地に書き込み
m_tx_buf[9]=0x00;
m_tx_buf[10]=0x00;//PSWをOFFに設定
m_tx_buf[11]=0x00;
明示的にPSWをONにしなくとも、0x42で読み取りコマンドを発行すると自動的にONになるようです。0x03で強制的にONにすると、誤動作するようです。
最後に、ソーラーパネル&充電池で駆動できるヘンタイオリジナル仕様にしてみました。CR2032は万一のバックアップ電池とし、2系統電源で運用する予定です。
これで電池切れともおさらばできる・・・ハズ
昔つくった、手作りパワー計の試作1号機の写真を発掘しました。
これを作った当時は、DuraAceベースのパワー計は30万円ほどしてました。
今年は、中華ベンチャーが2万円程度でパワー計の販売を開始しました。
微妙な価格設定なので、すぐに値下げすると予想してます。
本自作パワー計とほぼ同じ構成のはずなので、ライセンス料を無視すれば、原価は、数千円と予想します。
販売価格が1万円程度まで下がれば、わざわざ自作するメリットはなくなるので、
自作パーワー計もそろそろ潮時かと思いました。
パワー計、量産体制です。
完成図
コンピュータ・ユニットのアップです
不器用臭さがプンプンします。
臭いものには蓋をします。
3D印刷に失敗して隙間だらけなので、やり直しです。
なんか不細工ですが、本ブログのurlは、
D Grade DIY(D級工作)なので合格です。
ひずみゲージ貼り付け位置です。
スパイダーアームがチェーンにより反時計回り方向に引かれる歪を計測してます。
モジュール構成は、いつも通り以下の3点セットぽっきりで、お手軽です。
1. ひずみゲージ付きクランク
お手軽な1000Ωひずみゲージ2枚構成(上の写真のピンク矢印の位置)で、他の2つの抵抗はひずみゲージでなく固定抵抗(1000Ω)です。
2. コンピュータ(nRF52使用)モジュール
↓こちらで過去に公開したものです。
https://dgradediy.blogspot.jp/2017/03/4999.html
3. 上記2.のソフトウェア
↓こちらで過去に公開したものです。
https://dgradediy.blogspot.jp/2017/06/49-nrf-uart.html
今回は、これをnRF5 SDKにあるANTパワーセンサーのサンプルコード(..\nRF5_SDK_12.1.0_0d23e2a\examples\ant\ant_plus\ant_bpwr\bpwr_tx
)に移植し、ANT+対応とし、ガーミンでパワー表示を可能にしてます。
以下、詳細です。
【①クランク】
クランクにひずみゲージを貼る際、以前はクランクを耐水ペーパーで削り、アルミの地肌を出してましたが、面倒です。
今回は、お手軽に、脱脂してアルマイト加工?の上から100均の瞬間接着剤で貼り付けました。
これでも大丈夫そうです。
失敗しても、瞬間接着剤のはがし液で、きれいに剥がせます。
ひずみゲージは、以下のようにまずセロテープで貼り付け、位置決めをします。
次に、セロテープを半分剥がし、ピンクの矢印のひずみゲージ面に瞬間接着剤を適量付けます。
つけすぎるとクランクではなく、固形化した瞬間接着剤のひずみを拾うこととなるので、要注意です。
瞬間接着剤をつけたら、セロテープをもとの位置にもどし、むにゅー、と1分程度加圧します。
セロテープの半分はついたままなので、それがガイドとなり、元の位置にひずみゲージは張り付きます。こうして、面倒な位置決めを簡単にできます。
これは4iiiiのパワーメーターを開発されたエンジニアの方が、4iiiiと組む前に、個人のブログで公開して、教えてくれた方法です。
【②配線】
ひずみゲージ付きクランクとコンピュータモジュールは、以下の配線でVCC, GND, Sg+,Sg-を接続してます。
今回の電池はボタン電池CR2032を使用しました。
CR2032の最大連続放電電流は2mAなので、
消費電力を落とす必要があります。
マイコン(nRF52)とADコンバーター(AD7124)は余裕で2mAを下回りますが、
ひずみゲージ回路をつけると6mAを超えます。
どうするか・・・
ひずみゲージを読み取る時だけゲージ回路に通電し、読み取り終了後は直ちにスイッチを切ることにより、消費電力を2mA以下に落とします。
ADコンバータAD7124は、このひずみゲージ回路への通電を切るPSW(パワー・ダウン・スイッチ)が搭載されており、nRF52からソフトウェア・コマンドを発行することで、スイッチをON/Offできます。便利です。
これに伴い、ひずみゲージ回路のGNDをGNDから分離し、AD7124のPSWピンに接続します。
右下の紫色の線で示しています。
【②ソフトウェア】
上記のとおり、今回は、省電力化のため、PSW(パワーダウンスイッチ)をソフトでON/OFFします。
以下のプログラムでPSWを制御するも、ADCのデータをうまく読み取れないトラブル発生。
悩むこと2週間以上。
m_tx_buf[0]=0x03;//アドレス3番地書き込み
m_tx_buf[1]=0x00;
m_tx_buf[2]=0x08;//PSWをONに設定
m_tx_buf[3]=0x00;
m_tx_buf[4]=0x42;//ADC読み取りコマンド発行
m_tx_buf[5]=0xff;
m_tx_buf[6]=0xff;
m_tx_buf[7]=0xff;
m_tx_buf[8]=0x03;//アドレス3番地に書き込み
m_tx_buf[9]=0x00;
m_tx_buf[10]=0x00;//PSWをOFFに設定
m_tx_buf[11]=0x00;
spi_xfer_done=false;
nrf_drv_spi_transfer(&spi, m_tx_buf, 12, m_rx_buf, 12); // SPI経由でコマンド転送
while (!spi_xfer_done)
{
err_code = sd_app_evt_wait();
APP_ERROR_CHECK(err_code);
}
正解は、こちらでした。
m_tx_buf[0]=0x42;//読み取りコマンド発行
m_tx_buf[1]=0xff;
m_tx_buf[2]=0xff;
m_tx_buf[3]=0xff;
m_tx_buf[4]=0x42;//読み取りコマンド発行
m_tx_buf[5]=0xff;
m_tx_buf[6]=0xff;
m_tx_buf[7]=0xff;
m_tx_buf[8]=0x03;//アドレス3番地に書き込み
m_tx_buf[9]=0x00;
m_tx_buf[10]=0x00;//PSWをOFFに設定
m_tx_buf[11]=0x00;
明示的にPSWをONにしなくとも、0x42で読み取りコマンドを発行すると自動的にONになるようです。0x03で強制的にONにすると、誤動作するようです。
これで電池切れともおさらばできる・・・ハズ
昔つくった、手作りパワー計の試作1号機の写真を発掘しました。
これを作った当時は、DuraAceベースのパワー計は30万円ほどしてました。
今年は、中華ベンチャーが2万円程度でパワー計の販売を開始しました。
微妙な価格設定なので、すぐに値下げすると予想してます。
本自作パワー計とほぼ同じ構成のはずなので、ライセンス料を無視すれば、原価は、数千円と予想します。
販売価格が1万円程度まで下がれば、わざわざ自作するメリットはなくなるので、
自作パーワー計もそろそろ潮時かと思いました。
ラベル:
パワーメーター
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というソフトウェアを使って、書き込み作業を行います。
つづく
完成図
手作りパワー計は、配線がむき出しなのでチョッと・・・
という意見を踏まえて、$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とか送信してくるため(勿論、平均を表示させれば正確です。)、やや使いづらいと感じます。
構造的には素晴らしいアイデアと技術のパワーメーターではありますが。
クランクアーム式もスパイダーアーム式と比べると・・・
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と同じく、スパイダーアームがチェーンによりピンクの矢印方向に引っ張られる際のひずみを計測します。
条件付きながら、よいデータが得られています。
メリットとしては、パワー値が安定しており、乗り手の感覚に近い値がでます。
パワータップハブは、クランクの回転とは無関係にパワー値を送信してきて、また同じパワーで回しているのに、今回は270w、次回は30wも下がって240wとか送信してくるため(勿論、平均を表示させれば正確です。)、やや使いづらいと感じます。
構造的には素晴らしいアイデアと技術のパワーメーターではありますが。
クランクアーム式もスパイダーアーム式と比べると・・・
ラベル:
パワーメーター
登録:
投稿 (Atom)