モータードライバを中継地点にしてDCモーターを回してみましょう。モータードライバの必要性については前の講座「Arduino講座05(モータードライバとは?)」をご覧ください。
必要なもの
まずは必要なもの。
- モータードライバモジュール(L9110S)
- DCモーター
- 電池と電池ボックス
- ジャンパー線
- ブレッドボード(必要なら)
DCモーターは安いやつを1つ。模型(おもちゃ)用のモーターなら3Vで動くと思います。電池ボックスはそれに見合ったやつを準備。使用するモータードライバは2.5V~12V で動作するので今回は3Vを使います。
配線
まずはモータードライバモジュール(L9110S)の配線を見ていきます。他のモータードライバでは配線が違うと思うので必ず型番で検索して確認してください。
左側はモーター出力で右側がArduino関係と電源になります。上がモーターA、下がモーターBになっています。とりあえずモーターは1つしか使わないのでモーターAのみ説明します。上の画像の左上2本がモーターと接続するところ。右側の真ん中2本が電源入力。VCCがプラス、GNDがマイナス。GNDは制御信号の戻り道にもなっているのでArduinoのGNDにもつないでください。右上2本はモーターAに制御信号を送る線でArduinoのデジタル入出力ピン(D0~D13)につなぎます。基本的にはどこでもいいのですが今回は波線マーク「~」のついている5番と6番へつなぎます。図解するとこんな感じ↓
わりと簡単。でも実機でつなぐと複雑そうに見えますね。GNDのコード分配でブレッドボードを使っています。
プログラム
次はプログラム。基本的にはLEDと同じで、出力の設定をして電源ON、電源OFFなどです。まずは出力。Arduinoに接続されているピンは5番、6番、GNDなので、5番と6番を出力に設定。
pinMode(5, OUTPUT); //5番ピンを出力に設定
pinMode(6, OUTPUT); //6番ピンを出力に設定
モーターを回すにはLEDと同じように digitalWrite()
を使いますが、今回はピン2本に差してますよね?これは
digitalWrite(5, HIGH); //5番をHIGHに設定
digitalWrite(6, LOW); //6番をLOWに設定
とするとモーターが回転。そしてHIGHとLOWを入れ替えると
digitalWrite(5, LOW); //5番をLOWに設定
digitalWrite(6, HIGH); //6番をHIGHに設定
モーターが逆回転するんです。だからピン2本とつなぎます。それ以外は停止になります。表にまとめると
5番ピン | 6番ピン | モーターの動き |
---|---|---|
LOW | LOW | 停止 |
HIGH | LOW | 回転(正転) |
LOW | HIGH | 逆回転(反転) |
HIGH | HIGH | 急停止(ブレーキ) |
HIGHとHIGHのときは急停止ですが状況によってはLOWとLOWのときとぜんぜん変わらないかも。
さて、なんとなくプログラムの形が分かってきたと思うので
モーターが3秒間回転して3秒間停止する
をくりかえすプログラムを作ってみましょう。
void setup() {
pinMode(5, OUTPUT); //5番ピンを出力に設定
pinMode(6, OUTPUT); //6番ピンを出力に設定
}
void loop() {
digitalWrite(5, HIGH); //モーター回転
digitalWrite(6, LOW); //モーター回転
delay(3000); //3秒待つ
digitalWrite(5, LOW); //モーター停止
digitalWrite(6, LOW); //モーター停止
delay(3000); //3秒待つ
}
実験
ではArduinoとPCをUSBケーブルでつないでボードに書き込んでみましょう。すぐにモーターが回るから気をつけてね。
回りました!ぜひモーターを逆回転や急停止などに変更していろいろ試してみてください。
2つのモーターを制御する
このモータードライバは2つのモーターを同時に制御できるので、モーターBにもつないで実験してみましょう。モーターを2つ持っていない方は文章を読みながら妄想して楽しんでください。まずは配線図。
モーターBの制御はArduinoの10番ピンと11番ピンに接続しています。プログラムはこんな感じ↓
void setup() {
pinMode(5, OUTPUT); //5番ピンを出力に設定
pinMode(6, OUTPUT); //6番ピンを出力に設定
pinMode(10, OUTPUT); //10番ピンを出力に設定
pinMode(11, OUTPUT); //11番ピンを出力に設定
}
void loop() {
digitalWrite(5, HIGH); //モーターA回転
digitalWrite(6, LOW); //モーターA回転
digitalWrite(10, LOW); //モーターB逆回転
digitalWrite(11, HIGH);//モーターB逆回転
delay(2000); //2秒待つ
digitalWrite(5, LOW); //モーターA停止
digitalWrite(6, LOW); //モーターA停止
digitalWrite(10, LOW); //モーターB停止
digitalWrite(11, LOW); //モーターB停止
delay(2000); //2秒待つ
}
どんな動きになるか実験すると
モーターBを逆回転に設定していますがもしかしたらモーターAと同じになるかも知れません。そのときはモーターBからモータードライバに接続しているコード(ジャンパー線)を入れ替えてプラスマイナスを逆にした方がベストです。特にロボットカーで2つのモーターを使うときはまずこれを確認しましょう。自分が考えている向きにタイヤが回転するようにコード(ジャンパー線)をつけてください。じゃないとあとで後悔します。
そしてさすがに2つのモーターを同時に回すのに、充電式の単三電池2個(実質2.4V)では弱すぎました。ちょっとケチりすぎたかも。まあ動いたのでOKですが。電池が弱いと片方のモーターしか回らないことがあるので注意してください。
まとめ
Arduinoでモーターを回転させることができました。モータードライバもつないだので配線が少し複雑になりましたがモジュールのおかげでわりとシンプルになりました。プログラムはLEDとほぼ同じで簡単でしたね。次回はモーターの回転スピードを変えてみたいと思います。