【Arduino入門】はじめてのモータ制御!モータドライバの使い方を解説!
										ArduinoでLチカはできた!
次は、動くものを作りたいけど、Arduinoでモータをコントロールする方法がわからない(;;)
そのような方は、ぜひ、この記事を参考にしてください!!
今回の記事では、Arduinoで小型のモータをコントロールする方法を解説します!
実は、Arduinoだけでは、パワーが足りなくて、モータを回すことはできないのですが、モータドライバというパーツを使うことで、Arduinoでモータを自由自在にコントロールできるようになります!
- モータドライバの役割
 - モータドライバを使った回路の作り方
 - モータドライバを使ってモータをコントロールするプログラム
 
解説動画
今回の記事はこちらの動画を解説したものです。
Arduinoでモータをコントロールするにはモータドライバが必要!
モータを回す方法として、真っ先に思いつくのは下の図のように電池をつなぐことだと思います。
ですが、これではArduinoでコントロールすることはできません。。。

それでは、LEDを光らせた時と同じように、下の図のように、電池の代わりにArduinoをつなげばいいのではないか!?
と思いますよね!!
実は、この方法では、ほとんどのモータは回りません(T_T)
その理由は、Arduinoの穴(ポート)から出力できる電気の量(電流の量)が足りなくて、モータを回すことができないんです!
※LEDを光らせるのに必要な電気の量の何倍、何十倍、何百倍、、、も必要なんです!(モータの大きさによる)
それでは、どうやってモータを回すかというと、、、
下の図のように、Arduinoとモータの間にパーツを入れて、Arduinoからは「回して!」や「止めて!」という少ない電気でできる指示だけを送るようにして、モータを回す大きな電気は電池から直接モータに与えるようにします!

こんな都合のいいパーツが本当にあるのか・・・?
あるんです!!
それが、このモータドライバです!!

モータドライバには、小さいモータ用、大きなモータ用、1つのモータ用、複数のモータ用など、たくさんの種類があります!
モータドライバの使い方
ほとんどのモータドライバには、下の図のように、電池をつなぐところ、モータをつなぐところの他に、制御信号(A、B)を入れるところがあります。

この制御信号のところに入れる信号で、モータの動きをコントロールします。
AにH(HIGH)を入れて、BにL(LOW)を入れると、モータは正転します。
逆に、AにL(LOW)を入れて、BにH(HIGH)を入れると、モータは逆転します。
ここで使っている、HIGHやLOWは、実はArduinoのLチカプログラム(Blink)の「digitalWrite」ですでに使っていたものです!
digitalWrite(9,HIGH);
delay(1000);
digitalWrite(9,LOW);
delay(1000);なので、2本の線を用意して、Arduinoの2つのポートとモータドライバの制御信号A、Bのピンをつないであげれば、digitalWriteを使ってHIGHやLOWの信号をモータドライバに送ることができます!
モータの動きは上の図のように4パターンあります。
- 正転(回路次第で時計回りか反時計回りか決まる)
 - 逆転(正転とは反対の方向に回転する)
 - ストップ(自転車をこぐのをやめてシャーっと進む感じ)
 - ブレーキ(自転車のハンドルのブレーキをギュッと握って停止する感じ)
 
ちなみに、ストップとブレーキの動作の違いはこんな感じです!
モータドライバを使った回路の作り方
回路を作ってみましょう!
使用するものリスト
使用するものはこちらです!
| 機材・パーツ | 個数 | 備考 | 参考URL | 
| ブレッドボード | 1 | 秋月電子通商 通販コード P-05294  | |
| 電池BOX | 1 | 単3 x 4本 | 秋月電子通商 通販コード P-02678  | 
| ジャンパー線セット | 1 | オスーオス | 秋月電子通商 通販コード P-00288  | 
| ジャンパー線 | 3 | オスーメス | 秋月電子通商 通販コード C-08932  | 
| シールドクリップ (みのむしクリップ)  | 1 | 秋月電子通商 通販コード C-04351  | |
| タクトスイッチ | 1 | 秋月電子通商 通販コード P-03647  | |
| 抵抗 10kΩ | 1 | 秋月電子通商 通販コード R-25103  | |
| モータドライバ (Maker Drive)  | 1 | 秋月電子通商 通販コード M-16281  | |
| Arduino Uno | 1 | 秋月電子通商 通販コード M-07385  | |
| ツインモータギヤボックス | 1 | Amazon | |
| ナロータイヤセット | 1 | Amazon | |
| USBケーブル | 1 | Type-Aオス ー Type-Bオス | 秋月電子通商 通販コード C-07605  | 
| パソコン | 1 | 
モータドライバを使った回路を作る
回路図はこちら↓です!
慣れている人は、これを見ながら作れると思いますが、回路図に慣れていない人は、さらに下にある配線図を参考にしながら回路を作ってみてください!
回路を作るときは、特に電池BOXのプラスとマイナスをつなぐところを間違えないように気をつけてください!
一発で壊れる可能性がありますし、異常に発熱して、火傷するかもしれないので、プラスとマイナスはいつでも気をつけておいていいと思います!


モータとモータドライバをつなぐところは、下の図のようにシールドクリップを切って使うことをオススメします!
はんだ付けができる人は、はんだ付けをしてもいいと思います(^^)

モータをコントロールするプログラム
その1: 正転と停止の繰り返し
プログラムを書いていきましょう!
プログラムのポイント
- スタートスイッチを押す前はモータにストップ信号を送っておく
- 電源が入ったときに勝手に動き出したら危ないので、自分できちんとストップ信号を送ることで安心、安全なシステムになる
 
 - スタートスイッチを押すと下の動作を繰り返す
- モータを1秒間正転する
 - モータを1秒間ストップする
 
 
- モータ制御信号A: 5番
 - モータ制御信号B: 4番
 - スイッチ: 8番
 
ソースコード
ソースコード全文です。
動画でも説明していますが、スケッチ例のBlinkをベースにコピぺしながら作ると楽ちんです(^^)
正転するためには、制御信号AにつながっているポートをHIGHにして、BにつながっているポートをLOWにするのがポイントです!
1void setup() {
2  //ピンの出力(Output)or入力(Input)設定
3  pinMode(5, OUTPUT);  //モータ制御信号A
4  pinMode(4, OUTPUT);  //モータ制御信号B
5  pinMode(8, INPUT);  //スイッチ
6
7  //安全のためにストップ信号を送っておく
8  digitalWrite(5, HIGH);  //A
9  digitalWrite(4, HIGH);  //B
10
11  //スタートボタンを押されるのを待つ
12  while(digitalRead(8)==0);
13}
14
15void loop() {
16  //正転
17  digitalWrite(5, HIGH);  //A
18  digitalWrite(4, LOW);  //B
19  delay(1000);  //1秒待つ
20
21  //ストップ
22  digitalWrite(5, HIGH);  //A
23  digitalWrite(4, HIGH);  //B
24  delay(1000);  //1秒待つ
25}
動作確認
プログラムをArduinoに書き込んで動作確認をしましょう!
プログラムを書き込んだあとに、電池BOXに電池を入れるようにしたほうが安全です!
Arduinoから何も信号が出ていない状態で、モータドライバに電源が入ると、もしかすると勝手にモータが回り始めてしまうかもしれないですからね(^^;)
こんな感じで動くと思います!
モータをコントロールするプログラム
その2: 正転と逆転の繰り返し
次は、逆転も入れてみましょう!
プログラムのポイントとソースコードを書いておきますので参考にしてください!
プログラムのポイント
- スタートスイッチを押す前はモータにストップ信号を送っておく
 - スタートスイッチを押すと下の動作を繰り返す
- モータを1秒間正転する
 - モータを1秒間ストップする
 - モータを1秒間逆転する
 - モータを1秒間ストップする
 
 
- モータ制御信号A: 5番
 - モータ制御信号B: 4番
 - スイッチ: 8番
 
ソースコード
逆転するためには、正転とは逆に、制御信号AにつながっているポートをLOWにして、BにつながっているポートをHIGHにします。
1void setup() {
2  //ピンの出力(Output)or入力(Input)設定
3  pinMode(5, OUTPUT);  //モータ制御信号A
4  pinMode(4, OUTPUT);  //モータ制御信号B
5  pinMode(8, INPUT);  //スイッチ
6
7  //安全のためにストップ信号を送っておく
8  digitalWrite(5, HIGH);  //A
9  digitalWrite(4, HIGH);  //B
10
11  //スタートボタンを押されるのを待つ
12  while(digitalRead(8)==0);
13}
14
15void loop() {
16  //正転
17  digitalWrite(5, HIGH);  //A
18  digitalWrite(4, LOW);  //B
19  delay(1000);  //1秒待つ
20
21  //ストップ
22  digitalWrite(5, HIGH);  //A
23  digitalWrite(4, HIGH);  //B
24  delay(1000);  //1秒待つ
25
26  //逆転
27  digitalWrite(5, LOW);  //A
28  digitalWrite(4, HIGH);  //B
29  delay(1000);  //1秒待つ
30
31  //ストップ
32  digitalWrite(5, HIGH);  //A
33  digitalWrite(4, HIGH);  //B
34  delay(1000);  //1秒待つ
35}
動作確認
こんな感じで動くと思います!
まとめ: 【Arduino入門】はじめてのモータ制御!モータドライバの使い方を解説!
はじめて動くものを作る人に向けて、モータドライバの使い方を解説しました。
プログラムを見て気づいた人も多いと思いますが、構造はLチカのプログラムのほとんど同じですよね!
以前、申し上げた「Lチカを制するものはマイコンを制する!」をちょっと実感したいただけたのではないでしょうか(^^)
- モータドライバの役割
- マイコンのポートから出せる電気の量は小さいのでモータを回すにはパワーが足りない
 - モータドライバを通して電池から直接モータに電気を与える
 - マイコンは「正転」や「逆転」、「停止」などの指示を送る
※指示は少ない電気で送ることができる 
 - モータドライバを使った回路の作り方
 - モータドライバを使ってモータをコントロールするプログラム
 
最後まで読んでいただきありがとうございました!
以上、CHAでした!

