この例では、Arduinoとモータードライバーを使用してリニアアクチュエーターの速度を制御します。
注:このチュートリアルは、基本的な電子原理、Arduinoハードウェアおよびソフトウェアに関する予備知識を前提としています。 Arduinoを初めて使用する場合は、GoogleおよびYouTubeの検索で利用できる多くの優れた初心者向けチュートリアルの1つから基本を学ぶことをお勧めします。カスタムアプリケーションのテクニカルサポートを提供するためのリソースがなく、これらの公開されているチュートリアル以外でデバッグ、編集、コードまたは配線図を提供しないことに注意してください。
コンポーネント
- 12Vリニアアクチュエータ
- 12V電源
- Arduino
- モータードライバー
- ポテンショメータ(オプション)
- 接続および圧着工具またははんだごてを作成するための電線
配線
ハードウェアとソフトウェアの概要
リニアアクチュエータのDCモーターには大電流(最大5A)が必要です。リニアアクチュエータをArduinoに直接接続すると、それぞれの定格が40mAしかないため、この高電流によってArduinoデジタルピンが破壊されます。そのため、Arduinoボードから低電流PWM(パルス幅変調)信号を受け取り、高電流PWM信号をリニアアクチュエータに出力できるモータードライバを使用します。
モータードライバーは、2つのPWMデジタルピン(Arduino Unoのピン10と11)に接続されています。これらのピンの1つをLOWに設定し、もう1つをHIGHに設定することで(以下のコードの行18と19を参照)、アクチュエータを最大速度で伸ばすことができます。アクチュエータを停止するには、両方のピンをLOWに設定し(以下のコードの21行目と22行目を参照)、動きの方向を逆にするには、HIGHピンとLOWピンの順序を逆にします(以下のコードの24行目と25行目を参照)。変数「Speed」を[0、255]の範囲の任意の値に変更して、速度を調整することもできます。以下のコードの17行目を参照してください。
コード
https://gist.github.com/Will-Firgelli/c0ef0871dc1946d75257e0c29dccae2a
/* Firgelli Automations
* Limited or no support: we do not have the resources for Arduino code support
*
* Program demos how a motor driver controls direction & speed of a linear actuator
*/
int RPWM = 10; //connect Arduino pin 10 to IBT-2 pin RPWM
int LPWM = 11; //connect Arduino pin 11 to IBT-2 pin LPWM
int Speed;
void setup() {
pinMode(RPWM, OUTPUT);
pinMode(LPWM, OUTPUT);
}
void loop() {
Speed = 255; //choose any speed in the range [0,255]
analogWrite(RPWM, 0);
analogWrite(LPWM, Speed);
delay(1000); //extend at given speed for one second
analogWrite(RPWM, 0);
analogWrite(LPWM, 0);
delay(500); //stop for half a second
analogWrite(RPWM, Speed);
analogWrite(LPWM, 0);
delay(1000); //retract at maximum speed for one second
}
ポテンショメータによるさまざまな速度制御
上記の例では、コードの17行目で速度を手動で設定しています。ただし、アクチュエータの速度を時間内に変化させたい場合があります。これを実現する最も簡単な方法は、ポテンショメータを使用することです。 A ポテンショメータは分圧器として機能できる3端子可変抵抗器。ポテンショメータのノブを回すと出力電圧が変化し、これをArduinoのアナログピンに接続して可変速度を設定できます。
配線
ハードウェアとソフトウェアの概要
前述のように、ポテンショメータは、ノブを回すと抵抗が変化する回転装置です。ポテンショメータの2つの外側のピンを5VとGNDに接続し、中央のピンをArduinoのアナログピンA0に接続することにより、分圧器が作成されます。ノブを回すと、Arduinoは[0、1023]の範囲のアナログ読み取り値を読み取ります。
[512、1023]の範囲の値の場合、アクチュエータを拡張し、値[0、511]の場合、アクチュエータを収縮させます。これは、の22行目と28行目の単純なif()/ elseステートメントで実現できます。以下のコード。次に、map()関数(以下のコードの23行目と29行目)を使用して、これをアクチュエータの速度と方向の両方を制御するPWM信号に変換できます。
コード
https://gist.github.com/Will-Firgelli/d2cdf69edc829974885984b3fb8e4856
/* Firgelli Automations
* Limited or no support: we do not have the resources for Arduino code support
*
* This progam controls the speed of a linear actuator via a potentiometer input
*/
int RPWM = 10; //connect Arduino pin 10 to IBT-2 pin RPWM
int LPWM = 11; //connect Arduino pin 11 to IBT-2 pin LPWM
int potPin = A0; //analog pin that connects to centre potentiometer pin
int Speed, sensorVal;
void setup() {
pinMode(RPWM, OUTPUT);
pinMode(LPWM, OUTPUT);
pinMode(potPin, INPUT);
}
void loop() {
sensorVal = analogRead(potPin); //read user input from the potentiometer
if(sensorVal >= 512){ //extension
Speed = map(sensorVal, 512, 1023, 0, 255);
analogWrite(RPWM, 0);
analogWrite(LPWM, Speed);
}
else{ //retraction
Speed = map(sensorVal, 0, 511, 255, 0);
analogWrite(RPWM, Speed);
analogWrite(LPWM, 0);
}
}