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

直線運動をするリニアアクチュエータとなると、産業用としてこんなものがありますが、趣味で使うのには当然ながらお高くオーバースペックです。手軽に使えるものとしては、本来の使い方ではありませんがオーディオミキサー用のモーターフェーダがあり、スイッチサイエンスで購入できたので、遊んでみます。
使用した主な部品はこちら
モータドライバーは、安価なArdumotoでも十分だと思います。手持ちが無かったので無駄に高出力版のドライバーを使っています。(Ardumotoを使用する場合は、ピンと制御方法がちょっと違うのでプログラムの変更が必要です)
配線図はこんな感じ。アクチュエータはDCモータで、フィードバック機構は、可変抵抗です。
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は、ボリュームとモーターの値が違う時にどれだけ早くモーターを動かすかの係数で、値が大きければ大きいほど速いですが、オーバーランを発生しやすくなり、ピッタリと止まらずブルブル震える事になってしまいます。ほどほどに。小数点も使えますので微調整が可能です。
コメントはありません