3本ローラーのスマートトレーナー化(その14)

 大きく失敗。

 モータードライバーの使い方を間違えていた。

aisumegane.com


を見たら、PWM制御をおこなう場合のことが丁寧に説明してあった。前進後退で2chを使用し、PWMで1ch、合計3chを使用するのが正しい。これまで試みていたのは、前進/後退のチャンネルにPWMを直接入力していた。出力が上がっていなかったかもしれない。

 3ch使用するということは、プログラム上は、メインスレッドとサブスレッドの変数受け渡しが無くなるので、その分、シンプルになるはず(はんだ付けが1か所増えるけど)。

 早速、スケッチを書いて、ESP32キットの方で試してみたが何かおかしい。Bluetoothが使えなくなっている。サンプルスケッチのSerialtoBluetoothを入れてもつながらない。bluetooth機能が壊れてしまったようだ。

 仕方がないのでケースに入れた本番用ESP32に変更してスケッチを入れようとしたが、USBを認識しない。このエラーは前回も出て、何回か試している内に復帰したことを経験している。今回も何回か試している内(アップロード中にリセットボタンを押すのが効いたみたいだ)にスケッチをアップロードすることができた。しかしながら、思ったように動かない。そのうち、USBをつなぐとパソコン側が再起動されるという症状が出始めた。別のパソコンでも同じ症状。完全に壊れてしまったようだ。これでまともに動くESP32が無くなってしまった。

 戦意喪失。

 ところが丁度タイミング良く(?)、アリエクスプレスに注文していたサーボモーター(996R互換品)が届く。ネオジム+電磁石のトルクが思ったほど上がらないことが分かった時期に注文していたものだ。壊れてしまったESP32のうち、2chのみ生きている個体があった。これが使えるはず。と思ってやってみたら,思惑通り動くようだ。
 スケッチはこちら。

/**********************************************************************
  Filename    : Smart_Trainer2
  Description : Control training level of the cycle roller by bluetooth
   with ESP32 and Servo motor
  Auther      : Ribble CrMo
  Modification: 2023/02/11
**********************************************************************/
#include "ESP32Servo.h"
#include "BluetoothSerial.h"
#include "string.h"

const int SERVO = 2;  // サーボモーターピン
int angle = 0;
String buffer;
BluetoothSerial SerialBT;
Servo servo;  // サーボクラス

void setup() {
  servo.attach(SERVO);              // サーボモーターの制御ピン設定
  SerialBT.begin("SmartTrainer2");  //Bluetooth device name
}

void loop() {
   if (SerialBT.available()) {
    buffer = SerialBT.readString();
    angle = buffer.toInt();
    servo.write(angle);
    delay(10);
  }
}

 これを使って、グロータックオリジナルのネオジム磁石使用の誘導電流式の負荷装置を改造することにする。オリジナルの負荷装置の部品をそのまま使って、設定角度もそのまま実装することを考えた。オリジナルの負荷装置にはネオジム磁石とローラーの距離を一定に固定するための穴が5つ開いている。ローラーに最接近する際の穴を穴1、次の穴を穴2・・・とする(穴5はローラーとの距離が十分離れていて無負荷状態のはず。)。
 ノギスで測ってみると、
  ヒンジと穴の距離:24.00ミリ
  穴1-穴2の距離:3.26ミリ
  穴2-穴3の距離:4.62ミリ
  穴3-穴4の距離:8.94ミリ
  穴4-穴5の距離:7.12ミリ
(参考)
  穴1-穴5の距離:21.82ミリ
 距離がだんだん大きくなるのは、誘導電流の大きさ(負荷の大きさ)の変化率が磁石とローラーの距離が近いと大きくなることから理屈に合っている。
 さて、ここから三角関数で角度が計算できる。穴間の距離をx、ヒンジと穴の距離をl、角度をθとすると、
θ =2*arcsin ((x/2)/l)
 よって、角度は
  穴1-穴2の角度:8度
  穴2-穴3の角度:11度
  穴3-穴4の角度:21度
  穴4-穴5の角度:17度
(参考)
  穴1-穴5の角度:54度
 角度を全部足すと57度になって、検算用の穴1-穴5の角度と3度違ってしまうが、計測誤差の範囲ということにしてこの角度で実装する。
  運動強度レベル0 穴5 57度
  運動強度レベル1 穴4 40度
  運動強度レベル2 穴3 19度
  運動強度レベル3 穴2  8度
  運動強度レベル4 穴1  0度