プロポ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つのモーターを回してどれだけ制御にラグが発生するのかというのを確認しないといけないかも、
今回参考にさせて頂いたブログおよびサイト
T10JとArduino
T10JとArduinoを接続してみようと思う。
T10Jを選んだ理由はない。評判が良かったからである。お金が飛んだ…
受信機にピンを指すときに横に刺さない事だけ気を付けたい。
今回参考にしたブログは
【Arduino】 Arduino とラジコンのコントローラー(プロポ)を接続する - とある科学の備忘録
毎回お世話になっている。もし私のブログを見ているなら私よりこちらのブログみてくれ。
Arduinoのコード
#define RECV_PULSE_LENGTH_MIN 1000 #define RECV_PULSE_LENGTH_MAX 2000 #define CH1_PIN 7 int CH1_value = 0; void setup() { pinMode(CH1_PIN, INPUT); Serial.begin(38400); } void loop() { CH1_value = pulseIn(CH1_PIN,HIGH);//パルス幅測定 Serial.print("CH1 value = "); Serial.print(CH1_value); int Ch1_percent = map(CH1_value, RECV_PULSE_LENGTH_MIN, RECV_PULSE_LENGTH_MAX, 0, 100);//パルス幅を0から100までに変換 Serial.print(" ( "); Serial.print(Ch1_percent); Serial.println(" %)"); delay(100); }
参考にしたサイトから引用した物でPIN自体はアナログでもデジタルピンでも両方とも動いた。
T10Jを起動するときに右のレバーを下にしとかないとアラーム音がすることも知った。
今度はこれを使ってモーターの操作とかESP32での実装を行いたい。
ArduinoとProcessingを使って姿勢を見る
角度を求めれたので次はprocessingにシリアル通信でデータを送る。
参考にしたコードは
こちらのサイトから
初めて使ってみてシリアル通信というのが結局よくわからんかった。
例えばほかのサイトだとArduino側でSerial.write()をしないとデータを送れないと書いていたが上のサイトではそのまま読み取っている。
実際読み取れているから何とも言えないが、Serial.write()にするとbyteだとかを考えないといけないっぽい。
今回、processingのことは何となくでしか理解ができなかった。
そして追加で、角度を求めるのを収束を早くした。Madgwickのライブラリーをそのまま使うと収束がもっさりしていたのでゲインを与えて早めた。
結果としてノイズなのかわからんが、ブレが大きくなったんで気を付けたし。
参考サイト
ゲインを与えて収束を早める
MPU6050を使って角度の取得とメモ
前回角速度各加速度を取得できた。
今回は角度を取得しようと思う。
角度を求めるには加速度から求める方法と加速度から求める方法があってそれぞれメリットとデメリットがある。
参考サイトより
【Arduino自作ドローン】No.4 状態推定(姿勢角) | AkiRacing.com
- ジャイロセンサ:短期間での動きは正確であるが,長期間での値は不正確
- 加速度センサ: 動いていると正確に姿勢が求められないが,時間が経っても値は必ず正確
ということらしい。このサイトはほんとによくまとめられていて参考になる。
それでMadgwickフィルターを使おうとしました。
shizenkarasuzon.hatenablog.com
ライブラリーにすでにあるので使用した。
ほんとにこの人にはお世話になっている。
参考サイト
MPU6050を使って角度の取得とメモ
前回角速度各加速度を取得できた。
今回は角度を取得しようと思う。
角度を求めるには加速度から求める方法と加速度から求める方法があってそれぞれメリットとデメリットがある。
参考サイトより
【Arduino自作ドローン】No.4 状態推定(姿勢角) | AkiRacing.com
- ジャイロセンサ:短期間での動きは正確であるが,長期間での値は不正確
- 加速度センサ: 動いていると正確に姿勢が求められないが,時間が経っても値は必ず正確
ということらしい。このサイトはほんとによくまとめられていて参考になる。
それでMadgwickフィルターを使おうとしました。
shizenkarasuzon.hatenablog.com
ライブラリーにすでにあるので使用した。
ほんとにこの人にはお世話になっている。
参考サイト