このサイトはMacを使って Arduino Uno の動作や活用法を学びます。

20 Arduino 直流モーターをJoystickで制御

この記事では直流モータの回転をJoystickで制御します。

今回使用する直流モータは、使用している Arduino Supper Starter Kit に付属していたもので見た目は、普通の模型用モーターです。Kitの仕様書によれば主な性能は

 

 

無負荷でも70 mAもの電流が流れるためにこのモータをArduinoで直接駆動することはできません。このため、L293D half-H driver というモータ駆動用IGを利用します。主な特徴は以下の通りです。

 

各出力は、完全なトーテムポール駆動回路で、ドライバはペアで動作し、1,2EN でドライバ 1 と 2 を有効にし、3,4EN で ドライバ 3 と 4 を有効にします。

 

イネーブル入力がハイのとき、関連ドライバはアクティブとなり、アクティブ で、その出力は入力と同相です。イネーブル入力がローのとき、これらのドライバはディセーブルされ、出力はオフとなり、ハイ・イ ンピーダンス状態になります。

 

適切なデータ入力によって、モータ用途に適したフル H(またはブリッジ)可逆ドライブを形成することができます。このICで、2 つのモータを独立して制御することができますが、 この記事ではIC の半分だけを使用しています。下の図はICの働きを示すもので、使用している半分のみを描いています。

 

 

 

今回の回路図を示します。

モーター駆動には、最大で250mAもの電流が流れますから、Arduinoからモータの駆動電源を取ることはできません。必ずもう一つ電源を用意してください。乾電池を4個でもOKです。

 

モータの制御には、Joystickを接続して行います。

Joystickは、[13] Arduino ジョイスティックを接続 で解説していますので参照してください。

 

 

 

 

 

スケッチの作成

Juystickの中立位置でモーターが停止し、ノブを倒すと徐々にモーターの回転速度が速くなり限度まで倒したところで最高速度になります。

ノブを反対方向に倒すと今度は逆回転で徐々に速度が増加するプログラムです。

モーターの回転方向は、DIRA、DIRB (L293Dの 1A, 2A)  で指示し、回転スピードは、ENABLE (L293Dの 1, 2EN)  に出力する波形をPWMでヂューティ可変し調整します。

 

// 直流モーターをJoystickで制御
// 2021-6-14

#define ENABLE  5   // Driver IC に接続
#define DIRA    3
#define DIRB    4
#define X_pin   A0   // Joystick X軸 に接続

void setup() {
  pinMode(ENABLE,OUTPUT);
  pinMode(DIRA,OUTPUT);
  pinMode(DIRB,OUTPUT);
}

void loop() {
  // Joystick X軸値を1/2して取得 (0 - 511)
  int val = analogRead(X_pin)/2;
  if(val > 255){              // 中立点より大なら
    val = val-256;            // 中立点からの値にする
    digitalWrite(DIRA,HIGH);  // 正方向を指示
    digitalWrite(DIRB,LOW);
  }else{                      // 中立点より小なら
    val = 255 - val;          // 中立点までの値にする
    digitalWrite(DIRA,LOW);   // 逆方向を指示
    digitalWrite(DIRB,HIGH);
  }
  analogWrite(ENABLE,val);    // 回転速度を指示してON
}

 

動作の確認

スケッチを Arduino に書き込みプログラムがスタートしたら、Joystickを動かします。ノブの傾きによりモータ回転がコントロールできるはずです。


 

Kitに付属するチュートリアル・レッスンには、まだ、7セグメントLED、リレー、ステップモーターの接続が残っていますが、私の場合これらを利用する機会は少ないので、今回で付属するチュートリアル・レッスンを元にした記事は終了とします。

次回は、使いやすいI2Cインターフェースの小型LCDを接続します。