シマノの電動アシストSTEPSの実験 (3) Arduino編

【注意】本稿では電動アシスト自転車のスピード・センサーの機構を変更している。改造やハックと呼ぶにはおこがましいが、予期せぬ故障を引き起こし、メーカの保証を受けられない可能性がある。また、公道で走行すると道路交通法違反になる。無人の私道などでの走行であっても、十分に安全に配慮すべきだ。筆者は一切の責任を負わないので、同様の試みは自らの責任で行って欲しい。

最初にミヤタのRidge Runnerクランクの回転によって速度センサーを動作させ、次に車輪の回転をギアによって減速させて動作させた。これらはいずれも磁石が速度センサーを通過するタイミングを機械工学的に処理した。第3回となる今回は、これを電子工学的に処理する。すなわち、磁気センサーで車輪の回転を検出し、異なるタイミングで電磁石を駆動して速度センサーを動作させるわけだ。

そこで、この手の電子工作の定番Arduinoを引っ張り出す。ただし、スターター・キットには磁気センサーも電磁石も付属していない。そこで、お手軽な電子工作キットGravityを漁るとDigital Magnetic Sensorがあった。GravityをArduinoで使うには拡張シールドも必要。電磁石はキット系には見当たらなかったので、Arduinoで扱いやすい5Vで動作する単品を購入した。これで役者が揃った。

多くのセンサーは単体では動作しないが、Gravityは必要な回路が組み込まれている。しかも、信号、電源、グランドの3ピンがセットになっている。つまり、コネクタをシールドに差し込むだけで動作する。電磁石はキット化されていないが、デジタル・ポートの信号線とグランド線に繋げば良い。Arduinoではデジタル出力をオンにすると5Vの電流が流れるので、これで電磁石が動作することになる。

Arduinoのプログラムは次のようになる。磁気センサーをデジタル・ポートの2番に、電磁石を16番に挿している。動作としては、センサーが車輪の磁石の磁気を検出すれば、2回に1回の割合で電磁石をオンにする。これにより、実際の車輪の回転より2倍の時間の時間となるので、速度は半分と見なされるだろう。プログラムがやや複雑なのは、車輪の磁石を検出した後、それが通り過ぎるまで何もしないためだ。

int sensor = 2;     // 磁気センサー
int actuator = 13;  // 電磁石


void setup() {
  // 起動時の設定処理
  pinMode(sensor, INPUT);   // 磁気センサーを繋いだピンを入力に設定
  pinMode(actuator, OUTPUT);// 電磁石を繋いだピンを出力に設定
}


void loop() {
  // 起動中のループ処理
  static int counter = 0;         // 車輪の磁石を検出した回数
  static boolean detected = false;// 車輪の磁石を検出したか
  
  int state = digitalRead(sensor);  // 磁気センサーの値を読み取る
  if (state == HIGH) {  // 磁気センサーがオン(車輪の磁石を検出)であり、
    if (detected == false) {  // 直前に車輪の磁石を検出していなければ、
      if (counter % 2 == 0) {   // 2回に1回の割合で、
      digitalWrite(actuator, HIGH); // 電磁石をオンにする
    }
    detected = true;        // 車輪の磁石を検出したことを示す
    counter = counter + 1;  // 車輪の磁石を検出した回数を増やす
   }
  } else {  // 磁気センサーがオフ(車輪の磁石を検出していない)であり、
    if (detected == true) {  // 直前に車輪の磁石を検出していなければ、
      digitalWrite(actuator, LOW);  // 電磁石をオフにする
      detected = false;             // 車輪の磁石を検出していないことを示す
    }
  }
}

プログラムの動作が確認できれば、一式をRidge Runnerに取り付ける。本来の車輪の磁石は奥まった位置にあるので、磁気センサーに位置に合わせて新しい磁石をスポークに取り付ける。Arduinoにはモバイル・バッテリーで電源供給する。これらを養生テープでフレームに固定すれば出来上がり。冗談のようだが、動作を確認するだけなので構わない。ただし、ケーブルが絡まないように配慮しよう。

このようにしてRidge Runnerに乗ると、実際の速度の1/2として認識される。1/3や1/4に設定しても良いし、タイマーを使って任意の周期で動作させることもできる。デジタル入出力となれば、その処理の自由度は高い。もっとも、Arduinoを使うは「負けた」気分になる。それは当たり前過ぎるからだ。デジタル領域なら、STEPSのファームウェアや制御信号を解析すべきだろう。まだまだ道は遠く険しい。

【追記】次なる実験では速度センサーと制御ユニット間の通信を変更する製品を用いて実験を行った。(2019.5.03)

【追記】本タイトルを「続々・シマノの電動アシストSTEPSの実験」から「シマノの電動アシストSTEPSの実験 (3) Arduino編」に変更した。(2020.04.16)

Leave a Reply

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA