こんばんは!
今回はL298Nを使用したDCモータコントローラモジュールを使っていこうと思います。
使用するもの
・Arduinoメインボード(https://amzn.to/2vkPIUH)
・USBケーブル(https://amzn.to/2UHhntl)
・ジャンパワイヤ (https://amzn.to/39uBU8T)
・電池ボックス(https://amzn.to/2TKNkgB)
・TTモータ(https://amzn.to/2RlhNFr)
・DCモータコントローラモジュールL298N(https://amzn.to/2RrcyUE)
・工具 グルーガン、+ドライバ
TTモータについて
TTモータはDC(直流)電源に接続するだけで回転するDCモータです。
電池と接続するだけで回転し始めます。
+と-を入れ替える、つまり極性を入れ替えると逆方向に回転します。
このモータの定格電圧は12V であり、基本的に電圧が高ければ回転速度は上がります。
電池ボックスについて
これは名前の通り電池を入れる箱ですね。
今回使う電池ボックスは単三が8個入るので1.5×8で12Vの電源を確保しています。
DCモータコントローラモジュールについて
今回使用するDCモータコントローラモジュールはL298NというSTマイクロ社・フルブリッジドライバを使用したものです。
これは2つのモータを独立して駆動でき、回転をするかしないか、また回転方向を制御できます。
そのため正転逆転制御に使用されます。
ピンの配置は下の図のようにOUTPUT1~4、INPUT1~4、ENABLE A,B、5V電源、12V電源、GNDから構成されています。
手順
まずハード側からやっていきます。
下の図のようにTTモータ2つ、DCモータコントローラモジュール、電池ボックス、Arduinoメインボードを接続します。
ハード側はこれで終了です。
次にプログラムを書いていきます。
Arduino IDEを開いて次のコードを書き込んでいきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | int in1 = 11; int in2 = 10; int in3 = 9; int in4 = 8; int enA = 5; int enB = 6; void setup() { pinMode(enA, OUTPUT); pinMode(enB, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); } void rotR() { digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enA, 255); analogWrite(enB, 255); delay(3000); digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); } void rotL() { digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enA, 80); analogWrite(enB, 80); delay(4000); digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); } void rotREV() { digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enA, 80); analogWrite(enB, 80); delay(4000); digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); } void loop() { rotR(); delay(500); rotL(); delay(500); rotREV(); delay(500); } |
プログラムの説明をしていきます。
まず最初にINPUT1~4、ENABLE A,Bのピン番号を宣言します。
そしてsetup()メソッドでINPUT1~4、ENABLE A,Bをすべて出力にします。
次にrotR()メソッドです。INPUT1,3をHIGHにINPUT2,4をLOWとすることでOUTPUT1,3がHIGH、OUTPUT2,4がLOWになりTTモータを回転させています。
次にanalogWrite(pin,value)メソッドでモータの回転速度を決めています。pinはピン番号、valueはデューティ比(0から255)を示しています。
valueに0を指定すると、0Vの電圧が出力され、255を指定すると5Vが出力されます。ただし、これは電源電圧が5ボルトの場合で、3.3Vの電源を使用するボードでは3.3Vが出力されます。つまり、出力電圧の最大値は電源電圧と同じです。
今回の場合では12V電源を使用しているのでvalueに255を指定すると12Vが出力されます。
ちなみにArduino UnoのようにATmega328Pを搭載しているArduinoボードでは、デジタルピン3、5、6、9、10、11でこの機能が使えます。
そして最後にINPUT1~4をすべてLOWにして回転を止めています。
rotL()メソッドはrotR()メソッドとHIGH、LOWにするピン番号を逆にすることでTTモータを逆回転させています。
また、デューティ比を小さくすることでrotR()メソッドよりもTTモータの回転速度を小さくしています。
rotREV()メソッドではINPUT1,2だけのHIGH、LOWを入れ替えることで2つのTTモータを逆回転に回転させています。
loop()メソッドでrotL()メソッドとrotR()メソッドとrotREV()メソッドを0.5秒おきに呼び出しています。
これでメインボードに書き込みをすると2つのTTモータが回転すると思います。
ちゃんとプログラム通りになっていますね。
まとめ
今回はDCモータコントローラモジュールというものを使って2つのモータを制御してみました。
同時に独立して制御できるということでラジコンなどに使えそうな気がします。
今度はこれを使ってラジコンを作ってみたいと思います。
今回はこれで終わります。
ではまた!