安いエアロバイクをハックする　調査編

## エアロバイクを買った

ちょっと前にエアロバイクを買いました。
アルインコというメーカーの、テーブルがついたタイプのエアロバイクです

![61M-W4LilTL._AC_SY879_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50474/524726ce-fb9d-e23a-c8ff-16194e3bcf28.jpeg)


https://amzn.to/48pWCWG

机がついていて、タブレットやPCを乗せルコとができ、Youtubeやゲームをしながら運動ができるのでとても良いです。
毎日2時間くらい漕いでいたら、５キロくらい痩せました

![Screenshot_2023-09-26-00-42-50-793_com.withings.wiscale2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50474/ccd5a1f0-e14a-51ba-d860-fa179bc0e5e8.jpeg)


しかし3万円弱とお安いタイプのため、よくあるBlueTooth接続でのスマホアプリ連携機能がなく、
手元の液晶ディスプレイで、継続時間、スピード、消費カロリー、走行距離などがループして表示されるようになっています。
  
![earobike_4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50474/6c3d2c97-532d-6624-176d-a762805631b8.jpeg)

これらの情報だけでも不満はないのですが、もっとリッチな情報を見たい、運動した記録を継続して残したいなどの要望があり、エアロバイクをハックできないかと考えました

## センサの仕様をハックする

バイクの情報表示モニターから線が伸びており、フレームの中を通って、バイクの漕ぐところの中にセンサーが設置されているようです

![IMG_20230926_000449.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50474/34172e2d-89b5-5fd0-53a4-267be3e9cf5e.jpeg)

分解してセンサーの外観を見れば手がかりにはなりそうですが、手元には分解できる工具がなかったので
センサーの入出力をテスターで観察することにします

センサ接続のラインは、イヤホンなどに使われる端子と同じ3.5mmの2極モノラルジャックでした

![IMG_20230926_001838.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50474/90dcd6c4-4ad3-760e-4a7c-42f4eb6b8ad8.jpeg)

こんな感じの部品でブレッドボードに刺して、テスターで色々観察してみます
![IMG_20230926_000849.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50474/6e8e296d-c52d-931c-4d0b-b39f8c1deb37.jpeg)


すると、導通チェックで２端子の通電状況を見ていたところ、反応がありました。

導通なしの時
![IMG_20230926_001314.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50474/f8587348-8d58-5bf8-c671-36aed01958e5.jpeg)

導通ありの時
![IMG_20230926_001320.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50474/59ff5ec4-0b18-84f9-3357-056eb66e1019.jpeg)


動画で見るとわかりやすいです
<iframe width="560" height="315" src="https://www.youtube.com/embed/AyOwrm8FooM?si=VidIGOj17z2b3GcT" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

ペダルの特定の位相の時のみ、２極間で導通があり、それ以外の位相では導通がないという状況です。



自転車の漕ぐスピード(ケイデンス)を計測するセンサをケイデンスセンサと呼ぶそうですが、磁石を使っていると言う記述がネットに多々ありました。

ドアの開閉検知などに使われている、リードスイッチと同じ原理で、磁石に近づくと導通し、離れると導通しない仕組みだと推測しています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50474/1243fd92-32b4-9d5f-366f-f3f4a9993977.png)

ペダルを漕ぐと、円盤に貼り付けてある磁石の位置が変わり、近づいた時だけ導通すると言う、シンプルなセンサーのようです。
ペダルの1回転ごとに1回導通するので、導通の間隔が1秒なら1分間に60回転=60rpm、と算出できそうです。

試しに、エアロバイクのセンサーの代わりにプッシュスイッチを接続し、適当にボタンをカチカチすると、速度が変わっていくことが確認できました。

https://youtube.com/shorts/JepMw03vQGk?si=JktOxebBIgV8umYf

## M5ATOMでケイデンスセンサの情報をとる
センサの仕様が大体わかったので、エアロバイクのセンサの情報をM5Atom S3 Liteで取得してみます。

こんな感じでセンサ端子とM5Atomを接続します
![IMG_20230926_013454.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50474/d6c78c99-9b64-18f8-e81c-78d4dd889b51.jpeg)

M5AtomにArduino IDEで下記のコードを書き込みます。

```c:m5atom_input_read.ino
#include <M5AtomS3.h> 

#define INPUT_PIN0 39

// FastLEDライブラリでフルカラーLEDを使用するための設定
CRGB dispColor(uint8_t r, uint8_t g, uint8_t b) {
  return (CRGB)((r << 8) | (g << 16) | b);
}
// 変数宣言
bool state = LOW; // フルカラーLED点灯確認用
int cnt = 0;      // カウンタカウント用

// 初期設定 -------------------------------------------------
void setup() {
  M5.begin(false, true, false, true);     // 初期化（液晶, USBシリアル, I2C[38,39], LED）
  Serial.begin(9600);                     // USBシリアル通信初期化
  USBSerial.println("AtimS3 Lite TEST");  // シリアル通信出力

  // 入力ピン設定
  pinMode(INPUT_PIN0, INPUT_PULLUP);      // 入力設定1（プルアップ）

  M5.dis.drawpix(0);                // 本体LED消灯
}
// メイン ---------------------------------------------------
void loop() {
  M5.update();  // ボタン状態初期化

  // アナログ入力処理
  state = digitalRead(INPUT_PIN0); // アナログ換算値（0～4095）取得

  // 本体フルカラーLED色可変
  if (state == HIGH) {          // stateがHIGHなら
    M5.dis.drawpix(dispColor(0, 50, 0)); // フルカラーLED点緑灯色
  } else {                                  // stateがHIGHでなければ
    M5.dis.drawpix(dispColor(50, 0, 0));  // フルカラーLED赤点灯
  }

  cnt++;          // カウント+1
  M5.dis.show();  // 本体フルカラーLED出力
  delay(10);      // 遅延時間
}
```

Atomに電源供給をしてあげ、ペダルを回すと、センサの状況によってLEDの色が変わります。

<iframe width="560" height="315" src="https://www.youtube.com/embed/MT5rjK4KVZ8?si=Cyg0lVAdLTj2A0RN" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>


## まとめ
安いエアロバイクの情報表示ディスプレイからは、センサにつながる線が伸びていて
それはほぼ、磁石を使った安いケイデンスセンサです。

それを拾ってきてマイコン等に接続すれば、簡単にケイデンスの情報が取得できそうです。

ここまでできれば、あとはWEBアプリでもスマホアプリでも自分の好みのアプリを作成できますし
情報をDBに格納したり、できるはずです。

BleuToothが最初から搭載されているエアロバイクをハックしている人もいらっしゃいますが
BTの通信内容をハックする必要があるみたいです。
https://yasuda.cloud/entry/2022/10/05/014035

安いエアロバイクを買えば、インターネットにもつながる自由度の高いエアロバイクにすることも可能かと思います。
何か面白いアプリや可視化ができたらまた記事にします

## 次の記事
続きです。アプリを作成しようと思ったら
エアロバイクの仕様や消費カロリーについて調べる必要が出てきて、調べた結果となります

https://qiita.com/bohemian916/items/6f3be9a8f2a3d20de464