プロポT10Jを用いて、ブラシレスモーター制御
久しぶりのブログ更新ですが、旅行とか行ってまして、あんまりできなかった...
いろいろ旅行中にも考えてたんですがトルクが強くなるのかわからんがKV値が1000ぐらいのモーターを買うべきかいったんこのモーターで作るか?とかほしい大きさのプロペラがあんまり見つからなかったのでどうしようかとか、ESCが一つ故障していたりとか・・・
今回作成までに時間がかかったのは上記の理由もあるが、パルスを読み取るときに現在ライブラリーを使っているのだが、どうやらライブラリーを使うとほかの制御に影響が出るかもしれないからこのまま作成を続けていいのかと思いいろいろ調べて、ドローンの場合、レシーバー読み取り、モーターに送信を4つそれぞれ行う、さらに加速度センサーとかしだしたら現在のpulesln()関数だとかservo.hだと遅いらしいのでどうしようかと今後の課題
本題
とりあえず今回はライブラリを使ってやってみた
Arduinoのコード
#define RECV_PULSE_LENGTH_MIN 1000 #define RECV_PULSE_LENGTH_MAX 2000 #define VAL_MIN 1000 #define VAL_MAX 2000 #define CH1_PIN 7 int CH1_value = 0; void setup() { pinMode(CH1_PIN, INPUT); FL_motor.attach(5); // attaches the servo on pin 5 to the servo object FL_motor.writeMicroseconds(VAL_MIN); Serial.begin(115200); } void loop() { CH1_value = pulseIn(CH1_PIN,HIGH);//パルス幅測定 Serial.print("CH1 value = "); Serial.print(CH1_value); int FL_speed = map(CH3_value, RECV_PULSE_LENGTH_MIN, RECV_PULSE_LENGTH_MAX, 0, 1000);//パルス幅を0から100までに変換 FL_motor.writeMicroseconds(VAL_MIN+FL_speed); delay(10); }
省いているがこんな感じで書いた。
プロポから信号を読み取ってそれmap関数でモーターに合わせるようにする。
それを設定した最小のVAL_MIN(回転数0)に足して制御する。正直説明は間違っていると思う。もっと理解度を上げていかないと
今後は4つのモーターを回してどれだけ制御にラグが発生するのかというのを確認しないといけないかも、
今回参考にさせて頂いたブログおよびサイト