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