目次
本記事で使用するもの
以下のリンクのスターターキットを購入した場合、上記で述べた使用するものは、PC以外すべて入手することができます。
Arduinoをまだ購入していないという方やArduinoで動かすことができるたくさんのパーツが欲しいという方は、購入を検討してみてください。
DCモータについて
DCモータは直流電源で動くモータの総称です。
実はDCモータの中にもいろいろ種類があるのですが、今回は「ブラシ付きDCモータ」という種類のモータを扱いたいと思います。
上記で紹介したスターターキットには、以下のようなブラシ付きDCモータが入っていたため今回はこれを使用します。
回転させる方法
ブラシ付きDCモータを回転させるのは簡単で、適切な電源に繋げるだけで、モータを回転させることができます。
なので、モータがどのくらいの電圧に対応していて、どのくらいの電流が必要なのかということを知っていれば、適切な電源を用意してモータを回転させることができます。
ただし、モータに許容範囲を超えるような電圧を加えると、モータが故障したり、必要な電流を流せないようなものを電源として使用するとモータは回転せず、最悪の場合、電源側が壊れてしまったりする可能性があるので、注意が必要です。
スターターキットに入っていたモータは、「3-6V motor」と書いてあったため、6[V]以上の電圧を加えないようにします。
見た目が似ていますが、理科の実験などでよく使用されるモータは、1.5~3[V]駆動のものが多いため、以下で説明する方法でモータを回転させようとすると、加える電圧が高いため破損する可能性があります。
3~6[V]駆動のモータであれば、以下で説明する方法で同じように、モータを回転させられると思われますが、それ以外のモータの場合は、うまく動かせない可能性があるため注意してください。
また、以下で説明する方法で動かせるのは、600[mA]以下で動かせるモータです。
600[mA]以上の電流を必要とするモータの場合は、動かすことができないため注意してください。
回転方向と回転速度
ブラシ付きDCモータの回転方向は電流の流れる向きによって決まります。
また、モータを回転させる力は、加えている電圧を高くすることで強くなります。
よって、許容範囲を超えない程度に電圧を高くすれば、より速い速度で回転させたり、より大きな負荷がかかるものを動かしたりすることが出来るようになります。
回転を制御する方法
モータの回転方向や回転速度を途中で変化させたいという場合は、電流の流れる向きや、加わっている電圧の高さを変化させる必要があります。
そこで、電流の流れる向きや、加わっている電圧の高さを変化させるのが、Arduinoとモータドライバです。
Arduinoの出力ピンを、うまく制御すれば、モータドライバはいらないのではないかと思う方がいらっしゃるかもしれませんが、Arduinoの出力ピンで流せる電流はあまり大きいものではなく、モータを動かすには不十分な場合がほとんどです。
よって、より大きな電圧、電流を制御することができるモータドライバが必要となります。
モータドライバ(L293D)について
以下の写真は、上記で紹介したスターターキットに入っていた、モータドライバ(L293D)です。
モータドライバ(L293D)は、マイコンなどから送られてくる外部からの信号により、電源からもらった電気を制御するという部品のため、モータ、電源、Arduinoの3つを繋げることにより、モータの制御が可能となります。
ここで、モータドライバ(L293D)のピンの役割は、以下のようになっています。
ピンの名称 | ピンの役割 |
VCC1 | 内部ロジック用(信号の処理を行うための)5V電源 |
VCC2 | ドライバ用(モータを動かすための)4.5V~36V電源 |
GND | 電源の-(GND) |
1A~4A | 入力ピン |
1Y~4Y | 出力ピン |
1,2EN | 1,2入出力の有効、無効を制御(HIGH:有効、LOW:無効) |
3,4EN | 3,4入出力の有効、無効を制御(HIGH:有効、LOW:無効) |
ここで、入力と出力は、以下のような関係となっていて、今回はこれらの特性を利用してモータの制御を行います。
VOH とVCC2の差、VOLとGNDの差は流れている電流の大きさによって変化します。
データシートによると600[mA]流れているとき、VOHはVCC2より1.4~1.8[V]低くなり、 VOLはGNDより1.2~1.8[V]高くなるみたいです。
また、対応したENピンがLOWの場合、出力は入力に関係なく0[V]となります。
連続して流せる電流については、各チャンネル1,2の組み合わせと3,4の組み合わせに対して、600[mA]となっています。
以下に私が参考にしたデータシートのリンクを貼らせていただきます。
L293Dのデータシート[Texas Instruments]
日本語で書かれていないので、少し分かりづらいかもしれませんが、L293Dについて、もう少し詳しく知りたいという方は、上記のデータシートを参考にしてみてください。
電源モジュールについて
上記で説明したように、モータドライバには、モータを動かすための電源が必要になります。
今回は、上記で紹介したスターターキットに、入っていた電源モジュールを利用して、電源を作りたいと思います。
以下の写真は、上記で紹介したスターターキットに入っていた、電源モジュールです。
この、電源モジュールは、DCジャックから入力された6.5~9.0[V]の電圧やUSBから入力された電圧を、3.3[V]、5.0[V]に変換して出力するという部品であり、最大で700[mA]の電流を流すことができます。
出力の電圧は、以下の画像のように、ジャンパピンの位置を変えることによって、切り替えを行うことができます。
また、幅がブレッドボードと合っているため、以下の画像のように、ブレッドボードに差して使うことができます。
9V電池について
今回、電源モジュールへの入力は、9V電池とDCプラグ付きバッテリースナップを使用します。
9V電池は、以下の画像のような電池で、名前の通り、9[V]の電圧を扱う電池です。
通常の乾電池が扱う電圧は大体1.5[V]なので、通常の乾電池の約6倍の電圧を扱うことが出来る電池ということになります。
電圧が高いため、より大きな電流が流れやすいということになりますが、電池の容量は多くないため、大きな電流を流す用途で使っているとすぐに電池切れになるという弱点があります。
また、より大きな電流が流れやすいということは、それだけ危険であるということにもなります。
特に、この9V電池はショートが起こりやすい構造になっているため、保管や廃棄をする際もショートが起こらないように、注意する必要があります。
ショートが起こると大量の熱が放出され、最悪の場合、火事を引き起こす可能性があります。
よって、電池の周りに燃えやすいものを置いたりするのは、やめた方が良いです。
また、保管や廃棄をする際は、ショートを起こさないよう、以下のように、端子部分に絶縁テープ(セロハンテープやビニールテープなど)を貼ってください。
ショートなどにより、回路に大きな電流を流してしまった場合、短い時間であれば、回路の破壊を防げる場合があります。
なので、初めて回路を動かす際は、いつでも電源を切れる準備をしておき、動作しない場合は、すぐに電源を切るといったことを行うと被害を抑えることができるかもしれません。
ここまで、9V電池の危険な部分を説明しましたが、使い方を間違えなければ大変便利です。
例えば、上記で紹介したスターターキットには、以下のようなDCプラグ付きバッテリースナップが入っています。
このバッテリースナップを、9V電池の端子に差し込んで、DCプラグを電源モジュールのDCジャックに差し込むだけで、今回使用する電源は完成となります。
また、この組み合わせを、「Arduino Uno R3」のDCジャックに繋げることによって、Arduinoの電源として使うことも可能です。
DCモータを回転させる
今回は使用する部品が多いため、ここまでの説明が長くなってしまいましたが、いよいよ以下の動画のように、モータを回転させたいと思います。
空のスケッチを書き込む
回路を作成する前に、空のスケッチ(「ファイル」タブの「New Sketch」をクリックしたときに出てくる何の処理も書かれていないスケッチ)を書き込みます。
そうすることにより、前に書き込んだスケッチが、新しく作成しようとしている回路に影響を及ぼすことを防げます。
新しい回路を作成するときは、いつもこの作業をやっておくと、安全に回路を作成することができます。
回路を作成する
以下のような回路を作成します。
この時、9V電池の接続は、まだ行わないでください。
ここで、電源モジュールのスイッチ部分は、OFF(浮いた状態)にしておき、電池を繋いでも動かない状態にしておきます。
スケッチを書き込む
回路の作成が終わりましたら、以下のようなスケッチを書き込みます。
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 |
/* Arduinoで遊ぼう(25,DCモータ); 2023/11/20 dc_motor_test //スケッチの詳細はこちら↓ https://mecha-norimaki.com/arduino_start_25/ */ //L293Dの1,2ENに繋げたピンの番号を入れる定数 const int L293D_En12=7; //L293Dの1Aに繋げたピンの番号を入れる定数 const int L293D_1A=6; //L293Dの2Aに繋げたピンの番号を入れる定数 const int L293D_2A=5; void setup() { //L293Dに繋げたピンを出力ピンに設定する pinMode(L293D_En12,OUTPUT); pinMode(L293D_1A,OUTPUT); pinMode(L293D_2A,OUTPUT); } void loop() { //1,2ENに繋げたピンをHIGHにしてモータを動かせる状態にする digitalWrite(L293D_En12,HIGH); //1A,2Aに繋げたピンの出力を制御し、モータに繋がっている1Y,2Yの出力を制御する(1Y:LOW,2Y:HIGH) digitalWrite(L293D_1A,LOW); digitalWrite(L293D_2A,HIGH); } |
スケッチの書き込みが終わりましたら、電源モジュールのスイッチがOFFになっていることをよく確認し、電池の接続を行います。
そして、もう一度回路が間違えていないかを確認してから、電源モジュールのスイッチをONにします。
回路とスケッチが正しければ先程の動画のように、モータが一方向に回転するのが確認できます。
もし、電源をONにして、モータが回転しない場合は、すぐに電源モジュールのスイッチをOFFにし、その後、電池を外して、回路とスケッチが間違えていないかをチェックします。
スケッチの解説
スケッチ自体はとても単純で、1,2ENと2Aに繋げたピンを「HIGH」に、1Aに繋げたピンを「LOW」にしただけのものです。
モータドライバ(L293D)は、それらの入力を受け取り、1Yの電位をGNDより少し高い電位であるVOLに、2Yの電位をVCC2より少し低い電位であるVOHにします。
すると、モータには電圧が加わることとなるので、電流が流れ、軸が回転するという仕組みになっています。
ちなみに、上記のようにモータを回転させた際、1Y、2YとGND間の電圧を測定しましたが、それぞれ1[V]、4[V]となっていたため、モータには4-1=3[V]の電圧が加わっていたことになります。
DCモータの回転方向を制御する
続いて、以下の動画のように、途中で回転の向きを変化させる制御を行いたいと思います。
スケッチを書き込む
回路はそのままで以下のようなスケッチを書き込みます。
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 |
/* Arduinoで遊ぼう(25,DCモータ); 2023/11/20 dc_motor_test_2 //スケッチの詳細はこちら↓ https://mecha-norimaki.com/arduino_start_25/ */ //L293Dの1,2ENに繋げたピンの番号を入れる定数 const int L293D_En12=7; //L293Dの1Aに繋げたピンの番号を入れる定数 const int L293D_1A=6; //L293Dの2Aに繋げたピンの番号を入れる定数 const int L293D_2A=5; void setup() { //L293Dに繋げたピンを出力ピンに設定する pinMode(L293D_En12,OUTPUT); pinMode(L293D_1A,OUTPUT); pinMode(L293D_2A,OUTPUT); } void loop() { //1,2ENに繋げたピンをHIGHにしてモータを動かせる状態にする digitalWrite(L293D_En12,HIGH); //1A,2Aに繋げたピンの出力を制御し、モータに繋がっている1Y,2Yの出力を制御する(1Y:LOW,2Y:HIGH) digitalWrite(L293D_1A,LOW); digitalWrite(L293D_2A,HIGH); //5秒間待機(モータは回転した状態) delay(5000); //1,2ENに繋げたピンをLOWにしてモータを動かせない状態にする digitalWrite(L293D_En12,LOW); //1秒間待機(モータは止まった状態) delay(1000); //1,2ENに繋げたピンをHIGHにしてモータを動かせる状態にする digitalWrite(L293D_En12,HIGH); //1A,2Aに繋げたピンの出力を制御し、モータに繋がっている1Y,2Yの出力を制御する(1Y:HIGH,2Y:LOW) digitalWrite(L293D_1A,HIGH); digitalWrite(L293D_2A,LOW); //5秒間待機(モータは回転した状態) delay(5000); //1,2ENに繋げたピンをLOWにしてモータを動かせない状態にする digitalWrite(L293D_En12,LOW); //1秒間待機(モータは止まった状態) delay(1000); } |
スケッチが正しければ、電源を入れた際、先程の動画のように、回転方向を切り替えながらモータが回転するのが、確認できると思います。
スケッチの解説
今回のスケッチでは、先程の入力パターンに加えて、回転を停止させるパターンと逆回転で回転させるパターンを追加しています。
停止させるパターン
まず、停止させるパターンですが、これは40行目、56行目のように1,2ENピンの入力を「LOW」にすることによって実現しています。
39 40 |
//1,2ENに繋げたピンをLOWにしてモータを動かせない状態にする digitalWrite(L293D_En12,LOW); |
これにより、出力ピン1Y、2Yはともに0[V]となるため、回転が停止します。
逆回転で回転させるパターン
次に逆回転で回転させるパターンについてです。
ブラシ付きDCモータの説明の際に、モータの回転方向を変化させるためには、電流の向きを変化させれば良いと説明しました。
よって、電流の流れる向きを変化させるために、入力1A、2Aの関係を、逆にするということを49行目、50行目で行っています。
48 49 50 |
//1A,2Aに繋げたピンの出力を制御し、モータに繋がっている1Y,2Yの出力を制御する(1Y:HIGH,2Y:LOW) digitalWrite(L293D_1A,HIGH); digitalWrite(L293D_2A,LOW); |
これにより、出力1Y、2Yの関係が逆になり、回転方向が変化します。
DCモータの回転速度を制御する
続いて、以下の動画のように、モータの回転速度を変化させる制御を行いたいと思います。
スケッチを書き込む
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 70 71 72 73 74 |
/* Arduinoで遊ぼう(25,DCモータ); 2023/11/20 dc_motor_test_3 //スケッチの詳細はこちら↓ https://mecha-norimaki.com/arduino_start_25/ */ //L293Dの1,2ENに繋げたピンの番号を入れる定数 const int L293D_En12=7; //L293Dの1Aに繋げたピンの番号を入れる定数 const int L293D_1A=6; //L293Dの2Aに繋げたピンの番号を入れる定数 const int L293D_2A=5; void setup() { //L293Dに繋げたピンを出力ピンに設定する pinMode(L293D_En12,OUTPUT); pinMode(L293D_1A,OUTPUT); pinMode(L293D_2A,OUTPUT); } void loop() { //1,2ENに繋げたピンをHIGHにしてモータを動かせる状態にする digitalWrite(L293D_En12,HIGH); //1A,2Aに繋げたピンの出力を制御し、モータに繋がっている1Y,2Yの出力を制御する(1Y:LOW,2Y:HIGH) digitalWrite(L293D_1A,LOW); digitalWrite(L293D_2A,HIGH); //2秒間待機(モータは回転した状態) delay(2000); //1A,2Aに繋げたピンの出力を制御し、モータに繋がっている1Y,2Yの出力を制御する(1Y:LOW,2Y:PWM) analogWrite(L293D_1A,LOW); digitalWrite(L293D_2A,155); //5秒間待機(モータは速度を落として回転した状態) delay(5000); //1,2ENに繋げたピンをLOWにしてモータを動かせない状態にする digitalWrite(L293D_En12,LOW); //1秒間待機(モータは止まった状態) delay(1000); //1,2ENに繋げたピンをHIGHにしてモータを動かせる状態にする digitalWrite(L293D_En12,HIGH); //1A,2Aに繋げたピンの出力を制御し、モータに繋がっている1Y,2Yの出力を制御する(1Y:HIGH,2Y:LOW) digitalWrite(L293D_1A,HIGH); digitalWrite(L293D_2A,LOW); //2秒間待機(モータは回転した状態) delay(2000); //1A,2Aに繋げたピンの出力を制御し、モータに繋がっている1Y,2Yの出力を制御する(1Y:PWM,2Y:LOW) digitalWrite(L293D_1A,155); analogWrite(L293D_2A,LOW); //5秒間待機(モータは速度を落として回転した状態) delay(5000); //1,2ENに繋げたピンをLOWにしてモータを動かせない状態にする digitalWrite(L293D_En12,LOW); //1秒間待機(モータは止まった状態) delay(1000); } |
スケッチが正しければ、電源を入れた際、先程の動画のように、回転速度を変えながらモータが回転するのが、確認できると思います。
スケッチの解説
今回のスケッチでは、先程の回転パターンに加え、「analogWrite」を利用して、回転速度を調節するパターンを追加しています。
ブラシ付きDCモータの説明の際に、モータの回転速度を変化させるためには、電圧の高さを変化させれば良いと説明しました。
しかし、今回使用しているモータドライバ(L293D)は、電圧の高さを調整するような機能は無く、VOHとVOLしか出力することができません。
そこで、41行目、63行目のように、「analogWrite」によるPWM制御を利用しています。
39 40 41 |
//1A,2Aに繋げたピンの出力を制御し、モータに繋がっている1Y,2Yの出力を制御する(1Y:LOW,2Y:PWM) analogWrite(L293D_1A,LOW); digitalWrite(L293D_2A,155); |
これにより、一定の比率で回転、停止を高速で切り替えるような出力となり速度の調整を行うことができます。
ただし、「analogWrite」の値が小さすぎるとパワーが足りずモータが回転しないので注意が必要です。
最初に勢いよく回転させ、後に回転スピードを落とすようにすると、ゆっくり回転させやすいです。
終わりに
皆さん上手くモータを制御することが出来たでしょうか。
モータを制御することが出来るようになれば、動きのあるものの工作が可能になるので、工作の幅が一気に広がると思います。
ただし、モータを動かすためには、それなりのエネルギーを扱う必要があるため、油断せず安全第一で工作を楽しんでいただければと思います。
次回の記事ではステッピングモータの制御を行いたいと思います。
本記事はここまでです。ご清覧ありがとうございました。
広告
楽天モーションウィジェットとGoogleアドセンス広告です。
気になる商品がございましたら、チェックをしてみてください。