DCモーターは電圧をかければ回りますが、回転方向を変えたり回転速度を変えたりする場合は駆動電圧を変動させる必要があります。
しかしながら、例えば4輪駆動のラジコンカーを作る場合は4つのDCモーターを制御しなければなりません。1つずつ上記のような回路を組んでいくとやや煩雑になってしまいます。
モーターコントローラを使いましょう
そこで、簡素な接続でDCモーターを制御することができるモジュールである、モーターコントローラを使ってよりシンプルにしましょう。
9VのDCモータを駆動する際にこちらのL298Nデュアルモーターコントローラーをおすすめします。駆動電圧が5V~35Vとかなり幅が広いので、多くのDCモーターに対応することが可能かと思われます。
各部位の説明
- 駆動電源: 電源部位の左側2つの接続部になります。DCモーターの駆動電圧に合わせた電源を繋ぎます。
- ロジック電源: 電源部位の右側2つの接続部になります。(GNDは共有します。)5Vの電圧ですので、Arduinoのものを使う形で良いでしょう。
- OUT1〜4: DCモーターに繋ぎます。2つのDCモーターまで制御することが可能です。
- IN1〜4: DCモーターを制御する端子で、OUTの番号と紐づいているのでArduinoのGPIOに接続しましょう。
- ENA・ENB: PWMを用いてDCモーターの回転速度を変化させることができるピンです。初期状態はジャンパーピンが挿さっているので、これを抜いて、ArduinoのPWMピンと接続しましょう。
L298Nデュアルモーターコントローラーの接続
このモーターコントローラの場合、1つのモジュールで2つのDCモータを制御することができます。接続の仕方は下記のようになります。
ENAとENBのピンはアナログ入力になりますので、PWM出力可能なピンと接続をしておきましょう。
Arduinoの制御コード
Arduinoでの制御例を記載します。
回転させる場合はどちらか一方のピンをHIGHにし、回転スピードはENA、ENBに接続したピンでanalogWrite(PWM実行)をします。回転スピードは0〜255の値しか設定できないことにご注意ください。
int motors[2][3] = {{4,2,3},{8,7,9}}; void setup() { for(int i = 0; i < 2; i++){ pinMode(motors[i][0], OUTPUT); pinMode(motors[i][1], OUTPUT); pinMode(motors[i][2], OUTPUT); } } void stop() { for (int i = 0; i < 2; i++) { digitalWrite(motors[i][0], LOW); digitalWrite(motors[i][1], LOW); } } // motorNum: 0,1 回転させるモーターの番号 // direction: -1,1 回転させる方向 // power: 0~255 回転スピード void spin(int motorNum, int direction, int power) { if(direction == 1){ digitalWrite(motors[motorNum][0], HIGH); digitalWrite(motors[motorNum][1], LOW); } if(direction == -1){ digitalWrite(motors[motorNum][0], LOW); digitalWrite(motors[motorNum][1], HIGH); } analogWrite(motors[motorNum][2], power); } void loop() { spin(0,1,100); delay(1000); spin(1,1,100); delay(1000); spin(0,-1,200); delay(1000); spin(1,-1,200); delay(1000); stop(); }
その他のDCモータコントローラ
その他、使用する電源やモータの強さに応じて最適なモータコントローラを選定しましょう。下記は一例です。