ここでは「Arduino」と「モータードライバ」を使ってDCモーターを制御する方法を紹介します。
DCモーターってどうやって制御するんだろう
Arduinoで動かすにはどうしたらいいの?
モータードライバの配線は?
といった疑問を解決することができます。
それではさっそく制御方法を見てみましょう!
DCモータ、モータドライバを使うための準備・基礎
まずはArduinoでDCモータを制御するための準備として基礎知識を確認します。
制御用のマイコンには「Arduino MEGA2560 R3」の互換品を使用します。
この互換品は「Arduinoスターターキット」にて5000~6000円という安値で手に入るので、互換品のArduino MEGA2560を使用しました。
また、今回使う部品はすべてスターターキットに入っているので、これを買ってしまえば追加で買い足す必要がないのでオススメです。
DCモータ制御に必要なもの
続いて、DCモータ制御に必要なものをピックアップしてみます。
DCモータ制御に必要な部品等
Arduino MEGA2560 R3本体
DCモータ
ブレッドボード用電源モジュール
モータードライバー:L293D
パソコン(Arduino IDEインストール)
ジャンパー線
ブレッドボード
*すべてスターターキットに入っています。
DCモータは電子部品屋に行かなくとも、DCMカーマなどで普通に販売されているので複数のDCモータを制御したい場合は買い足しましょう。
ブレッドボード用電源モジュールについて
続いて、DCモーターを駆動させるのに必要な電源モジュールについてです。
小さなDCモーターは
となります。
そのためArduino本体に直接モーターを接続すると、Arduino本体に負荷がかかり故障の原因になる恐れがあります。
そこで、電源モジュールを使うことで必要な電力を補います。
この電源モジュールを使うにも電源が必要なので、今回はスターターキット付属の12V電源を使いました。
モータドライバ:L293Dの各ピン
最後にモータドライバ:L293Dの使い方(各ピンの詳細)について触れておきます。
L293Dは
で計16ピンあり、この内、左8ピンと右8ピンを使って2つまでモータが制御できます。
ピンの役割は以下です。
pin1 | M1 PWM | pin16 | Battery +Ve |
pin2 | M1 direction 0/1 | pin15 | M2 direction 0/1 |
pin3 | M1 +Ve | pin14 | M2 +Ve |
pin4 | GND | pin13 | GND |
pin5 | GND | pin12 | GND |
pin6 | M1 -Ve | pin11 | M2 -Ve |
pin7 | M1 direction 1/0 | pin10 | M2 direction 1/0 |
pin8 | Battery +Ve | pin9 | M2 PWM |
この内
になり
を接続します。
残りのピンは制御用となっています。
DCモータをArduinoで制御する
モータドライバやDCモーターの特徴を確認したところで、実際に配線・プログラムを行っていきましょう。
DCモータとArduinoの配線図
まずはArduino本体とモータドライバ、DCモータを配線していきます。
配線は
ピンの接続先
pin1 → digital pin5
pin2 → digital pin4
pin7 → ditigal pin3
へ接続しました。
ここで少し問題が発生したので共有します…
上図のように配線しますが残念ながら動きませんでした。
なぜか原因を調べると
からでした。
そこで下図のように電源モジュールからArduinoに電源供給を行いました。
※モータドライバとArduinoの黒・白ジャンパー線部分
電源供給のための配線は
黒線:モータドライバの「-側」とArduinoの「GNDピン」
赤線:モータドライバの「+側」とArduinoの「5Vピン」
と接続しています。
これで電源過不足の問題は解決されます。
ArduinoでDCモータを制御するプログラム
配線も終わったことで、いよいよArduino IDEを使ってプログラムを書いていきます。
今回は一例として簡単なモーター制御プログラムを記載しておきます。
#define DIRA 3
#define DIRB 4int i;void setup() {
pinMode(ENABLE,OUTPUT);
pinMode(DIRA,OUTPUT);
pinMode(DIRB,OUTPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(ENABLE,HIGH); // enable on
for (i=0;i<5;i++) {
digitalWrite(DIRA,HIGH); //one way
digitalWrite(DIRB,LOW); delay(500);
digitalWrite(DIRA,LOW); //reverse
digitalWrite(DIRB,HIGH); delay(500);
}
digitalWrite(ENABLE,LOW); // disable
delay(2000);
}
あとは各自プログラムを書き換えれば、回転速度の制御などが可能となります。
2つもモーターを同時制御するのも面白いと思うので是非挑戦してみてください。
以上Arduinoを使ったDCモーター制御方法でした。
また当サイトでは、下記記事のような「Arduino」を使った様々な電子工作・電子部品を使った制御方法を紹介しています。
もっとマイコン制御などを勉強したい方は、こちらも是非ご覧ください。
お疲れさまでした。