
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