2019年8月8日木曜日

ANT->BLEブリッジの製作

ANTで無線送信されたパワー計の値をBLEに変換して無線送信するデバイスを製作しました。



Zwiftという、仮想空間内に自分のアバターをおき、サイクリングするソフトがあります。


PCに挿すANTドングルで自転車のパワー値を受信して、仮想空間内を進みますが、受信が安定しないことがあります。

ZwiftをインストールしたCPUの性能は、あまり関係しないようです。
2スレッドCPUのタブレットPCで安定する場合もあれば、16スレッドCPUのデスクトップでもANT受信に失敗し、0w(--w)表示となることもあります。
周囲の電波状況が大きく影響するによう感じます。

まじめに踏んでるときに0w表示になると萎えるので、これを解決するため
ANT無線信号をBLEに変換し、BLE信号をZwiftに受信させ安定通信するためのデバイスを作った次第です。

副作用として、このデバイスを使えば、ANTチップ非搭載のsmartphoneでも、BLE対応の市販アプリでパワー値を受信・表示できます。


動作は以下のとおりです。

- AP2モジュールで、近くのANTパワー値を受信、UART txピンでnRF52840に送信

- nRF52840のUART rxピンでANTデータを受信
 nRF52840でパワー値を算出。
 スイッチがON(PIN 20がLOW(GND接地))ならパワー値に約100wを追加。
 ジャスト100wにせず、1~12の乱数を足して合計100数wを追加することとします。
 増加値に数ワットの揺らぎを持たせ、ANTパワーが0wのときでも100+数wで人間がペダリングしているように見せかけることができます。
 これで峠の麓までは、ペダリングしなくとも勝手にアバターに移動してもらう、という自動運転ができます。

- nRF52840にてパワー値を:
 1. ANTフォーマットにしてUARTでAP2に送信、AP2からANTで無線送信
 2. BLEで無線送信

Bluetoothで定義されるCyclePowerService対応でパワー値を送信するのは初めてでした。
Adafruitが公開している心拍計センサーのソースコードを流用し、パラメータを若干追加修正したら動作しました。


ここで利用したnRF52840 Dongleなるものがリリースされていることを信州Maker管理人様から教えていただきました。

調べてみると、これはArduinoIDEでプログラムできる環境が整っていることを発見しました。
Adafruit社がBootloaderやライブラリを作ってくれており、ATMEGA32xと同じ感覚で簡単にプログラムを書き込めます。

ただし、nRF52840 DongleにAdafruit Boot Loaderを書き込む必要があります。

以下のサイトに今回のデバイスのソースコードを置きました(本日の日付をファイル名としています)。

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

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