12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

個人開発エンジニア応援 - 個人開発の成果や知見を共有しよう!-

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

Last updated at Posted at 2023-09-25

エアロバイクを買った

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

61M-W4LilTL.AC_SY879.jpg

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

Screenshot_2023-09-26-00-42-50-793_com.withings.wiscale2.jpg

しかし3万円弱とお安いタイプのため、よくあるBlueTooth接続でのスマホアプリ連携機能がなく、
手元の液晶ディスプレイで、継続時間、スピード、消費カロリー、走行距離などがループして表示されるようになっています。

earobike_4.jpg

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

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

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

IMG_20230926_000449.jpg

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

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

IMG_20230926_001838.jpg

こんな感じの部品でブレッドボードに刺して、テスターで色々観察してみます
IMG_20230926_000849.jpg

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

導通なしの時
IMG_20230926_001314.jpg

導通ありの時
IMG_20230926_001320.jpg

動画で見るとわかりやすいです

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

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

ドアの開閉検知などに使われている、リードスイッチと同じ原理で、磁石に近づくと導通し、離れると導通しない仕組みだと推測しています
image.png

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

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

M5ATOMでケイデンスセンサの情報をとる

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

こんな感じでセンサ端子とM5Atomを接続します
IMG_20230926_013454.jpg

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

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の色が変わります。

まとめ

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

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

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

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

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

次の記事

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

12
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?