【ドローン製作記録】ブラシレスモーターをPWM制御する【Arduino】

スポンサーリンク
drone_check Arduino
スポンサーリンク

はじめに

今回は前回組み立てたドローンのメインフレームと制御用基盤をいい感じにくっ付けた後、取り付けたモーターが正常に動作するのかを確認しました。

最初はドローンのメインフレームと制御用基盤をいい感じにくっ付けずにやっていたのですが、結果的に指を切って血だらけになったので、いい感じにくっ付けた方が良いです。

制御基盤の取り付け

ネジ穴がうまくはまらなかったので、たまたま家にあった地震対策グッズを使って制御基盤をドローンのメインフレームに貼り付けることにしました。

Earthquake_mat
地震対策グッズ

前回作った制御基盤は裏に配線があって平面でないため、スペーサを使って2枚重ねにしました。

board
2枚重ねになった制御基盤

次の画像のようにくっ付いています。

Deploy
地震対策グッズでくっつけてある

後はバッテリー用のフレームを取り付けてバッテリーを差し込むだけだったのですが、思っていたよりもバッテリーが大きく横向きにしか入りませんでした…。

lipo
リポバッテリーの取り付け

想定よりも電源ケーブルに長さが必要になったので、XT60オスメスのケーブルを1本作って延長することにしました。

XT60cable
自作したXT60ケーブル

最後に適当にやったときに手を切って血を流したので、安全対策に紐で括り付けて暴走しないようにしました。

drone_check
ひとまず完成したドローン

動作確認用に使ったプログラム(スケッチ)

Servo.hというPWM制御用のライブラリが存在したのでそれを使いました。

ESCは毎回最初にパルス幅の最小値を入力する必要があるので、setupの部分でそれを実行しています。

//ヘッダ
#include <Servo.h>

//出力の最大最小の設定(固定値)
#define Power_Max 2000 //最大パルス幅
#define Power_Min 1000 //最小パルス幅

//各モータのServoオブジェクトを生成
Servo Front_r; //右前
Servo Front_l; //左前
Servo Rear_r; //右後
Servo Rear_l; //左後

//各モータの出力信号(初期値は最小値とする)
int Power_Fr = Power_Min;
int Power_Fl = Power_Min;
int Power_Rr = Power_Min;
int Power_Rl = Power_Min;

//setup
void setup(){

	//モータの設定
	Front_r.attach(10); //右前のモータを10pinに設定
	Front_l.attach(9); //左前のモータを9pinに設定
	Rear_r.attach(5); //右後のモータを5pinに設定
	Rear_l.attach(6); //左後ろのモータを6pinに設定

	//各ESCに最小PWM幅を送信
	Power_Set = Power_Min; //最小値の代入

	Front_r.writeMicroseconds(Power_Set);
	Front_l.writeMicroseconds(Power_Set);
	Rear_r.writeMicroseconds(Power_Set);
	Rear_l.writeMicroseconds(Power_Set);
	
	delay(1000); //待ち
}

//loop
void loop(){

	for(int i = 0; i < 100; i++){
		Front_r.writeMicroseconds(Power_Fr + i);
		delay(10);
	}

	for(int i = 0; i < 100; i++){
		Front_l.writeMicroseconds(Power_Fl + i);
		delay(10);
	}

	for(int i = 0; i < 100; i++){
		Rear_r.writeMicroseconds(Power_Rr + i);
		delay(10);
	}

	for(int i = 0; i < 100; i++){
		Rear_l.writeMicroseconds(Power_Rl + i);
		delay(10);
	}

	delay(2000);
	
	int Power_Set = Power_Min;
	
	Front_r.writeMicroseconds(Power_Set);
	Front_l.writeMicroseconds(Power_Set);
	Rear_r.writeMicroseconds(Power_Set);
	Rear_l.writeMicroseconds(Power_Set);

	for(int i = 0; i < 1000; i++){
		
		delay(10);
	}

}

実行

上記のプログラム(スケッチ)を書き込むと次のように動作します。

最後に

とりあえず動いてよかったです。

完成するかな。

コメント

タイトルとURLをコピーしました