Slide Pot モーターフェーダを手軽に利用できるリニアアクチュエータとして使う



直線運動をするリニアアクチュエータとなると、産業用としてこんなものがありますが、趣味で使うのには当然ながらお高くオーバースペックです。手軽に使えるものとしては、本来の使い方ではありませんがオーディオミキサー用のモーターフェーダがあり、スイッチサイエンスで購入できたので、遊んでみます。

使用した主な部品はこちら

モータドライバーは、安価なArdumotoでも十分だと思います。手持ちが無かったので無駄に高出力版のドライバーを使っています。(Ardumotoを使用する場合は、ピンと制御方法がちょっと違うのでプログラムの変更が必要です)

配線図はこんな感じ。アクチュエータはDCモータで、フィードバック機構は、可変抵抗です。
Slide_Pot_ブレッドボード
DCモータは、モータードライバーシールドからの出力をつなぎ、可変抵抗には5VとGND・フィードバックにはArduinoのアナログINPUTにつなぎます。(配線図上側)
ボリュームは、アクチュエーターの位置を指示するためのコントローラーです(配線図下側)

プログラムはこちら

int analogPin0 = 5;     // FeedbackVal
int analogPin1 = 4;     // ポテンショメータのワイプ(中央の端子)に

int FeedbackVal = 0;
int val1 = 0;

int pwm_a = 5;   //PWM control for motor outputs 1 and 2 is on digital pin 3
int dir_a = 7;  //direction control for motor outputs 1 and 2 is on digital pin 12
int dir_b = 8;  //direction control for motor outputs 1 and 2 is on digital pin 12

void setup()
{
	pinMode(dir_a, OUTPUT);
	pinMode(dir_b, OUTPUT);
	pinMode(pwm_a, OUTPUT);
}

void loop()
{
	FeedbackVal = analogRead(analogPin0);    // アナログピンを読み取る
	val1 = analogRead(analogPin1);    // アナログピンを読み取る
	if(val1 > FeedbackVal){
		int speed = val1 - FeedbackVal;
		if(speed > 7){
			digitalWrite(dir_a, LOW) ;
			digitalWrite(dir_b, HIGH) ;
			analogWrite(pwm_a, speed * 2 + 40);
		}
	}else if(val1 < FeedbackVal){
		int speed = FeedbackVal - val1;
		if(speed > 7){
			digitalWrite(dir_a, HIGH);
			digitalWrite(dir_b, LOW);
			analogWrite(pwm_a, speed * 2 + 40);
		}
	}else{
		analogWrite(pwm_a, 0);
	}
}

ボリュームの値とモーターフェーダの位置を比較して、ボリュームの値を近づけるようにモーターを動かします。
また、値が遠ければ遠いほどモーターの出力を強くして素早くボリューム値に近づけるようにしています。

analogWrite(pwm_a, speed * 2 + 40);

40の値は、最低速度です。あまりにモーターに低い値を与えてもモーターが動かないので、最低速度を与える必要があります。

2は、ボリュームとモーターの値が違う時にどれだけ早くモーターを動かすかの係数で、値が大きければ大きいほど速いですが、オーバーランを発生しやすくなり、ピッタリと止まらずブルブル震える事になってしまいます。ほどほどに。小数点も使えますので微調整が可能です。

YouTube Preview Image

コメントはありません
コメントをどうぞ

*