2019年4月19日金曜日

ArduinoとANT無線中継機とZWIFTオーバーテイクボタン

ArduinoマイコンでANT+規格の無線信号を送受信するための備忘録です。

ANT+で無線通信するモジュールとしてAP2と呼ばれるものがありました。

PINOUTも独特です。


これにUART接続(送信用Tx線と受信用Rx線の2線でデバイス間を接続)してコマンドを投げると、ANT+規格の無線信号を送信および受信できます。

nRF24AP2を利用したAP2モジュールはEOLのようで、私の入手した互換モジュールはこちら



◆左はAP2のコピー品
安定して動いてくれましたが、非通電状態でも、一度雨に濡れたら、動作不能となりました。

◆真ん中は、D52モジュール
AP2の後継で、チップは、nRF52832、PINOUTは互換。
でもソフト的には、完全互換ではなかったです。
正常動作のためには
- UART通信速度は9600bps以下で利用すること、
- コマンドを送ったら最低500ms待つこと
が必要なようです。

◆右は、最近みかけるAP2の変形バージョン
よくみるnRF24L01モジュールそっくりですが、これはnRF24AP2です。

PINOUTとschematic


ピンク印がBaudRate設定で、全部GNDに接続すると、
以下のチャートの通り通信速度が4800bpsに設定されます。
BR3 BR2 BR1 Baud Rate
0 0 0 4800
0 1 0 19200
0 0 1 38400
0 1 1 50000
1 0 0 1200
1 1 0 2400
1 0 1 9600
1 1 1 57600


手持ちのAP2互換モジュールは、8ch対応です。
つまり、チャンネル1でANT+のPower(ワット)信号を受信し、
チャンネル2でそのパワー値を送信することが可能です。

自宅のZWIFT用ANTレシーバは感度が低く、よく通信が切れるため、
クランクのパワー計のANT信号を中継してZWIFTに転送するデバイスを作りました。


Arduino ProMini(3.3v動作品)とAP2の接続図
UARTで、
ArduinoのTxをAP2のRxへ
ArduinoのRxをAP2のTXへ

ArduinoUno(3.3v動作に改造済)でも動作


ANTのパワー値を一度受信して、受信した数値を転送してます。
転送する際にパワー値をゴニョゴニョすると、オーバーテイクボタンを作れます。
「ボタンを押すと燃料の混合比が変わってプラス50馬力出力でマンセルをオーバーテイク」することはできませんが、ボタンを押すと、受信した生データに+100wの値を増加してZWIFTに転送、ZWIFT上で絡まれたくない相手を楽に振り切る、ということはできます。
チートとみなされると、まずいことになると思いますが、早速、中継器として動作実験開始・・・

ANTのシミュレータ上では、オーバーテイクボタンを押すと、283wの出力に100wを足して383wを受信できました。

でもなぜか途中で止まったり、ANT信号の受信に失敗したり。

どうもArduino UnoやProMiniで、SoftwareSerialを使ってANTモジュールと通信すると、安定せず、途中停止するようです。
ハードserialが2chあるArduino Microの3.3v対応品を取り寄せて、再度実験予定です。
2019/8/8更新:ArduinoMicroが思うように動かないため、nRF52をArduino化して実験しました(2019/8/8付けで投稿しました)が、やはり途中停止することがあり、ANTの受信は、途中停止を検出して、リセットする必要があると思います。

ANTの受信と送信を同時に行う今回のソースコードをUPLOADしました。
また、このコードでは、ZWIFT上で、ANTシミュレータの結果と異なり、0wの表示しかしませんでした。
ZWIFTは、たまにANT信号の受信に失敗し、0w表示となる問題があります。
今回のANT信号中継器を改良して、ZWIFTの0w表示問題も解決できればと思います。


新しいひずみゲージの貼り方を試しました

■4iiii社のひずみゲージの張り方
4iiiiの特許出願



クランクアームに直接ひずみゲージをはっていない。
クランクアーム(100)に接着剤(190)でアルミのプレート(195)を張り付け、そのプレートにひずみゲージ(102)を張っている。

これでもひずみを計測できるようです。

ということで、試してみました。
クランクの上に2mm厚のアルミプレートを貼りました。




アルミプレートの上側にR1,R3を、下側(クランクアーム接着面なので、クランクとアルミプレートにサンドイッチされてます)にR2,R4を配置。(写真の赤丸内、緑のひずみゲージがアルミ用、茶色のは鉄用で失敗したものをそのまま残してるだけです。)


クランクアームにトルクがかかり曲がりが生じると、その曲げがアルミプレートにも発生するので、アルミプレートのひずみを測定すれば、トルク測定が可能、というものです。
長期間つかった場合の信頼性は要検証ですが、とりあえず、動作するようです。
初期のゼロオフセット値がけっこうバラつく感じはしますが・・・
【2019/05/24追記
やはり、アルミ素材に鉄用のひずみゲージを張り付けた場合と同じようにゼロオフセット値が安定せず、コロコロとオフセット値が変化し、実用化は不可でした。

この方法だと、アルミプレートを瞬間接着剤でクランクアームに接着すれば、瞬間接着剤はがし液でプレートをはがして、再利用、ということも可能です。
ひずみゲージを貼る位置をあれこれ試すには、よい方法かと思います。

■クランクの表面を削るか
4iiiiの初代パワー計は、キットとして販売され、ユーザが自身でエポキシ接着剤を使ってパワー計センサーユニットをクランクに張り付けるキットとなっていました。
このとき、クランクアーム側は、サンドペーパーで削るのですが、アルミ面を完全に露出するまで削ることは求めてませんでした。




もちろん基本形は、クランク表面を600番の耐水ペーパで削り、完全にアルミ面を露出し、そこにロックタイト401で接着、ということになりますが、この程度けがいた状態でもOKな事例もあるようです。

■ひずみゲージの種類
Amazonの激安ひずみゲージでも、うまく機能させることに成功している方もいらっしゃいます。
http://shinshu-makers.net/shinshu_makers/2018/08/25/%E3%80%90%E3%83%91%E3%83%AF%E3%83%BC%E3%83%A1%E3%83%BC%E3%82%BF%E3%83%BC2018%E3%80%91%E3%83%9A%E3%83%80%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E5%82%99%E5%BF%98%E9%8C%B2/

激安ひずみゲージもそれ自体は、よく知られた製法で作られており、機能するもののようです。
ただ激安品は、アルミ用ではなく、鉄用です。
当方のスキルでは、鉄用のひずみゲージをアルミに張って、うまく動作させることはできておりません(3日前に試しに鉄に張ったところ、これは正常に動きました)。
うまく動かせる方もいるので、当方が何かを間違ってると思います。

日本メーカのアルミ用ゲージは、2mmと5mmの長さのものが比較的容易に入手できるようです。
ただ2mm品は、クランクアーム用には感度が足りないので、5mmを利用した方が楽だと思います(東京測器さんでは、5mm品も販売しているようです)。

経験上、面積が小さく感度が最も高いのはOMEGA社のものでした。
値段も最も高いのですが、2つのゲージが並列になっているものもあり、扱いやすいです。

4iiiiのパワー計を開発された方が、趣味でパワー計を開発していたころのブログです。たしか、OMEGAのものを利用されていて、私はこれをまねしたこともあります。
http://keithhack.blogspot.com/2013/05/testing-results.html